RELATORIO: Motor e scripts de geração de relatórios simples

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

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

RELATORIO: Motor e scripts de geração de relatórios simples

Mensagem por rochinha »

Amiguinhos,

A muito, muito tempo atrás(1997) eu tinha um utilitário, de uns 50k e que através de um script me gerava relatórios em texto. O problema de usá-lo é que meus indices eram CDX e ele não os reconhecia.

Era um daqueles utilitários que só encontramos no VETUSWARE, mas este site era tão repleto que até cansava.

Bom como não tinha como usá-lo mas a proposta era boa, decidi fazer o meu mesmo.

Parti do princípio de que o script ao ser jogado na pasta do meu sistema fosse reconhecido por ele e já o adaptasse ao menu de relatórios(parte avançada), ou seja, se o script fosse trabalhar com o arquivo de contas, ele apareceria automaticamente no menu RELATORIOS/FINANCEIRO.

Exemplo:

Código: Selecionar todos

--RPT1.FRM
HT                                                      RELATORIO DE CLIENTES
HT ------------------------------------------------------------------------------------------------------------------------------------
HT NUM   CLIENTE                                        TELEFONE        CREDITO ENDERECO
HT ----- ---------------------------------------- -------------- -------------- -------------------------------------------------------
DT 99999 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXX 99999999999.99 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ET**** END OF REPORT ****
TA clientes
-- NX clien003
DC idcliente,nome,telefone,credito,endereco
-- CQ nome
SM credito                
RE NAO
ST NAO
LP 132
-- WH idcliente > 10 .and. idcliente < 16
Vejam que cada linha tem uma tag de dois caracteres, sendo elas:

-- - Funciona como um REM do DOS, atuando como uma anotação.
HT - Funciona como o marcador de linhas do cabecalho.
DT - Funciona como o formatador da linha de dados.
ET - Significa fim do relatorio.
TA - Nome da tabela que será usada para obter os dados.
NX - Nome do indice usado para colocar ordem na listagem.
DC - Nomes dos campos que terão seus dados capturados e inxertados na estrutura formatada em DT.
CQ - Funciona como quebra, ou salto que o relatorio deverá ocasionar.
SM - Campo que deverá ser somado ou sumarizado e o resultado apresentado no final do relatorio.
RE - recebe SIM ou NAO para resumir o relatorio.
ST - recebe SIM ou NAO para subtotalizar o relatorio e os campos contidos em SM
LP - Largura do relatorio conforme a impressora.
WH - Funciona como filtragem, WHILE.

Exemplo de script para montar o relatorio resumido, sub-totalizado e com quebra:

Código: Selecionar todos

--RPTfat08.FRM
HT                  **** VENDAS POR GRUPO ****
HT ---------------------------------------------------------------
HT CATEGORIA            QUANTDADE      VENDA      CUSTO      LUCRO
HT -------------------- --------- ---------- ---------- ----------
DT XXXXXXXXXXXXXXXXXXXX 999999999 999,999.99 999,999.99 999,999.99
ET**** END OF REPORT ****
GT                      --------- ---------- ---------- ----------
GT                Total 999999999 999,999.99 999,999.99 999,999.99
TA es
NX es
DC linha|quantidade|valorvenda|customedio|valorvenda-customedio
GC 0|quantidade|valorvenda|customedio|valorvenda-customedio
CQ linha   
--SM SIM
RE SIM
ST SIM
LP 64
WH (YEAR(DATAPED) > 2013 .AND. MONTH(DATAPED) = 1) .AND. !EMPTY(LINHA)
Resultado:

Código: Selecionar todos


**** VENDAS POR GRUPO ****
Pagina: 0001                                   Data: 28/11/2014
---------------------------------------------------------------
CATEGORIA            QUANTDADE      VENDA      CUSTO      LUCRO
-------------------- --------- ---------- ---------- ----------
LOJA DIVERSOS                1      38.00       0.00      38.00
---------------------------------------------------------------
SUBTOTAL
                          7918  20,232.47   7,936.23  12,296.24

LOJA ESPUMAS                 6     353.40       0.00     353.40
---------------------------------------------------------------
SUBTOTAL
                        184556  29,659.23   6,644.54  23,014.69

LOJA-DIVERSOS                1      13.30       6.53       6.77
---------------------------------------------------------------
SUBTOTAL
                           779   2,366.73   1,073.51   1,293.22
Exemplo de script onde campos são somatizados:

Código: Selecionar todos

--RPT2.FRM
HT                                  **** Contas a Receber/Pagar ****
HT ----------------------------------------------------------------------------------------------------------
HT Vencto     Descricao                                Nome                                             Valor 
HT ---------- ---------------------------------------- ---------------------------------------- -------------
DT 99/99/9999 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 99,999,999.99
ET**** END OF REPORT ****
GT                                         -------------
GT                                   Total 99,999,999.99
TA contas
NX contas
DC areceber|descricao|nome|valor
GC 0|0|0|valor
CQ areceber
--SM areceber
--RE SIM
ST SIM
LP 107
WH YEAR(ARECEBER) > 2013 .AND. MONTH(ARECEBER) = 1
Faça o download

Segue o executável demonstrativo e para usar basta comandar:

NFWRPT.EXE RPT1.FRM TESTE.TXT

RPT1.FRM é um script de configuração da saida.
TESTE.TXT é o nome do arquivo que receberá o conteúdo, segue sem formatação de fontes, somente com EJECT para o salto de folhas.

O demonstrativo tem um preview apenas para mostrar o resultado, também não tem formatação de fontes e nem divisão de páginas.

O código segue com alterações feitas em 28/11/2014, portanto quem quiser usá-lo, pode alterar e caso melhore coloque aqui seu resultado.

O código esta DEFINIDO em sua compilação pela variável contida na primeira linha, ou seja, padrão FIVEWIN e para compilar normal para o console basta colocar outro nome no lugar de FIVEWIN. Porém todos os ajustes que eu tenha feito fiz na parte FIVEWIN, mas acho que refletem no resto.

Uma pequena alteraçãozinha deverá ser feita nas linhas 500,501 e 502, trocando-as por:

Código: Selecionar todos

IF cST = 'SIM'
   MyTOT_01(2, aDC, aDT, aHT )
ENDIF
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

RELATORIO: Motor e scripts de geração de relatórios simples

Mensagem por Kapiaba »

Vamos testar, obg. Rochinha.
Responder