Página 1 de 1

Sobre relatórios

Enviado: 01 Set 2006 19:12
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

Enviado: 02 Set 2006 08:25
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

Enviado: 02 Set 2006 10:34
por janio
Ok. manda pra eu testar!

janioaguiar@yahoo.com.br


Janio

Enviado: 03 Set 2006 10:48
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.

Enviado: 03 Set 2006 13:34
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

Enviado: 03 Set 2006 16:17
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. 

Enviado: 03 Set 2006 17:09
por Marcelo Aparecido
Valeu Janio, já fiz o downloado da função, depois te falo se deu tudo certinho... obrigadão

Enviado: 03 Set 2006 18:24
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.

Enviado: 03 Set 2006 19:35
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.

Enviado: 04 Set 2006 09:40
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]

Enviado: 04 Set 2006 10:04
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.