HMG 3.1.1 y WINFI32.DLL (para Argentina)

HMG en Español

Moderator: Rathinagiri

Post Reply
User avatar
mjaviergutierrez
Posts: 156
Joined: Fri Nov 30, 2012 7:51 pm
DBs Used: DBF
Location: San Lorenzo, Santa Fe, Argentina

HMG 3.1.1 y WINFI32.DLL (para Argentina)

Post by mjaviergutierrez »

Hola, me surgio que cuando compilo con la v3.1.1 la libreria winfis32.dll no funciona, volvi a compilar con 3.0.46 y anda perfecto. Puede ser por que los comandos tenenmos caracteres como la arroba, para abrir un ticketc, etc. ?Alguien tuvo un probl. similar, probaron compilar sus sistemas fiscales con 3.1.1. ? Les dejo la inquietud, no es urgente , pero... Saludos.
...
User avatar
danielmaximiliano
Posts: 2646
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: HMG 3.1.1 y WINFI32.DLL (para Argentina)

Post by danielmaximiliano »

en mi caso compile con HMG.3.1.1 y funciona correctamente. utilizo dicha libreria para ejecutar mi aplicacion TPV (P.O.S)

enviame la parte de tu aplicacion de como te comunicas con la impresora fiscal y te dire que te sucede.

utilizo Hasar 715F sobre Windows XP y sobre Windows 7 Home Premium 64
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
User avatar
mjaviergutierrez
Posts: 156
Joined: Fri Nov 30, 2012 7:51 pm
DBs Used: DBF
Location: San Lorenzo, Santa Fe, Argentina

Re: HMG 3.1.1 y WINFI32.DLL (para Argentina)

Post by mjaviergutierrez »

Ay va el codigo, espero se entienda, este mismo compilado con 3.0.46 funciona perfecto, estuve renegando toda la mañana y no pude hacerlo andar compilando con 3.1.1 . . .

*---------------------------------------*
Function ImpFiscal( cCodigoComprobante )

Local i
Local aTipoIva:={"I" ,"C" ,"E" ,"M"}
Local nSubTotal:=0

Se:=Chr( 28 )

frmVenta.btnSalir.Enabled:=.F.
frmVenta.btnTerminar.Enabled:=.F.

CLIENTES->( DBSETORDER( 1 ) )
CLIENTES->( DBSEEK( frmVenta.txtCuenta.Value ) )

AbrirPuerto( )

If CLIENTES->CUENTA=="00001" .and. cCodigoComprobante=="02"

* Abre un comprobante fiscal ticket
s = Chr( 64 ) + Chr( 28 ) + "T" + Chr( 28 ) + "T"
CallDll32 ( "MandaPaqueteFiscal" , "WINFIS32.DLL" ,handler, s )

Else

If cCodigoComprobante=="04"
s = Chr( 147 ) +Se+ "1" +Se+ "nro detallado abajo"
CallDll32 ( "MandaPaqueteFiscal" , "WINFIS32.DLL" ,handler, s )
EndIf

* Datos del comprador
s = "b" + Se + SubStr( CLIENTES->DENOMINA ,1 ,40 ) + Se + StrTran( StrTran( CLIENTES->CUIT ,"-" ) ,".") + Se +;
aTipoIva[ Val( CLIENTES->IVA ) ] +Se+ "C" + Se + AllTrim( CLIENTES->DOMICILIO )+" - "+AllTrim( CLIENTES->LOCALIDAD )
CallDll32 ( "MandaPaqueteFiscal" , "WINFIS32.DLL" ,handler, s )

If cCodigoComprobante=="04"
* Abre nota de credito
s = Chr( 128 ) +Se+ If( CLIENTES->IVA=="1" ,"R" ,"S" )
Else
* Abre un comprobante fiscal ticket factura ó nota de credito
s = "@" + Se + aTipoComp[ Val( CLIENTES->IVA ) ] + Se + "T"
EndIf

CallDll32 ( "MandaPaqueteFiscal" , "WINFIS32.DLL" ,handler, s )

