Manual WINFIS32 - DLL v0427 PDF
Manual WINFIS32 - DLL v0427 PDF
Manual WINFIS32 - DLL v0427 PDF
27
Para uso con impresoras fiscales HASAR
Argentina , Venezuela, Panam
Contenido
Combinada - Para desarrollos basados en el uso del OCX Fiscal HASAR v010724.
Pgina 2 de 23
(Vlido slo en Argentina)
Para quienes opten por el uso directo de las funciones de la librera winfis32.dll, sea por-
que estn acostumbrados a la generacin directa de strings de comandos y al anlisis de
strings de respuestas (dilogo con la impresora fiscal HASAR), o porque las funciones de
esta librera son independientes del modelo de impresora fiscal HASAR a manejar, se des-
criben a continuacin las funciones incluidas en la librera winfis32.dll.
Pgina 3 de 23
Funciones disponibles
Si bien en las descripciones de las funciones incluidas en la librera winfis32.dll escrita en
lenguaje C- se indica que para algunos argumentos y valores retornados, el tipo de dato
declarado es int, se debe tener en cuenta que se trata de un entero representado en 32
bits (ocupa 4 bytes). Este hecho es importante a la hora de declarar la interfaz requerida
en otros lenguajes que utilicen estas funciones. Por ejemplo, en Visual Basic los mismos
datos deben ser declarados como Long.
Funcin: VersionDLLFiscal( )
Argumentos: No requiere.
Esta funcin permite al software de gestin para puntos de venta determinar si est tra-
bajando con la versin adecuada de la librera winfis32.dll. Tener presente que las funcio-
nes disponibles pueden ser modificadas o eliminadas, adems de agregarse nuevas.
Funcin: OpenComFiscal( )
Argumentos: Com Nmero entero que indica el puerto serie que se desea abrir.
Este argumento puede tomar valores entre 1 y 30.
Pgina 4 de 23
la librera winfis32.dll y el software de gestin pa-
ra puntos de venta se realizar en base a caracte-
res ANSI. En este caso la librera winfis32.dll no
realiza conversin alguna de los strings de coman-
dos, ni de los correspondientes a respuestas de la
impresora fiscal HASAR.
Esta funcin permite al software de gestin para puntos de venta la apertura del puerto
serie, de la PC, donde se conectar la impresora fiscal HASAR.
Es conveniente que la apertura del puerto serie se realice cuando la aplicacin es dispara-
da para su ejecucin, y no por la emisin de cada comprobante. Tener presente que el
puerto serie est dedicado a la impresora fiscal HASAR.
Funcin: ReOpenComFiscal( )
Argumentos: Com Nmero entero que indica el puerto serie que ya se encontraba a-
bierto. Este argumento puede tomar valores entre 1 y 30.
Esta funcin permite al software de gestin para puntos de venta recuperarse del error
que se produce al intentar abrir un puerto serie que ya estaba abierto.
Pgina 5 de 23
Funcin: CloseComFiscal( )
Retorna: ------
Esta funcin permite al software de gestin para puntos de venta cerrar el puerto serie
utilizado para comerciar strings de comandos y respuestas, con la impresora fiscal HASAR.
Es conveniente que el cierre del puerto serie se realice cuando se da por finalizada la eje-
cucin de la aplicacin, y no por la emisin de cada comprobante. Tener presente que el
puerto serie est dedicado a la impresora fiscal HASAR.
Funcin: InitFiscal( )
Es recomendable que el software de gestin para puntos de venta invoque a esta funcin
despus de abrir con xito el puerto serie.
Funcin: MandaPaqueteFiscal( )
int MandaPaqueteFiscal (int Handler, char *Buffer)
Pgina 6 de 23
te-, o por la funcin ReOpenComFiscal( ) excepcionalmente-.
Esta funcin permite al software de gestin para puntos de venta enviar un string de co-
mando a la impresora fiscal HASAR, a travs del puerto serie local. Dicho string debe res-
petar la sintaxis descripta en el manual de comandos correspondiente (publ.pdf el
nombre del archivo depende el modelo de equipo en uso-).
ID[Campo1[Campo2[..[CampoN]..]]]
Funcin: UltimaRespuesta( )
Esta funcin permite al software de gestin para puntos de venta obtener el string de res-
puesta de la impresora fiscal HASAR, a travs del puerto serie local, y correspondiente al
ltimo comando enviado mediante la funcin MandaPaqueteFiscal( ). Dicho string respeta
Pgina 7 de 23
la sintaxis descripta en el manual de comandos correspondiente (publ.pdf el nombre
del archivo depende el modelo de equipo en uso-).
IDStatPrnStatFis[Campo1[Campo2[..[CampoN]..]]]
La normativa fiscal vigente (en Argentina) obliga al software de gestin para puntos de
venta a examinar cada respuesta de la impresora fiscal, a los efectos de determinar que
ocurri con el comando enviado, y proceder al tratamiento adecuado de errores, si stos
son reportados por la impresora fiscal HASAR. Adems, las respuestas pueden contener in-
formacin de inters para el software de gestin para puntos de venta con objeto de man-
tener la sincronizacin de datos entre el software y la impresora fiscal HASAR.
Funcin: UltimoStatus( )
Pgina 8 de 23
puesta recibida desde la impresora fiscal HASAR.
Esta funcin permite al software de gestin para puntos de venta ahorrarse la extraccin y
conversin a binario de los strings contenidos en los campos de estado incluidos en las
respuestas de la impresora fiscal HASAR.
La normativa fiscal vigente (en Argentina) obliga al software de gestin para puntos de
venta a examinar cada respuesta de la impresora fiscal, a los efectos de determinar que
ocurri con el comando enviado, y proceder al tratamiento adecuado de errores, si stos
son reportados por la impresora fiscal HASAR.
Para ms informacin acerca del significado de cada bit de estado, consultar los apndi-
ces Status de Impresora y Status Fiscal, incluidos en el manual publ.pdf correspon-
diente al equipo en uso.
Pgina 9 de 23
Funcin: CambiarVelocidad( )
Esta funcin permite al software de gestin para puntos de venta modificar la velocidad
de trabajo del puerto serie de la PC.
Sin embargo, si se desea modificar la velocidad del puerto serie de la impresora fiscal
HASAR (suponiendo que estuviese permitido en el equipo en uso), se debe construir el
string de comando SetComSpeed y hacerlo llegar a la impresora fiscal HASAR a travs del
funcin MandaPaqueteFiscal( ) para ms informacin consultar el manual publ.pdf-.
Por otro lado, recordar primero modificar la velocidad del puerto serie de la impresora
fiscal HASAR, y luego la velocidad del puerto serie de la PC.
Funcin: SearchPrn( )
Pgina 10 de 23
PC y el de la impresora fiscal HASAR). Los valores posibles
son: 1200, 2400, 4800, 9600, 19200, 38400 y 57600.
Esta funcin permite al software de gestin para puntos de venta determinar la velocidad
a la que se encuentra configurada la impresora fiscal HASAR.
Funcin: ProtocolMode( )
Retorna: ------
Funcin: BusyWaitingMode( )
Retorna: ------
Pgina 11 de 23
Funcin: SetCommandRetries( )
DEPRECADA A partir de la versin 04.00
Funcin: Abort( )
Retorna: ------
Se utiliza para abortar procesos que se encuentran en estado de espera hasta que se cum-
pla un cierto time-out.
Funcin: SetModoEpson( )
int SetModoEpson(void)
Esta funcin es utilizada para configurar el puerto para establecer una comunicacin con
el protocolo Epson, ya que por default este es configurado segn el protocolo HASAR.
Argumentos: No requiere.
Pgina 12 de 23
Funcin: SetCmdRetries( )
La librera winfis32.dll permite una forma alternativa de establecer este valor, mediante
la creacin de una variable de entorno (de sistema) en Windows:
Nombre: CMDRETRIES
Valor: Cantidad de reintentos. Por ejemplo, 3
Este es un recurso extremo que se puede utilizar cuando se est trabajando sobre redes
donde puede haber una cierta lentitud en las comunicaciones.
Funcin: SetSndRetries( )
La librera winfis32.dll permite una forma alternativa de establecer este valor, mediante
la creacin de una variable de entorno (de sistema) en Windows:
Nombre: SNDRETRIES
Valor: Cantidad de reintentos. Por ejemplo, 3
Este es un recurso extremo que se puede utilizar cuando se est trabajando sobre redes
donde puede haber una cierta lentitud en las comunicaciones.
Pgina 13 de 23
Funcin: SetRcvRetries( )
La librera winfis32.dll permite una forma alternativa de establecer este valor, mediante
la creacin de una variable de entorno (de sistema) en Windows:
Nombre: RCVRETRIES
Valor: Cantidad de reintentos. Por ejemplo, 3
Este es un recurso extremo que se puede utilizar cuando se est trabajando sobre redes
donde puede haber una cierta lentitud en las comunicaciones.
Funcin: OpenTpcFiscal( )
int FAR PASCAL _export OpenTcpFiscal(char *hostname, int socket, long mseg,
int modo)
Pgina 14 de 23
sentido inverso, las respuestas en caracteres
ASCII que entrega la impresora fiscal Hasar se-
rn convertidos a sus equivalentes en ANSI antes
de entregar el string al software de gestin para
puntos de venta.
Esta funcin permite al software de gestin para puntos de venta dialogar con la impreso-
ra fiscal en forma remota. Es decir, la impresora fiscal HASAR est conectada en otra PC
en la cual debe estar corriendo el ejecutable wspooler.exe para escuchar la red, redi-
reccionando al puerto serie los strings de comandos que llegan y devolviendo a la red los
strings de respuesta que recibe desde la impresora fiscal HASAR.
Funcin: ObtenerNumeroDePaquetes( )
Pgina 15 de 23
Mediante esta funcin el software de gestin para puntos de venta puede controlar el sin-
cronismo del protocolo fiscal verificando que el nmero de secuencia del paquete fiscal,
correspondiente al string de comando enviado, se corresponda con el correspondiente al
paquete fiscal que trae el string de respuesta, chequeando (adems) que la respuesta re-
cibida corresponda al comando enviado (mismo caracter de identificacin).
Funcin: SetKeepAliveHandlerStdCall( )
No vlida para programacin en C, C++, y/o Visual C.
Para los lenguajes mencionados ver: SetKeepAliveHandler( )
Retorna: ------
La impresora fiscal HASAR reporta la falta de papel (como una de sus formas) mediante el
envo cada 400 milisegundos- del caracter ASCII DC4 (18 decimal ; 12 hexa). Esto ocurri-
r hasta que la situacin se normalice.
End Sub
'// Cuando se carga el form se estable que rutina atender la llegada de caracteres DC2
// o DC4
'// -----------------------------------------------------------------------------------------------------------
Pgina 16 de 23
Public Sub PonerManejadorDeMantengaseVivo()
End Sub
Funcin: SetKeepAliveHandler( )
De uso exclusivo para programacin en C, C++, y/o Visual C.
Para los lenguajes mencionados ver: SetKeepAliveHandlerStdCall( )
Retorna: ------
La impresora fiscal HASAR reporta la falta de papel (como una de sus formas) mediante el
envo cada 400 milisegundos- del caracter ASCII DC4 (18 decimal ; 12 hexa). Esto ocurri-
r hasta que la situacin se normalice.
Pgina 17 de 23
Errores devueltos por las funciones
Errores generales:
-1 Error general.
-2 Handler invlido.
-3 Intento de enviar un comando cuando se estaba procesando.
-4 Error de comunicaciones.
-5 Puerto ya abierto.
-6 No hay memoria.
-7 El puerto ya estaba abierto.
-8 La direccin del buffer de respuesta es invlida.
-9 El comando no finaliz, sino que volvi una respuesta tipo STAT_PRN.
-10 El proceso en curso fue abortado por el usuario.
-11 No hay ms puertos disponibles.
Errores TCP/IP:
-12 Error estableciendo comunicacin TCP/IP.
-13 No se encontr el host.
-14 Error de conexin con el host.
Errores internos:
-15 Se recibi NAK al comando enviado.
Pgina 18 de 23
Sugerencias
Deteccin de Problemas
La librera winfis32.dll existe un mecanismo que permite el rastreo problemas consistente
en guardar en un archivo de texto todas las operaciones realizadas por las funciones de la
librera, junto con los detalles de las comunicaciones. Esto permite seguir el protocolo "de
cerca". Para disponer de esta opcin se deben especificar un par de variables de entorno
(de sistema) en Windows antes de ejecutar funciones de la librera winfis32.dll. Estas
variables de entorno (de sistema) son:
Para evitar divergencias, se provee una conversin interna que salva este problema. Si la
apertura del puerto serie se realiza invocando a la funcin OpenComFiscal( ) e indicando
el valor 1 en el argumento Mode, se convierten todos los strings; tanto los que van a la
impresora fiscal HASAR (comandos), como los que vuelven (respuestas a los comandos en-
viados). En el caso de strings de comandos la conversin es de ANSI a ASCII, y en el caso
de los strings de respuestas la conversin es de ASCII a ANSI.
Pgina 19 de 23
Modo de Operacin
La forma de operacin del software de gestin para puntos de venta debera seguir los si-
guientes criterios:
Inicializacin del soft- Invocar a la funcin OpenComFiscal( ) para abrir el puerto se-
ware. rie.
Loop hasta que la funcin InitFiscal( ) devuelva xito.
Modo BusyWaitingMode(0)
La librera winfis32.dll manejada en este modo tiene la ventaja de poder detectar pro-
blemas de comunicacin, o de falta de papel, desde la aplicacin que la usa.
Si la impresora fiscal HASAR se queda sin papel al recibir un comando que causa impre-
sin, no responder hasta que se normalice la situacin. En estos casos, la funcin Manda-
PaqueteFiscal( ) no devuelve el control, y el software de gestin para punto de venta pa-
rece "colgado". Para salir de este estado, podra dispararse un timer que transcurridos n
segundos le avise que algo est ocurriendo.
Screen.MousePointer = vbHourglass
Timer.Enabled = True
Do
rc = MandaPaqueteFiscal(Handler, Comando)
Pgina 20 de 23
Exit Sub
End If
DoEvents
Loop Until rc = 0
Timer.Enabled = False
Screen.MousePointer = vbNormal
End Sub
If Atomic Then
MsgBox "No puede ejecutar ms de un comando por vez"
Exit Sub
End If
Atomic = True
Atomic = False
End Sub
Los carateres Chr$(28) son los separadores de campo que se utilizan en la construccin de
los strings de comandos.
Pgina 21 de 23
Declare Function MandaPaqueteFiscal Lib "WinFis32" (ByVal Handler As Integer, _
ByVal Name As String) As Integer
Declare Function OpenComFiscal Lib "WinFis32" (ByVal Puerto As Integer, _
ByVal Mode As Integer) As Integer
Declare Function InitFiscal Lib "WinFis32" (ByVal Handler As Integer) As Integer
Declare Function UltimoStatus Lib "WinFis32" (ByVal Handler as Integer, _
ByRef FiscalStatus as Integer, ByRef PrinterStatus as Integer) as Integer
Const MODE_ANSI = 1
//--------------------------------------------------
Sub EnviarStringFiscal(Comando As String)
Dim PrinterStatus As Integer, FiscalStatus As Integer
//------------------------------------
Sub OpenPort (Port As Integer)
Handler = OpenComFiscal(Port, MODE_ANSI)
//-------------------
Sub Form_Load ()
OpenPort 1
EnviarStringFiscal "X" & Chr$(28) & "971231" & Chr$(28) & "235900"
End Sub
Pgina 22 de 23
Setiembre 01, 2010 Rev. 001