Tengo un problema con la ticketera térmica de un cliente aquí la configuración del papel:
Sin embargo, cuando se envian tickets largos, la ticketera corta el ticket como si el papel tuviera una longitud de A4:
A continuación el código que realiza la impresión del ticket (que es un cierre de caja que se realiza al finalizar el turno):
Code: Select all
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC CajaPrintCierre( cQueStamp )
LOCAL cDocCier := 'CIERRE '+cQueStamp
LOCAL cCajaNum := ''
LOCAL cFecInic := ''
LOCAL cHraInic := ''
LOCAL cFecFina := ''
LOCAL cHraFina := ''
LOCAL cUserNom := ''
LOCAL nTtlEfec := 0
LOCAL nTtlVisa := 0
LOCAL nTtlMast := 0
LOCAL nTtlAmer := 0
LOCAL nTtlCred := 0
LOCAL nRow := 38
LOCAL FRM_LEN := 0
LOCAL FRM_LIN := 4
LOCAL aVisas := {}
LOCAL aMasts := {}
LOCAL aAmers := {}
LOCAL qRead , oRead , nRead , rRead
qRead := ;
"SELECT * "+;
"FROM caja_cierres "+;
"INNER JOIN usuarios ON caja_user_id = usuario_id "+;
"WHERE caja_stamp_id = '"+cQueStamp+"' "
oRead := oServer:Query( qRead )
IF ! oRead:NetErr()
IF oRead:LastRec() > 0
rRead := oRead:GetRow(1)
cCajaNum := LEFT( rRead:fieldGet("caja_stamp_id") , 3 )
cFecInic := SELLO2DATE( rRead:fieldGet("caja_stamp_ini") )
cHraInic := SELLO2TIME( rRead:fieldGet("caja_stamp_ini") )
cFecFina := SELLO2DATE( rRead:fieldGet("caja_stamp_fin") )
cHraFina := SELLO2TIME( rRead:fieldGet("caja_stamp_fin") )
cUserNom := rRead:fieldGet("usuario_nombre")
nTtlEfec := rRead:fieldGet("caja_total_efec")
nTtlVisa := rRead:fieldGet("caja_total_visa")
nTtlMast := rRead:fieldGet("caja_total_mast")
nTtlAmer := rRead:fieldGet("caja_total_amer")
nTtlCred := rRead:fieldGet("caja_total_cred")
ENDIF
ELSE
SQLErrorHost( oRead:Error() )
ENDIF
oRead:Destroy()
// SE EXTRAE LAS VENTAS VISA
qRead := ;
"SELECT vc_doc_nume,vc_pgo_visa "+;
"FROM ventas_cab "+;
"WHERE vc_caja = '"+cQueStamp+"' AND vc_pgo_visa > 0 AND vc_estado = 1 "
oRead := oServer:Query( qRead )
IF ! oRead:NetErr()
FOR nPgo = 1 TO oRead:LastRec()
rRead := oRead:GetRow(nPgo)
AADD( aVisas , { rRead:fieldGet("vc_doc_nume") , rRead:fieldGet("vc_pgo_visa") } )
NEXT
ELSE
SQLErrorHost( oRead:Error() )
ENDIF
oRead:Destroy()
// SE EXTRAE LAS VENTAS AMERICAN
qRead := ;
"SELECT vc_doc_nume,vc_pgo_amer "+;
"FROM ventas_cab "+;
"WHERE vc_caja = '"+cQueStamp+"' AND vc_pgo_amer > 0 AND vc_estado = 1 "
oRead := oServer:Query( qRead )
IF ! oRead:NetErr()
FOR nPgo = 1 TO oRead:LastRec()
rRead := oRead:GetRow(nPgo)
AADD( aAmers , { rRead:fieldGet("vc_doc_nume") , rRead:fieldGet("vc_pgo_amer") } )
NEXT
ELSE
SQLErrorHost( oRead:Error() )
ENDIF
oRead:Destroy()
// SE EXTRAE LAS VENTAS MASTER
qRead := ;
"SELECT vc_doc_nume,vc_pgo_mast "+;
"FROM ventas_cab "+;
"WHERE vc_caja = '"+cQueStamp+"' AND vc_pgo_mast > 0 AND vc_estado = 1 "
oRead := oServer:Query( qRead )
IF ! oRead:NetErr()
FOR nPgo = 1 TO oRead:LastRec()
rRead := oRead:GetRow(nPgo)
AADD( aMasts , { rRead:fieldGet("vc_doc_nume") , rRead:fieldGet("vc_pgo_mast") } )
NEXT
ELSE
SQLErrorHost( oRead:Error() )
ENDIF
oRead:Destroy()
// AQUI CALCULO LA ALTURA DEL TICKET
FRM_LEN := 80 + ((LEN(aVisas)+5)*FRM_LIN) + ((LEN(aAmers)+5)*FRM_LIN) + ((LEN(aMasts)+5)*FRM_LIN)
IF FILE(SYS_INFOF+"caja_preview.txt")
SELECT PRINTER DEFAULT ;
PAPERSIZE PRINTER_PAPER_USER ;
PAPERLENGTH FRM_LEN ;
PAPERWIDTH 75 ;
QUALITY PRINTER_RES_HIGH ;
PREVIEW
ELSE
SELECT PRINTER DEFAULT ;
PAPERSIZE PRINTER_PAPER_USER ;
PAPERLENGTH FRM_LEN ;
PAPERWIDTH 75 ;
QUALITY PRINTER_RES_HIGH
ENDIF
START PRINTDOC NAME cDocCier
START PRINTPAGE
@ 10 , 40 PRINT SIS_EMPRE FONT 'Arial' SIZE 7 BOLD CENTER
@ 14 , 40 PRINT 'CIERRE DE CAJA' FONT 'Arial' SIZE 7 BOLD CENTER
@ 22 , 10 PRINT 'FECHA/HORA INICIO : ' FONT 'Arial' SIZE 7
@ 22 , 40 PRINT cFecInic FONT 'Arial' SIZE 7
@ 22 , 60 PRINT cHraInic FONT 'Arial' SIZE 7
@ 26 , 10 PRINT 'FECHA/HORA FINAL : ' FONT 'Arial' SIZE 7
@ 26 , 40 PRINT cFecFina FONT 'Arial' SIZE 7
@ 26 , 60 PRINT cHraFina FONT 'Arial' SIZE 7
@ 30 , 10 PRINT 'CAJERO : ' FONT 'Arial' SIZE 7
@ 30 , 40 PRINT cUserNom FONT 'Arial' SIZE 7
@ 34 , 10 PRINT 'CAJA : ' FONT 'Arial' SIZE 7
@ 34 , 40 PRINT cCajaNum FONT 'Arial' SIZE 7
nRow := 38
nRow := nRow + FRM_LIN
@ nRow , 5 PRINT REPL('_',50) FONT 'Arial' SIZE 7
nRow := nRow + FRM_LIN
@ nRow , 40 PRINT 'COBROS VISA' FONT 'Arial' SIZE 7 CENTER
@ nRow , 5 PRINT REPL('_',50) FONT 'Arial' SIZE 7
FOR nVisa = 1 TO LEN(aVisas)
nRow := nRow + FRM_LIN
@ nRow , 5 PRINT aVisas[nVisa,1] FONT 'Arial' SIZE 7
@ nRow , 70 PRINT aVisas[nVisa,2] FONT 'Arial' SIZE 7 RIGHT
NEXT
@ nRow , 5 PRINT REPL('_',50) FONT 'Arial' SIZE 7
nRow := nRow + FRM_LIN
@ nRow , 5 PRINT 'TOTAL VISA:' FONT 'Arial' SIZE 7
@ nRow , 70 PRINT nTtlVisa FONT 'Arial' SIZE 7 RIGHT
nRow := nRow + FRM_LIN
@ nRow , 5 PRINT REPL('_',50) FONT 'Arial' SIZE 7
nRow := nRow + FRM_LIN
@ nRow , 40 PRINT 'COBROS YAPE' FONT 'Arial' SIZE 7 CENTER
@ nRow , 5 PRINT REPL('_',50) FONT 'Arial' SIZE 7
FOR nMast = 1 TO LEN(aMasts)
nRow := nRow + FRM_LIN
@ nRow , 5 PRINT aMasts[nMast,1] FONT 'Arial' SIZE 7
@ nRow , 70 PRINT aMasts[nMast,2] FONT 'Arial' SIZE 7 RIGHT
NEXT
@ nRow , 5 PRINT REPL('_',50) FONT 'Arial' SIZE 7
nRow := nRow + FRM_LIN
@ nRow , 5 PRINT 'TOTAL YAPE:' FONT 'Arial' SIZE 7
@ nRow , 70 PRINT nTtlMast FONT 'Arial' SIZE 7 RIGHT
nRow := nRow + FRM_LIN
@ nRow , 5 PRINT REPL('_',50) FONT 'Arial' SIZE 7
nRow := nRow + FRM_LIN
@ nRow , 40 PRINT 'COBROS ESTILOS' FONT 'Arial' SIZE 7 CENTER
@ nRow , 5 PRINT REPL('_',50) FONT 'Arial' SIZE 7
FOR nAmer = 1 TO LEN(aAmers)
nRow := nRow + FRM_LIN
@ nRow , 5 PRINT aAmers[nAmer,1] FONT 'Arial' SIZE 7
@ nRow , 70 PRINT aAmers[nAmer,2] FONT 'Arial' SIZE 7 RIGHT
NEXT
@ nRow , 5 PRINT REPL('_',50) FONT 'Arial' SIZE 7
nRow := nRow + FRM_LIN
@ nRow , 5 PRINT 'TOTAL ESTILOS:' FONT 'Arial' SIZE 7
@ nRow , 70 PRINT nTtlAmer FONT 'Arial' SIZE 7 RIGHT
END PRINTPAGE
END PRINTDOC
// aquí puse un .txt de control
cLen := "Long.:"+INTSTR(FRM_LEN) + chr(13) + "nRow:"+INTSTR(nRow)
hb_memowrit("ticket_length.txt",cLen)
RETURN
Long.:392 nRow:326 por lo que la longitud del ticket debería ser de sobra más alto que la última línea impresa, es como si no hiciera caso al valor que le indico en PAPERLENGTH y siempre imprimiera sobre A4
Agradeceré cualquier ayuda amigos. Que tengan excelente día.