Está en la página 1de 8

-- Impresoras Fiscales HASAR -- 1

Cía. HASAR saic

NO

Algoritmo para identificación de modelos


START

Corregir por
Software

StatusRequest

SI
// Posibles
SI
// problemas
// de hardware
¿ Error ¿ port o baudios
comunicaciones ? incorrectos ?

NO

¿ Impresora Fiscal NO
Inicializada ?
[ Caso: Modo Entrenamiento ]

SI

GetInitData

¿ Comando
Inválido ?
SI
[ 950 / 614 ]

Grupo HASAR
-- Impresoras Fiscales HASAR -- 2
Cía. HASAR saic

NO

FeedJournal

[ 262 / PR4 / 951 / 615 ]


[ 320 / 321 / 322 ]
[ PL8 / 425 ]

// Cada modelo se identifca con:


SI
// HH?.......

¿ Comando [ 614 ]
Inválido
NO ?

[ 950 ]

[ Caso: Modo Entrenamiento ]

GetPrinterVersion

NO [ 320 / 321 / 322 ]


[ PL8 / 425 ]
¿ Comando Inválido ?

SI

// Modelo identificado mediante:


// SMH / P........

Grupo HASAR
-- Impresoras Fiscales HASAR -- 3
Cía. HASAR saic

[ 950 / 614 / 262 ]


[ PR4 / 951 / 615 ]

SetCustomerData
( Monotributista )

SI
¿ Comando Inválido ? [ 950 / 614 / 262 ]

¿ Campo de datos SI [ PR4 ] FeedJournal


Inválido ?

NO
NO
¿ Comando Inválido ? [ 950 ]
[ 951 / 615 ]

SI

[ 614 / 262 ]

WriteDisplay

WriteDisplay

¿ Comando Inválido ?

NO SI
¿ Comando Inválido ?
[ 615 ] [ 951 ]
SI NO

Grupo HASAR
-- Impresoras Fiscales HASAR -- 4
Cía. HASAR saic

[ 262 ] [ 614 ]

Observaciones sobre el algoritmo mostrado en las FIG. 1 y 2


El algoritmo presentado es solamente un esqueleto que permite a los desarrolladores de soft-
ware implementar en su aplicación una rutina que identifique el modelo de impresora fiscal co
nectada al puerto serie de la PC sin necesidad de interrogar al operador de la aplicación so-
bre tal cuestión.

Este algoritmo tiene sentido en aplicaciones que deban soportar más de un modelo de impre-
sora fiscal, y el esqueleto puede ser simplificado según la cantidad de modelos a soportar, y
es casi seguro que deberá robustecerse ya que se asumen condiciones ideales siempre ( por
ejemplo, que nunca se pierden las comunicaciones, que en las respuestas a los comandos se reportan solamen-
te los errores que en el algoritmo se atrapan, etc., etc. ).

Por otro lado, este algoritmo tampoco contempla el uso de driver o librería alguna, ni supone
la implementación directa del protocolo fiscal por parte del programador. Por ello no se inclu-
ye el tratamiento de errores que provengan de los elementos mencionados.
El algoritmo es libre de todo contexto en lo que a lenguaje de programación y plataforma a uti
lizar se refiere, y se ha tratado de exponerlo de la forma más clara y sencilla posible para que
sea comprendido. A partir de su entendimiento, puede ser codificado en cualquier lenguaje pa
ra aplicaciones que corran sobre DOS, Windows, Unix y Linux.

Para quienes trabajen en otras plataformas y no puedan utilizar los drivers o librerías provis-
tos por Cía. HASAR saic, siempre existe la posibilidad de desarrollar su propio driver, imple-
mentando el protocolo fiscal ( hay un manual a disposición del programador para tales casos ), pudiendo
luego implementar este algoritmo sin inconvenientes en su aplicación.

Para quienes desarrollan sus aplicaciones en lenguajes visuales y recurren al uso del compo-
nente OCX, deberán consultar los manuales para ver que métodos del objeto generan los co-
mandos que en este algoritmo se mencionan y que eventos atrapar para controlar los errores
de interés para la comprensión de este algoritmo.

Manuales de comandos fiscales:

Publi950.doc SMH / P-950F


Publi614.doc SMH / P-614F
Publi262.doc SMH / PT-262F
Publtick.doc SMH / P-PR4F, P-951F y P-615F
Publfact.rtf SMH / PL-8F, P-320F, P-321F y P-322F
Publicif.rtf SMH / P-425F

Otros manuales a consultar:

Grupo HASAR
-- Impresoras Fiscales HASAR -- 5
Cía. HASAR saic

Activex.doc Manual del OCX


Drivers.doc Manual de uso de drivers y librerías.

Breve descripción del algoritmo


