Sobre relatórios

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Sobre relatórios

Mensagem por janio »

Olá a todos,

Em todo o meu sistema os relatórios podem ser enviados para a impressora ou para o vídeo e utilizo a mesma formatação para ambos. Quando o usuário pede um relatório, aparece a opção de escolha para o vídeo ou impressora.

Para exibir os relatórios no vídeo, utilizo uma função chamada LERTEXTO que peguei no site do Toledo feita com o tbrowse, muito boa por sinal.

Agora vem o problema: O que tem me chateado nessa função é que tenho que gerar primeiro um arquivo texto... depois copiar todo o conteúdo desse arquivo para um DBF TEMPORÁRIO e só então EXIBIR o relatório na tela. E mais: em muitos relatórios do sistema tenho que GERAR um DBF temporário, indexá-lo, então gerar o ARQUIVO TXT, copiar o conteúdo do TXT para o outro DBF temporário gerado pela função LERTEXTO e só então exibir o relatório. Ou seja, para exibir um simples relatório, tenho que gerar 04 ARQUIVOS e isso leva tempo pq tenho que ler arquivo inteiro.

Pensei numa maneira de ir exibindo o relatório a medida que ele tá sendo gerado... sei lá... preecher uma matriz... não sei.

Como vcs utilizam o esquema de relatórios????


Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Alessandro
Usuário Nível 3
Usuário Nível 3
Mensagens: 141
Registrado em: 07 Jul 2004 09:39
Localização: Santo Antonio da Platina-PR

Mensagem por Alessandro »

Olá Jânio

Utilizo uma função que é bem simples para isso...
Basta eu direcionar a emissão do relatório para um arquivo texto, e após isso a chamo, e ela exibe o relatório na tela.

Caso queira posso lhe enviar
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Ok. manda pra eu testar!

janioaguiar@yahoo.com.br


Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Mensagem por marcos.gurupi »

Eu utilizo da seguinte maneira: Tb pergunto ao usuario c ele quer visualizar o mandar direto para impressora ao escolher o video eu crio um arq. temp. com ext prn e entaum exibo com edit. Soh isso! Entaum apartir do edit tb posso imprimir.


Marcos Roberto.
Marcelo Aparecido
Usuário Nível 1
Usuário Nível 1
Mensagens: 7
Registrado em: 03 Set 2006 12:31
Localização: Sertãozinho/SP

Mensagem por Marcelo Aparecido »

Pessoal,

Eu também, como o Janio, precisaria de uma função de relatório na tela.

No meu programa eu coloco uma opção para gerar o relatório em arquivo, depois em outra opção para o usuário visualizar o arquivo, na tela, informando o nome do arquivo gerado.

Se vocês tiveram uma função para visualizar o relatório em tela, de uma só vez, me envie se possível.

muito obrigado pela atenção

Marcelo
mmartinucci@ig.com.br
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Pessoal, deixa eu explicar melhor:

A função q tenho pra exibir relatório na tela é excelente. O meu problema e o que acho muito ruim é só poder EXIBIR o relatório depois de ter gerado TODO o TXT.

O que eu queria era uma maneira de ir EXIBINDO o relatório à medida que o TXT vai sendo gerado! Entenderam???

Marcelo Aparecido

Pegue a mesma função que utilizo. Ela faz as duas coisas ao mesmo tempo. É ótima!

Vá em
www.pctoledo.com.br
download
funções com fontes
função de nº 25

Veja:

Código: Selecionar todos


IF vIMP = 1 // se impressao pra tela

   GERA_TMP()

   SET PRINT ON 
   SET PRINTER TO &nomefile
   SET DEVICE TO PRINTER 
   SET CONSOLE OFF

   vPAGINA = 1

   SETPRC(0,0)
   @ PROW() + 01, 00 SAY EMPRESA PICT "@!"
   ...
   ...
   ...

   SET CONSOLE ON
   SET PRINTER OFF
   SET PRINTER TO
   SET DEVICE TO SCREEN 

   lertexto(alltrim(nomefile))
   ERASE C:\WINDOWS\&NomeFile
   RETURN .T.
  
ENDIF

FUNCTION GERA_TMP
SET DEFAULT TO C:\WINDOWS

PUBLIC contafile := 1      ,; 
        nomefile := space(8)

   IF FILE('temp0001.txt') 
      nomefile = 'temp' + strzero(contafile,4) + '.txt'
      DO WHILE FILE(nomefile)
         contafile = contafile + 1 
         nomefile = "temp" + STRZERO(contafile,4) + '.txt'
      ENDDO 
   ELSE 
      nomefile := 'temp0001.txt' 
   ENDIF
RETURN .T. 
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Marcelo Aparecido
Usuário Nível 1
Usuário Nível 1
Mensagens: 7
Registrado em: 03 Set 2006 12:31
Localização: Sertãozinho/SP

Mensagem por Marcelo Aparecido »

Valeu Janio, já fiz o downloado da função, depois te falo se deu tudo certinho... obrigadão
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Olá...

Para exibir os relatórios na tela, uma vez que vc já tem a rotina, é muito simples, basta usar o Set Printer To Arquivo.ext e depois mostra-lo com a função MemoRead(). Eu uso ssim, não preciso de nenhum DBF temporário, e este mesmo txt onde gravei o relatório ofereço a opção de salvar, sendo que depois ele pode abrir pelo proprio programa relatorios antigos, novamente usando MemoRead(). Se ele não quer salvar eu apago o txt.

É uma de muitas formas.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Marcelo Aparecido
Usuário Nível 1
Usuário Nível 1
Mensagens: 7
Registrado em: 03 Set 2006 12:31
Localização: Sertãozinho/SP

Mensagem por Marcelo Aparecido »

Olá Stanis, obrigadão pela dica, vou fazer, qualqur dúvida te falo... valeu
Stanis Luksys escreveu:Olá...

Para exibir os relatórios na tela, uma vez que vc já tem a rotina, é muito simples, basta usar o Set Printer To Arquivo.ext e depois mostra-lo com a função MemoRead(). Eu uso ssim, não preciso de nenhum DBF temporário, e este mesmo txt onde gravei o relatório ofereço a opção de salvar, sendo que depois ele pode abrir pelo proprio programa relatorios antigos, novamente usando MemoRead(). Se ele não quer salvar eu apago o txt.

É uma de muitas formas.
Eliane
Usuário Nível 2
Usuário Nível 2
Mensagens: 82
Registrado em: 22 Mai 2006 10:17
Localização: Londrina-PR

Mensagem por Eliane »

Também uso o set printer to file para gerar o relatório.

Só que tanto para exibir como para imprimir utilizo rotinas de leitura de arq.MS-DOS( baixo nível). É bem rápido.

Utilizo um gerador de relatórios GRELATO que peguei na internet e fiz algumas adaptações. Desta maneira não há limite do tamanho do arquivo. Gostaria de saber se o MEMOREAD() é tão rápido qto leitura de arq.DOS e se tem o limite de 64. Obrigado pela atenção.



[/code]
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Olá,

O MemoRead() é bem rapidinho, porém tem este problema com 64Kb sim. Eu particularmente não passo mais por este problema por que meus aplicativos estão todos rodando com xHarbour, em que o limite é memória do PC.

Esqueci de dizer deste limite, existe sim.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Responder