EndIf

nTotalLineas:=GetProperty( "frmVenta" ,"grdItems" ,"ITEMCOUNT")

For i:=1 To nTotalLineas

aItem:=GetProperty( "frmVenta" ,"grdItems" ,"ITEM" ,i )

xDescrip:=aItem[ 2 ]
xCantidad:=Val( aItem[ 3 ] )
xUnitario:=Val( aItem[ 4 ] )
xPorcDescItem:=Val( aItem[ 5 ] )

nDescItem :=( xUnitario * xPorcDescItem ) / 100
nTotalItem:=xCantidad * ( xUnitario - nDescItem )
nSubtotal+=nTotalItem

s = "B" + Se + SubStr( xDescrip ,1 ,20 ) + Se + AllTrim( Str( xCantidad ,10 ,2 ) ) + Se + AllTrim( Str( xUnitario - nDescItem ,10 ,2 ) ) + Se + ;
"21.00" + Se + "M" + Se + "0.0" + Se + "0" + Se + "T"
CallDll32 ( "MandaPaqueteFiscal" , "WINFIS32.DLL" ,handler, s )

Next i

* Recargo / Descuento
If frmVenta.txtDescuento.Value # 0


If frmVenta.rdgDescuento.Value==1
s = "m" +Se+ "Descuento "+Str( frmVenta.txtPorcDescuento.Value ,5 ,2 )+"%" +Se+ ;
Alltrim( Str( frmVenta.txtDescuento.Value ,6 ,2 ) ) +Se+ Str( CONFIG->IVA1 ,5 ,2 ) +Se+ "m" +Se+ "0.0" +Se+ "0" +Se+ "T" +Se+ "B"
CallDll32 ( "MandaPaqueteFiscal" , "WINFIS32.DLL" ,handler, s )
Else
s = "m" +Se+ "Recargo "+Str( frmVenta.txtPorcDescuento.Value ,5 ,2 )+"%" +Se+ ;
Alltrim( Str( frmVenta.txtDescuento.Value ,6 ,2 ) ) +Se+ Str( CONFIG->IVA1 ,5 ,2 ) +Se+ "M" +Se+ "0.0" +Se+ "0" +Se+ "T" +Se+ "B"
CallDll32 ( "MandaPaqueteFiscal" , "WINFIS32.DLL" ,handler, s )
EndIf
EndIf

s='D'+ Se + SubStr( PAGOS->DESCRIP ,1 ,20 ) + Se + LTRIM(STR( frmVenta.txtTotal.Value ,9 ,2 ) ) + Se +'T'+Se+'1'
CallDll32 ( "MandaPaqueteFiscal" , "WINFIS32.DLL" ,handler, s )

If cCodigoComprobante=="04"
s = Chr( 129 )
Else
s = "E"
EndIf
CallDll32 ( "MandaPaqueteFiscal" , "WINFIS32.DLL" ,handler, s )

* Sacar numero de comprobante
s = "*"
CallDll32 ( "MandaPaqueteFiscal" , "WINFIS32.DLL" ,handler, s )

CerrarPuerto( )

frmVenta.btnSalir.Enabled:=.T.
frmVenta.btnTerminar.Enabled:=.T.


Return


*-------------------------------*
Function AbrirPuerto

Local lRetorno:=.F.

handler=CallDll32 ( "OpenComFiscal" , "WINFIS32.DLL" ,1 ,0 )

If handler >= 0

nError:=CallDll32 ( "InitFiscal" , "WINFIS32.DLL" ,handler )
If nError==0
lRetorno:=.T.
Else
MsgBox( Str( nError ) )
EndIf

Else

alerror(handler)

EndIf

Return

*-------------------------------*
Function CerrarPuerto
CallDll32 ( "CloseComFiscal" , "WINFIS32.DLL" ,handler)
Return

