Clipper On Line • Ver Tópico - Criando um relatório automático

Criando um relatório automático

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Criando um relatório automático

Mensagempor JoséQuintas » 23 Mai 2020 12:14

Na prática o Harbour já tem isso, uma vez que ele sumula os comandos REPORT e LABEL do Clipper.

Mas não seria uma coisa do outro mundo.

Um básico:

aFields := { "CODIGO", "NOME', "ENDERECO" }

DO WHILE ! Eof()
   @ pRow(), 0 SAY ""
   FOR EACH oElement IN aFields
      @ pRow(), pCol() + 2 SAY &( oElement )
   NEXT
   @ pRow() + 1, 0 SAY ""
   SKIP
ENDDO


Quer com totais/etc?
Aí o array precisaria mais do que o campo.
Precisaria ter o título da coluna, o indicativo se soma ou não, e até um total.

aFields := { ;
   { "CODCLI", "CODIGO", .F., 0 }, ;
   { "NOME", "NOME", .F. 0 }, ;
   { "ENDERECO", 'ENDERECO", .F. 0 }, ;
   { "VL.VENDA", "VALOR", .T., 0 } }

DO WHILE ! Eof()
   IF PRow() == 0 .OR. pRow() > 66
     Cabecalho( aFields )
   ENDIF
   @ pRow(), 0 SAY ""
   FOR EACH oElement IN aFields
      @ pRow(), pCol() + 2 SAY &( oElement[ 2 ]  )
      IF oElement[ 3 ] // se soma
         oElement[ 4 ] += &( oElement[ 2 ] )
      ENDIF
   NEXT
   @ pRow() + 1, 0 SAY ""
   SKIP
ENDDO
@ pRow() + 2, 0 SAY ""
FOR EACH oElement IN aFields
   IF oElement[ 3 ]
      @ pRow(), pCol() + 2 SAY oElement[ 4 ] // total
   ELSE
      @ pRow(), pCol() + 2 SAY Space( Len( Transform( &( oElement[ 2] ), "" ) ) ) // deixa em branco
   ENDIF
NEXT
RETURN

FUNCTION Cabecalho( aFields )

   @ 0, 0 SAY ""
   FOR EACH oElement IN aFields
     @ pRow(), pCol() + 2 SAY oElement[ 1 ] // titulo da coluna
   NEXT
   @ pRow() + 1 SAY Replicate( "-", 132 )
   @ pRow() + 2, 0 SAY ""

   RETURN NIL


Basicamente seria isso, mas não considerando PICTURE pra numéricos, ou alinhamento mais detalhado.

E por aí vai.
Se for modo texto, alinhamento por coluna, se for modo gráfico, é calcular como gráfico.
Se tiver quebra por campo (subtotais), seriam mais colunas no array de configuração.
Esse array poderia ser um arquivo XML, JSON, etc. gravado no disco ou em MySQL, e o fonte de impressão apenas usa a configuração.

O interessante: a configuração serviria pra gerar o mesmo relatório em texto, PDF, Excel, etc.
Foi assim que surgiram os relatórios automáticos.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 13473
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 837 vezes

Criando um relatório automático

Mensagempor JoséQuintas » 24 Mai 2020 10:53

Faltou acrescentar:

Como através de comandos SQL pode-se fazer praticamente tudo, e com ODBC/ADO também....
É aí que isso se torna mais interessante.

O VB6 tem duas opções de criar relatórios: Crystal Reports e Data Reports
O Access também tem.

NÃO SEI se nestas alturas do campeonato compensa, mas...
Uma vez que o Harbour pode salvar arquivo em formato ADO, poderiam ser usados esses geradores de relatório.

Vantagem?
Considerando que tem produto pra Harbour que é pago, mas pra outras linguagens é grátis....
Pode ser interessante fazer em outra linguagem.
Vai ser algo como relatório:Execute(), qual a diferença se for em outra linguagem?
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 13473
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 837 vezes

Criando um relatório automático

Mensagempor lwinter » 25 Mai 2020 21:10

Boas consideracoes Jose!
Voce sabe se tem Crystal Reports para Harbour ou algo parecido?
Voltando ao seu exemplo seria interessante uma rotima que ja criasse em PDF automatico com quebra de pagina, etc...
lwinter
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 124
Data de registro: 07 Mar 2011 12:08
Cidade/Estado: Campinas - SP
Curtiu: 1 vez
Mens.Curtidas: 12 vezes

Criando um relatório automático

Mensagempor JoséQuintas » 25 Mai 2020 22:35

Pequena adaptação pra PDF:

aFields := { ;
{ "CODCLI", "CODIGO", .F., 0 }, ;
{ "NOME", "NOME", .F. 0 }, ;
{ "ENDERECO", 'ENDERECO", .F. 0 }, ;
{ "VL.VENDA", "VALOR", .T., 0 } }

oPDF := PDFClass():New()
oPDF:acHeader := { "RELATORIO", "", "" }
FOR EACH oElement IN aFields
   oPDF:acHeader[ 2 ] += oElement[ 1 ] + Space(2)
NEXT
oPDF:acHeader[ 3 ] := Replicate( "-", 132 )

DO WHILE ! Eof()
   oPDF:MaxRowTest()
   oPDF:nCol := 0
FOR EACH oElement IN aFields
   oPDF:DrawText( oPDF:nRow, oPDF:nCol + 2, &( oElement[ 2 ] ) )
   IF oElement[ 3 ] // se soma
    oElement[ 4 ] += &( oElement[ 2 ] )
   ENDIF
NEXT
oPDF:nRow += 1
SKIP
ENDDO
oPDF:nRow += 2
oPDF:nCol := 0
FOR EACH oElement IN aFields
IF oElement[ 3 ]
   oPDF:DrawText( oPDF:nRow, oPDF:nCol + 2, oElement[ 4 ] ) // total
ELSE
   oPDF:DrawText( oPDF:nRow, oPDF:nCol + 2, Space( Len( Transform( &( oElement[ 2] ), "" ) ) ) ) // deixa em branco
ENDIF
NEXT
oPDF:End()
RETURN
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 13473
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 837 vezes

Criando um relatório automático

Mensagempor lwinter » 26 Mai 2020 19:49

Entendi. Mas tem como alterar fontes, inserir imagens, etc....? Dai poderia fazer um cabecalho e rodape da hora. O miolo seria como voce colocou.
Mas mesmo assim, existe algum gerado de relatorio legal para harbour?
lwinter
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 124
Data de registro: 07 Mar 2011 12:08
Cidade/Estado: Campinas - SP
Curtiu: 1 vez
Mens.Curtidas: 12 vezes

Criando um relatório automático

Mensagempor paiva_dbdc » 27 Mai 2020 08:25

tem o FastReport
paiva_dbdc
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 280
Data de registro: 12 Nov 2012 08:58
Cidade/Estado: uberlandia mg
Curtiu: 0 vez
Mens.Curtidas: 3 vezes

Criando um relatório automático

Mensagempor lwinter » 27 Mai 2020 20:57

Paiva, vou perguntar ja sabendo a resposta. O Fastreport funciona para console e SQL?

rgds,
lwinter
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 124
Data de registro: 07 Mar 2011 12:08
Cidade/Estado: Campinas - SP
Curtiu: 1 vez
Mens.Curtidas: 12 vezes




Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 3 visitantes


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
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro