Consulta HMG_CallDLL

Forum help and suggestions to improve this forum.

Moderator: Rathinagiri

Post Reply
Mario Mansilla
Posts: 255
Joined: Wed Aug 13, 2008 2:35 pm
Location: Córdoba - Argentina
Been thanked: 2 times

Consulta HMG_CallDLL

Post by Mario Mansilla » Sun Nov 17, 2019 3:59 pm

Hola Amigos :
les hago una consulta respecto a la funcion HMG_Calldll() .
Necesito utilizar una dll , donde tengo ejemplos en la cual se usa la misma con Visual Basic , intento adecuar la sintaxis para HMG pero no logro resultados .
La dll esta dedicada a la impresión en una impresora fiscal Epson , el ticket se realiza pero en el nombre del articulo solo imprime el primer caracter y en el precio no logro que imprima los centavos sino solo los enteros .
He utilizado sin problemas otras dll donde he adaptado ejemplos realizados en Visual basic sin mayores problemas pero ahora no comprendo que puede estar pasando .
Saludos
Mario Rafael Mansilla

Hello friends :
                     I ask you a question about the HMG_Calldll () function.
I need to use a dll, where I have examples in which it is used with Visual Basic, I try to adapt the syntax for HMG but I don't get results.
The dll is dedicated to printing on an Epson fiscal printer, the ticket is made but in the name of the article it only prints the first character and in the price I can not print the pennies but only the integers.
I have used other dll without problems where I have adapted examples made in Visual basic without major problems but now I do not understand what may be happening.
Regards
Mario Rafael Mansilla


Ejemplo Visual basic 6.0
*-----------
*-- Item ---
*-----------

/*

Private Declare Function ImprimirItem Lib "EpsonFiscalInterface.dll" (ByVal id_modificador As Long,
ByVal descripcion As String,
ByVal cantidad As String,
ByVal precio As String,
ByVal id_tasa_iva As Long,
ByVal ii_id As Long,
ByVal ii_valor As String,
ByVal id_codigo As Long,
ByVal codigo As String,
ByVal codigo_unidad_matrix As String,
ByVal codigo_unidad_medida As Long) As Long

' item
error = ImprimirItem(ID_MODIFICADOR_AGREGAR_ITEM,
"Sardinas",
"1.0000",
"100.0000",
ID_TASA_IVA_21_00,
ID_IMPUESTO_NINGUNO,
"",
ID_CODIGO_INTERNO,
"CodigoInterno4567890123456789012345678901234567890",
"", AFIP_CODIGO_UNIDAD_MEDIDA_KILOGRAMO)
msg = MsgBox(error, vbOKOnly, "Error: ImprimirItem()")
*/

Ejemplo adaptado a HMG

nHandler := HMG_CallDLL("EpsonFiscalInterface.dll" , HB_DYN_CTYPE_LONG, "ImprimirItem" , ;
200 , ; // Modificador de item
"Item de prueba 0001" , ; // Descripcion
"1.5000" , ; // Cantidad (5,4)
"1.5000" , ; // Precio (7,4)
5 , ; // Tasa de iva 5 (21.00)
0 , ; // Impuesto interno 0 (ninguno)
"" , ; // Valor impuesto interno
1 , ; // Tipo codigo de producto ( 1 interno 2 matrix)
"CodigoInterno1234" , ; // Valor codigo interno
"" , ; // Valor codigo matrix
7 ) // Codigo unidad de producto

If nHandler <> 0
msginfo(Str(nHandler))
Endif

User avatar
danielmaximiliano
Posts: 2182
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Has thanked: 187 times
Been thanked: 29 times
Contact:

Post by danielmaximiliano » Mon Nov 18, 2019 10:03 am

Hola Mario :
la impresora fiscal Hasar que se maneja con DLL y OCX en mi caso utilizo las formas para enviar los comandos apropiados.

Code: Select all

PUBLIC  Se                := ''     /* Se :=Chr( 28 ) */
si es el primer articulo debo abrir el Ticket

Code: Select all

