Como eu uso muito o
NODOSIMP, apresento a minha forma de saltar página e evitar o relatado acima.
Logicamente a minha rotina de impressão abrange outras formas de apresentação de relatórios, tais como usar
RTF para o
WORD, gravar em
SPOOL, apresentação na
tela. Mas vai abaixo a forma para
LPT1 ou
USB via
NODOSIMP.
Definir antes como será feita a impressão:
1 - Impressão na
LPT1 direta
2 - Impressão pelo NODOSIMP na impressora
USB
colocar esse valor na variável
modo
***************************************************
Definir também quantos caracteres por linha terá o relatório, se for usar o NODOSIMP
80 -> colocar
60
Ppara os outros valores ir aumentando o valor para 65, ....
Teste de acordo com a sua impressora para ocupar o máximo possível do formulário e economizar papel
Colocar esse valor na variável
total_linhas
*********************************************************************
Caso for usar o NODOSIMP definir também o arquivo a ser usado pelo
SET PRINTER TO
De-lhe o nome de
REL, por exemplo.
*************************************************************************
Código: Selecionar todos
setprc(0,0) // zera linha e coluna
use arqx // arquivo a ser listado
go top
do while ! eof()
if prow() < 5
cabecalho() // imprimir cabeçalho do relatório
endif
@ prow()+1, 1 say ....
@ prow(), 10 say ....
dbskip() // avança no arquivo
if prow() > total_linhas // definir esta variável pela quantidade de linhas que o NODOSIMP poderá
// imprimir em função da quantidade de caracteres = padrão 60 para 10 CPI
[b] avanc_pag(modo)[/b]
endif
enddo
.....
[b]fim_rela[/b](modo,l[b]imite)[/b] // limite = usar os valores aceitos pelo NODOSIMP que são 80, 96, 120, 140 e 160 de
// acordo com cada relatório a ser impresso
********************************
* Rotinas auxiliares
*******************************
PROCEDURE [b]avanc_pag(modo)[/b]
if modo == 1 // [b]LPT1[/b]
eject [b]
else //[/b] USB
@ prow()+1,0 say space(1) // descarrega a última linha ainda sem avanço
eject // faz o salto de formulário e para na próxima folha que poderá ser ou não
// impressa, dependendo do do while considerar EOF() ou não
endif
return .t.
PROCEDURE [b]fim_rela[/b](modo,tamanho)
local telin := savescreen()
if modo == 1 // LPT1 direto
avanc_pag() //
@ 0,0 say space(1)
else
@ prow(),pcol() say chr(13) //
endif
set printer on
set console on
set printer to
set device to screen
set cursor on
set printer off
if modo == 1 // tratamento apenas para o NODOSIMP
if tamanho == 80
run nodosimp &rel. 80 /pre/sel/ver
elseif tamanho == 96
run nodosimp &rel. 96 /pre/sel/ver
elseif tamanho == 120
run nodosimp &rel. 120 /pre/sel/ver/apa/mar9
elseif tamanho == 140
run nodosimp &rel. 120 /pre/sel/ver/apa/mar5
elseif tamanho == 160
run nodosimp &rel. 160 /pre/sel/ver/apa/mar15
endif
msg_tecla("Tecle algo para continuar no sistema.")
run del &rel.
endif
restscreen(,,,,telin)