Gerar relatorio na tela e depois imprimir

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

JOSE GENOVEZI
Usuário Nível 1
Usuário Nível 1
Mensagens: 12
Registrado em: 28 Jul 2009 20:55
Localização: CURITIBA/PR

Gerar relatorio na tela e depois imprimir

Mensagem por JOSE GENOVEZI »

Olá para todos, poderiam me ajudar a gerar relatorios na tela e depois imprimir. Grato a todos.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Gerar relatorio na tela e depois imprimir

Mensagem por alxsts »

Saudações a todos!

Genovezi:

- Normalmente, como voce gera seus relatórios (imprime direto ou gera um arquivo texto para impressão)?
- Em outro post feito por voce, é citado o Clipper Summer. É este que voce usa?
- Tenho algumas rotinas para exibição de textos na tela. Estas rotinas fazem isto utilizando TBrowse. Logo, em Summer não funcionariam. Só se voce recompilar teu sistema...
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Gerar relatorio na tela e depois imprimir

Mensagem por Maligno »

Acho que o primeiro passo é direcionar a impressão para um arquivo, tomando o cuidado de suprimir qualquer comando de impressão, a fim de deixar a visualização mais limpa. Na etapa final, a visualização, pode-se usar qualquer método que apenas permita mostrar o texto no vídeo, com os devidos comandos de navegação. Usar um browser é apenas uma forma. Mas até um código muito simples pode ser utilizado para exibir os dados no vídeo. Lembro que no site The Oasis existe um sistema de visualização feito em C. Nunca usei, mas um colega daqui só usava esse e sempre elogiava.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Gerar relatorio na tela e depois imprimir

Mensagem por alxsts »

Saudações a todos!
Maligno escreveu:
Acho que o primeiro passo é direcionar a impressão para um arquivo...
Penso como voce. Por isto perguntei, de pronto, como ele imprime. Para visualizar, tem vários métodos mesmo. Até um MemoEdit() funcionará, desde que o arquivo tenha menos que 64Kb de tamanho.
Não conheço as rotinas que voce citou, do Oasis. As que uso, adaptei de um livro do Stephen J. Straley. A navegação é feita através de um TBrowse() no arquivo texto. Tem tambem funções para localizar expressões no texto do relatório e opções para salvar o mesmo em disco ou enviar por email (via SmtpSend).
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Gerar relatorio na tela e depois imprimir

Mensagem por Maligno »

O método que citei, do "The Oasis" (aliás, deve haver outros por lá), é dos mais simples e dos melhores. Uma função C que simplesmente abre o arquivo e trata as teclas de navegação. Como é em C, é muito rápida também.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Gerar relatorio na tela e depois imprimir

Mensagem por sygecom »

No link abaixo tem um exemplo de uma rotina de relatório na tela que é muito bom.
viewtopic.php?f=43&t=3954
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Gerar relatorio na tela e depois imprimir

Mensagem por alxsts »

Saudações a todos!

Esta rotina é a que me referi, do Stephen J. Straley.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Re: Gerar relatorio na tela e depois imprimir

Mensagem por billy1943 »

Eu uso a seguinte forma:

1. Sempre gravo para um arquivo texto a saída de relatório, através do SET PRINTER TO, tomando os seguintes cuidados:

- se vou querer saída na tela ou impressora, gravo com todos os comandos de impressão (compressão, tamanho de linha, largura de linha, etc.) só que para somente vizualizá-lo, utilizo a função FILEREAD que existe na SUPER.LIB;

- caso eu queira a impressão pelo NODOSIMP (impressoras Windows/USB) não coloco os caracteres de controle.

2. Esse sistema me permite trabalhar com o conceito de SPOOL advindo dos sistema de grande porte
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Gerar relatorio na tela e depois imprimir

Mensagem por gvc »

Eu gravo o relatório em arquivo.
Como aqui não dá para controlar corretamente os usuários, eu gravo o arquivo no rais do drive c:.

Após a gravação, abro esse arquivo com o README. (Aquele leitor de arquivo texto que vem com o Turbo Pascal. Esse é amptigo)
Quando o usuário aperta o ESC para fechar o README, eu abro um alerte, perguntando se ele quer imprimir o arquivo.
Ai eu uso o NODOSIMP para mandar o arquivo para a impressora padrão do Win.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Gerar relatorio na tela e depois imprimir

