Saludos Amigo gdteran.
Muchas gracias por tu ayuda tambien.
al final, me decanté por usar la TdosPrn. El problema con el salto de linea era la clase que yo tenia, no me pregunten porr que, pero use la que gentilmente me paso el Master Joao y funciono a la primera.
Con las otras clases tambien me funciono, pero no pude evitar el salto de pagina al final de la impresion.
Aca dejo el codigo con la TdosPrn. Lo simplifique quitandole muchas cosas de uso propio para hacer el codigo mas legible. Si ven algo que no les cuadra puede deberse a esas partes propias que elimine.
Code: Select all | Expand
aDocsVenta // arreglo que viene como parametro y contienes los datos a imprimir
cDocToPrint := './Preview/'+alltrim(cGetNumeroDoc)+'.txt'
if nSalida>1
oPrn:= TDosPrn():New("CUPOM.TXT") // ver la impresion por pantalla
else
oPrn:= TDosPrn():New(cDocToPrint) // para ir directo a la impresora
endif
oPrn:StartPage() // da inicia la pagina.
************************************************************************************
* imprime el encabezado de la factura *
************************************************************************************
nRow := 0
@ nRow, 00 Say chr(18)+_cCompanyName of oPrn ; ++nRow
@ nRow, 00 Say "R.I.F :"+_cCompanyRif of oPrn ; ++nRow
@ nRow, 00 Say CHR(15)+_cDireccion1 of oPrn ; ++nRow
@ nRow, 00 Say _cDireccion2 of oPrn ; ++nRow
@ nRow, 00 Say "Telf."+_cTelefonos of oPrn ; ++nRow
@ nRow, 00 Say alltrim(_cCiudad)+" - "+alltrim(_cEstado) of oPrn ; ++nRow
if !Empty(_cMail)
@ nRow, 00 Say "eMail :"+_cMail of oPrn ; ++nRow
endif
if !Empty(_cWebSite)
@ nRow, 00 Say "WebSite :"+_cWebSite of oPrn ; ++nRow
endif
@ nRow, 00 Say chr(18)+cDoc+alltrim(subs(cGetNumeroDoc,4,10)) of oPrn ; ++nRow
@ nRow, 00 Say "Fecha :"+dtoc(date()) of oPrn ; ++nRow//; //3
@ nRow, 00 Say "Hora :" + subs(TIME(),1,5) of oPrn ; ++nRow//; //4
@ nRow, 00 Say "Venta en :" + alltrim(aDocsVenta[1,34]) of oPrn ; ++nRow//; //4
iif(nCondicion=1,cCondicion:='Contado',cCondicion:='Credito')
@ nRow, 00 Say "Condicion:" + cCondicion of oPrn ; ++nRow//; //4
@ nRow, 00 Say +"|"+REPLICATE("-",27)+"|" of oPrn ; ++nRow
@ nRow, 00 Say CHR(18)+"Cliente:"+chr(15) of oPrn ; ++nRow//; //4
@ nRow, 00 Say cNombreCliente of oPrn ; ++nRow//; //4
@ nRow, 00 Say "CI/RIF :" +cGetRif of oPrn ; ++nRow//; //4
if !Empty(cDireclien1)
@ nRow, 00 Say cDireclien1 of oPrn ; ++nRow//; //4
endif
if !Empty(cDireclien1)
@ nRow, 00 Say cDireclien2 of oPrn ; ++nRow//; //4
endif
if !Empty(cTelfCliente)
@ nRow, 00 Say "telef. :"+cTelfCliente of oPrn ; ++nRow//; //4
endif
@ nRow, 00 Say "|"+REPLICATE("-",47)+"|" of oPrn ; ++nRow
************************************************************************************
* imprime el cuerpo de la factura *
************************************************************************************
nCiclo:=1
Do While nCiclo<=len(aDocsVenta)
cDescripcion := aDocsVenta[nCiclo,1]
cCantidad := aDocsVenta[nCiclo,2]
cPrecioU := aDocsVenta[nCiclo,3]
cSubTotal := aDocsVenta[nCiclo,2]*aDocsVenta[nCiclo,3]
@ nRow, 00 Say cDescripcion of oPrn ; ++nRow // descripcion del articulo
@ nRow, 00 Say "Und " of oPrn
@ nRow, 04 Say cCantidad+ " x "+cPrecioU of oPrn // cantidad vendida
@ nRow, 30 Say cSubTotal of oPrn ; ++nRow // SubTotal
nRow ++
Enddo
nCicloHeader:= 1
cLeyenda1 := (cGetFromIni("LeyendasFact" , "Leyenda_Fact1" , "..." , '\\'+_cHost+'\Neuro32\Ini\exe.ini' ))
cLeyenda2 := (cGetFromIni("LeyendasFact" , "Leyenda_Fact2" , "..." , '\\'+_cHost+'\Neuro32\Ini\exe.ini' ))
cLeyenda3 := (cGetFromIni("LeyendasFact" , "Leyenda_Fact3" , "..." , '\\'+_cHost+'\Neuro32\Ini\exe.ini' ))
cLeyenda4 := (cGetFromIni("LeyendasFact" , "Leyenda_Fact4" , "..." , '\\'+_cHost+'\Neuro32\Ini\exe.ini' )) // leyendas genericas que se colocal al final de todas las facturas
cLeyenda5 := (cGetFromIni("LeyendasFact" , "Leyenda_Fact5" , "..." , '\\'+_cHost+'\Neuro32\Ini\exe.ini' )) // por ejemplo "esta facura vence a los 30 dias"
cLeyenda6 := (cGetFromIni("LeyendasFact" , "Leyenda_Fact6" , "..." , '\\'+_cHost+'\Neuro32\Ini\exe.ini' )) // "revise la mercancia antes de salir de la tienda. No se hacen devoluciones
************************************************************************************
* se cierra la impresion *
************************************************************************************
@ nRow, 00 Say "|"+REPLICATE("-",47)+"|" of oPrn ; ++nRow
@ nRow, 02 Say "Sub-Total" of oPrn
@ nRow, 30 Say + cSubTotal of oPrn ; ++nRow
@ nRow, 02 Say "Excento" of oPrn
@ nRow, 30 Say + cExcento of oPrn ; ++nRow
@ nRow, 02 Say "Descuentos" of oPrn
@ nRow, 30 Say + cDescuent of oPrn ; ++nRow
@ nRow, 02 Say "Base Imponible" of oPrn
@ nRow, 30 Say + cBase of oPrn ; ++nRow
@ nRow, 02 Say "I.V.A. "+cVarAux of oPrn
@ nRow, 30 Say cIva of oPrn ; ++nRow
@ nRow, 02 Say "Total "+cVarAux2 of oPrn
@ nRow, 30 Say cTotal of oPrn ; ++nRow
@ nRow, 00 Say "|"+REPLICATE("-",47)+"|" of oPrn ; ++nRow
if _lPrintLeyend
@ nRow, 00 Say cLeyenda1 of oPrn ; ++nRow
@ nRow, 00 Say cLeyenda2 of oPrn ; ++nRow
@ nRow, 00 Say cLeyenda3 of oPrn ; ++nRow
@ nRow, 00 Say cLeyenda4 of oPrn ; ++nRow
@ nRow, 00 Say cLeyenda5 of oPrn ; ++nRow
@ nRow, 00 Say cLeyenda6 of oPrn ; ++nRow
endif
nRow:=nRow+14
@ nRow, 00 Say "." of oPrn // salto del papel hasta la linea de corte de la impresora
@ nRow, 00 Say +CHR(18) of oPrn //; ++nRow // Modo Draft
***********************************************************************************
oPrn:EndPage()
oPrn:End()
if nSalida>1
ImpSpool( "CUPOM.TXT",, .T. )
else
WinExec(("LTFViewr5u.exe "+cDocToPrint)) // si se pide salida por pantalla, se hace el preview con esta utilidad de terceros.
endif // es gratuita y se descarga de internet.
RETURN NIL