IF Ventas.Articulos.ItemCount == 0
                 s            := "@" + Se + "T" + Se + "T"
                 nVentasError := CallDll32 ( "MandaPaqueteFiscal" , "WINFIS32.DLL" , nHandler , s )
                 alerror( nVentasError )
             Endif
envio el articulo a la impresora

Code: Select all

/*---------------------------------------------------------------------------
                                       venta de articùlos                                     */
                 s := "B" + Se + "Articulos varios" + Se + "1.0" + Se + cPrecio + Se + "21.0" + Se ;
                                                         + "M" + Se + "0.0" + Se + "0" + Se + "T"
                 nVentasError := CallDll32 ( "MandaPaqueteFiscal" , "WINFIS32.DLL" , nHandler , s )
                 alerror( nVentasError )
envio pago y cierro el ticket

Code: Select all

/* Envia Pago */
s :='D'+ SE +'Su Pago: '+ SE + LTRIM( STR( Imprime.Text_2.Value , 8, 2 ) ) + SE + 'T' + SE + '0'
nVentasError := CallDll32( "MandaPaqueteFiscal" , "WINFIS32.DLL" , nHandler , s )
alerror( nVentasError )

/* Envia cierre de Ticket */
s := "E"
nVentasError := CallDll32( "MandaPaqueteFiscal" , "WINFIS32.DLL" , nHandler , s )
alerror( nVentasError )
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`.HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. : +54901169026142
Telegram Name : DaNiElMaXiMiLiAnO

Mario Mansilla
Posts: 255
Joined: Wed Aug 13, 2008 2:35 pm
Location: Córdoba - Argentina
Been thanked: 2 times

Post by Mario Mansilla » Mon Nov 18, 2019 3:36 pm

Hola Daniel :
muchas gracias por tu repuesta .
Que version de HMG usas ? . Yo utilizo la 3.4.4 y debi cambiar hace bastante la funcion CallDll32() porque no funcionaba correctamente por HMG_CallDll() desde ya varias versiones anteriores de HMG actual .
Para los equipos Hasar la funcion HMG_CallDll me funciona correctamente al igual que los OCX , el problema es con las DLL y OCX de Epson que me provocan ese error que menciono en las DLL , y el control ocx que proveen en la pagina imprime correctamente , pero consume memoria y no la libera cuando termina los comprobantes por lo cual en un punto de venta que realiza mas de 500 tickets por turno cuando se acaba los recursos de memoria de la pc , el sistema simplemente se sale sin dejar ningun error registrado en el archivo errorlog .
He consultado con colegas que usan Visual Basic y .net y a ellos el codigo que postee les funciona sin problemas por eso realize la consulta por las dudas
las dll realizadas para visual basic o .net presentan inconvenientes con HMG .
Consulto a Epson Argentina y me dan ejemplos para visual Basic y .net . Los comandos que presentan inconvenientes son los que llevan muchos parametros como el envio de item de venta , el resto de los comandos como la apertura de comprobante , cierrex , cierrez , auditoria los realiza sin problemas .

Saludos cordiales
Mario Rafael Mansilla

User avatar
danielmaximiliano
Posts: 2182
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Has thanked: 187 times
Been thanked: 29 times
Contact:

Post by danielmaximiliano » Mon Nov 18, 2019 4:48 pm

Mario : en su tiempo ya se habia tocado ese tema aqui viewtopic.php?f=20&t=4308&start=10

y Claudio te habia dado una solucion aqui viewtopic.php?f=5&t=4313&start=20#p41157
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`.HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. : +54901169026142
Telegram Name : DaNiElMaXiMiLiAnO

User avatar
danielmaximiliano
Posts: 2182
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Has thanked: 187 times
Been thanked: 29 times
Contact:

Post by danielmaximiliano » Mon Nov 18, 2019 5:11 pm

