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.