Este algoritmo se basa en el simple hecho de enviar un comando a la impresora fiscal y anali-
zar la respuesta obtenida. Una secuencia ordenada de comandos no elegidos arbritariamente
permite ir identificando diferentes conjuntos de modelos y, finalmente, identificar un modelo
de impresora fiscal en particular, dentro de cada conjunto.

Cuando se menciona que los comandos no se han elegido arbritariamente, no sólo se hace re
ferencia al hecho de que algunos comandos aceptados por determinados modelos no lo son
por otros, sino que además se ha tenido en cuenta que los comandos a utilizar no provoquen
impresión alguna ( la implementación de este algoritmo podría ser parte del arranque de la aplicación – por e
jemplo, para verificar si la impresora fiscal inicializada no ha sido cambiada, etc., etc. -- ) para evitar el gasto
innecesario de insumos para el usuario; y que además no afecten los acumulados de una im-
presora fiscal que podría estar inicializada.

En la FIG 1 se muestra el algoritmo general para identificar modelos de impresoras fiscales


inicializadas. Si la impresora fiscal no estuviera inicializada ( modo entrenamiento ) nos deriva al
método de identificación del modelo que se muestra en la FIG. 2.

Notar que a excepción del pedido de status, para el resto de los comandos involucrados en el
algoritmo no se chequea el estado de las comunicaciones, aunque la aplicación si debería e-
fectuar dicho control por cada comando ( aquí no se hace para facilitar la comprensión del tema que nos
ocupa ).

Notar también que no se atrapan, ni se tratan, otros posibles errores que pudieran reportarse
en los status de cada respuesta a un comando enviado, simplemente para facilitar la compren
sión de este algoritmo. Sin embargo, la aplicación no puede desentenderse de manejar cual-
quier posible error que pudiera reportarse en la respuesta a un comando enviado.

FIG. 1 – Impresoras fiscales Inicializadas

El algoritmo comienza haciendo un pedido de status ( StatusRequest ), comando que es acepta


do por todos los modelos de impresoras fiscales.
A partir del status fiscal contenido en la respuesta a este comando es posible determinar si la
impresora fiscal se encuentra inicializada ( bits 9 y 10 del status fiscal en 1 ), o no ( modo entrenamien
to – ambos bits en 0 -- ).

Grupo HASAR
-- Impresoras Fiscales HASAR -- 6
Cía. HASAR saic

Si la impresora fiscal se encuentra inicializada se siguen los pasos que faltan en la FIG. 1.
Si la impresora fiscal se encuentra en modo entrenamiento se siguen los pasos indicados en
la FIG.2.

Si no se obtiene el string de respuesta correspondiente al comando StatusRequest se ha pro


ducido un error en las comunicaciones.
Posiblemente el programa intenta salir por un puerto serie que no es aquel donde se encuen-
tra conectada la impresora fiscal; o bien, la velocidad en baudios del puerto serie de la PC no
coincide con la del puerto serie de la impresora fiscal.
El programa podría probar en cada puerto serie, con cada una de las velocidades posibles,
de enviar el comando StatusRequest para determinar si en alguna de las combinaciones po-
sibles la impresora es detectada ( se obtuvo la respuesta al comando ).
Para esta tarea se puede implementar un algoritmo propio, o para quienes utilicen el OCX
recurrir al método AutodetectarControlador( ); o quienes utilizan las DLLs invocar a la función
SearchPrn( ), por ejemplo.

Tener presente que de fábrica, todas las impresoras fiscales salen configuradas a una veloci-
dad de 9600 baudios.
Tambien recordar que a no todos los modelos de impresoras fiscales se les puede configurar
la velocidad del puerto serie. Consultar el manual de comandos de cada modelo al respecto.

Si el puerto utilizado y los baudios seteados son los correctos, entonces puede suceder que:

- Los drivers en uso ( si así fuese ) están mal cargados, o configurados de manera incorrecta.
- El problema sea de hardware, ya sea en la PC, el cable utilizado o en la propia impresora fis
cal.

Determinado ya que la impresora fiscal se encuentra inicializada ( recordar que estamos en el caso
de la FIG. 1 ) se siguen los pasos que faltan para poder identificar el modelo conectado al puer-
to serie de la PC.
Para ello se recurre al uso del comando que nos permite obtener los datos que se grabaron
en la memoria fiscal cuando la impresora fiscal fue inicializada ( GetInitData ).
El cuarto campo de la respuesta a este comando contiene el número de registro con que se i-
nicializó la impresora fiscal. El número de registro está compuesto por 3 letras y 7 números.
Las 3 letras de comienzo del número de registro permiten individualizar el modelo de impreso
ra fiscal, según la Tabla 1:

Nro. Reg. SMH / .... Nro. Reg SMH / ....