poderias publicar la porcion de tu codigo en la que abres puerto, envias los comandos de apertura de ticket fiscal y como envias el item de articulo
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`.HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. : +54901169026142
Telegram Name : DaNiElMaXiMiLiAnO

Mario Mansilla
Posts: 255
Joined: Wed Aug 13, 2008 2:35 pm
Location: Córdoba - Argentina
Been thanked: 2 times

Post by Mario Mansilla » Mon Nov 18, 2019 7:56 pm

Hola Daniel :
si asi es por eso me llamo la atención que uses CallDll32() en lugar de HMG_CallDll() .
Te adjunto el prg y el pdf de la libreria no me lo deja adjuntar .

*--------------------------
* Programa : Ticket.prg
* Contenido : Ticket
*--------------------------

#include <hmg.ch>
#include "hbdyn.ch"

*---------------
Procedure Ticket
*---------------
Local Continuar := .T.
Local nHandler

Numero := "00000000"

Declare Window Main

*-- Abrir (Esto funciona sin problemas)
nHandler := HMG_CallDLL("EpsonFiscalInterface.dll" , HB_DYN_CTYPE_INT, "AbrirComprobante" , 1 )
If nHandler <> 0
msginfo(Str(nHandler))
Endif
*--

*-----------
*-- Item ---
*-----------

/*

Private Declare Function ImprimirItem Lib "EpsonFiscalInterface.dll" (ByVal id_modificador As Long,
ByVal descripcion As String,
ByVal cantidad As String,
ByVal precio As String,
ByVal id_tasa_iva As Long,
ByVal ii_id As Long,
ByVal ii_valor As String,
ByVal id_codigo As Long,
ByVal codigo As String,
ByVal codigo_unidad_matrix As String,
ByVal codigo_unidad_medida As Long) As Long

' item
error = ImprimirItem(ID_MODIFICADOR_AGREGAR_ITEM,
"Sardinas",
"1.0000",
"100.0000",
ID_TASA_IVA_21_00,
ID_IMPUESTO_NINGUNO,
"",
ID_CODIGO_INTERNO,
"CodigoInterno4567890123456789012345678901234567890",
"", AFIP_CODIGO_UNIDAD_MEDIDA_KILOGRAMO)
msg = MsgBox(error, vbOKOnly, "Error: ImprimirItem()")
*/

nHandler := HMG_CallDLL("EpsonFiscalInterface.dll" , HB_DYN_CTYPE_LONG, "ImprimirItem" , ;
200 , ; // Modificador de item
"Item de prueba 0001" , ; // Descripcion (aqui solo imprime "I"
"1,5000" , ; // Cantidad (5,4) aqui no toma los decimales
"1,5000" , ; // Precio (7,4) aqui no toma los decimales
5 , ; // Tasa de iva 5 (21.00)
0 , ; // Impuesto interno 0 (ninguno)
"" , ; // Valor impuesto interno
1 , ; // Tipo codigo de producto ( 1 interno 2 matrix)
"CodigoInterno1234" , ; // Valor codigo interno
"" , ; // Valor codigo matrix
7 ) // Codigo unidad de producto

If nHandler <> 0
msginfo(Str(nHandler))
Endif


*-----------
*-- Pago ---
*-----------

nHandler := HMG_CallDLL("EpsonFiscalInterface.dll" , HB_DYN_CTYPE_INT, "CargarPago" , ;
200 , ;
8 , ;
1 , ;
"1.00" , ;
"" , ;
"EFECTIVO" , ; (aqui solo imprime "E"
"" , ;
"" )

If nHandler <> 0
msginfo(Str(nHandler))
Endif

nHandler := HMG_CallDLL("EpsonFiscalInterface.dll" , HB_DYN_CTYPE_INT, "ImprimirSubtotal" )

If nHandler <> 0
msginfo(Str(nHandler))
Endif


*-------------
*-- Cierre ---
*-------------
nHandler := HMG_CallDLL("EpsonFiscalInterface.dll" , HB_DYN_CTYPE_INT, "CerrarComprobante" )

If nHandler <> 0
msginfo(Str(nHandler))
Endif

/*
*-------------
*-- Consulta ---
*-------------
nHandler := HMG_CallDLL("EpsonFiscalInterface.dll" , HB_DYN_CTYPE_INT, "ConsultarNumeroComprobanteUltimo" , ;
"83" , ;
@Numero , ;
Len(Numero) )

If nHandler <> 0
msginfo(Str(nHandler),"Error")
Else
msginfo(Numero)
Endif
*/

Return nil

Post Reply