Mensagem por lugab »

GVC, vc tem o fonte desse Readme para eu ver se me atende ?

Achei, pela sua descrição, que ele não é o executável, já que vc detecta a Tecla ESC qdo o usuario tecla ainda dentro dele e, a princípio, só pode fazer isso se vc colocou captura de teclado dentro do fonte dele....

Grato,

gabriel
lugab
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Gerar relatorio na tela e depois imprimir

Mensagem por gvc »

É um executável que vem junto com o Turbo C. É antigo, pequeno e funciona muito bem.
Mande um eMail para gvcortez@uol.com.br que eu te respondo enviando o mesmo.
Só veja aqui na sessão de download se já não tem o mesmo.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
leandromiler
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 26 Nov 2009 08:38
Localização: Ribeirão Preto - SP
Contato:

Re: Gerar relatorio na tela e depois imprimir

Mensagem por leandromiler »

:)Pos
Abaixo segue a forma que uso, com o nodosimp.exe

Código: Selecionar todos

  // exemplo de relatorio usando funcao lertexto em conjunto com nodosimp.exe


  use irrf
  DO WHILE .T.
      SET RELATION TO CCODIGO INTO CONTRAT
      if RELATORIO()
         ACTPRINTER(1,15)
         IMPIR1()
         ACTPRINTER(0)
      else
         ACTPRINTER(1,15,'IRRF1.TXT')
         IMPIR1()
         set printer to
         ACTPRINTER(0)
         LERTEXTO('IRRF1.TXT')
      endif
  ENDDO
  SET FILTER TO
  SET RELATION TO
  SET ORDER TO 1
  SELE IRRF
  USE
  RETURN .T.



// -------------------------------------------------------------------------
function RELATORIO()
// -------------------------------------------------------------------------

parameters CMENS
do while .T.
   if pcount() = 0
      CMENS := "Direciona sa¡da para : "
   endif
   linha   := savescreen(23,0,23,79)
   mOLDCOR := setcolor()
   setcolor('')
   @ 23,1 say space(77)         
   mCONF  := "S"
   mOPCAO := 1
   mOPC := alert(CMENS,{'1 Impressora','2 V¡deo'},"RG+/B")
   if lastkey() = 27
      X := .F.
   endif
   if mOPC = 1
      X := .T.
   endif
   if mOPC = 2
      X := .F.
   endif
   exit
enddo
setcolor(mOLDCOR)
restscreen(23,0,23,79,LINHA)
return X

  * ------------------------------------------------------------------------ *
  FUNCTION IMPIR1()
  // RIRRF1
  * ------------------------------------------------------------------------ *
  mPAG:=mREG:=mTOT1:=mTOT2:=mTOT3:=0
  IF mESC1=1
      T='RELATORIO DE I.R.R.F. Por Motorista'
  else
      T='RELATORIO DE I.R.R.F. Todos Lancamentos'
  endif
  DO WHILE !EOF()
      Mpag++
      @ PROW()+1,0 SAY DATE()
      @ PROW(),40-INT(LEN(TRIM(T))/2) SAY T
      @ PROW(),68  SAY TIME()
      @ prow()+1,0 say 'Periodo  ->   '+DTOC(MDATINI)+'  ate  '+dtoc(mdatfim)
      @ PROW(),60 SAY 'Pagina.. '+strzero(Mpag,3,0)
      IF mESC1=1
          @ prow()+1,0 say 'Contratado..: '+CONTRAT->NOME
      ENDIF
      @ prow()+1,0 say repli('-',78)
      @ prow()+1,0 SAY 'Numero'
      @ prow(),10  say 'Data'
      @ prow(),22  say 'Vr.Bruto'
      @ prow(),32  say 'Vr.Desc'
      @ prow(),42  say 'I.R.R.F.'
      @ PROW(),52  SAY 'Parcela'
      if Mesc1!=1 // imprime somente se for geral
          @ PROW(),57  SAY 'Motorista'
      endif
      @ prow()+1,0 say repli('-',78)
      DO WHILE !EOF() .AND. PROW()<55
          IF !EMPTY(CONHEC)
              @ prow()+1,0 SAY CONHEC
          ELSE
              @ prow()+1,0 SAY CONTLANC
          ENDIF
          @ prow(),10  say CDATA
          @ prow(),22  say VRBRUTO PICT '99,999.99'
          @ prow(),32  say VRDESC  PICT '99,999.99'
          @ prow(),42  say IMPOSTO PICT '99,999.99'
          @ prow(),52  say PARCELA
          if Mesc1!=1 // imprime somente se for geral
              @ PROW(),57  SAY left(CONTRAT->NOME,20)
          endif
          mTOT1:=mTOT1+VRBRUTO
          mTOT2:=mTOT2+VRDESC
          mTOT3:=mTOT3+IMPOSTO
          mREG++
          SKIP
      ENDDO
      IF EOF()
          @ prow()+1,0 say repli('-',78)
          @ PROW()+1,0 SAY 'Registros -> '+strzero(Mreg,5,0)
          @ prow(),22  say mTOT1 PICT '99,999.99'
          @ prow(),32  say mTOT2 PICT '99,999.99'
          @ prow(),42  say mTOT3 PICT '99,999.99'
          @ prow()+1,0 say repli('-',78)
          EJECT
          EXIT
      ENDIF
      EJECT
  ENDDO
  SELE IRRF
  USE
  RETURN .T.