*-------------------------------*
function alerror(handler)
if handler =-1
msgstop('Error General','Error')
elseif handler =-2
msgstop('Handler Invalido','Error')
elseif handler =-3
msgstop('Intento de Enviar un Comando'+chr(13)+ 'Cuando se Estaba Procesando','Error')
elseif handler =-4
msgstop('Error de Comunicacion','Error')
elseif handler =-5
msgstop('Puerto ya Abierto','Error')
elseif handler =-6
msgstop('No Hay Memoria','Error')
elseif handler =-7
msgstop('El Puerto Ya Esta Abierto','Error')
elseif handler =-8
msgstop('Direccion del Buffer de Respuestas es Invalida','Error')
elseif handler =-9
msgstop('El comando no finalizo'+chr(13)+'Volvio una respuesta tipo STR_PRN','Error')
elseif handler =-10
msgstop('Proceso Cancelado por Usuario','Error')
endif

Return
...
User avatar
danielmaximiliano
Posts: 2646
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: HMG 3.1.1 y WINFI32.DLL (para Argentina)

Post by danielmaximiliano »

Hola Javier :
Utilizo otra forma para abrir un Ticket; al lado esta tu codigo.

Code: Select all

/**********************************************************/ 
Function Main                         
/**********************************************************/ 
PRIVATE hBitmap           := 0 
PUBLIC  nTicketTOTAL, cSeparador, nHandler, nError, nHandle
PUBLIC  Se                := ' '     
PUBLIC  cRecibe           := ''
PUBLIC  cTemp             := ''
PUBLIC  buffer            := 0
PUBLIC  nhandler          := 0
PUBLIC  aImagenes         := {}
PUBLIC  aCargarItems      := {} 
PUBLIC  aGS1              := {}
PUBLIC  cIniFile          := "E:\LosTilos\Fuentes\Bartools.ini"
PUBLIC  nFiscalStatus     := 0
PUBLIC  lVentas           := .F.
PUBLIC  lStock            := .F.
PUBLIC  lDeleteallItems   := .F.
PUBLIC  lConectado        := .F.
PUBLIC  lOcupado          := .F.
Recuerda que HMG.3.1.1 es unicode HMG.3.0.46 no.
revisa tu editor de texto si es Crimson tiene que decir que "Encoding Tye = ASCII"
estas utilizando CHR( nCaracter ) y para UTF-8 es otra cosa, puede probar activando "Encoding Type = UTF-8 W-BOM" y escribir dicho codigo directamente por teclado "ALT+ 28".
CHR(28) ASCII no es lo mismo CHR(28) UTF-8

MI codigo :

Code: Select all

s            := "@" + Se + "T" + Se + "T"
                 nVentasError := CallDll32 ( "MandaPaqueteFiscal" , "WINFIS32.DLL" , nHandler, s )
Tú codigo :

Code: Select all

* Abre un comprobante fiscal ticket
s = Chr( 64 ) + Chr( 28 ) + "T" + Chr( 28 ) + "T"
CallDll32 ( "MandaPaqueteFiscal" , "WINFIS32.DLL" ,handler, s )
la variable SE contiene un ESPACIO para separar en la cadena "S"

revisa la documentacion PDF de la impresora que utilizas y haz las pruebas con el utilitario PRUF.EXE que viene en Tiqueadoras si utilizas Hasar.
cualquier cosa comenta los resultados.
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
User avatar
mjaviergutierrez
Posts: 156
Joined: Fri Nov 30, 2012 7:51 pm
DBs Used: DBF
Location: San Lorenzo, Santa Fe, Argentina

Re: HMG 3.1.1 y WINFI32.DLL (para Argentina)

Post by mjaviergutierrez »

Solo para Argentina:

Sigo con el probl de la winfis32.dll, ya cuando uso la funcion para abrir el puerto el valor de handler me da error, con hmg 3.1.1 me da -2000 , pero compilo el mismo codigo con hmg 3.0.46 me da 0...
Perdon, insisto con esto porque tengo muchos sistemas que usan controlador fiscal en Argentina, y quiero pasar de 3.0.46 y me encuentro con que no funciona la parte fiscal, asi que tengo que volver a compilar con la version anterior.

