Páginas filhas
  • Rotinas de Relatórios Não Personalizáveis

Os relatórios não personalizáveis podem ser criados utilizando-se a TMsPrinter para os relatórios gráficos e o par de funções SetPrint/SetDefault para os não-graficos.

Independente do método utilizado, os relatórios deste tipo devem utilizar o Cadastro de Perguntas do dicionário de dados da Linha Microsiga Protheus (SX1).

Segue exemplo de uma estrutura de relatório não gráfico:

 

// NoCustomizableReport.prw

#INCLUDE "TOTVS.CH"

#DEFINE CHRCOMP If(aReturn[4]==1,15,18)

 

Function NoCustomizableReport()

      //----------------------------------------------------------------------------

// Define Variaveis

//----------------------------------------------------------------------------

      Local cTitulo           := "Titulo do Relatorio" // Titulo do Relatorio

      Local cDesc1            := "Descrição 1"         // Descrição 1

      Local cDesc2            := "Descrição 1"         // Descrição 2

      Local cDesc3            := "Descrição 1"         // Descrição 3

      Local cString           := ""       // Alias utilizado na Filtragem

      Local lDic              := .F.      // Habilita/Desabilita Dicionário

      Local lComp             := .T.      // Habilita/Desabilita o Formato Comprimido/Expandido

      Local lFiltro           := .T.      // Habilita/Desabilita o Filtro

      Local cFile             := ""       // Nome do Arquivo utilizado no Spool

      Local cProgName         := ""       // nome do programa

      Private Tamanho         := "G"      // P/M/G

      Private Limite          := 220      // 80/132/220

      Private aOrdem          := {}       // Ordem do Relatorio

      Private cPerg           := ""       // Pergunta do Relatorio

      Private aReturn         := { "Zebrado", 1, "Administracao", 1, 2, 1, "", 1 }

      //[1] Reservado para Formulario

      //[2] Reservado para N§ de Vias

      //[3] Destinatario

      //[4] Formato => 1-Comprimido 2-Normal

      //[5] Midia => 1-Disco 2-Impressora

      //[6] Porta ou Arquivo 1-LPT1... 4-COM1...

      //[7] Expressao do Filtro

      //[8] Ordem a ser selecionada

      //[9]..[10]..[n] Campos a Processar (se houver)

      Private lEnd            := .F.      // Controle de cancelamento do relatorio

      Private m_pag           := 1        // Contador de Paginas

      Private nLastKey        := 0        // Controla o cancelamento da SetPrint e SetDefault

      //----------------------------------------------------------------------------

// Verifica as Perguntas Seleciondas

//----------------------------------------------------------------------------

//Pergunte(cPerg,.F.)   //----------------------------------------------------------------------------

// Envia para a SetPrinter

//----------------------------------------------------------------------------

      cFile:=SetPrint(  cString,   cFile,            cPerg, @cTitulo, cDesc1, cDesc2, cDesc3, lDic, aOrdem,;

                                         lComp,            Tamanho,    ,           lFiltro)

      If nLastKey==27

            DbSelectArea(cString)

            DbSetOrder(1)

            Set Filter to

            Return

      Endif

      SetDefault(aReturn,cString)

      If nLastKey==27

            DbSelectArea(cString)

            DbSetOrder(1)

            Set Filter to

            Return

      Endif

      RptStatus({|lEnd| ImpDet(@lEnd, cFile, cString, cProgName, cTitulo)}, cTitulo)

Return .T.

 

Static Function ImpDet(lEnd, cFile, cString, cProgName, cTitulo)

      Local li          := 100 // Contador de Linhas

      Local lImp        := .F. // Indica se algo foi impresso

      Local cbCont      := 0 // Numero de Registros Processados

      Local cbText      := "" // Mensagem do Rodape

      //

      // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

//01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890

      Local cCabec1     := ""

      Local cCabec2     := ""

     

      DbSelectArea(cString)

      SetRegua(LastRec())

      DbSetOrder(1)

      DbSeek(XFilial())

      While !EOF() .And. XFilial(cString) == MV_PAR01

            lImp := .T.

            If lEnd

                  @ Prow()+1,001 PSay "CANCELADO PELO OPERADOR"

                  Exit

            EndIf

            If ( li > 58 )

                  li := cabec(cTitulo, cCabec1, cCabec2, cProgName, Tamanho, CHRCOMP)

                  li++

            Endif

            DbSelectArea(cString)

            DbSkip()

            cbCont++

            IncRegua()

      EndDo

      If lImp

            Roda(cbCont, cbText, Tamanho)

      EndIf

      Set Device To Screen

      Set Printer To

      If ( aReturn[5] = 1 )

            DbCommitAll()

            OurSpool(cFile)

      Endif

      Ms_Flush()

Return .T.

 

  • Sem rótulos