// ****************************************************************************

*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+    Function ACTPRINTER()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
function ACTPRINTER

//  Forma      :  ACTPRINTER(<exp.numerica1>,<exp.numerica2>,<nomearq>
//  Proposito  :  Ativa a Impressora ou Desativa a impressora, imprimindo em
//                arquivo ou Impressora.
//  Argumentos :  <exp.numerica1>: define se ativa (1) ou desativa (0) a
//                impressora; <exp.numerica2>: define se vai ser condensado(15)
//                ou normal (18) ou (); <nomearq> define o nome do arquivo em
//                que vai ser impresso.
// ****************************************************************************
// modificada dia 26/11 - duas horas da manha
parameters mOPCAO,mLETRA,mARQ
do while .T.
   if pcount() = 0
      mRETORNO := .F.
      exit
   elseif pcount() = 1
      mLETRA := 18
      mARQ   := ' '
   elseif pcount() = 2
      mARQ := ' '
   endif
   set console OFF
   set curs OFF
   SET PRINT ON
   SET DEVICE TO PRINT

   if mOPCAO = 1 // imprime

      if MARQ=' ' .OR. mARQ='EPSON'
         IF mARQ='EPSON'
             TIPOIMP(1)
         ELSE
             // 3-ibm 4-Outros
             mESCPRINT:=SAVESCREEN(10,20,16,60)
             @ 10,20 clear to 16,60
             @ 10,20 TO 16,60
             @ 11,22 prompt '1 Epson Lpt1  '
             @ 12,22 prompt '2 HP Lpt1     '
             @ 13,22 prompt '3 Epson Lpt3  '
             @ 14,22 prompt '4 HP Lpt3     '
             @ 11,45 prompt '5 Epson Lpt2  '
             @ 12,45 prompt '6 HP Lpt2     '
             @ 13,45 prompt '7 IBM Lpt2    '
             @ 14,45 prompt '8 Outras Lpt2 '
             @ 15,22 prompt '9 Manda p/ impressora padrao'
             menu to mIMPR
             IF mIMPR=1 .OR. mIMPR=5
                 TIPOIMP(1) // EPSON
             ENDIF
             IF mIMPR=2 .OR. mIMPR=6
                 TIPOIMP(2) // HP
             ENDIF