Code: Select all

Function AbrirPuerto

Local lRetorno:=.F. 

handler=CallDll32 ( "OpenComFiscal" , "WINFIS32.DLL" ,1 ,0 )

si pongo msgbox( str( handler ) ), con 3.1.1 me dice -2000 y con 3.0.46 me dice 0.
Alguien ha comenzado a usar winfis32.dll con hmg 3.1.1 ?? Gracias.

PD: Yo tengo una WINFIS32.DLL del 08/04/2005 y pesa 193K, no se si existe una version posterior.

Gracias. Saludos.
...
User avatar
danielmaximiliano
Posts: 2646
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: HMG 3.1.1 y WINFI32.DLL (para Argentina)

Post by danielmaximiliano »

Hola Javier :
Te recuerdo que HMG.3.1.1 Unicode necesita trabajar con editor de Texto UTF8 w/o BOM
si necesitas enviar un comando como '@' no utilizes la funcion CHR(nCharacter) ya que las tablas de caracteres son
distintas.
te envio mi codigo para WinFis.dll que funciona correctamente.

Code: Select all

*-------------------------------------------------------------*
Function AbrirPuerto( lRetorno )
*-------------------------------------------------------------*
nHandler := CallDll32( "OpenComFiscal" , "WINFIS32.DLL" , 1 , 0 )

    If nHandler >= 0 
       Principal.StatusBar.Item(2) :="Puerto de impresora OK "
       nError := CallDll32( "InitFiscal"    , "WINFIS32.DLL" , nHandler )
       If nError = 0
         lRetorno :=  .T.
       Else 
         alerror( nError )
         Principal.StatusBar.Item(2) := " La impresora no se puede Inicializar"   
          lRetorno := .T.  
       Endif
   Else
    alerror(nHandler)
    Principal.StatusBar.Item(2) :=" Hubo un error de abrir puerto com1 "
    lRetorno := .T.      
   Endif

Return ( lRetorno )
Autoservicio Los Tilos 2012_2013-04-04_18-51-08.png
Autoservicio Los Tilos 2012_2013-04-04_18-51-08.png (1.34 MiB) Viewed 6452 times

otra recomendación, las actualizaciones de HMG corrigen defectos (bugs) si su aplicacion no presenta problemas y tampoco necesita alguna de las nuevas caracteristicas siga utilizando su version actual de HMG.
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
User avatar
mjaviergutierrez
Posts: 156
Joined: Fri Nov 30, 2012 7:51 pm
DBs Used: DBF
Location: San Lorenzo, Santa Fe, Argentina

Re: HMG 3.1.1 y WINFI32.DLL (para Argentina)

Post by mjaviergutierrez »

Hola Daniel, y muchas gracias por tomarte la molestia de contestar, vamos por parte:
A ver si me estoy perdiendo de algo, o no sé. En este foro hay un link que dice HMG News and Updates, entras ahí, tenes otro link que dice HMG 3.1.1, que te permite descargar esa version, descargo ,instalo, me deja un directorio HMG3.1.1, ahí dentro una carpeta que se llama IDE, utilizo "ese" IDE, que se llama HMG IDE Roberto Lopez .... , desde ahí creo los proyectos, y le agrego los formularios, archivos de recurso, tablas y programas, cuando trabajo con un programa (crear ó modificar) por defecto se abren el editor NOTEPAD++ V6.1.15 (UNICODE) y me manejo con ese. Tiene la opción de cambiar la codificacion a UTF8 Without BOM .
Ahora acerca de tu comentario:
"Te recuerdo que HMG.3.1.1 Unicode necesita trabajar con editor de Texto UTF8 w/o BOM". Pregunta; y de buena manera, que no se mal inteprete el tono: por que tendría que usar otro editor si NOTEPAD++ viene con el paquete de instalación ?. Repito, pregunto por que no sé, hace poco que estoy con HMG, pero hace 22 años que programo, siempre trabaje de esto, no se hacer otra cosa (ni me interesa.)
Bien, por otro lado. Acerca de tu comentario: "si necesitas enviar un comando como '@' no utilizes la funcion CHR(nCharacter) ya que las tablas de caracteres son distintas.". Tambien lo entendí, hice los cambios en la codificación del editor, y de laforma que me indicaste, pero...., el error me lo da al intentar abrir el puerto, no le he enviado ningún comando todavia, creo que lo explique en el mensaje anterior.
Yo uso tu codigo, ya que vos me lo enviaste para poder hacer funcionar la bendita winfisc32.dll.
Perdona que me explaye tanto, pero que quería explicar como uso HMG, en definitiva, lo uso tal como viene el paquete de instalarción, (se supone que así debe funcionar), caso contrario hay algun error en algo que no permite funcionar la winfis. Te agradezco mucho tu tiempo, y te mando un saludo.
...
User avatar
danielmaximiliano
Posts: 2646
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: HMG 3.1.1 y WINFI32.DLL (para Argentina)

