Con gusto expongo la funcion que me imprime el ticket, pero con algunos argumentos ya que no uso los metodos de tprinter tal cual, sino que uso preprocesadores.
Una duda es respecto al puerto de impresion que uso, es: "EPSON TM-T20II Receipt", que es el nombre de la impresora de tickets, si es el correcto o deberia compartir la impresora para ponerle por ej.
"\\EPSONTMT20IIReceipt" o si debo usar directamente el nombre de puerto: sea COM1:, LPT1: o USB001:
la funcion: ImprDato(oPrn,nSup,1,aEmp[i],,.F.,.T.,4,nAncho,,.F.,.F.,.F.) = oPrn:CmSay(CML*nSup,CMC*nCol,aEmp[i],oFONT,NIL,NIL,NIL,nAlin)
// --- Impresion del ticket
function ImprTicket(cNumFol,nTSub,nTDes,nTTot,nTIva,nTEfe,cTipo)
local oPrn,nTot:=0,nIva:=0,nPrecio,nCant,cNum,nIzq,nSup,i,aEmp,nAncho,nR,nC,lTit,aSerie
if Empty(gaParaRef[ 5]) // gaParaRef[ 5] = puesto de impresi贸n: "EPSON TM-T20II Receipt"
aviso("Puerto de impresora para tickets no definido en par谩metros")
return .F.
endif
oPrn := PrintBegin(Ota("Impresi贸n"), lSelect, lPrevio, "EPSON TM-T20II Receipt", .T. )
if oPrn==NIL
return .F.
endif
nAncho:=Int(gaParaRef[30]/0.1494)
nSup:=1 ; lTit:=.T.
if !empty(gaParaRef[ 1]) // gaParaRef[ 1] = Campo multiline que contiene encabezado de ticket, datos de la empresa
aEmp:=ParteMemo(gaParaRef[ 1],nAncho)
for i:=1 to len(aEmp)
aEmp[i]:=strtran(aEmp[i],CHR(20),"")
***********************************************************************************
ImprDato(oPrn,nSup,1,aEmp[i],,.F.,.T.,4,nAncho,,.F.,.F.,.F.) // oPrn:CmSay(CML*nSup,CMC*nCol,aEmp[i],oFONT,NIL,NIL,NIL,nAlin)
***********************************************************************************
nSup++
next
endif
if File(gaParaRef[36]) //gaParaRef[36] = Nombre de archivo logotipo,BMP
nR:=gaParaRef[37]
nC:=gaParaRef[38]
oPrn:Cmtr2Pix(@nR,@nC)
oPrn:SayImage(nR,nC,gaParaRef[36],PosX(gaParaRef[39],oPrn),PosY(gaParaRef[40],oPrn))
endif
ImprDato(oPrn,nSup,1,"Ticket: "+cNumFol+", Fecha "+FormaFecha(gdFecTra)+", Hora: "+time(),,.F.,.T.,,,,.F.,.F.,.F.)
nSup+=2
ImprDato(oPrn,nSup,gaParaRef[31]-5,"Cant.",,.F.,.F.,,,,.F.,.F.,.F.) // oPrn:CmSay(CML*nSup,CMC*nCol,"Cant.",oFONT,NIL,NIL,NIL,nAlin)
ImprDato(oPrn,nSup,gaParaRef[32]-0,Ota("Descripci贸n"),,.F.,.F.,,,,.F.,.F.,.F.)
ImprDato(oPrn,nSup,gaParaRef[34]-8,"P.Unitario",,.F.,.F.,,,,.F.,.F.,.F.)
ImprDato(oPrn,nSup,gaParaRef[35]-5,"Total",,.F.,.F.,,,,.F.,.F.,.F.)
nSup++
dbSelectArea( "art" )
if lEsBarras
OrdSetFocus(8)
else
OrdSetFocus(3)
endif
if cTipo=="PUNTO.VENTA"
dbSelectArea( "tmp" )
dbGoTop()
while !Eof()
dbSelectArea( "art" )
if lEsBarras
DBSeek(tmp->cod_bar)
else
DBSeek(JuntaPza(tmp->(pre_inv+bas_inv+suf_inv)))
endif
dbSelectArea( "tmp" )
nCant :=tmp->can_fac
nPrecio:=tmp->pre_nor
ImprDato(oPrn,nSup,gaParaRef[31],nCant,"99999",.F.,.F.,,,,.F.,.F.,.F.)
ImprDato(oPrn,nSup,gaParaRef[32],left(Ota(DescArti(art->(JuntaPza(alltrim(pre_inv)+alltrim(bas_inv)+alltrim(suf_inv))),lEsBarras)),gaParaRef[33]),,.F.,.F.,,,,.F.,.F.,.F.)
ImprDato(oPrn,nSup,gaParaRef[34],nPrecio,"999,999.99",.F.,.F.,,,,.F.,.F.,.F.)
ImprDato(oPrn,nSup,gaParaRef[35],nCant*nPrecio,"999,999.99",.F.,.F.,,,,.F.,.F.,.F.)
nSup++
dbSkip(1)
end
endif
nSup++
if nTDes>0
ImprDato(oPrn,nSup,gaParaRef[35]-20,"IMPORTE",,.F.,.F.,,,,.F.,.F.,.F.)
ImprDato(oPrn,nSup,gaParaRef[35],nTSub,"999,999.99",.F.,.F.,,,,.F.,.F.,.F.)
nSup++
ImprDato(oPrn,nSup,gaParaRef[35]-20,"DESCUENTO",,.F.,.F.,,,,.F.,.F.,.F.)
ImprDato(oPrn,nSup,gaParaRef[35],nTDes,"999,999.99",.F.,.F.,,,,.F.,.F.,.F.)
nSup++
endif
ImprDato(oPrn,nSup,gaParaRef[35]-20,"SUBTOTAL",,.F.,.F.,,,,.F.,.F.,.F.)
ImprDato(oPrn,nSup,gaParaRef[35],nTTot,"999,999.99",.F.,.F.,,,,.F.,.F.,.F.)
nSup++
ImprDato(oPrn,nSup,gaParaRef[35]-20,"I.V.A. "+Str(_nTasaIva,2)+"%",,.F.,.F.,,,,.F.,.F.,.F.)
ImprDato(oPrn,nSup,gaParaRef[35],nTIva,"999,999.99",.F.,.F.,,,,.F.,.F.,.F.)
nSup++
ImprDato(oPrn,nSup,gaParaRef[35]-20,"TOTAL",,.F.,.F.,,,,.F.,.F.,.F.)
ImprDato(oPrn,nSup,gaParaRef[35],nTTot+nTIva,"999,999.99",.F.,.F.,,,,.F.,.F.,.F.)
nSup++
cNum:="("+upper(DescNum(nTTot+nTIva))+")"
ImprDato(oPrn,nSup,2,substr(cNum,1,nAncho-5),,.F.,.F.,,,,.F.,.F.,.F.)
nSup++
if !Empty(substr(cNum,nAncho-5+1))
ImprDato(oPrn,nSup,2,substr(cNum,nAncho-5+1),,.F.,.F.,,,,.F.,.F.,.F.)
nSup++
endif
nSup++
ImprDato(oPrn,nSup,gaParaRef[35]-20,"EFECTIVO",,.F.,.F.,,,,.F.,.F.,.F.)
ImprDato(oPrn,nSup,gaParaRef[35],nTEfe,"999,999.99",.F.,.F.,,,,.F.,.F.,.F.)
nSup++
ImprDato(oPrn,nSup,gaParaRef[35]-20,"CAMBIO",,.F.,.F.,,,,.F.,.F.,.F.)
ImprDato(oPrn,nSup,gaParaRef[35],nTEfe-(nTTot+nTIva),"999,999.99",.F.,.F.,,,,.F.,.F.,.F.)
nSup++
if !empty(gaParaRef[ 2]) // gaParaRef[ 2] = Campo multiline que contiene pie de ticket
aEmp:=ParteMemo(gaParaRef[ 2],nAncho)
for i:=1 to len(aEmp)
aEmp[i]:=strtran(aEmp[i],CHR(20),"")
ImprDato(oPrn,nSup,1,aEmp[i],,.F.,.T.,0,nAncho,,.F.,.F.,.F.)
nSup++
next
endif
TermImpr(,.F.,.F.) // PrintEnd()
return .T.
Gracias.