Gerar relatorio na tela e depois imprimir
Moderador: Moderadores
-
JOSE GENOVEZI
- 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
Olá para todos, poderiam me ajudar a gerar relatorios na tela e depois imprimir. Grato a todos.
-
alxsts
- 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
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...
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)
Alexandre Santos (AlxSts)
Re: Gerar relatorio na tela e depois imprimir
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!
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

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Re: Gerar relatorio na tela e depois imprimir
Saudações a todos!
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).
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.Maligno escreveu:
Acho que o primeiro passo é direcionar a impressão para um arquivo...
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)
Alexandre Santos (AlxSts)
Re: Gerar relatorio na tela e depois imprimir
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!
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!
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Gerar relatorio na tela e depois imprimir
No link abaixo tem um exemplo de uma rotina de relatório na tela que é muito bom.
viewtopic.php?f=43&t=3954
viewtopic.php?f=43&t=3954
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
alxsts
- 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
Saudações a todos!
Esta rotina é a que me referi, do Stephen J. Straley.
Esta rotina é a que me referi, do Stephen J. Straley.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
Re: Gerar relatorio na tela e depois imprimir
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
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.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Re: Gerar relatorio na tela e depois imprimir
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.
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}
{POG - Programação Orientada a Gambiarra}
Re: Gerar relatorio na tela e depois imprimir
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
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
Re: Gerar relatorio na tela e depois imprimir
É 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.
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}
{POG - Programação Orientada a Gambiarra}
-
leandromiler
- 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
:)Pos
Abaixo segue a forma que uso, com o nodosimp.exe
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 !!!
Ninguem sabe tanto que não possa aprender, e nem sabe tão pouco que não possa ensinar !!!
Re: Gerar relatorio na tela e depois imprimir
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.):
No inicio tambem me me senti limitado pelos 64kb, mas atualmente tenho a solução acima.
Até...
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
Até...
Tigre
geralb@bol.com.br
www.geralb.com.br
Clipper / Blinker / FiveWin / xHarbour / Delphi
geralb@bol.com.br
www.geralb.com.br
Clipper / Blinker / FiveWin / xHarbour / Delphi
Re: Gerar relatorio na tela e depois imprimir
[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.
- 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}
{POG - Programação Orientada a Gambiarra}