HHC PT-262F HHG P-320F Si el comando GetInitData es rechaza
HHD P-PR4F HHH PL-8F do por “Comando Inválido” ( bit 5 del sta-
tus fiscal en 1 ), la impresora fiscal conec
HHE P-951F HHI P-321F tada puede ser alguno de los siguien-
HHF P-615F HHJ P-322F tes modelos:
HHK P-425F P-950F o P-614F.
Tabla 1
Grupo HASAR
-- Impresoras Fiscales HASAR -- 7
Cía. HASAR saic

Para diferenciar la P-950F de la P-614F se emplea el comando FeedJournal ( avance de papel


diario ) que solo es aceptado por la P-950F.

FIG. 2 – Impresoras fiscales en Modo Entrenamiento

En el caso de la FIG. 1 vimos que con un pedido de status ( StatusRequest ) se puede determi-
nar que la impresora fiscal se encuentra en modo entrenamiento.

Ahora veamos como es posible identficar cada modelo en este modo.

Mediante el comando GetPrinterVersion es posible identificar directamente algunos modelos


de impresoras fiscales. El tercer campo de la respuesta a este comando contiene un string
con formato similar al siguiente :

HASAR SMH/....v1.00 – 18/12/2000

El substring que reemplaza a los puntos suspensivos en el string anterior, permite identificar a
la impresora fiscal, y solo puede ser alguno de los siguientes:

P-320F, P-321F, P-322F, PL-8F o P-425F

Si el comando GetPrinterVersion es rechazado por “Comando Inválido”, el modelo de impre-


sora fiscal puede ser alguno de los siguientes:

P-950F, P-614F, PT-262F, P-PR4F, P-951F o P-615F

Para deterrminar cual es el modelo de impresora fiscal, dentro del último conjunto de posibili-
dades, se recurre al comando SetCustomerData ( setear datos de cliente ), pero con una
particu- laridad: Monotributo como responsabilidad frente a IVA del Cliente.

Si SetCustomerData es rechazado por “Comando Inválido” la impresora fiscal puede ser al-
guna de la siguientes, y debido a que ninguna de ellas emite facturas o tickets-factura:

P-950F, P-614F o PT-262F

Si SetCustomerData se rechazado por “Campo de Datos Inválido” se trata de la P-PR4F,


pues este modelo se homologó con anterioridad a la aparición de la Ley de Monotributo.
Si SetCustomerData fue aceptado, entonces los posibles modelos de impresoras fiscales
son:

Grupo HASAR
-- Impresoras Fiscales HASAR -- 8
Cía. HASAR saic

P-951F o P-615F

Al emplear el comando SetCustomerData asegurarse que todos los datos indicados en él


son correctos, para no falsear los resultados del testeo.

Hasta aquí nos quedan dos conjuntos sobre los cuales trabajar, para determinar cual puede
ser el modelo de impresora fiscal -- en modo entrenamiento -- que se encuentra conectada a la
PC.

Por un lado el formado por: P-950F, P-614F o PT-262F


Y por otro, el formadao por: P-951F o P-615F

Siguiendo con el primer conjunto, luego de identificados los candidatos posibles se envía a la
impresora fiscal el comando FeedJournal ( avance de papel diario ) que solo es aceptado por la
impresora fiscal P-950F.
Si FeedJournal es rechazado por “Comando Inválido” entonces se trata de una PT-262F o
de la P-614F.
Para distinguir una de otra se recurre al envío del comando WriteDisplay ( escribir en display de
cliente -- torreta opcional solo disponible en los modelo P-614F y P-615F-- ).
Si WriteDisplay es rechazado por “Comando Inválido” se trata del modelo PT-262F. Caso
contrario se trata de la P-614F.

No se requiere tener instalado el display de cliente en la P-614F para hacer uso del comando
WriteDisplay. En su ausencia, la impresora fiscal acepta el comando si el dispositivo forma
parte de los opcionales del equipo.

Al emplear el comando WriteDisplay asegurarse que todos los datos indicados en él son cor-
rectos, para no falsear los resultados del testeo.

Siguiendo ahora con el segundo conjunto, luego de identificados los candidatos posibles se
envía a la impresora fiscal el comando WriteDisplay ( escribir en display de cliente ) que solo es a
ceptado por la impresora fiscal P-950F.
Si WriteDisplay es rechazado por “Comando Inválido” se trata del modelo P-951F. Caso
contrario se trata de la P-615F.

Para terminar, se recuerda que el algoritmo de identificación de modelos no es único. El pre-


sentado es una muestra orientativa de cómo resolver el problema.
Por otro lado, como ya se mencionara, la implementación de este algoritmo tiene sentido
cuando hay una gran cantidad de copias del software aplicativo como para suponer que se de
berá interactuar con una amplia gama de modelos.

Grupo HASAR

También podría gustarte