Hoje vamos demonstrar em como substituir o rodapé padrão do TReport, para que seja possível você customizar a mensagem exibida.
Hoje, a dúvida foi feita pelo grande Álan, onde ele perguntou, se existe alguma forma de sobrepor os textos do rodapé padrão em um relatório TReport.
Então nesse vídeo, é demonstrado como utilizar o método SetPageFooter, para customizar a mensagem que será exibida no rodapé.
E abaixo o código fonte desenvolvido para exemplificar:
//Bibliotecas
#Include "Totvs.ch"
/*/{Protheus.doc} User Function zVid0021
Relatório de Produtos
@author Atilio
@since 10/03/2022
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/
User Function zVid0021()
Local aArea := FWGetArea()
Local oReport
Local aPergs := {}
Local xPar0 := Space(15)
Local xPar1 := StrTran(xPar0, ' ', 'Z')
//Adicionando os parametros do ParamBox
aAdd(aPergs, {1, "Produto De", xPar0, "", ".T.", "SB1", ".T.", 80, .F.})
aAdd(aPergs, {1, "Produto Até", xPar1, "", ".T.", "SB1", ".T.", 80, .F.})
//Se a pergunta for confirma, cria as definicoes do relatorio
If ParamBox(aPergs, "Informe os parametros")
oReport := fReportDef()
oReport:PrintDialog()
EndIf
FWRestArea(aArea)
Return
/*/{Protheus.doc} fReportDef
Definicoes do relatorio zVid0021
@author Atilio
@since 10/03/2022
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/
Static Function fReportDef()
Local oReport
Local oSection := Nil
Local nAltLinha := 50
//Criacao do componente de impressao
oReport := TReport():New( "zVid0021",;
"Relatório de Produto",;
,;
{|oReport| fRepPrint(oReport),};
)
oReport:SetTotalInLine(.F.)
oReport:lParamPage := .F.
oReport:oPage:SetPaperSize(9)
oReport:SetPageFooter(5, {|| ;
oReport:Say(oReport:Row(), 10, "Usuário:" + UsrRetName(RetCodUsr()), , , , ),;
oReport:Say(oReport:Row() + nAltLinha, 10, "Exemplo na Vídeo Aula 21" , , , , ),;
oReport:Say(oReport:Row() + (nAltLinha*2), 10, "https://terminaldeinformacao.com" , , , , );
})
//Orientacao do Relatorio
oReport:SetPortrait()
//Definicoes da fonte utilizada
oReport:SetLineHeight(nAltLinha)
oReport:nFontBody := 12
//Criando a secao de dados
oSection := TRSection():New( oReport,;
"Dados",;
{"QRY_REP"})
oSection:SetTotalInLine(.F.)
//Colunas do relatorio
TRCell():New(oSection, "B1_COD", "QRY_REP", "Código", /*cPicture*/, 15, /*lPixel*/, /*{|| code-block de impressao }*/, "LEFT", /*lLineBreak*/, "LEFT", /*lCellBreak*/, /*nColSpace*/, /*lAutoSize*/, /*nClrBack*/, /*nClrFore*/, .F.)
TRCell():New(oSection, "B1_DESC", "QRY_REP", "Descrição", /*cPicture*/, 50, /*lPixel*/, /*{|| code-block de impressao }*/, "LEFT", /*lLineBreak*/, "LEFT", /*lCellBreak*/, /*nColSpace*/, /*lAutoSize*/, /*nClrBack*/, /*nClrFore*/, .F.)
Return oReport
/*/{Protheus.doc} fRepPrint
Impressao do relatorio zVid0021
@author Atilio
@since 10/03/2022
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/
Static Function fRepPrint(oReport)
Local aArea := FWGetArea()
Local cQryReport := ""
Local oSectDad := Nil
Local nAtual := 0
Local nTotal := 0
//Pegando as secoes do relatorio
oSectDad := oReport:Section(1)
//Montando consulta de dados
cQryReport += "SELECT B1_COD, B1_DESC FROM " + RetSQLName("SB1") + " SB1 WHERE B1_COD >= '" + MV_PAR01 + "' AND B1_COD <= '" + MV_PAR02 + "' AND SB1.D_E_L_E_T_ = ' '" + CRLF
//Executando consulta e setando o total da regua
PlsQuery(cQryReport, "QRY_REP")
DbSelectArea("QRY_REP")
Count to nTotal
oReport:SetMeter(nTotal)
//Enquanto houver dados
oSectDad:Init()
QRY_REP->(DbGoTop())
While ! QRY_REP->(Eof())
//Incrementando a regua
nAtual++
oReport:SetMsgPrint("Imprimindo registro " + cValToChar(nAtual) + " de " + cValToChar(nTotal) + "...")
oReport:IncMeter()
//Imprimindo a linha atual
oSectDad:PrintLine()
QRY_REP->(DbSkip())
EndDo
oSectDad:Finish()
QRY_REP->(DbCloseArea())
FWRestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.