Amiguinho
Use a técnica de arquivos
Te
XTo.
Salve cada pagina com um nome irrepetivel tipo RELA001, RELA002, ...
Exemplo:
Antes do DO...WHILE de execução do seu relat'roio coloque:
nPagina := 1
cPagina := "RELA"+str(nPagina,3)+".PRN"
crlf := chr(13)+chr(10)
errHandle:=
fCreate( cPagina )
do while .not. eof()
...
// Troque os @ ... SAY ... cDadosASeremImpressos por
fWrite()
fWrite( errHandle, cDadosASeremImpressos + crlf )
...
skip
if nLinha > 60 .or. eof() // Tamanho maximo de sua pagina
// Toque o EJECT por
fClose()
fClose( errHandle )
if .not. eof()
nPagina := nPagina + 1
cPagina := "RELA"+str(nPagina,3)+".PRN"
errHandle:=
fCreate( cPagina )
endif
endif
enddo
fClose( errHandle )
...
Coloque os arquivos gerados num menu para ser escolhido para visualização ou previsão.
nContador := adir( "*.PRN" )
txtNomes := {}
if nContador != 0
declare txtNomes[ nContador ]
adir( "*.PRN" )
asort(txtNomes)
endif
nPagina := aChoice(txtNomes)
memoedit( "RELA"+str(nPagina,3)+".PRN" )
A partir daqui voce deverá programar o comando CTRL-P em uma função chamada pelo
memoedit() para imprimir o arquivo selecionado.
Veja um codigo que voce podera adaptar para o seu uso:
Código: Selecionar todos
func iPrintFile( nPagina )
EditFile := memoread( "RELA"+str(nPagina,3)+".PRN" )
if .not. isprinter()
beep()
mensagem('Impressora esta desconectada ou desligada!',3)
return
endif
set print on
set device to print
@ 0,0 SAY chr(15)
m->tam_memo := MLCOUNT( EditFile, 132 )
m->li_nha := 1
for i = 1 to m->tam_memo
set device to screen
mensagem('Imprimindo linha '+alltrim(str(i,3))+' de '+alltrim(str(m->tam_memo,3)))
set device to print
@ m->li_nha,00 say MailMerge( memoline( EditFile, 132 ,i) )
m->li_nha := m->li_nha + 1
if m->li_nha > m->rel_linhas
eject
m->li_nha := 1
setprc(0,0)
endif
next
@ prow()+1,0 SAY chr(18)
SETPRC(0,0)
set device to screen
set print off
return (NIL)
FUNCTION MENSAGEM( TEXTO, PAUSA )
//
// -> Funcao que imprime mensagens na tela
//
// TEXTO => Recebe o texto a ser impresso na linha de mensagem.
// TEMPO => Recebe o tempo de espera para a mensagem.
//
STATIC ULT_MENSAGEM := ""
LOCAL ULT_CURSOR := SETCURSOR(), DE_VI_CE
IF TEXTO = NIL; TEXTO := ""; ENDIF
CURSOR( DESLIGA )
IF SET( 20 ) = "PRINTER"
DE_VI_CE = "PRINTER"
SET( 20 , "SCREEN" )
ENDIF
@ 0, 75 SAY STR(MEMORY(0),5) COLOR CONTECOR[ 13 ]
IF m->defPDV = 'X'
IF m->defTEFON = .T.
@ MAXROW()-1, 00 SAY 'TEF-ON ' COLOR CONTECOR[ 2 ]
ELSE
@ MAXROW()-1, 00 SAY 'TEF-OFF' COLOR CONTECOR[ 2 ]
ENDIF
ENDIF
IF m->defCUPOM = 'X'
@ MAXROW(), 11 SAY STR(M->NO_CUPOM+1,1)+'³'+PADC( TEXTO, 56 ) COLOR CONTECOR[ 2 ]
ELSE
@ MAXROW(), 11 SAY PADC( TEXTO, 58 ) COLOR CONTECOR[ 2 ]
ENDIF
IF PAUSA = NIL
ULT_MENSAGEM := TEXTO
ELSE
TEC_MOU( PAUSA )
@ MAXROW(), 11 SAY PADC( ULT_MENSAGEM, 58 ) COLOR CONTECOR[ 2 ]
ENDIF
IF DE_VI_CE = "PRINTER"
Set( 20, "PRINTER" )
ENDIF
SETCURSOR( ULT_CURSOR )
RETURN NIL
De uma analisada no arquivo PE.PRG que faz parte dos sources do Clipper para saber como utilizar melhor a
memoedit().
Espero não ter complicado...
@braços :?)