Já que vc usa Pagescript, abaixo segue código fonte para imprimir duplicatas, com logotipo e saindo 2 em cada folha.
Código: Selecionar todos
FUNCTION Duplicata()
LOCAL GetList := {}
LOCAL Cor := SetColor()
LOCAL Tela := SaveScreen()
LOCAL nOpcao := 1
LOCAL Data_Emi := Date()
LOCAL Val_Fat := 0
LOCAL Num_Fat := Space( 12 )
LOCAL Num_Dup := Space( 12 )
LOCAL nQtd := 0
LOCAL Data_Pv := CtoD(' / / ')
LOCAL Copias := 3
LOCAL nI := 0
LOCAL nJ := 0
LOCAL nDia := 0
LOCAL nMes := 0
LOCAL nAno := 0
LOCAL lFlag := .F.
LOCAL nLinha1 := 0
LOCAL nLinha2 := 0
LOCAL dDatas1, dDatas2
LOCAL oBtn1, oBtn2
__XCLI := 0
__XREC := 0
Dialog(02,10,28,70,'EMITIR: DUPLICATA',BLUE,WHITE)
Status(11.5,11,23,69)
@ 06, 12 Say 'EMITIDO EM' Color('B/W')
@ 06, 30 Say 'VALOR DA FATURA R$' Color('B/W')
@ 06, 55 Say 'Nø DA FATURA' Color('B/W')
@ 09, 12 Say 'QUANTIDADE DE PARCELAS' Color('B/W')
@ 09, 55 Say '1§ VENCIMENTO' Color('B/W')
While .T.
@ 04, 11 Say 'SACADO' Getwin __XCLI Pict '9999' Valid VCliente(04,23,40)
@ 07, 12 Getwin Data_Emi Valid .Not. Empty( Data_Emi )
@ 07, 33 Getwin Val_Fat Pict '@E 999,999.99' Valid .Not. Empty( Val_Fat )
@ 07, 55 Getwin Num_Fat Pict '@K!' Valid .Not. Empty( Num_Fat )
@ 10, 20 Getwin nQtd Pict '99' Valid .Not. Empty( nQtd )
@ 10, 56 Getwin Data_Pv Valid Data_Pv >= Data_Emi
Read
If LastKey() == 27
Exit
Endif
nDia := Day( Data_Pv )
nMes := Month( Data_Pv )
nAno := Year( Data_Pv )
Sele DADOSDUP
Zap
Go Top
For nI := 1 To nQtd
If nMes == 2 .And. nDia > 28
dDatas1 := '28/'+StrZero(nMes,2)+'/'+StrZero(nAno,4)
Else
dDatas1 := StrZero(nDia,2)+'/'+StrZero(nMes,2)+'/'+StrZero(nAno,4)
Endif
dDatas2 := CtoD( dDatas1 )
Append Blank
Replace NUM_PARC With nI ,;
DATA_VCT With dDatas2 ,;
VALOR_DUP With (Val_Fat/nQtd) ,;
NUM_DUP With Alltrim(Num_Fat)+'/'+Alltrim(Str(nI))
Commit
nMes ++
If nMes > 12
nMes := 1
nAno ++
Endif
Next
BrowseDadosDup()
@ 24, 11 Say 'ESCOLHA A IMPRESSORA '+Chr(16) Color('B/W')
EscolhePRN(24,34)
@ 26, 11 Say 'RECEITA' Getwin __XREC Pict '999' Valid VReceita(26,23,30)
@ 26, 55 Say 'COPIAS' Getwin Copias Pict '99' Valid .Not. Empty( Copias )
Read
If LastKey() == 27
Exit
Endif
Keyboard Chr(04)
nOpcao := Winquest('ESCOLHA :',ICON_QUES,{'Imprimir','Voltar'})
Do Case
Case nOpcao == 1
BEGINDOC WITH nPrinter TITLE "Duplicata" ORIENTATION APS_PORTRAIT
PSSetUnit(APS_TEXT)
PSSetRowCol(72, 82)
PSSetFont(APS_ARIAL, APS_PLAIN, 10)
Sele DADOSDUP
Go Top
nLinha1 := 1
nLinha2 := 2
While .Not. Eof()
For nJ := 1 To Copias
PSFrame(nLinha1,01,nLinha1+11,42,1,APS_BLACK,APS_NONE)
PSFrame(nLinha1,42,nLinha1+11,81,1,APS_BLACK,APS_NONE)
*-----
PSFrame(nLinha1+11,01,nLinha1+13,30,1,APS_BLACK,APS_NONE)
PSFrame(nLinha1+11,30,nLinha1+13,65,1,APS_BLACK,APS_NONE)
PSFrame(nLinha1+11,65,nLinha1+13,81,1,APS_BLACK,APS_NONE)
*-----
PSFrame(nLinha1+13,01,nLinha1+15,15,1,APS_BLACK,APS_NONE)
PSFrame(nLinha1+13,15,nLinha1+15,30,1,APS_BLACK,APS_NONE)
PSFrame(nLinha1+13,30,nLinha1+15,45,1,APS_BLACK,APS_NONE)
PSFrame(nLinha1+13,45,nLinha1+15,65,1,APS_BLACK,APS_NONE)
PSFrame(nLinha1+13,65,nLinha1+17,81,1,APS_BLACK,APS_NONE)
*-----
PSFrame(nLinha1+15,01,nLinha1+17,15,1,APS_BLACK,APS_NONE)
PSFrame(nLinha1+15,15,nLinha1+17,30,1,APS_BLACK,APS_NONE)
PSFrame(nLinha1+15,30,nLinha1+17,45,1,APS_BLACK,APS_NONE)
PSFrame(nLinha1+15,45,nLinha1+17,65,1,APS_BLACK,APS_NONE)
*-----
PSFrame(nLinha1+17,01,nLinha1+23,81,1,APS_BLACK,APS_NONE)
*-----
PSFrame(nLinha1+23,01,nLinha1+26,11,1,APS_BLACK,APS_NONE)
PSFrame(nLinha1+23,11,nLinha1+26,81,1,APS_BLACK,APS_NONE)
*-----
PSFrame(nLinha1+26,01,nLinha1+31,81,1,APS_BLACK,APS_NONE)
*-----
PSFrame(nLinha1+31,01,nLinha1+34,81,1,APS_BLACK,APS_NONE)
@ nLinha2, 05 TO nLinha2+5, 35 BITMAP "C:\RETAG\EMPRESA.BMP" COLOR RGB(255,255,255)
@ nLinha2+6, 02 TEXTOUT 'Endreço..., N. 999 - xxxxxx' SIZE 8
@ nLinha2+7, 02 TEXTOUT 'CEP: 80.000-000 - Sao Paulo - SP' SIZE 8
@ nLinha2+8, 02 TEXTOUT 'FONE/FAX: (11) 222-2222' STYLE APS_BOLD SIZE 9
@ nLinha2, 45 TEXTOUT 'DUPLICATA DE VENDA MERCANTIL' STYLE APS_BOLD
@ nLinha2+2, 45 TEXTOUT 'E-MAIL: xxxxxxxxx@xxxxxxxxx.com.br' SIZE 9
@ nLinha2+3, 45 TEXTOUT 'SITE : www.xxxxxx.com.br' SIZE 9
@ nLinha2+4, 45 TEXTOUT 'Inscrição Estadual: '
@ nLinha2+5, 45 TEXTOUT 'Inscrição CNPJ : '
@ nLinha2+7, 45 TEXTOUT 'DATA DE EMISSAO :' SIZE 12
@ nLinha2+7, 68 TEXTOUT DtoC( Data_Emi ) STYLE APS_BOLD SIZE 14 COLOR APS_BLUE
@ nLinha2+11, 12 TEXTOUT 'FATURA'
@ nLinha2+11, 42 TEXTOUT 'DUPLICATA'
@ nLinha2+11, 68 TEXTOUT 'VENCIMENTO'
@ nLinha2+13, 04 TEXTOUT 'VALOR R$'
@ nLinha2+13, 19 TEXTOUT 'NUMERO'
@ nLinha2+13, 34 TEXTOUT 'VALOR R$'
@ nLinha2+13, 51 TEXTOUT 'N. ORDEM'
@ nLinha2+14, 68 TEXTOUT DtoC( Data_Vct ) STYLE APS_BOLD SIZE 14 COLOR APS_BLUE
@ nLinha2+15, 06 TEXTOUT Trans( Val_Fat,'@E 999,999.99' ) COLOR APS_BLUE
@ nLinha2+15, 18 TEXTOUT Num_Fat COLOR APS_BLUE
@ nLinha2+15, 36 TEXTOUT Trans( Valor_Dup,'@E 999,999.99' ) COLOR APS_BLUE
@ nLinha2+15, 50 TEXTOUT DADOSDUP->Num_Dup COLOR APS_BLUE
Sele CLIENTE
Set Order To 1
Go Top
Seek __XCLI
@ nLinha2+17, 02 TEXTOUT 'NOME SACADO'
@ nLinha2+17, 21 TEXTOUT Alltrim( CLIENTE->Raz_Social ) STYLE APS_BOLD COLOR APS_BLUE
@ nLinha2+18, 02 TEXTOUT 'ENDERE€O'
@ nLinha2+18, 21 TEXTOUT Alltrim( CLIENTE->N_Lograd )+', '+Alltrim( CLIENTE->N_N_Logr )+', '+Alltrim( CLIENTE->N_Bairro )+' '+Alltrim( CLIENTE->N_Compl )
@ nLinha2+19, 02 TEXTOUT 'MUNICIPIO-UF'
@ nLinha2+19, 21 TEXTOUT Alltrim( CLIENTE->N_Cidade )+'-'+Alltrim( CLIENTE->N_Uf )+' CEP: '+Trans( CLIENTE->N_Cep,'@R 99.999-999' )
@ nLinha2+20, 02 TEXTOUT 'PRA€A DE PAGAMENTO'
@ nLinha2+20, 21 TEXTOUT 'A MESMA'
@ nLinha2+21, 02 TEXTOUT 'CNPJ ou CPF'
If Empty( CLIENTE->Cnpj )
@ nLinha2+21, 21 TEXTOUT Trans( CLIENTE->Cpf,'@R 999.999.999-99' )
Else
@ nLinha2+21, 21 TEXTOUT Trans( CLIENTE->Cnpj,'@R 99.999.999/9999-99' )
Endif
@ nLinha2+21, 45 TEXTOUT 'I.E.'
@ nLinha2+21, 50 TEXTOUT CLIENTE->Ie+'/'+CLIENTE->Uf_Ie
Sele DADOSDUP
@ nLinha2+23, 02 TEXTOUT 'VALOR POR'
@ nLinha2+24, 02 TEXTOUT ' EXTENSO'
@ nLinha2+23, 12 TEXTOUT Extenso( Valor_Dup ) SIZE 09
@ nLinha2+24, 12 TEXTOUT Repli('*',120)
@ nLinha2+26, 03 TEXTOUT 'Reconheço(emos) a exatidão desta DUPLICATA DE VENDA MERCANTIL com pagamento parcelado, na importância acima,' SIZE 09
@ nLinha2+27, 03 TEXTOUT 'que pagarei(emos) à , ou à sua ordem, na praça e vencimento indicados.' SIZE 09
@ nLinha2+28, 03 TEXTOUT 'BANCO: BANCO DO BRASIL AGÊNCIA: C/C N.: ' STYLE APS_BOLD SIZE 10
@ nLinha2+29, 03 TEXTOUT 'Pagável em qualquer agência até o vencimento' SIZE 08
@ nLinha2+31, 05 TEXTOUT 'Em, _________/__________/__________'
@ nLinha2+31, 45 TEXTOUT '___________________________________'
@ nLinha2+32, 05 TEXTOUT ' Data do Aceite'
@ nLinha2+32, 45 TEXTOUT ' Assinatura do Sacado'
If nLinha2 == 2
@ nLinha2+34, 00 TEXTOUT Repli("- ",95)
nLinha1 := 37
nLinha2 := 38
ElseIf nLinha2 <> 2
NEWPAGE
nLinha1 := 1
nLinha2 := 2
Endif
If nJ == Copias
Exit
Endif
Next
Skip
End
ENDDOC
*-------------------
* GRAVAR INFORMAیES
*
Sele CLIENTE
Set Order To 1
Go Top
Seek __XCLI
tmpNOMCLI := CLIENTE->Raz_Social
Sele DADOSDUP
Go Top
tmpPRIVCTO := DADOSDUP->Data_Vct
tmpVLRDUP := DADOSDUP->Valor_Dup
tmpNUMDUP := DADOSDUP->Num_Dup
Go Bottom
tmpULTVCTO := DADOSDUP->Data_Vct
tmpVIAS := DADOSDUP->Num_Parc
Sele DUPLICATA
If AddReg()
Replace COD_CLI With __XCLI ,;
NOME_CLI With tmpNOMCLI ,;
DATA_EMI With Data_Emi ,;
PRIM_VCTO With tmpPRIVCTO ,;
ULT_VCTO With tmpULTVCTO ,;
FAT_VALOR With Val_Fat ,;
FAT_NUMERO With Num_Fat ,;
DUP_VALOR With tmpVLRDUP ,;
DUP_NUMERO With tmpNUMDUP ,;
QTD_VIAS With tmpVIAS
Commit
Unlock
Endif
*----
Sele DADOSDUP
Go Top
While .Not. Eof()
Sele CREC
If AddReg()
Replace CLIENTE With __XCLI ,;
CODREC With __XREC ,;
DEMISSAO With Data_Emi ,;
DVENCIM With DADOSDUP->Data_Vct ,;
OBS With "PARCELA "+Alltrim(Str(DADOSDUP->Num_Parc))+" DE "+Alltrim(Str(tmpVIAS)) ,;
VTOTAL With DADOSDUP->Valor_Dup ,;
SITUACAO With .F. ,;
ORIGEM With .F. ,;
COD_DOC With 3 ,;
NUM_DOC With DADOSDUP->Num_Dup
Commit
Unlock
Endif
Sele DADOSDUP
Skip
End
Exit
EndCase
Sele DUPLICATA
LOOP
End
Sele DUPLICATA
SetColor( Cor )
RestScreen(,,,,Tela)
Return( Nil )
Algumas funções não são do Clipper, como as que montam janelas, ou o GET, que nos meus sistemas uso modificado com o nome de GETWIN.
A impressão de duplicatas que uso, o usuário escolhe o Cliente e as condições, sendo que as informações são gravadas em um DBF para posterior consulta, mas o que vc precisa, que é o código fonte, creio que lhe servirá.