/*           IF mIMPR=3 .OR. mIMPR=7
                 TIPOIMP(3) // IBM
             ENDIF
             IF mIMPR=4 .OR. mIMPR=8 // OUTRAS
                 TIPOIMP(4) // OUTRAS
             ENDIF */
             RESTSCREEN(10,20,16,60,mESCPRINT)
         ENDIF

         if mLETRA = 15
            ?? PC15
         elseif mLETRA = 12
            ?? PC12
         elseif mLETRA = 13
            ?? PC13
         elseif mLETRA = 18
            ?? PC10
         endif

         SET DEVICE TO PRINT

         if Mimpr=9 // outros
             SET PRINTER TO TEMP.TXT
             run copy temp.txt > prn
             ferase('temp.txt')
         endif

         IF mIMPR>=5  .AND. mIMPR<=8
             SET PRINTER  TO LPT2
         ENDIF

         IF mIMPR>=1  .AND. mIMPR<=4
             SET PRINTER  TO LPT1
         ENDIF

         IF mIMPR=3  .or. mIMPR=4
             SET PRINTER  TO LPT3
         ENDIF
      else
         set printer to &mARQ
      endif
      mRETORNO := .T.
   endif

   if mOPCAO = 0
      set print on
      set print OFF
      SET PRINTER TO LPT1
      set device to screen
      set console on
      set curs on
      mRETORNO := .T.
   endif
   exit
enddo
return mRETORNO

// ****************************************************************************


***************************************************************************
***************************************************************************
* Recebe um arquivo texto, cria um dbf, grava  neste arquivo e mostra na
* tela, quando sair os arquivos temporarios criados serao apagados.
Proce lertexto
Para arquivo,msize,mTIPO
if pcount()=1
    msize=120
    mTIPO=0
endif
if pcount()=2
    mTIPO=0
endif
#INCLUDE "INKEY.CH"
#INCLUDE "SETCURS.CH"
local1:= {}
declare acamp:=[15]
cor_ant = setcolor()    // Salva cor antiga
dbf_veio= select()      // Salva arquivo que estava selecionado
 aadd(Local1, {"TELA01", "C", 13, 0})
 aadd(Local1, {"TELA02", "C", 13, 0})
 aadd(Local1, {"TELA03", "C", 13, 0})
 aadd(Local1, {"TELA04", "C", 13, 0})
 aadd(Local1, {"TELA05", "C", 13, 0})
 aadd(Local1, {"TELA06", "C", 13, 0})
 aadd(Local1, {"TELA07", "C", 13, 0})
 aadd(Local1, {"TELA08", "C", 13, 0})
 aadd(Local1, {"TELA09", "C", 13, 0})
 aadd(Local1, {"TELA10", "C", 13, 0})
 aadd(Local1, {"TELA11", "C", 13, 0})
 aadd(Local1, {"TELA12", "C", 13, 0})
 aadd(Local1, {"TELA13", "C", 13, 0})
 aadd(Local1, {"TELA14", "C", 13, 0})
 aadd(Local1, {"TELA15", "C", 13, 0})
 ! del te*.dbf
 DO WHILE .T.
   Mfile='te'+lefT(sonumero(time()),6)
   if file(mFILE)
       mFILE='te'+lefT(sonumero(time()),6)
   ELSE
     EXIT
   ENDIF
 ENDDO
 dbcreate(Mfile, Local1)
 use &mFILE alias tela new
 append from &arquivo sdf   //nomecompl_arq sdf
 goto top
 qtde_reg=lastrec()
 set cursor off
 @ 00,00 to 24,79 colo 'w+/b' //BOX CHR(219)
 //               /-------------> Cor do TBrowse
 //              /    /---------> Cor da barra em destaque
 //             /    /      /---> Cor da barra luminosa
 set color to "w+/b,n/w,,,g+/b"

oTab := TBrowseDB(02,01,24,78)
oTab:colsep := ""  // CHR(219)+" "
OTAB:HEADSEP:= 'Ä' // CHR(205)+CHR(203)+CHR(205)
OTAB:COLSEP := ''  // CHR(032)+CHR(186)+CHR(032)
OTAB:FOOTSEP:= 'Ä' // CHR(205)+CHR(202)+CHR(205)

for i = 1 to fcount()
 OTAB:ADDCOLUMN(TBCOLUMNNEW("", FIELDWBLOCK(FIELDNAME(i),SELE() )))
next