Post by danielmaximiliano »

Hola Javier :
Puedes utilizar tu editor de texto preferido, en mi caso utilizo Crimsom Esmerdald Editor version 286.
si trabajas con Notepad o el viejo edit vas a trabajar en formato ANSI solamente, eso no quiere decir que Notepad++ o Crimson no tengas esa modalidad.
la ventaja de UNICODE (UTF-8) es que tu aplicacion se verá como es en cualquier S.O no importando el lenguaje del mismo.

ahora encontraras que hay una actualización de HMG a la versión HMG.3.1.2 con nuevas funcionalidades te dejo el link

http://ufpr.dl.sourceforge.net/project/ ... .3.1.2.exe

El inconveniente es que según el manual de referencia Winfis.dll V427 dice que la cadena de inicializacion

Code: Select all

nHandler := CallDll32( "OpenComFiscal" , "WINFIS32.DLL" , nPuerto , nMode )
devuelve >= 0 si la impresora esta inicializada, si es menor se trata un error y hay que hacer una rutina para poder procesar y recuperarse del mismo en tiempo real.

el primer valor es el puerto com donde esta conectada la impresora. en mi caso nPuerto = 1.

el segundo ( NMode ) valor = '0'
Este valor indica que el comercio de strings entre la librería winfis32.dll y el software de gestión para
puntos de venta se realizará en base a caracteres ANSI.
En este caso la librería winfis32.dll no realiza conversión alguna de los strings de comandos,
ni de los correspondientes a respuestas de la impresora fiscal HASAR.

puede llegar a ser que la impresora no interprete un comando escrito en UTF-8 puedes probar con

Code: Select all

nHandler := CallDll32( "OpenComFiscal" , "WINFIS32.DLL" , nPuerto  , 1 )
si persiste el error cambia la codificacion UTF-8 a ASCII en tu editor preferido compila y ejecuta de nuevo devolviendo los valores
de inicializacion a

Code: Select all

nHandler := CallDll32( "OpenComFiscal" , "WINFIS32.DLL" , nPuerto , 0 )

otra ¿ donde esta Winfis.dll ? se aconseja estar copiado en 'System32'

te dejo un archivo con la Winfis y otras aplicaciones par la prueba de la conexion e impresora llamado
PRUF.exe puede leer PRUF.PDF para aprender como se utiliza esta aplicacion.

si persiste el problema utiliza HMG.3.0.46 y codificacion ANSI es tu editor preferido.
es duro trabajar con Winfis.
DRIVERS AND TOOLS.rar
(3.48 MiB) Downloaded 394 times
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
User avatar
mjaviergutierrez
Posts: 156
Joined: Fri Nov 30, 2012 7:51 pm
DBs Used: DBF
Location: San Lorenzo, Santa Fe, Argentina

Re: HMG 3.1.1 y WINFI32.DLL (para Argentina)

Post by mjaviergutierrez »

Gracias Daniel ! Ya tengo trabajo para el finde , ja. Hago las pruebas y comento. Buen Fin de Semana para todos (y todas). !!
...
Post Reply