by Jorge Jaurena » Fri Jul 14, 2006 12:03 pm
Rene, puede ser, pero me pasa en el mismo lugar en tres equipos que no muestran ninguna otra anomalia y en otros equipos funciona perfecto.
Este GPF se produce exactamente al intentar imprimir en una impresora fiscal (en Argentina son obligatorias), esto genera un log y me dicen los autores de la DLL que no encuentran ningun problema.
Pregunta: puede ser que las funciones de la DLL en vez de definir parametros como int haya que definirlos como long?
Aca copio el prg donde defino las funciones fiscales:
El error lo marca cuando ejecuta la funcion IItemFis() la cual llama a Enviar() y la cual llama a MandaPaqueteFiscal() que es la ultima que menciona el GPF y la cual reside dentro de la DLL.
Tengo la pantalla del error capturada, pero como puedo pegarla aca?
Desde ya muchas gracias por el interes en resolver esto
*** RUTINAS FISCALES ***
Function AbrePuerto(ComFiscal,Handler)
Local SetPr,ComF:=VAL(ComFiscal)
Handler:=OpenComFiscal(ComF)
SetPr :=SearchPrn(Handler)
Return nil
Function CierraPuerto(Handler)
CloseComFiscal(Handler)
Return nil
Function AbreTicket(Handler)
Local s
s:= "@" + Chr(28) + "T" + Chr(28) + "T"
Enviar(s,Handler)
Return nil
Function DatosCli(Nombre,Cui,TipoIVA,Domicilio,TipoDoc,TipoPrn,Texto,Handler)
/*
Nombre =Nombre del cliente
Cui =CUIT del cliente
TipoIva =Situacion de IVA del cliente
Domicilio=Domicilio del cliente
TipoDoc =Tipo de documento a abrir
CREDITO 'A' = R
CREDITO 'B' = S
REMITO = r
TipoPrn =Tipo de impresor fiscal (615,PR4,320)
Texto =Texto a emitir en Credito o Remito solo 320 (obligatorio)
*/
Local s
IF EMPTY(Nombre)
Nombre:="."
ENDIF
IF EMPTY(Cui)
Cui:="00000000000"
ENDIF
IF EMPTY(TipoIVA)
TipoIVA:="C"
ENDIF
IF EMPTY(Domicilio)
Domicilio:="."
ENDIF
IF EMPTY(Texto)
Texto:="."
ENDIF
IF TipoPrn="615" .OR. TipoPrn="715"
s:= "b" + Chr(28) + ALLTRIM(SUBSTR(Nombre,1,30)) + Chr(28) + Cui+ Chr(28)+;
TipoIVA + Chr(28) + "C"
ENDIF
IF TipoPrn="320" .OR. TipoPrn="425"
s:= "b" + Chr(28) + ALLTRIM(SUBSTR(Nombre,1,50)) + Chr(28) + Cui+ Chr(28)+;
TipoIVA + Chr(28) + "C" + Chr(28) + ALLTRIM(SUBSTR(Domicilio,1,50))
ENDIF
Enviar(s,Handler)
IF TipoDoc="A" .OR. TipoDoc="B"
s:= "@" + Chr(28) + TipoDoc + Chr(28) + "T"
Enviar(s,Handler)
ELSE
s:= "“" + Chr(28) + "1" + Chr(28) + Texto
Enviar(s,Handler)
s:= "€" + Chr(28) + TipoDoc + Chr(28) + "T"
Enviar(s,Handler)
ENDIF
Return nil
Function IItemFis(Texto,Cantidad,Monto,IVA,SumaResta,ImpInt,CalMonto,TipoDoc,TipFiscal,Handler)
/*
Texto ES EL TEXTO A IMPRIMIR EN EL ITEM (HASTA 20 CARACTERES) A
Cantidad ES LA CANTIDAD DEL ITEM (XXX.XXXXXXXXXX) N
Monto ES EL IMPORTE A EMITIR (+/- XXXXXX.XX) N
IVA ES LA TASA DE IVA UTILIZADA (XX.XX)/(**.**) N
SumaResta ES LA IMPUTACION (M=SUMA MONTO, m=RESTA MONTO) A
ImpInt ES EL COEFICIENTE DE IMPUESTOS INTERNOS (X.XXXXXXXX) N
CalMonto ES COMO SE CALIFICA EL MONTO (B=PRECIO BASE, T=PRECIO TOTAL) A
TipoDoc Si es factura o remito (R)
*/
Local s
IF TipoDoc<>"R"
IF TipFiscal="320"
s:= "B" + Chr(28) + SUBSTR(Texto,1,50) + Chr(28) + Cantidad + Chr(28)+;
Monto + Chr(28) + IVA + Chr(28) + SumaResta + Chr(28) + ImpInt +;
Chr(28) + "0" + Chr(28) + CalMonto
ENDIF
IF TipFiscal="615" .OR. TipFiscal="425"
s:= "B" + Chr(28) + SUBSTR(Texto,1,20) + Chr(28) + Cantidad + Chr(28)+;
Monto + Chr(28) + IVA + Chr(28) + SumaResta + Chr(28) + ImpInt +;
Chr(28) + "0" + Chr(28) + CalMonto
ENDIF
ELSE
s:= "‚" + Chr(28) + SUBSTR(Texto,1,108) + Chr(28) + Cantidad
ENDIF
Enviar(s,Handler)
Return nil
Function ITotalFis(Texto,Pagado,Operacion,Handler)
/*
Texto ES EL TEXTO A IMPRIMIR EN EL TOTAL (HASTA 30 CARACTERES) A
Pagado EL MONTO PAGADO POR EL CLIENTE (+/- XXXXXXXXX.XX) N
Operacion SI SE PONE C CANCELA EL COMPROBANTE, SI SE PONE T CALCULA
EL VUELTO EN FUNCION AL MONTO PAGADO A
*/
Local s
s:= "D" + Chr(28) + SUBSTR(Texto,1,30) + Chr(28) + Pagado + Chr(28) +;
Operacion + Chr(28) + "0"
Enviar(s,Handler)
Return nil
Function CierraFiscal(Handler)
Enviar("E",Handler)
Return nil
Function AbreNoFiscal(Handler)
Enviar("H",Handler)
Return nil
Function ITexNoFis(Texto,Handler)
Local s
s:= "I" + Chr(28) + substr(Texto,1,80) + Chr(28) + "0"
Enviar(s,Handler)
Return nil
Function AvanzaFis(Lineas,Handler)
Local s
s:= "P" + Chr(28) + Lineas
Enviar(s,Handler)
Return nil
Function CierraNoFis(Par,Handler)
// Par=Si cierro un no fiscal comun ("C"), si es homologado ("H")
Local s
IF Par<>"H"
s:="J"
ELSE
s:="