« Septiembre 2007 | Volver a Página Principal | Diciembre 2007 »

Noviembre 01, 2007

Edición 12 - Comandos básicos para emisión de Comprobante fiscal en Impresoras fiscales Bematech utilizando la BemaFI32.dll

La 11ª edición de Flash Tip, trató de métodos para identificación de errores de la impresora utilizando los recursos de la librería BemaFI32.dll.

En esta edición, serán expuestos otros métodos de trabajo con la librería BemaFI32.dll. Utilizada para comunicación con impresoras fiscales Bematech trataremos los métodos relativos a operaciones de venta.

En nuestra sección de descargas encontrará el paquete BemaFI32_ES.zip que contiene siempre la última versión disponible del DLL, o, si prefieres, puedes bajar directamente el paquete haciendo clic aquí.
El archivo contiene:
- BemaFI32.dll, librería dll fiscal
- BemaFI32.ini, archivo de parámetros del dll
- BemaFI32_ES.chm, archivo de ayuda, con explicación de todo procedimiento de configuración e instalación, todas las funciones con parámetros y retornos que componen la BemaFI32.dll

Estando prendida y no emitiendo ningún informe o reducción, la impresora está lista para empezar la impresión y registro en memoria fiscal de una operación de venta. Utilizando o no nuestra librería, estas operaciones deben seguir los pasos básicos de:
- Apertura de Comprobante
- Venta de Artículos
- Cierra Comprobante

Estas etapas pueden ser realizadas a través de funciones y métodos distintos utilizando la librería BemaFI32.dll. Estos serán brevemente descritos abajo y estarán acompañados de ejemplos de programación en Delphi. Más detalles sobre los parámetros de cada función - tipo, límites de caracteres para strings y significado de valores de retornos para cada función - se encuentra en el archivo de ayuda BemaFI23_ES.chm que acompaña el paquete de la librería. En las próximas líneas, los pasos del proceso de generación y emisión de comprobante fiscal.

1- Apertura de Comprobante: Dos funciones de la librería realizan esta operación de manera muy semejante, Bematech_FI_AbreComprobanteDeVenta que imprime RIF y nombre:
cRIF := '014.004-1987';
cNombre := 'Carlos Lenz';
iRetorno := Bematech_FI_AbreComprobanteDeVenta(cRIF, cNombre);

 
Y Bematech_FI_AbreComprobanteDeVentaEx que además de RIF y nombre también permite registrar en el propio comprobante la dirección del cliente: 
cRIF := '015.002-1924';
cNombre := 'Edgardo Donato';
cDireccion := 'Calle Corrientes, 348';
iRetorno := Bematech_FI_AbreComprobanteDeVentaEx(cRIF, cNombre, cDireccion);

 
2- Venta de Artículos: La librería dispone de dos funciones también para esta operación, sin embargo trabajan con parámetros un poco distintos. Bematech_FI_VendeArticulo permite las especificaciones de Código, Descripción, Alícuota, Tipo de Cantidad, Cantidad, Número de casas decimales, Valor Unitario, Tipo Descuento y Valor Descuento: 
cCodigo := '123';
cDescripcion := 'Bolígrafo';
cAlicuota := 'II';
cTipoCantidad := 'I';
cCantidad := '10';
iCasasDecimales := 2;
cValor := '0,25';
cTipoDescuento := '%';
cValorDesc := '0000';
iRetorno := Bematech_FI_VendeArticulo(pchar(cCodigo), pchar(cDescripcion), pchar(cAlicuota), pchar(cTipoCantidad), pchar(cCantidad), iCasasDecimales, pchar(cValor), pchar(cTipoDescuento), pchar(cValorDesc));

 
Y Bematech_FI_VendeArticuloDepartamento que concede al programador la opción de discriminar y sumar en un determinado totalizador de Departamento la venta a través de los parámetros de Código, Descripción, Alícuota, Valor Unitario, Cantidad, Acrecimiento, Descuento, Índice Departamento y Unidad de Medida: 
cCodigo := '123';
cDescripcion := 'Boligrafo' ;
cAlicuota := 'II';
cValor := '0,250';
cCantidad := '10,000';
cAcresc := '0,00';
cDesc := '0,00';
cIndice := '01';
cUnidad := 'UN';


iRetorno := Bematech_FI_VendeArticuloDepartamento(pchar(cCodigo), pchar(cDescripcion),pchar(cAlicuota), pchar(cValor), pchar(cCantidad), pchar(cAcresc), pchar(cDesc), pchar(cIndice), pchar(cUnidad));
 
Es posible que, durante el proceso de venta, alguna falla ocurra en la inclusión o que el cliente desee cancelar la compra de un ítem. Se hace necesario en éste caso, la anulación de venta de un ítem y eso puede ser tratado de tres maneras, utilizando Bematech_FI_AnulaArticuloAnterior, Bematech_FI_AnulaArticuloGenerico o Bematech_FI_DevolucionArticulo. La primera, Bematech_FI_AnulaArticuloAnterior, permite invalidar el último artículo vendido del comprobante actual y por eso no necesita parámetros: 
 iRetorno := Bematech_FI_AnulaArticuloAnterior();  
La otra función, Bematech_FI_AnulaArticuloGenerico, permite anular la venta de cualquiera de los últimos 100 ítems registrados del comprobante actualmente abierto. Para identificar el número del producto que quieres anular, el operador tiene que buscar el número del ítem en el comprobante actualmente abierto pues es el parámetro necesario para su uso: 
 cNumeroArticulo := '005';
