Clipper On Line • Ver Tópico - Construção de relatorio e arquivo txt

Construção de relatorio e arquivo txt

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

 

Construção de relatorio e arquivo txt

Mensagempor Daiane » 03 Mar 2016 11:05

Galera alguém tem algum material contendo o passo a passo de criar um relatório e gerar um txt com as informações do relatório?
se for em português eu agradeço muito

To usando o #include "FiveWin.ch" e o #include "relatorio.ch"
XHb 1.2.1 + FW 12.05 + Pelles C IDE
"Eu adoraria mudar o mundo, mas não me deram o código-fonte."
Avatar de usuário

Daiane
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 122
Data de registro: 28 Out 2014 15:19
Cidade/Estado: Feira de Santana - BA
Curtiu: 27 vezes
Mens.Curtidas: 13 vezes

Construção de relatorio e arquivo txt

Mensagempor Kapiaba » 03 Mar 2016 14:40

Explique:

 #include "relatorio.ch"


O que significa esse arquivo de cabeçalho, faz o que? Isto não pertence ao FiveWin.

Você quer o relatório com Preview(PRINTER.PRG) ou estilo modo console(TDOSPRN.PRG)?

Abs
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1493
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 284 vezes
Mens.Curtidas: 90 vezes

Construção de relatorio e arquivo txt

Mensagempor Kapiaba » 03 Mar 2016 17:17

Simulando modo console com PRINTER.PRG

#Include "FiveWin.ch"

FUNCTION Main()

   LOCAL oPen

   PUBLIC oImp, aoFont[4], aAnchop[4]

   SET DATE TO FRENCH

   DEFINE PEN oPen WIDTH 5

   IniImp(21.5, 27.9, 72, 90, "CompraVenta de Hacienda", .t., .t., .f., 1 )

   PAGE

      PrnBox (22, 7,28,89,oPen)
                       
      PrnLine(30, 7,30,89,oPen)
      PrnLine(33, 7,33,89,oPen)
      prnLine(43, 7,43,89,oPen)
           
      PrnLine(45, 7,45,32,oPen)
      PrnLine(51, 7,51,32,oPen)
      PrnLine(53, 7,53,32,oPen)
      PrnLine(57, 7,57,32,oPen)
      PrnLine(43,62,43,89,oPen)
      PrnLine(54,62,54,89,oPen)
      PrnLine(45,36,45,57,oPen)
      PrnLine(52,36,52,57,oPen)
      PrnLine(45,62,45,89,oPen)
      PrnLine(52,62,52,89,oPen)

      //cabezal
      PrnSay(16,60, "Form.:   "+ "123425", aoFont[1],80)
      PrnSay(18, 8,"Empresa XXXXXX")
      PrnSay(18,60,Date())
      PrnSay(19, 8,"123456")
      PrnSay(19,60,1250)
      PrnSay(23, 8,"Productor:", aoFont[1],80)
      PrnSay(24, 8,"El Productor que vende", aoFont[1],80)
      PrnSay(23,45,"Consignatario:", aoFont[1],80)
      PrnSay(24,45,"El Consignatario que Vende", aoFont[1],80)
      PrnSay(25, 8,"RUT: "+"12 345678 9123", aoFont[1],80)
      PrnSay(25,30,"CI: " +"173216547",aoFont[1],80)
      PrnSay(25,45,"RUT: "+"12 345678 9123", aoFont[1],80)
      PrnSay(26, 8,"Dicose: "+"123 456 789", aoFont[1],80)
      PrnSay(26,45,"Dicose: "+"123 456 789", aoFont[1],80)
      PrnSay(27, 8,"Guia: "+"123456", aoFont[1],80)
      PrnSay(27,45,"Guia: "+"567890", aoFont[1],80)
      PrnSay(29, 8,"Tiene flete? ", aoFont[1],80)
      PrnSay(29, 21,.t., aoFont[1],80)
      PrnSay(35, 7, "Este es un texto largo escrito para utilizar 120 columnas en medio de un documento que estaba en 80 columnas" )

      PrnSay(63,8,"      ..............................     ...............................",aoFont[1],120)
      PrnSay(64,8,"            Firma del Comprador          Firma de Vendedor/Representante",aoFont[1],120)

   ENDPAGE

   //Finalizo impresion
   FinImp()

   oPen:End()

RETURN NIL

