ClearLight
Sistema integrado para la Administración

Descripcion Funcional
Preguntas y Respuestas
Recursos
Descargas
Vinculos
Precios
Distribuidores
Articulos Técnicos
Inicio
Claves de Activacion

Interfaz para la impresora fiscal Bematech

La impresora fiscal Bematech está en el mercado venezolano desde hace varios años, pero siempre, por una u otra razón, demoramos el desarrollo de la interfaz con ella.

Por fin lo hicimos. Y fue un trabajo agradabilísimo: de todas las impresoras fiscales con las que hemos trabajado, las Bematech tienen la interfaz más rica en posibilidades y facil de utilizar.

Esta primera versión es limitada, en el sentido de que desaprovecha muchas de las capacidades y de las opciones de configuración de las impresoras, pero es suficiente para permitir usarla conectada a las aplicaciones de punto de venta de ClearLight.

La opción de instalar la impresora Bematech se presenta en el programa de instalación de ClearLight en la sección de configuración del punto de ventas en las distribuciones generadas a partir del 12/02/2007.

Para instalar el soporte para las impresoras Bematech en instalaciones existentes, descargue y ejecute este instalador.

A continuación detallamos las funciones disponibles para la impresora Bematech. Las funciones devuelven 0 si se ejecutaron correctamente o un valor diferente si hubo algun problema. Los tipos de datos de los parametros esperados se incluyen entre corchetes. Todas las declaraciones usan el tipo Variant, para ser compatibles con VBScript, que no usa datos tipados.

Public Function AgregarTasa(laTasa [AsDouble]): Permite definir una nueva tasa de impuesto.

Public Function CancelarComprobante() As Integer: Cancela el comprobante en proceso. La impresora Bematech no cancela el comprobante al ser apagada o reseteada. Si por cualquier motivo se interrumpe la generacion de un comprobante, es necesario cancelarlo explicitamente, llamando a esta funcion.

Public Function CerrarComprobante(Optional FormaPago = "Efectivo", Optional Mensaje As String = "") As Integer: Cierra el comprobante (factura o nota de credito) en proceso, asumiendo que todo el monto se recibe en la forma de pago especificada. El parametro "Mensaje" (que debe ser pasado como un literal alfanumerico o mediante la funcion CStr) incluye un mensaje de hasta 384 caracteres que se imprimira al pie de la factura.

Public Function CerrarConRecargo(TipoRecargo, TipoValor, Valor, MontoRecibido, MedioPago, Mensaje) As Integer: Inicia el cierre de una factura, pudiendo especificar un recargo (o reduccion) sobre el monto. El parametro TipoRecargo especifica la clase de modificacion a aplicar al total de la factura: el valor "A" indica que se aplicara un recargo, gravado en proprocion a los impuestos registrados, el valor "D" indica que el monto se interpretara como un descuento, y una "I" aplicara un recargo exento (del tipo, por ejemplo, de los porcentajes de servicio en los restaurantes).
El parametro TipoValor se usa para idicar si el recargo o descuento se expresa como porcentaje ("%") o como valor monetario ("$"). El Valor, entonces puede ser el monto total a recargar/descontar (si TipoValor = "$") o el porcentaje de recargo/descuento a aplicar a la factura (si TipoValor = "%"). MontoRecibido indica el monto total recibido como pago. MedioPago indica el medio de pago usado para cancelar la operacion y Mensaje es el texto que se imprimirá al pie del documento fiscal. Si no hay un recargo, el parametro Valor debe contener cero (0).

Public Function CierreX() As Integer: Ejecuta un cierre de turno (X) en la impresora fiscal.

Public Function CierreZ() As Integer: Ejecuta un cierre diario (Z) en la impresora fiscal.

Public Function EfectuarFormaPago(MedioPago [As String], MontoRecibido [As Currency]) As Integer: Se realiza como parte del cierre del documento fiscal (despues de llamar a CerrarConRecargo). Permite informarle a la impresora que se ha recibido un pago por el monto y con el medio indicados.

Public Function FinalizarCierreCupon(Mensaje [As String]) As Integer: termina el proceso de uncomprobante fiscal.Mensaje es una cadena de hasta 384 caracteres con un texto que se imprimirá al pie del comprobante. La secuencia de cierre de una factura puede ser así:

Dim pPrinterFiscal
Set pPrinterFiscal = CreateObject("Bematech.CPrinterFiscal")
...
pPrinterFiscal.PasarRecargo "I", "$", Factura.Servicio
Dim rs
Set rs = CrearObjeto("Database").Execute("SELECT Medio, Monto " & _
"FROM DetallesIngresoCaja " & _

"WHERE TransID IN " & _
"(SELECT TransID FROM MovimientosCaja " & _
"WHERE TipoDocumento = 'POS' " & _
"AND NumeroDocumento = " & Factura.Numero & ")")