iRetorno := Bematech_FI_AnulaArticuloGenerico( pchar(cNumeroArticulo) );

 
Por fin, si utilizas lector de códigos de barras, la función Bematech_FI_DevolucionArticulo puede ser más sencilla ya que permite una operación de venta negativa. Se puede ejemplificar esta, utilizando los mismos parámetros de VendeArticulo: 
 cCodigo := '123';
cDescripcion := 'Bolígrafo';
cAlicuota := 'II';
cTipoCantidad := 'I';
cCantidad := '10';
iCasasDecimales := 2;
cValor := '0,25';
cTipoDescuento := '%';
cValorDesc := '0000';
iRetorno := Bematech_FI_DevolucionArticulo(pchar(cCodigo), pchar(cDescripcion), pchar(cAlicuota), pchar(cTipoCantidad), pchar(cCantidad), iCasasDecimales, pchar(cValor), pchar(cTipoDescuento), pchar(cValorDesc));

 
3- Cierre de comprobante: Ésta etapa puede ser realizada de 2 modos.
3.1- Utilizando una secuencia de 3 funciones:
- Bematech_FI_IniciaCierreCupon,
- Bematech_FI_EfectuaFormaPago (o Bematech_FI_EfecturaFormaPagoDescripcionForma) y
- Bematech_FI_FinalizarCierreCupon.
Este modo debe iniciase siempre con Bematech_FI_IniciaCierreCupon. Con ésta función se puede especificar sobre el subtotal, si habrá acrecimiento o descuento, especificar si será por valor o por porcentaje y de cuanto será: 
 cAcreDesc := 'A';
cTipoAcreDesc := '%';
cValorAcreDesc := '0000';
iRetorno := Bematech_FI_IniciaCierreCupon(pchar(cAcreDesc), pchar(cTipoAcreDesc), pchar(cValorAcreDesc));

 
La siguiente etapa es relativa a especificar las formas de pago. De la librería, dos funciones cumplen este papel, una es Bematech_FI_EfectuaFormaPago que utilizando dos parámetros de string, una para forma y otra para valor, permite especificar estos datos para cada forma de pago utilizada: 
cFormaPago := 'Tarjeta VISA';
cValorPago := '50,00';
iRetorno := Bematech_FI_EfectuaFormaPago(pchar(cFormaPago), pchar(cValorPago));

 
La otra función que tiene el mismo empleo es Bematech_FI_EfectuaFormaPagoDescripcionForma. Ella permite agregar, además del valor y forma utilizados, un comentario sobre cada forma de pago del comprobante, conforme muestra el ejemplo: 
cFormaPago := 'Cheque PRE';
cValorPago := '75,00';
cDescripcion := 'Vencimiento en 14/12/07';
iRetorno := Bematech_FI_EfectuaFormaPagoDescripcionForma(pchar(cFormaPago), pchar(cValorPago), pchar(cDescripcion));

 
Por fin, para informar que todas las formas de pago ya fueron especificadas, la función Bematech_FI_FinalizaCierreCupon imprime el mensaje promocional al final y comunica a la impresora que ya se terminó el proceso de cierre de comprobante: 
cMsgPromocional := 'Gracias por su preferencia!!!';
iRetorno := Bematech_FI_FinalizarCierreCupon(pchar(cMsgPromocional));

 
3-2 El segundo modo permite el cierre del comprobante utilizando apenas una función. La librería dispone de dos funciones que pueden cumplir esto. Efectuando el cierre de comprobante con Bematech_FI_CierraCupon el programador puede detallar sobre una forma de pago, el incremento o decremento del valor final, el tipo (porcentaje o valor) y de cuanto esto será. Además de estas informaciones de cierre, también se puede especificar el mensaje para el final del comprobante, conforme sigue el ejemplo: 
cFormaPago := 'Efectivo';
cAcresDesc := 'A';
cTipoAcresDesc := '$';
cValorAcresDesc := '0000';
cValorPago := '35,00';
cMensajePromocional := 'Gracias, vuelva siempre !!!';
iRetorno := Bematech_FI_CierraCupon(pchar(cFormaPago), pchar(cAcresDesc), pchar(cTipoAcresDesc), pchar(cValorAcresDesc), pchar(cValorPago), pchar(cMensajePromocional));

 
De modo semejante al anterior, la función Bematech_FI_CierreCuponReducido, permite definir la forma de pago - que tendrá el valor automáticamente definido según el subtotal del comprobante - y también el mensaje promocional para final del comprobante: 
cFormaPago := 'Tícket';
cMsgPromocional := 'Gracias por su preferencia!!!';
iRetorno := Bematech_FI_CierraCuponReducido(pchar(cFormaPago), pchar(cMsgPromocional));

 
Siguiendo estos métodos y tomando la debida atención a los retornos que la impresora podría presentar, estás apto a empezar el desarrollo para emisión de comprobante fiscal de su aplicación. Más informaciones sobre las funciones de la librería BemaFI32.dll tratadas en éste Flash Tip, las encuentras en el paquete de la dll que está disponible en nuestra sección de descargas. En esta misma sección también podrás encontrar ejemplos completos del uso de la BemaFI32 en VB, FoxPRO, Delphi y C#.