Gerar relatorio na tela e depois imprimir
Enviado: 18 Set 2009 22:11
Olá para todos, poderiam me ajudar a gerar relatorios na tela e depois imprimir. Grato a todos.
Em homenagem a Paulo Cesar Toledo
https://pctoledo.org/
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...
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
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