/*
Funciones para imprimir con la clase tprint a la manera de la impresión de clipper en modo consola.
*/
/*
Funciones de Impresión con clase tPrint
---------------------------------------

IniImp( nAncho, nLargo [, nFilas, nColumnas, cNom_spooler, lsel_imp, lpreview, lLnds ,nCopias ] )
Configura la impresión indicando: ancho y largo de páginas en cms.
cantidad de filas y columnas
Nombre del spooler de impresión
Seleccion de Impresora
si va Preview
si es apaisado
cantidad de copias
(Como la impresión de Consola pero con Tprint)
PrnSay( nFila, nColum, Var, oFuente[ , nC ] )
Versión del viejo Say de consola con la clase Tprint
PrnBox( nFila1, nCol1, nFila2, nCol2, oPen, nC )
Imiprimir una caja con fila columna y fila columna estilo consola con tPrint
PrnLine( nFila1, nCol1, nFila2, nCol2, oPen, nC )
Imprimir una línea estilo consola con TPrint
FinImp()
Cierre de la impresión
----------------------------------------------------------------------------------------------------------------------

FUNCIONES DE IMPRESIÓN

----------------------------------------------------------------------------------------------------------------------*/
/*
Variables públicas requeridas en programa principal:
PUBLIC oImp, aoFont[4], aAnchop[4]
*/

#include "Fivewin.ch"

FUNCTION IniImp(nAncho, nLargo, nFilas, nColumnas, cNom_spooler, lsel_imp, lpreview, lLnds ,nCopias)

   /*
   Sintaxis:
   IniImp( nAncho, nLargo [, nFilas, nColumnas, cNom_spooler, lsel_imp, lpreview, lLnds ,nCopias ] )
   Requeridos:
   cAncho       - Ancho de pagina en cms.
   cLargo       - Largo de página en cms.
   Opcionales:
   nFilas       - Cantidad de filas en el largo                                 DEFAULT 60
   nColumnas    - Cantidad de columnas en el ancho 80 o 120                     DEFAULT 80
   cNom_Spooler - Nombre del listado en Spooler de impresion de Windows         DEFAULT "Listado"
   lSel_imp     - .t. para que el usuario seleccione la impresora que usará     DEFAULT .t.
   lPreview     - .t. para que se vea una vista preliminar.                     DEFAULT .f.
   lLnds        - .t. para Apaisado                                             DEFAULT .f.
   nCopias      - Cantidad de copias                                            DEFAULT 1
   */

   LOCAL cFuente
   cFuente:="Lucida Console"     //Se utiliza aquí una fuente escalar
                                 //evitando así mala ubicación de caracteres

   //Valores default
   IF cNom_Spooler=NIL
      cNom_Spooler="Listado"
   ENDIF

   IF lSel_Imp=NIL
      lSel_imp=.t.
   ENDIF

   IF lPreview=NIL
      lPreview=.f.
   ENDIF

   IF lLnds=NIL
      lLnds=.f.
   ENDIF

   IF nCopias=NIL
      nCopias=1
     ENDIF
 
   PrnSetSize(nAncho*100, nLargo*100)

   //Creo objeto tprinter
   IF !lSel_imp .AND. !lPreview

      PRINT oImp TITLE cNom_Spooler

   ELSEIF lSel_imp .and. !lPreview

      PRINT oImp TITLE cNom_Spooler FROM USER

   ELSEIF !lSel_imp .and. lPreview

      PRINT oImp TITLE cNom_Spooler PREVIEW

   ELSEIF lSel_imp .and. lPreview

      PRINT oImp TITLE cNom_Spooler FROM USER PREVIEW

   ENDIF

   IF lLnds
      oImp:SetLandscape()
     ENDIF

   //establezco las copias
   oImp:SetCopies(nCopias)

   //calculo anchos de fila y columna segun la resolucion de la impresora
   aAnchop[1]:=oImp:nVertRes()/nFilas
   aAnchop[2]:=oImp:nHorzRes()/nColumnas   //ancho en pixels de columna
   aAnchop[3]:=nColumnas   //hago publica nColumas en vector
   aAnchop[4]:=lLnds      //hago publica lLnds en el vector

   //Defino Fonts
   //Font normal
   DEFINE FONT aoFont[1] NAME "Lucida Console" SIZE 0, -10 OF oImp

   //Font Comprimida
   DEFINE FONT aoFont[2] NAME "Lucida Console" SIZE 0,  -8 OF oImp

   //Font Muy Grande
   DEFINE FONT aoFont[3] NAME "Lucida Console" SIZE 0, -24 OF oImp

   //Font Grande
   DEFINE FONT aoFont[4] NAME "Lucida Console" SIZE 0, -16 OF oImp

RETURN NIL