@ 01,01 say space(78)
@ 01,01 say ' [F5]-Renomeia arquivo         <P>-Imprimir no Windows '+ARQUIVO
lin_br=30
Do while .T.
   nRow := ROW()
   nCol := COL()

   do while !oTab:Stabilize() ; enddo
   oTAB:hilite()
   dispbox(3,79,23,79,'°')
   ult_pos=3+(((recno()*100)/qtde_reg)/(100/(21-1)))
   if recno()=1 ; ult_pos=3
   endif
   @ ult_pos,79 say chr(219) colo 'bg/b'


   setpos( nRow, nCol )
   nKey := inkey()

   IF oTAB:stable
      setpos( nRow, nCol )
      nKey := Inkey(0)
   endif
   if nKey == K_F1
   elseif nKey == K_F2
   elseif nKey == K_F3
   elseif nKey == K_F4
   elseif nKey == K_F5
     save screen to Mtelaarq
     DO WHILE .T.
       mNOMEARQ=SPACE(8)
//       mTELAARQ=SAVESCREEN(10,15,13,60)
       SETCOLOR(mCORSEGUNDA)
       @ 10,15 CLEAR TO 13,60
       @ 10,15 TO 13,60 DOUB
       @ 11,17 SAY 'Nome do arquivo a ser salvo'
       @ 12,17 get mNOMEARQ PICT '@!'
       READ
       IF LASTKEY()=27
         EXIT
       ENDIF
       IF AT('.',mNOMEARQ)!=0 .OR. AT('/',mNOMEARQ)!=0 .OR. AT('\',mNOMEARQ)!=0;
         .OR. AT(';',mNOMEARQ)!=0 .OR. AT('?',mNOMEARQ)!=0 .OR. AT('!',mNOMEARQ)!=0
         ALERT('O nome do arquivo nao pode conter simbolos')
         loop
       endif
       SETCOLOR(mCORPRIMEIRA)
       ACTPRINTER(1,0,'CP.BAT')
       @ PROW()+1,0 SAY '@ COPY '+arquivo+' '+UPPER(alltrim('TXT\'+mNOMEARQ))+'.TXT > nul'
       ACTPRINTER(0)
       SET PRINT TO
       SET DEVICE TO SCREEN
       run CP.BAT
       ALERT(' Arquivo '+UPPER(alltrim('TXT\'+mNOMEARQ))+'.TXT foi salvo com sucesso !!')
       restore screen from Mtelaarq
       exit
     ENDDO
   elseif nKey == K_F6
   elseif nKey == K_F7
   elseif nKey == K_UP         ; oTab:UP()
   elseif nKey == K_DOWN       ; oTab:DOWN()
   elseif nKey == K_LEFT       ; oTab:LEFT()
   elseif nKey == K_CTRL_LEFT  ; oTab:PANLEFT()
   elseif nKey == K_RIGHT      ; oTab:RIGHT()
   elseif nKey == K_CTRL_RIGHT ; oTab:PANRIGHT()
   elseif nKey == K_PGUP       ; oTab:PAGEUP()
   elseif nKey == K_CTRL_PGUP  ; oTab:GOTOP()
   elseif nKey == K_PGDN       ; oTab:PAGEDOWN()
   elseif nKey == K_CTRL_PGDN  ; oTab:GOBOTTOM()
   elseif nKey == K_HOME       ; oTab:HOME()
   elseif nKey == K_CTRL_HOME  ; oTab:PANHOME()
   elseif nKey == K_END        ; oTab:END()
   elseif nKey == K_CTRL_END   ; oTab:PANEND()
   elseif nKey == K_ESC        ; EXIT
   elseif nkey == 99 .or. nkey==67
      if otab:freeze=0
         otab:freeze := otab:colpos -1
         lin_br=21
      else
         otab:freeze = 0
         lin_br= 30
         otab:panhome()
         otab:refreshall()
      endif
   elseif nkey == 80 .or. nkey==112
      FERASE('IMP.TXT')
      FRENAME(ARQUIVO,'IMP.TXT')
      RUN copy imp.TXT temp.txt
      // FCOPY('IMP.TXT','TEMP.TXT')
      if Msize=120
          IF mTIPO=0
              RUN NODOSIMP TEMP.TXT 120 PRE/SEL
          ELSE
              RUN NODOSIMP TEMP.TXT 120 PRE/SEL/APA
          ENDIF
      elseif msize=140
          IF mTIPO=0
              RUN NODOSIMP TEMP.TXT 140 PRE/SEL
          ELSE
              RUN NODOSIMP TEMP.TXT 140 PRE/SEL/APA
          ENDIF
      elseif msize=160
          IF mTIPO=0
              RUN NODOSIMP TEMP.TXT 160 PRE/SEL
          ELSE
              RUN NODOSIMP TEMP.TXT 160 PRE/SEL/APA
          ENDIF
      elseif msize=80
          IF mTIPO=0
              RUN NODOSIMP TEMP.TXT 80 PRE/SEL
          ELSE
              RUN NODOSIMP TEMP.TXT 80 PRE/SEL/APA
          ENDIF
      elseif msize=96
          IF mTIPO=0
              RUN NODOSIMP TEMP.TXT 96 PRE/SEL
          ELSE
              RUN NODOSIMP TEMP.TXT 96 PRE/SEL/APA
          ENDIF
      endif
   elseif nkey == 87 .or. nkey==119
//      FERASE('WIMP.TXT')
//      FRENAME(ARQUIVO,'WIMP.TXT')

      actprinter(1,15,'sanimp.bat')
      @ prow()+1,0 say 'WORDPAD '+ARQUIVO
      ACTPRINTER(0)
      RUN sanimp.bat

   endif
   oTab:colorRect({1,1,lin_br,oTab:freeze},{2,5})
  enddo
  arq=dbf()
  use
  arq_dbf=alltrim(arq)+'.DBF'
  erase &arq_dbf   // apaga o arquivo dbf que mostra na tela a impressao.
****  erase &arquivo   // apaga o arquivo prn que mostra na tela a impressao.
   erase &mFILE
   sele &dbf_veio   // seleciona novamente o arquivo que estava aberto
   set color to '&cor_ant.'

 RETURN .T.



*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+    Function TIPOIMP()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
function TIPOIMP(mIMPR)
IF PCOUNT()=0
    mIMPR=PARAMETRO->TIPOIMP
ENDIF

if mIMPR = 3               //PADRÇO IBM
   public PC10    := chr(18)+chr(27)+"W0"
   public PC17    := chr(15)+chr(27)+"W0"
   public PC13    := chr(27)+":"+chr(27)+"W0"
   public PC20    := chr(27)+"[I"+chr(5)+chr(0)+chr(1)+chr(25)+chr(0)+chr(72)+chr(1)+chr(27)+"W0"
   public PC15    := chr(27)+"[I"+chr(5)+chr(0)+chr(0)+chr(222)+chr(0)+chr(96)+chr(1)+chr(27)+"W0"
   public PC5     := chr(18)+chr(27)+"W1"
   public PC8     := chr(15)+chr(27)+"W1"
   public PC6     := chr(27)+":"+chr(27)+"W1"
   public PC7     := chr(27)+"[I"+chr(5)+chr(0)+chr(0)+chr(222)+chr(0)+chr(96)+chr(1)+chr(27)+"W1"
   public PRESET  := chr(27)+"[K"+chr(1)+chr(0)+chr(1)+"  "
   public PEXP    := chr(14)
   public PEXPF   := chr(20)
   public PUND    := chr(27)+"-1"
   public PUNDF   := chr(27)+"-0"
   public PLISTA  := chr(27)+"A"+chr(10)+chr(27)+"2"
   public PBAT    := chr(27)+"A"+chr(7)+chr(27)+"2"
   public PLISTA2 := chr(27)+"[I"+chr(5)+chr(0)+chr(0)+chr(87)+chr(0)+;
                           chr(120)+chr(1)+chr(15)+chr(27)+"S1"+chr(27)+"A"+chr(6)+;
                           chr(27)+"2"
   public PLIN8  := chr(27)+"0"
   public PENFON := chr(27)+"E"
   public PENFOF := chr(27)+"F"
   public PLIN6  := chr(27)+"2"
   public PCARTA := chr(27)+"G"
   public PLIN7  := chr(27)+"1"

elseif mIMPR = 2           // PADRÇO HP
   public PLAND  := chr(27)+"&l1O"
   public PC10   := chr(27)+"(s11H"
   public PC17   := chr(27)+"(s18H"
   public PC13   := chr(27)+"(s14H"
   public PC20   := chr(27)+"(s21H"
   public PC15   := chr(27)+"(s18H"
   public PC18   := chr(27)+"(s19H"
   public PC5    := chr(27)+"(s6H"
   public PC8    := chr(27)+"(s9H"
   public PC6    := chr(27)+"(s7H"
   public PC7    := chr(27)+"(s8H"
   public PRESET := chr(27)+"E"+chr(27)+"(12U"+chr(27)+"&l1H"+chr(27)+"&l1A"+;
                          chr(27)+"&l75P"+chr(27)+"&l1Z"+chr(27)+"&l300U"+PC10
   public PLISTA  := chr(27)+"&l10D"
   public PBAT    := chr(27)+"&l5C"
   public PEXP    := chr(27)+"(s5H"
   public PUND    := chr(27)+"&d0D"
   public PUNDF   := chr(27)+"&d@"
   public PEXPF   := chr(27)+"&k0S"
   public PENFON  := chr(27)+"(s6B"
   public PENFOF  := chr(27)+"(s0B"
   public PLIN8   := chr(27)+"&l6C"
   public PLIN6   := chr(27)+"&l8C"
   public PLIN12  := chr(27)+"&l3D"
   public PLIN7   := chr(27)+"&l5C"
   public PCARTA  := chr(27)+"(s3B"
   public PLISTA2 := chr(27)+"[I"+chr(5)+chr(0)+chr(0)+chr(87)+chr(0)+;
                           chr(120)+chr(1)+chr(15)+chr(27)+"S1"+chr(27)+"A"+chr(6)+;
                           chr(27)+"2"

elseif mIMPR = 1 // PADRAO EPSON
   public PC10    := chr(27)+"P"+chr(18)+chr(27)+"W0"
   public PC13    := chr(27)+"M"+chr(18)+chr(27)+"W0"
   public PC15    := chr(27)+"P"+chr(15)+chr(27)+"W0"
   public PC20    := chr(27)+"M"+chr(15)+chr(27)+"W0"
   public PC17    := chr(27)+"P"+chr(15)+chr(27)+"W0"
   public PC5     := chr(27)+"P"+chr(18)+chr(27)+"W1"
   public PC6     := chr(27)+"M"+chr(18)+chr(27)+"W1"
   public PC7     := chr(27)+"P"+chr(15)+chr(27)+"W1"
   public PC8     := chr(27)+"P"+chr(15)+chr(27)+"W1"
   public PRESET  := chr(27)+"@"+chr(27)+"x0"+chr(18)+chr(27)+"P  "                //CHR(27)+"U1"
   public PLISTA  := chr(27)+"A"+chr(10)+chr(27)+"x1"
   public PBAT    := chr(27)+"A"+chr(7)+chr(27)+"U1"
   public PLISTA2 := chr(15)+chr(27)+"S1"+chr(27)+"A"+chr(27)+"x1"
   public PEXP    := chr(14)
   public PEXPF   := chr(20)
   public PUND    := chr(27)+"-1"
   public PUNDF   := chr(27)+"-0"
   public PLIN8   := chr(27)+"0"
   public PENFON  := chr(27)+"E"
   public PENFOF  := chr(27)+"F"
   public PLIN6   := chr(27)+"2"
   public PCARTA  := chr(27)+"G"
   public PLIN7   := chr(27)+"1"

elseif mIMPR = 4
   public PC10    := chr(30)+"0"+chr(27)+"W0"
   public PC13    := chr(30)+"2"+chr(27)+"W0"
   public PC15    := chr(30)+"3"+chr(27)+"W0"
   public PC20    := chr(30)+"5"+chr(27)+"W0"
   public PC17    := chr(30)+"4"+chr(27)+"W0"
   public PC5     := chr(30)+"0"+chr(27)+"W1"
   public PC6     := chr(30)+"2"+chr(27)+"W1"
   public PC7     := chr(30)+"3"+chr(27)+"W1"
   public PC8     := chr(30)+"4"+chr(27)+"W1"
   public PRESET  := chr(27)+"@"
   public PLISTA  := chr(27)+"A"+chr(10)+chr(27)+"x1"
   public PBAT    := chr(27)+"A"+chr(7)
   public PLISTA2 := chr(15)+chr(27)+"S1"+chr(27)+"A"+chr(27)+"x1"
   public PEXP    := chr(14)
   public PEXPF   := chr(20)
   public PUND    := chr(27)+"-1"
   public PUNDF   := chr(27)+"-0"
   public PLIN8   := chr(27)+"0"
   public PENFON  := chr(27)+"E"
   public PENFOF  := chr(27)+"F"
   public PLIN6   := chr(27)+"2"
   public PCARTA  := chr(27)+"G"
   public PLIN7   := chr(27)+"1"
endif

return .t.


 * ------------------------------------------------------------------------ *
 FUNCTION SONUMERO(pVARIA) // Funcao feita para deixar somentes os numeros na
 // variavel.
 * ------------------------------------------------------------------------ *
 X=1
 mNOVONUMERO:=' '
 mMAX=LEN(pVARIA) // Acha o tamanha da variavel
 DO WHILE X<=mMAX
     mANALISE:=ASC(SUBSTR(pVARIA,X,1))
     IF mANALISE>47 .AND. mANALISE<58
         IF EMPTY(mNOVONUMERO)
             mNOVONUMERO:=SUBSTR(pVARIA,X,1)
         ELSE
             mNOVONUMERO:=mNOVONUMERO+SUBSTR(pVARIA,X,1)
         ENDIF
     ENDIF
     X++
 ENDDO
 mSIZE1:=LEN(ALLTRIM(mNOVONUMERO))
 mSIZE2:=mMAX-mSIZE1
 pVARIA:=ALLTRIM(mNOVONUMERO)+SPACE(mSIZE2)
 RETURN pVARIA




Clipper 5.3b / CDX Nativo / Blinker 7

Ninguem sabe tanto que não possa aprender, e nem sabe tão pouco que não possa ensinar !!!
GeraWin
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 28 Jan 2009 15:34
Localização: Bahia

Re: Gerar relatorio na tela e depois imprimir

Mensagem por GeraWin »

Ola!

A visualização de texto em clipper é bem limitada.
Uso uma função bem simples, salvando o arquivo, abrindo o notepad do windows e imprimindo em impressora padrão (lazer, jato de tinta, etc.):

Código: Selecionar todos

// exemplo de visualização e impressão com NOTEPAD do Windows

cVolta = chr(13) + chr(10)
cImprim = "/p" + chr(32)
cAplicat = "notepad.exe" + chr(32)
cArquivo = "consulta.txt"
cDiretor = "c:\programa\" + cArquivo

cTexto1 = "Este é o arquivo texto a ser visualizado, gravado e impresso." + cVolta + cVolta
cTexto1 = cTexto1 + "Se preferir imprimir direto na impressora padrão sem visualização," + cVolta
cTexto1 = cTexto1 + "substitua a linha: 'run (cAplicat + cDiretor)'   por: 'run (cAplicat + cImprim + cDiretor)' " + cVolta + cVolta

cTexto2 = "Estamos visualizando com o NotePad do Windows..."

//--- ABRE GRAVAVAO ---
set alternate to cDiretor
set alternate on
set console off

? cTexto1  // envia um texto para o arquivo
? cTexto2  // envia outro texto para o arquivo

//--- FECHA GRAVACAO ---
set console on
set alternate off
set alternate to

run (cAplicat + cDiretor)    // visualiza o arquivo

No inicio tambem me me senti limitado pelos 64kb, mas atualmente tenho a solução acima.

Até...
Tigre
geralb@bol.com.br
www.geralb.com.br
Clipper / Blinker / FiveWin / xHarbour / Delphi
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Gerar relatorio na tela e depois imprimir

Mensagem por gvc »

[GeraWin]
- Usamos o mais simples para atender a solicitação do JOSE GENOVEZI.
- Vc verá que alguns caracteres dão problemas na visualização do Notepad.
- Na hora de imprimir, todos os comandos de impressão (chr()) são perdidos.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Responder