Como abrir um Relatório prt (gerado pelo TReport)

No artigo de hoje, iremos demonstrar em como abrir arquivos de relatórios já gerados com a extensão prt no Protheus.

Às vezes, podemos ter a necessidade de algum usuário falar que precisava abrir um relatório que estava gerado no Protheus, para ele comparar com alguma versão antiga.

Se o relatório foi gerado via TReport (ou até em algumas funções antigas como o SetPrint), fica um arquivo na Protheus Data com a extensão prt, conforme print abaixo:

Visualizando arquivos prt dentro de uma pasta

E como podemos fazer para abrir esse arquivo? Pois bem, existem duas formas, uma usando a função PrinterPreview e a segunda usando a classe TPageView. Abaixo um print de exemplo de como fica a visualização.

Exemplo de abertura do arquivo

Agora, vamos demonstrar em como utilizar essas duas Formas.

Abrindo via PrinterPreview

Dessa primeira maneira, nós abrimos o arquivo prt utilizando a antiga classe TMSPrinter e depois acionamos a função PrinterPreview passando o nosso objeto instanciado.

A vantagem desse aqui, é que já vem atalhos configurados como zoom das páginas. E com as opções de imprimir.

//Bibliotecas
#Include 'TOTVS.ch'
 
/*/{Protheus.doc} zTstPrt
Função teste da TPageView para abrir arquivo prt já gerado
@author Atilio
@since 23/01/2023
@version 1.0
/*/
 
User Function zTstPrt()
    Local aArea      := FWGetArea()
    Local oDlgRelat
    Local cArqRelat  := ""
    Local oPrinter
    Local oTPageView
    Local aTamanho   := MsAdvSize()
    Local nJanLarg   := aTamanho[5]
    Local nJanAltu   := aTamanho[6]
    Local lCentered  := .T.
     
    //Definindo o arquivo que será aberto
    cArqRelat := "\spool\matr680.prt"
     
    //Criando um objeto de impressão e setando o arquivo
    oPrinter := TMSPrinter():New()
    oPrinter:SetFile(cArqRelat,.F.)
    oPrinter:SetPortrait()
    oPrinter:SetPaperSize(9)
 
    //Exibe o relatório em tela
    PrinterPreview(oPrinter)
 
    FWRestArea(aArea)
Return

Abrindo via TPageView

Dessa segunda forma, nós também abrimos o arquivo prt utilizando a TMSPrinter, só que temos que criar uma Dialog, instanciar um TPageView para daí sim abrir o objeto do nosso relatório.

Nesse caso aqui, o controle é mais manual, para poder criar atalhos, opção de imprimir e tudo mais.

//Bibliotecas
#Include 'TOTVS.ch'
 
/*/{Protheus.doc} zTstPrt
Função teste da TPageView para abrir arquivo prt já gerado
@author Atilio
@since 23/01/2023
@version 1.0
/*/
 
User Function zTstPrt()
    Local aArea      := FWGetArea()
    Local oDlgRelat
    Local cArqRelat  := ""
    Local oPrinter
    Local oTPageView
    Local aTamanho   := MsAdvSize()
    Local nJanLarg   := aTamanho[5]
    Local nJanAltu   := aTamanho[6]
    Local lCentered  := .T.
     
    //Definindo o arquivo que será aberto
    cArqRelat := "\spool\matr680.prt"
     
    //Criando um objeto de impressão e setando o arquivo
    oPrinter := TMSPrinter():New()
    oPrinter:SetFile(cArqRelat,.F.)
    oPrinter:SetPortrait()
    oPrinter:SetPaperSize(9)
 
    //Criando a dialog
    oDlgRelat := TDialog():New(0, 0, nJanAltu, nJanLarg, "Teste de TPageView", , , , , CLR_BLACK, RGB(250, 250, 250), , , .T.)
         
        //Criando o TPageView
        oTPageView := TPageView():New(0, 0, nJanLarg, nJanAltu, oPrinter, oDlgRelat, oPrinter:nPageWidth+200, oPrinter:nPageHeight )
        oTPageView:bLClicked:= {|| Iif(oTPageView:nZoom < 200, oTPageView:nZoom += 25,)}
        oTPageView:bRClicked:= {|| Iif(oTPageView:nZoom > 25,  oTPageView:nZoom -= 25,)}
        oTPageView:Align:= CONTROL_ALIGN_ALLCLIENT
        oTPageView:nZoom := 150
 
    oDlgRelat:Activate(, , , lCentered, {|| .T.}, , )
 
    FWRestArea(aArea)
Return

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação