Tengo un sistema de ventas que imprime en una impresora Fiscal Hasar
320, el problema es que en algunos casos cuando manda a imprimir, la
impresora no imprime nada, consulte a l agente de hasar y me dijeron que
puede ser por que esta rechasando los datos del cliente, como por ejemplo el
Cuit, la direcion o la razon social.
Como puedo hacer para detectar que error me tira la impresora fiscal.
Los datos del cliente lo mando con el comando:
thisform.hasar.DatosCliente(var_nombre, var_direcion, var_cuit, etc)
Agradesco toda colaboracion de cualquiera de ustedes.
Gracias
Daniel Flores
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.734 / Virus Database: 488 - Release Date: 04/08/2004
DO CASE
CASE THISFORM.TIPIVA1.VALUE="C"
m.codtipcli="F"
m.tipodocu="DNI"
CASE THISFORM.TIPIVA1.VALUE="M"
m.codtipcli="M"
m.tipodocu="CUIT"
CASE THISFORM.TIPIVA1.VALUE="I"
m.codtipcli="I"
m.tipodocu="CUIT"
CASE THISFORM.TIPIVA1.VALUE="E"
m.codtipcli="E"
m.tipodocu="CUIT"
CASE THISFORM.TIPIVA1.VALUE="N"
m.codtipcli="R"
m.tipodocu="CUIT"
IF THISFORM.LABEL22.CAPTION="B"
m.bienuso="B"
ELSE
m.bienuso="N"
ENDIF
CASE THISFORM.TIPIVA1.VALUE="R"
m.codtipcli="N"
m.tipodocu="CUIT"
ENDCASE
THISFORM.VENDE1.BOUNDCOLUMN=2
m.xcodtipemp=getcodtipemp()
m.xcuit=SUBSTR(thisform.cuit1.value,1,2)+substr(thisform.cuit1.value,4,8)+su
bstr(thisform.cuit1.value,13,1)
thisform.fiscal1.portnumber=GETNUMPUERTO()
THISFORM.FISCAL1.OpenInvoice("T","C",ALLTRIM(THISFORM.LABEL22.CAPTION),"1","
F","17",m.xcodtipemp,;
m.codtipcli,thisform.razon1.value,"Codigo Cliente
"+thisform.cod_cli1.value,m.tipodocu,m.xcuit,;
m.bienuso,Thisform.direc1.value,thisform.local1.value+"-"+thisform.codprov1.
value,"Vendedor: "+thisform.vende1.value,;
m.xremito, m.xremito,"C")
"Ing. Daniel Flores" <inform...@copelnet.com.ar> escribió en el mensaje
news:u3tyXoEk...@TK2MSFTNGP15.phx.gbl...
thisform.hasar.respuesta(1)
thisform.hasar.respuesta(2)
Deberías convertir a binario y analizar los bit que te indica el manual de
Hasar
Saludos Damián
"Ing. Daniel Flores" <inform...@copelnet.com.ar> escribió en el mensaje
news:u3tyXoEk...@TK2MSFTNGP15.phx.gbl...
respuesta=THISFORM.Olecontrol1.Respuesta(0)
=GetErrors(respuesta)
FUNCTION GetErrors
PARAMETERS Resp
PRIVATE Origen, OffsetSep, i, c
DECLARE FiscalErrors [16]
DECLARE PrinterErrors[16]
FiscalErrors[1] = "Error en chequeo de memoria fiscal"
FiscalErrors[2] = "Error en chequeo de la memoria de trabajo"
FiscalErrors[3] = "Carga de bateria baja"
FiscalErrors[4] = "Comando desconocido"
FiscalErrors[5] = "Datos no validos en un campo"
FiscalErrors[6] = "Comando no valido para el estado fiscal actual"
FiscalErrors[7] = "Desborde del total"
FiscalErrors[8] = "Memoria fiscal llena"
FiscalErrors[9] = "Memoria fiscal a punto de llenarse"
FiscalErrors[10] = ""
FiscalErrors[11] = ""
FiscalErrors[12] = "Error en ingreso de fecha"
FiscalErrors[13] = "Recibo fiscal abierto"
FiscalErrors[14] = "Recibo abierto"
FiscalErrors[15] = "Factura abierta"
FiscalErrors[16] = ""
PrinterErrors[1] = ""
PrinterErrors[2] = ""
PrinterErrors[3] = "Error de Impresora"
PrinterErrors[4] = "Impresora Offline"
PrinterErrors[5] = "Falta papel del diario"
PrinterErrors[6] = "Falta papel de tickets"
PrinterErrors[7] = "Buffer de Impresora lleno"
PrinterErrors[8] = ""
PrinterErrors[9] = ""
PrinterErrors[10] = ""
PrinterErrors[11] = ""
PrinterErrors[12] = ""
PrinterErrors[13] = ""
PrinterErrors[14] = ""
PrinterErrors[15] = ""
PrinterErrors[16] = ""
Origen = 1
OffsetSep = AT ( CHR(28), Resp )
* Convierte en entero el status del impresor
PrinterStatus = HexaToInt (SUBSTR ( Resp, Origen, OffsetSep - 1))
IF PrinterStatus < 0
RETURN -1
ENDIF
Origen = OffsetSep
* Analiza los bits comenzando del menos significativo
FOR i = 1 TO 16
IF ( INT (PrinterStatus % 2) == 1 )
IF ( LEN (PrinterErrors[i]) > 0 )
IF I <> 13 .AND. I <> 14
* Wait Windows "PrinterStatus: " + PrinterErrors[i]
MESSAGEBOX(PrinterErrors[i],12+16,'! ERROR de Impresora !')
ok=.F.
ENDIF
ENDIF
ENDIF
PrinterStatus = PrinterStatus / 2
NEXT
OffsetSep = AT ( CHR(28), SUBSTR (Resp, Origen + 1) )
IF OffsetSep == 0
OffsetSep = LEN(Resp)
ENDIF
* Convierte en entero el status fiscal
FiscalStatus = HexaToInt (SUBSTR (Resp, Origen + 1, OffsetSep - 1))
IF FiscalStatus < 0
RETURN -1
ENDIF
* Analiza los bits comenzando del menos significativo
FOR i = 1 TO 16
IF ( INT (FiscalStatus % 2) == 1 )
IF ( LEN (FiscalErrors[i]) > 0 )
IF I <> 13 .AND. I <> 14
* Wait Windows "FiscalStatus: " + FiscalErrors[i]
MESSAGEBOX(FiscalErrors[i],12+16,'! ERROR Fiscal !')
ok=.f.
ENDIF
ENDIF
ENDIF
FiscalStatus = FiscalStatus / 2
NEXT
RETURN 0
*---------------------------------------------------------------------------
-----------*
*---------------------------------------------------------------------------
-----------*
****
* FUNCTION HexaToInt
*
* Esta funcion convierte un numero hexadecimal en su equivalente
* en binario.
****
FUNCTION HexaToInt
PARAMETERS HexValue
PRIVATE i, Value, Status
&& ? 'HexValue = ' + HexValue
Status = 0
FOR i = 4 TO 1 STEP -1
S = SUBSTR(HexValue, i, 1)
Value = ASC (S)
IF ( Value >= ASC('A') AND Value <= ASC('F') )
Value = Value - ASC('A') + 10
Status = Status + Value * (16 ** ( 4 - i ))
next
ENDIF
IF ( Value >= ASC('a') AND Value <= ASC('f') )
Value = Value - ASC('a') + 10
Status = Status + Value * (16 ** ( 4 - i ))
next
ENDIF
IF ( Value >= ASC('0') AND Value <= ASC('9') )
Value = Value - ASC('0')
Status = Status + Value * (16 ** ( 4 - i ))
next
ENDIF
&& ? "HexaToInt: Numero hexadecimal incorrecto: " + HexValue
RETURN -1
NEXT
RETURN Status
"Ing. Daniel Flores" <inform...@copelnet.com.ar> escribió en el mensaje
news:u3tyXoEk...@TK2MSFTNGP15.phx.gbl...
el comando:THISFORM.Olecontrol1.Respuesta(0) por que tiene el (0) cero. Vi
que tambien puede tener 1, 2 ....etc. Me podes explicar como funciona.
La funcion Geterrors() devuelve -1 si hubo algun error y 0 si esta todo ok?
Como puedo hacer para que si hubo un error cancele lo anterior o no siga
imprimiendo?
"Ing. Daniel Flores" <inform...@copelnet.com.ar> escribió en el mensaje
news:OMbcoqOk...@tk2msftngp13.phx.gbl...
Creo que hay una funcion que es
thisform.olecontrol1.tratardecancelartodo()
"Ing. Daniel Flores" <inform...@copelnet.com.ar> escribió en el mensaje
news:uDNDesOk...@TK2MSFTNGP15.phx.gbl...