Do While Not rs.EOF
If pPrinterFiscal.EfectuarFormaPago(rs(0), rs(1)) <> 0 Then
msgBox "ERROR EN EfectuarFormaPago", , "ERROR EN PRINTER FISCAL"
pPrinterFiscal.CancelarComprobante
Exit Sub
End If
rs.MoveNext
Loop
rs.Close

If pPrinterFiscal.FinalizarCierreCupon("SIN DERECHO A CREDITO FISCAL") <> 0 Then
msgBox "CerrarComprobante: " & pPrinterFiscal.EnvironmentError, , _
"ERROR EN PRINTER FISCAL"

pPrinterFiscal.CancelarComprobante
Exit Sub
End If


Public Function IniciarDevolucion(sNombreCliente [As String], sRifCliente [As String], NumeroComprobante [As Long], SerialEquipo [As String], Optional ByVal FechaComprobante = 0, Optional ByVal HoraComprobante = 0) As Integer: Abre un comprobante de devolucion o nota de credito. sNombreCliente y sRifCliente contienen el nombre y rif del cliente, respectivamente. NumeroComprobante es el numero del comprobante fiscal en devolución (puede ser cero), SerialEquipo es el serial del equipo donde se originó el comprobante en devolución; si se suministra una cadena vacía ("") se usará el serial de la impresora. FechaComprobante y HoraComprobante son la fecha y hora del comprobante devuelto. Si no se especifican, se tomarán la fecha y hora actuales.

Una vez abierto un comprobante de devolución, los detalles se pasan igual que si se tratara de una factura.

Public Function IniciarFactura(Optional sNombreCliente = "", Optional sRifCliente = "") As Integer: Inicia un comprobante de venta, pasando el nombre y RIF o CI del cliente. La maxima longitud para el nombre del cliente son 41 caracteres, y 18 para el RIF.

Public Function IniciarFacturaEx(sNombreCliente, sRifCliente, sDireccionCliente) As Integer: Inicia un comprobante de venta, pasando el nombre, RIF o CI y direccion del cliente. La direccion permite un maximo de 133 caracteres. Los saltos de linea en la direccion son ignorados y tratados como espacios.

Public Function PasarLineaDevolucion(Descripcion [As String], PrecioNeto [As Currency], Cantidad [As Double], PorcentajeImpuesto [As Double}As Integer: Pasa una linea con cantidad negativa a la factura en proceso. Es llamada automaticamente por PasarLineaFactura cuando la cantidad es negativa. La impresora Bematech acepta cantidades negativas en los renglones de factura, siempre que el valor final del documento sea positivo.

Public Function PasarLineaFactura(
Descripcion [As String], PrecioNeto [As Currency], Cantidad [As Double], PorcentajeImpuesto [As Double}As Integer: Pasa un renglon a la factura en proceso. La cantidad puede ser negativa. Se produce un error si la tasa de impuesto no esta registrada en la impresora.

Public Function PasarRecargo(TipoRecargo [As String], TipoValor [As String], Valor [As Currency]): Inicia el cierre de una factura. TipoRecargo indica si se va a reducir el monto de la factura ("D"), si lleva un recargo gravable en proporcion a las tasas de los productos incluidos ("A"), o un incremento totalmente exento ("I"). TipoValor indica cómo debe interpretarse el recargo: "%" significa que Valor indica un porcentaje de reducción o incremento, y "$" que se trata de un valor absoluto. Finalmente, Valor es el monto (si TipoValor = "$") o porcentaje (si TipoValor = "%") del incremento o reducción a aplicar.

Public Function IniciarCierreFactura(
TipoRecargo [As String], TipoValor [As String], Valor [As Currency]): Es un sinónimo (y con seguridad un mejor nombre) para la funcion anterior.

Public Function Reset() As Integer: Resetea la impresora.

Public Function SerialImpresora() As String: Devuelve el serial de la impresora.

Public Function UltimoCupon() As Long: Devuelve el numero del ultimo cupon generado.

Public Property Get PrinterType() As String: Devuelve una cadena con la identificacion del tipo de impresora ("BEMATECH").

Public Sub AnularComprobante():Anula el comprobante en proceso

Estamos autorizados para entregar el manual de referencia de programacion de estas impresoras, asi como el codigo fuente de nuestra interfaz, a nuestros ditribuidores e integradores.

Para indicar la cantidad de decimales con la que se deben expresar las cantidades, se debe escribir el valor correspondiente en la siguiente clave de registro:

HKEY_CURRENT_USER\Software\VB And VBA Program Settings\VSL\Bematech

El id del valor es Decimales y debe contener un numero con la cantidad de decimales requeridos (entre 0 y 3).