Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Detectar el error al imprimir en Hasar 320 Fiscal

299 views
Skip to first unread message

Ing. Daniel Flores

unread,
Sep 1, 2004, 1:34:52 PM9/1/04
to
Hola a todos:

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


Javier Yoris

unread,
Sep 1, 2004, 3:42:49 PM9/1/04
to
Yo tengo sistemas funcionando con impresoras Epson, puede ser que no acepte
los caracteres especiales (Ej.: º, ñ ) , tampoco acepta valores numéricos,
el cuit debe ir en formato texto sin los guiones, también hay que ingresar
la palabra CUIT previo al número. A continuación adjunto parte del código
que utilizo (tené en cuenta que es de Epson, y puede variar). Saludos.Javier

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...

Damian Lana

unread,
Sep 1, 2004, 4:00:27 PM9/1/04
to
Deberías verificar la respuesta de la impresora luego de enviar el campo si
da problemas.

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...

Mauricio Mendoza

unread,
Sep 1, 2004, 3:37:48 PM9/1/04
to
Después que mandas cualquier comando tenés que preguntar por la respuesta

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...

Ing. Daniel Flores

unread,
Sep 2, 2004, 8:44:12 AM9/2/04
to
Hola Mauricio y Muchisimas Gracias por tu respuesta esta excelente y a la
tarde la voy a probar y te cuento, solo queria hacerte una pregunta mas:

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.

Ing. Daniel Flores

unread,
Sep 2, 2004, 8:47:28 AM9/2/04
to
Otra mas:

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?

Mauricio Mendoza

unread,
Sep 2, 2004, 11:32:37 AM9/2/04
to
Cuando mandas un numero es porque querés saber algo específico.
Cuando mandas cero, es que querés saber todo el estado.

"Ing. Daniel Flores" <inform...@copelnet.com.ar> escribió en el mensaje

news:OMbcoqOk...@tk2msftngp13.phx.gbl...

Mauricio Mendoza

unread,
Sep 2, 2004, 11:36:05 AM9/2/04
to
Efectivamente, además si hay un error te aparece un mensaje.
No me acuerdo mucho, te lo digo al vuelo, luego chequea si es correcto
porque hace tiempo que no trabajo con Hasar

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...

0 new messages