/*Fin Funcion IniImp
----------------------------------------------------------------------------------------------------------------------*/
FUNCTION PrnSay( nFila, nColum, Var, oFuente, nC )

   LOCAL i, wVar, nesp, nCorr

   /*Sintaxis:
   PrnSay( nFila, nColum, Var [, oFuente, nC ] )
   nFila es la fila donde se hace la impresion
   ncolum es la columna donde comienza
   var es una variable de cualquier tipo que contiene lo que se va a imprimir
   nC es el total de columnas base (80 o 120)

   El parámetro var es convertido a texto sin espacios al final y alineado a la derecha.
   */

   IF nC=NIL

      //Si no se especifica cantidad de columnas uso las especificadas en IniImp()
      aAnchop[2]:=oImp:nHorzRes()/aAnchop[3]

   ELSE

      //Si se especifico cant. de columnas recalculo el ancho de columna
      aAnchop[2]:=oImp:nHorzRes()/nC

   ENDIF

   //Convierto Var a texto para imprimir

   IF VALTYPE(Var)="A" .or. VALTYPE(Var)="B" .or. VALTYPE(Var)="M" .or. VALTYPE(Var)="O" .or. VALTYPE(Var)="U"

      wVar=Space(1)

   ELSEIF valtype(Var)="C"

      wVar=Rtrim(Var)

   ELSEIF VALTYPE(Var)="D"

      wVar:=Transform(Var,"@D")

   ELSEIF VALTYPE(Var)="L"

      IF Var
         wVar="Si"
      ELSE
         wVar="No"
      ENDIF

   ELSEIF VALTYPE(Var)="N"

      wVar:=Alltrim(Str(Var))

   ENDIF

   //paso fila y columna a pixels
   nFila   := nFila  * aAnchop[1]
   nColum  := nColum * aAnchop[2]  //Columna en pixels
   nesp=( len(wVar) - len( Ltrim( wVar ) ) ) * aAnchop[2]
   wVar:=Ltrim(wVar)

   IF wVar<>Space(1)

      IF Pcount()=3 //Si no indique fuente

         oImp:Say( nFila, (nColum + nesp), wVar, if( aAnchop[3]<=80, aoFont[1], If( aAnchop[4], aoFont[1], aoFont[2] ) ) )
         //si menos 80 cols uso aofont[1] sino si es apaisado, aofont[1] o sino aofont[2]

      ELSE  //si indique fuente

      oImp:Say(nFila,(nColum + nesp),wVar, oFuente)

      ENDIF

   ENDIF

RETURN NIL
/*Fin Funcion PrnSay

----------------------------------------------------------------------------------------------------------------------*/
FUNCTION PrnBox(nFila1, nCol1, nFila2, nCol2, oPen, nC)

   /*Sintaxis:
   PrnBox( nFila, nCol1, nFila2, nCol2, oPen, nC )
   nFila es la fila donde se hace la impresion
   ncolum es la columna donde comienza
   var es una variable de cualquier tipo que contiene lo que se va a imprimir
   nC es el total de columnas base (80 o 120)
   */

   IF nC=NIL

      //Si no se especifica cantidad de columnas uso las especificadas en IniImp()
      aAnchop[2]:=oImp:nHorzRes()/aAnchop[3]

   ELSE

      //Si se especifico cant. de columnas recalculo el ancho de columna
      aAnchop[2]:=oImp:nHorzRes()/nC

   ENDIF

   //paso fila y columna a pixels
   nFila1 := nFila1 * aAnchop[1]
   nCol1  := nCol1  * aAnchop[2]
   nFila2 := nFila2 * aAnchop[1]
   nCol2  := nCol2  * aAnchop[2]

   //dibujo el cuadro
   oImp:Box(nFila1, nCol1, nFila2, nCol2, oPen)

RETURN NIL
/*Fin Funcion PrnBox
---------------------------------------------------------------------------------------------------------------------*/

FUNCTION PrnLine(nFila1, nCol1, nFila2, nCol2, oPen, nC)

   IF Pcount()=6

      //si se especifico cant. de columnas recalculo el ancho de columna
      aAnchop[2]:=oImp:nHorzRes()/nC

   ELSE

      //Si no se especifica cantidad de columnas uso las especificadas en IniImp()
      aAnchop[2]:=oImp:nHorzRes()/aAnchop[3]

   ENDIF

   //paso fila y columna a pixels
   nFila1 := nFila1 * aAnchop[1]
   nCol1  := nCol1  * aAnchop[2]
   nFila2 := nFila2 * aAnchop[1]
   nCol2  := nCol2  * aAnchop[2]

   //Dibujo la linea
   oImp:Line(nFila1, nCol1, nFila2, nCol2, oPen)

RETURN NIL
/*Fin Funcion PrnLine
---------------------------------------------------------------------------------------------------------------------*/

FUNCTION FinImp()

   //Destruyo las fuentes
   //finalizo la impresión

   ENDPRINT

   //elimino los fonts
   aoFont[1]:End()
   aoFont[2]:End()
   aoFont[3]:End()

RETURN NIL
/*Fin Funcion FinImp*/


Kapiaba
Colaborador

Colaborador
 
Mensagens: 1493
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 284 vezes
Mens.Curtidas: 90 vezes

Construção de relatorio e arquivo txt

Mensagempor Kapiaba » 07 Mar 2016 10:47

Completando:

se a sua versão do FiveWin, for igual ou superior a ABRIL de 2013, você pode gerar direto em .PDF:

Examples:
PRINTER oPrn FILE "out.pdf" // "out.pdf" is created silently
PRINTER oPrn FILE "PDF" // user is prompted for pdf file name.
PRINTER oPrn PREVIEW FILE "out.pdf" / "pdf" // pdf file created is displayed.


Abs
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1493
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 284 vezes
Mens.Curtidas: 90 vezes




Retornar para FiveWin

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro