Compatibilidad de Impresora Fiscal Epson TM-T900FA?

11,126 views
Skip to first unread message

globalso...@yahoo.com.ar

unread,
May 12, 2017, 8:10:12 PM5/12/17
to Comunidad de Visual Foxpro en Español
Hola gente, como están? Escribo para consultarles si a alguno le ha tocado trabajar con las nuevas impresoras fiscales de Epson, las TM-T900FA, y si les han generado problemas de compatibilidad con las impresoras anteriores (por ejemplo TM-2000AF+)

Desde ya gracias y saludos a la comunidad.

Fabio Castro

Pedro Wayar

unread,
Jul 17, 2017, 10:42:22 PM7/17/17
to Comunidad de Visual Foxpro en Español
HOLA COMO ANDAS, COMO TE FUE CO LA IMPRESORA FISCAL NUEVA TM-T900AF
EpsonFiscalDriver.pdf

Fabián Jara

unread,
Nov 16, 2017, 7:15:10 AM11/16/17
to Comunidad de Visual Foxpro en Español
Hola Fabio. Pudiste hacer andar el aparatito? En mi caso tengo una TM-T900FA también. conectada por usb pero no hay forma de hacerla andar. Me pide puerto com

Ariel Octavio D'Alfeo

unread,
Nov 16, 2017, 7:21:23 AM11/16/17
to publice...@googlegroups.com
Yo justamente estoy con el desarrollo de la TM900 2da Genereacion. Con  las anteriores usabamos unas Dll que vendian en www.impresoras-fiscales.com.ar, pero estas dll no son compatibles con la nueva generación. Asique estoy desarrollando todo desde cero utilizando la dll de alto nivel de epson
--

Ariel Octavio D'Alfeo
Córdoba, Argentina

Ariel Octavio D'Alfeo

unread,
Nov 16, 2017, 7:31:58 AM11/16/17
to publice...@googlegroups.com
Este es el instructivo de la dll de alto nivel, no esta completa pero se pueden enviar comandos como antes para las funciones que le faltan "Supuestamente" porque lo intente con el metodo que dice en el PDF pero no pude lograr que funcione, ya pregunte a Epson, pero no tuve respuesta.

EpsonFiscalInterfaceSpec.pdf

Pedro Wayar

unread,
Nov 16, 2017, 7:38:10 AM11/16/17
to publice...@googlegroups.com
Avisen ya lo tengo. Funcionando. 

Ariel Octavio D'Alfeo

unread,
Nov 16, 2017, 7:45:11 AM11/16/17
to publice...@googlegroups.com
Ya que estas, te consulto, como hiciste para saber el punto de venta que tiene configurada la Impresora?

Pedro Wayar

unread,
Nov 16, 2017, 7:59:33 AM11/16/17
to publice...@googlegroups.com
Al medio dia t paso como hice i

Ariel Octavio D'Alfeo

unread,
Nov 16, 2017, 8:00:56 AM11/16/17
to publice...@googlegroups.com
dale! muchas gracias!

Fabián Jara

unread,
Nov 16, 2017, 8:05:24 AM11/16/17
to Comunidad de Visual Foxpro en Español
Chusmeando un poco pude encontrar este enlace. Es el driver que configura un puerto USB como serie. Para todo aquel que la quiera hacer andar por conexion USB
https://download.epson-biz.com/modules/pos/index.php?page=soft&scat=36


El viernes, 12 de mayo de 2017, 21:10:12 (UTC-3), globalso...@yahoo.com.ar escribió:

Fabián Jara

unread,
Nov 17, 2017, 6:27:16 AM11/17/17
to publice...@googlegroups.com
Hola Pedro. Me contás como hiciste a mí también. Gracias!

Libre de virus. www.avg.com
--
Fabián Horacio Jara - Analista de Sistemas en Computación

Fabián Jara

unread,
Nov 17, 2017, 1:31:01 PM11/17/17
to publice...@googlegroups.com
Alguien pudo tirar un ticket con las interfaces de Epson? OCX y/o DLL`s?

Ariel Octavio D'Alfeo

unread,
Nov 17, 2017, 2:05:47 PM11/17/17
to publice...@googlegroups.com
Si, yo estoy usando la Dll de alto nivel, es bastante fácil de usar
EpsonFiscalInterfaceSpec.pdf
visual_foxpro_6.7z

Fabián Jara

unread,
Nov 17, 2017, 2:17:10 PM11/17/17
to publice...@googlegroups.com
Es la interfaz que intenté usar. Pero me marca error de registro la dll. Tengo win 10 64 bits con vfp9 SP1. Vos la pudiste registrar sin problemas? Que sistema operativo y que version de foxpro usas?

Pedro Wayar

unread,
Nov 17, 2017, 2:23:07 PM11/17/17
to publice...@googlegroups.com
Envien mail. Pjw...@hotmail.com
Envio codigo

Ariel Octavio D'Alfeo

unread,
Nov 17, 2017, 3:03:10 PM11/17/17
to publice...@googlegroups.com
No hay que registrarla, solo la pones en el Apth del ejecutable y funciona, fiajte el ejemplo que te adjunte

Fabián Jara

unread,
Nov 17, 2017, 3:05:54 PM11/17/17
to publice...@googlegroups.com
Disculpá Ariel, sería el path? Colocás el dll en la carpeta donde está el ejecutable del sistema y despúes se crea el objeto?

Ariel Octavio D'Alfeo

unread,
Nov 17, 2017, 3:09:19 PM11/17/17
to publice...@googlegroups.com
No creas el objeto, Declaras los metodos de la dll y despues los usas, pudiste ver el ejemplo??

Fabián Jara

unread,
Nov 17, 2017, 3:16:47 PM11/17/17
to publice...@googlegroups.com
Sí. Solo que no los probé. Me rompí el mate intentando registrar la dll. En un ratito lo pruebo

Ariel Octavio D'Alfeo

unread,
Nov 21, 2017, 8:07:18 AM11/21/17
to Javier Brumatti, publice...@googlegroups.com
Adjunto un ejemplo de ticket 

El 18 de noviembre de 2017, 16:26, Javier Brumatti <jbru...@amr.org.ar> escribió:
Hola Ariel!
Tendrias algun ejemplo simple de impresion de ticktek ?

Gracias!
visual_foxpro_EpsonTm900_Ejemplo_Ticket.7z

Ariel Octavio D'Alfeo

unread,
Nov 21, 2017, 9:19:48 AM11/21/17
to publice...@googlegroups.com
Yo sigo con el problema de recuperar algunos datos, alguien sabe como recuperar alguno de estos?

  • Punto De Venta Impresora Fiscal
  • Caja Impresora Fiscal
  • Nro Ultimo Cierre Z
  • cantidad de notas de credito
  • cantidad de dnfh (documentos NO Fiscales homologados) 
  • cantidad de dnf (documentos NO Fiscales)
  • cantidad de df (documentos Fiscales)
  • cantidad facturas bc 
  • cantidad facturas A  
  • Nro ultima Factura fiscal
  • total de ventas $
  • total de impuestos $
  • total de recepción de dinero $
  • ultima factura A
  • ultima nota de crédito  A    
  • ultima nota de credito  BC
  • Ultimo Remito   
  • Total $ de nota de credito

Ariel

unread,
Nov 21, 2017, 2:35:06 PM11/21/17
to Comunidad de Visual Foxpro en Español
Hola Pedro!, podrias compartir como hiciste para recuperar los datos de la impresora tales como:


  • Punto De Venta Impresora Fiscal
  • Caja Impresora Fiscal
  • Nro Ultimo Cierre Z
  • cantidad de notas de credito
  • cantidad de dnfh (documentos NO Fiscales homologados) 
  • cantidad de dnf (documentos NO Fiscales)
  • cantidad de df (documentos Fiscales)
  • cantidad facturas bc 
  • cantidad facturas A  
  • Nro ultima Factura fiscal
  • total de ventas $
  • total de impuestos $
  • total de recepción de dinero $
  • ultima factura A
  • ultima nota de crédito  A    
  • ultima nota de credito  BC
  • Ultimo Remito   
  • Total $ de nota de credito

gracias

Mariano Lema

unread,
Jan 3, 2018, 9:31:41 PM1/3/18
to Comunidad de Visual Foxpro en Español
Hola Ariel, te queria preguntar, tengo un sistema php de punto de venta, tengo que enlazar el sistema de impresora fiscal en cuestion pero no se por donde empezar, para hacer una conexion bidireccional donde recupero los datos y mando a imprimir e ingresar los datos en la memoria fiscal de la misma, no termino de entender como funciona la impresora fiscal, si vos o alguno me podrian dar una mano se los agradeceria,

Pedro Wayar

unread,
Jan 4, 2018, 5:36:18 AM1/4/18
to publice...@googlegroups.com
Edcribime a pjw...@hotmail.com y t ayudo

Ariel Octavio D'Alfeo

unread,
Jan 4, 2018, 10:00:23 AM1/4/18
to publice...@googlegroups.com
Hola Mariano, es bastante fácil porque epson desarrollo una Dll de alto nivel. No se como se manejan las dll en PHP, pero al poder instanciarla solo tenes que usar los metodos como configurarPuerto(), configurarVelocidad(), conectar(), etc.
también tiene otros métodos, como guardar un archivo de comandos en una carpeta especial y la dll chequea constantemente y si existe un archivo con comandos lo ejecuta y devuelve la respuesta en otro archivo.

podes comunicarte con la gente de Epson argentina soporte_sd...@epson.com.ar, ellos dan cursos y soporte para poder implementarla

Primo Tango

unread,
Jan 10, 2018, 1:43:14 PM1/10/18
to Comunidad de Visual Foxpro en Español
Hola como va,  me tira siempre el error Largo de campo Invalido , estoy usando la DLL en el comando ImprimirItem 

 err = ImprimirItem(200,'detalle producto','1.0000','10.0000',5,1,'0.0000',1,xcod,'0')   && da error 

miro el manual y sigo las pautas de formato pero no se que onda ...

alguien sabe que puede pasar o si algo cambio ?? 




El jueves, 4 de enero de 2018, 12:00:23 (UTC-3), Ariel escribió:
Hola Mariano, es bastante fácil porque epson desarrollo una Dll de alto nivel. No se como se manejan las dll en PHP, pero al poder instanciarla solo tenes que usar los metodos como configurarPuerto(), configurarVelocidad(), conectar(), etc.
también tiene otros métodos, como guardar un archivo de comandos en una carpeta especial y la dll chequea constantemente y si existe un archivo con comandos lo ejecuta y devuelve la respuesta en otro archivo.

podes comunicarte con la gente de Epson argentina soporte_sd_arge...@epson.com.ar, ellos dan cursos y soporte para poder implementarla

Ariel Octavio D'Alfeo

unread,
Jan 10, 2018, 1:48:13 PM1/10/18
to publice...@googlegroups.com
proba sin los puntos decimales

err = ImprimirItem(200,'detalle producto','1','10',5,1,'0',1,xcod,'0')

El 10 de enero de 2018, 15:43, Primo Tango <primot...@gmail.com> escribió:
Hola como va,  me tira siempre el error Largo de campo Invalido , estoy usando la DLL en el comando ImprimirItem 

 err = ImprimirItem(200,'detalle producto','1.0000','10.0000',5,1,'0.0000',1,xcod,'0')   && da error 

miro el manual y sigo las pautas de formato pero no se que onda ...

alguien sabe que puede pasar o si algo cambio ?? 




El jueves, 4 de enero de 2018, 12:00:23 (UTC-3), Ariel escribió:
Hola Mariano, es bastante fácil porque epson desarrollo una Dll de alto nivel. No se como se manejan las dll en PHP, pero al poder instanciarla solo tenes que usar los metodos como configurarPuerto(), configurarVelocidad(), conectar(), etc.
también tiene otros métodos, como guardar un archivo de comandos en una carpeta especial y la dll chequea constantemente y si existe un archivo con comandos lo ejecuta y devuelve la respuesta en otro archivo.

podes comunicarte con la gente de Epson argentina soporte_sd_argentina@epson.com.ar, ellos dan cursos y soporte para poder implementarla

Primo Tango

unread,
Jan 10, 2018, 3:32:26 PM1/10/18
to Comunidad de Visual Foxpro en Español
NO HAY CASO , con punto con coma sin punto sin coma con los ceros a la izquiera , sin los ceros , no va , es muy raro  , me tira siempre el mismo error de largo de campo 


El miércoles, 10 de enero de 2018, 15:48:13 (UTC-3), Ariel escribió:
proba sin los puntos decimales

err = ImprimirItem(200,'detalle producto','1','10',5,1,'0',1,xcod,'0')
El 10 de enero de 2018, 15:43, Primo Tango <primot...@gmail.com> escribió:
Hola como va,  me tira siempre el error Largo de campo Invalido , estoy usando la DLL en el comando ImprimirItem 

 err = ImprimirItem(200,'detalle producto','1.0000','10.0000',5,1,'0.0000',1,xcod,'0')   && da error 

miro el manual y sigo las pautas de formato pero no se que onda ...

alguien sabe que puede pasar o si algo cambio ?? 




El jueves, 4 de enero de 2018, 12:00:23 (UTC-3), Ariel escribió:
Hola Mariano, es bastante fácil porque epson desarrollo una Dll de alto nivel. No se como se manejan las dll en PHP, pero al poder instanciarla solo tenes que usar los metodos como configurarPuerto(), configurarVelocidad(), conectar(), etc.
también tiene otros métodos, como guardar un archivo de comandos en una carpeta especial y la dll chequea constantemente y si existe un archivo con comandos lo ejecuta y devuelve la respuesta en otro archivo.

podes comunicarte con la gente de Epson argentina soporte_sd_arge...@epson.com.ar, ellos dan cursos y soporte para poder implementarla

Pedro Wayar

unread,
Jan 10, 2018, 3:33:41 PM1/10/18
to publice...@googlegroups.com
A la noche. T paso

El 10/1/2018 17:32, "Primo Tango" <primot...@gmail.com> escribió:
NO HAY CASO , con punto con coma sin punto sin coma con los ceros a la izquiera , sin los ceros , no va , es muy raro  , me tira siempre el mismo error de largo de campo 


El miércoles, 10 de enero de 2018, 15:48:13 (UTC-3), Ariel escribió:
proba sin los puntos decimales

err = ImprimirItem(200,'detalle producto','1','10',5,1,'0',1,xcod,'0')
El 10 de enero de 2018, 15:43, Primo Tango <primot...@gmail.com> escribió:
Hola como va,  me tira siempre el error Largo de campo Invalido , estoy usando la DLL en el comando ImprimirItem 

 err = ImprimirItem(200,'detalle producto','1.0000','10.0000',5,1,'0.0000',1,xcod,'0')   && da error 

miro el manual y sigo las pautas de formato pero no se que onda ...

alguien sabe que puede pasar o si algo cambio ?? 




El jueves, 4 de enero de 2018, 12:00:23 (UTC-3), Ariel escribió:
Hola Mariano, es bastante fácil porque epson desarrollo una Dll de alto nivel. No se como se manejan las dll en PHP, pero al poder instanciarla solo tenes que usar los metodos como configurarPuerto(), configurarVelocidad(), conectar(), etc.
también tiene otros métodos, como guardar un archivo de comandos en una carpeta especial y la dll chequea constantemente y si existe un archivo con comandos lo ejecuta y devuelve la respuesta en otro archivo.

podes comunicarte con la gente de Epson argentina soporte_sd_argentina@epson.com.ar, ellos dan cursos y soporte para poder implementarla

Primo Tango

unread,
Jan 10, 2018, 3:36:03 PM1/10/18
to Comunidad de Visual Foxpro en Español
cantidad string Multiplicidad del ítem. Expresado bajo la siguiente precisión: “nnnnn.nnnn”.  (5,4)
precio string Precio unitario del ítem. Expresado bajo la siguiente precisión: “nnnnnnn.nnnn”.  (7,4)

este dice el manual 

Primo Tango

unread,
Jan 10, 2018, 3:47:12 PM1/10/18
to Comunidad de Visual Foxpro en Español
dale gracias 


El miércoles, 10 de enero de 2018, 17:33:41 (UTC-3), Pedro Wayar escribió:
A la noche. T paso
El 10/1/2018 17:32, "Primo Tango" <primot...@gmail.com> escribió:
NO HAY CASO , con punto con coma sin punto sin coma con los ceros a la izquiera , sin los ceros , no va , es muy raro  , me tira siempre el mismo error de largo de campo 


El miércoles, 10 de enero de 2018, 15:48:13 (UTC-3), Ariel escribió:
proba sin los puntos decimales

err = ImprimirItem(200,'detalle producto','1','10',5,1,'0',1,xcod,'0')
El 10 de enero de 2018, 15:43, Primo Tango <primot...@gmail.com> escribió:
Hola como va,  me tira siempre el error Largo de campo Invalido , estoy usando la DLL en el comando ImprimirItem 

 err = ImprimirItem(200,'detalle producto','1.0000','10.0000',5,1,'0.0000',1,xcod,'0')   && da error 

miro el manual y sigo las pautas de formato pero no se que onda ...

alguien sabe que puede pasar o si algo cambio ?? 




El jueves, 4 de enero de 2018, 12:00:23 (UTC-3), Ariel escribió:
Hola Mariano, es bastante fácil porque epson desarrollo una Dll de alto nivel. No se como se manejan las dll en PHP, pero al poder instanciarla solo tenes que usar los metodos como configurarPuerto(), configurarVelocidad(), conectar(), etc.
también tiene otros métodos, como guardar un archivo de comandos en una carpeta especial y la dll chequea constantemente y si existe un archivo con comandos lo ejecuta y devuelve la respuesta en otro archivo.

podes comunicarte con la gente de Epson argentina soporte_sd_arge...@epson.com.ar, ellos dan cursos y soporte para poder implementarla

Pedro Wayar

unread,
Jan 10, 2018, 3:47:53 PM1/10/18
to publice...@googlegroups.com
A la noche t paso ya lo tengo funcionando

El 10/1/2018 17:36, "Primo Tango" <primot...@gmail.com> escribió:
cantidad string Multiplicidad del ítem. Expresado bajo la siguiente precisión: “nnnnn.nnnn”.  (5,4)
precio string Precio unitario del ítem. Expresado bajo la siguiente precisión: “nnnnnnn.nnnn”.  (7,4)

este dice el manual 

El miércoles, 10 de enero de 2018, 17:32:26 (UTC-3), Primo Tango escribió:
NO HAY CASO , con punto con coma sin punto sin coma con los ceros a la izquiera , sin los ceros , no va , es muy raro  , me tira siempre el mismo error de largo de campo 


El miércoles, 10 de enero de 2018, 15:48:13 (UTC-3), Ariel escribió:
proba sin los puntos decimales

err = ImprimirItem(200,'detalle producto','1','10',5,1,'0',1,xcod,'0')
El 10 de enero de 2018, 15:43, Primo Tango <primot...@gmail.com> escribió:
Hola como va,  me tira siempre el error Largo de campo Invalido , estoy usando la DLL en el comando ImprimirItem 

 err = ImprimirItem(200,'detalle producto','1.0000','10.0000',5,1,'0.0000',1,xcod,'0')   && da error 

miro el manual y sigo las pautas de formato pero no se que onda ...

alguien sabe que puede pasar o si algo cambio ?? 




El jueves, 4 de enero de 2018, 12:00:23 (UTC-3), Ariel escribió:
Hola Mariano, es bastante fácil porque epson desarrollo una Dll de alto nivel. No se como se manejan las dll en PHP, pero al poder instanciarla solo tenes que usar los metodos como configurarPuerto(), configurarVelocidad(), conectar(), etc.
también tiene otros métodos, como guardar un archivo de comandos en una carpeta especial y la dll chequea constantemente y si existe un archivo con comandos lo ejecuta y devuelve la respuesta en otro archivo.

podes comunicarte con la gente de Epson argentina soporte_sd_argentina@epson.com.ar, ellos dan cursos y soporte para poder implementarla

Primo Tango

unread,
Jan 10, 2018, 4:42:40 PM1/10/18
to Comunidad de Visual Foxpro en Español
barbaro ! 


El miércoles, 10 de enero de 2018, 17:47:53 (UTC-3), Pedro Wayar escribió:
A la noche t paso ya lo tengo funcionando
El 10/1/2018 17:36, "Primo Tango" <primot...@gmail.com> escribió:
cantidad string Multiplicidad del ítem. Expresado bajo la siguiente precisión: “nnnnn.nnnn”.  (5,4)
precio string Precio unitario del ítem. Expresado bajo la siguiente precisión: “nnnnnnn.nnnn”.  (7,4)

este dice el manual 

El miércoles, 10 de enero de 2018, 17:32:26 (UTC-3), Primo Tango escribió:
NO HAY CASO , con punto con coma sin punto sin coma con los ceros a la izquiera , sin los ceros , no va , es muy raro  , me tira siempre el mismo error de largo de campo 


El miércoles, 10 de enero de 2018, 15:48:13 (UTC-3), Ariel escribió:
proba sin los puntos decimales

err = ImprimirItem(200,'detalle producto','1','10',5,1,'0',1,xcod,'0')
El 10 de enero de 2018, 15:43, Primo Tango <primot...@gmail.com> escribió:
Hola como va,  me tira siempre el error Largo de campo Invalido , estoy usando la DLL en el comando ImprimirItem 

 err = ImprimirItem(200,'detalle producto','1.0000','10.0000',5,1,'0.0000',1,xcod,'0')   && da error 

miro el manual y sigo las pautas de formato pero no se que onda ...

alguien sabe que puede pasar o si algo cambio ?? 




El jueves, 4 de enero de 2018, 12:00:23 (UTC-3), Ariel escribió:
Hola Mariano, es bastante fácil porque epson desarrollo una Dll de alto nivel. No se como se manejan las dll en PHP, pero al poder instanciarla solo tenes que usar los metodos como configurarPuerto(), configurarVelocidad(), conectar(), etc.
también tiene otros métodos, como guardar un archivo de comandos en una carpeta especial y la dll chequea constantemente y si existe un archivo con comandos lo ejecuta y devuelve la respuesta en otro archivo.

podes comunicarte con la gente de Epson argentina soporte_sd_arge...@epson.com.ar, ellos dan cursos y soporte para poder implementarla

Mariano Lema

unread,
Jan 10, 2018, 5:24:30 PM1/10/18
to publice...@googlegroups.com
Hola Pedro, cómo estas, estoy buscando como implementar la impresora con mi sistema de puntos de venta está desarrollado en PHP y MySQL trabaja en servidor local xampp, me darías una mano ? Dónde está la dll de alto nivel? Cómo me la descargo
Por dónde empiezo?

Gracias 
Pd si podes pasarme algunos ejemplos te agradecería , gracias

Pedro Wayar

unread,
Jan 10, 2018, 5:53:51 PM1/10/18
to publice...@googlegroups.com
De donde sos pasame tu celular o llamame. 3513131557

Pedro Wayar

unread,
Jan 10, 2018, 7:58:57 PM1/10/18
to publice...@googlegroups.com
ACA TE MANDO COMO VA ESO ESTA FUNCIONANDO CUALQUIER COSA PREGUNTA 
V_descripcion = Alltrim(fventa.cntventa.lblarticulo.Caption)
V_cantidad = Substr(fventa.cntventa.lblmult.Caption,2,10)
V_precio = fventa.cntventa.lblprecio.Caption

Do Case
Case articulos.aiva = 21.00
V_iva = 5
Case articulos.aiva = 10.5
V_iva = 4
Case articulos.aiva = 0.00
V_iva = 1
Otherwise
V_iva = 5
Endcase
V_INTER = 0
V_INTERMONTO = "0.00"
V_cod=1
V_codigo = articulos.aNRO
V_unidad=""
Do Case
Case articulos.atipoart = 1
V_códigounidad = 14
Otherwise
V_códigounidad = 7
Endcase
If Alltrim(fventa.cntventa.lblcomp.Caption) =  "FACTURA 'A'" Or Alltrim(fventa.cntventa.lblcomp.Caption) = "N. Credito 'A'"
If V_iva = 5
V_precio = Str(Round(Val(V_precio) /1.21,3),10,2)
Endif
If V_iva = 4
V_precio = Str(Round(Val(V_precio) /1.105,3),10,2)
Endif
Endif
V_ERROR = ImprimirItem(200,V_descripcion,V_cantidad,V_precio,V_iva,V_INTER,V_INTERMONTO,V_cod,V_codigo,V_unidad,V_códigounidad)


Libre de virus. www.avg.com
El 10 de enero de 2018, 17:47, Primo Tango<primot...@gmail.com> escribió:
dale gracias 

El miércoles, 10 de enero de 2018, 17:33:41 (UTC-3), Pedro Wayar escribió:
A la noche. T paso
El 10/1/2018 17:32, "Primo Tango" <primot...@gmail.com> escribió:
NO HAY CASO , con punto con coma sin punto sin coma con los ceros a la izquiera , sin los ceros , no va , es muy raro  , me tira siempre el mismo error de largo de campo 


El miércoles, 10 de enero de 2018, 15:48:13 (UTC-3), Ariel escribió:
proba sin los puntos decimales

err = ImprimirItem(200,'detalle producto','1','10',5,1,'0',1,xcod,'0')
El 10 de enero de 2018, 15:43, Primo Tango <primot...@gmail.com> escribió:
Hola como va,  me tira siempre el error Largo de campo Invalido , estoy usando la DLL en el comando ImprimirItem 

 err = ImprimirItem(200,'detalle producto','1.0000','10.0000',5,1,'0.0000',1,xcod,'0')   && da error 

miro el manual y sigo las pautas de formato pero no se que onda ...

alguien sabe que puede pasar o si algo cambio ?? 




El jueves, 4 de enero de 2018, 12:00:23 (UTC-3), Ariel escribió:
Hola Mariano, es bastante fácil porque epson desarrollo una Dll de alto nivel. No se como se manejan las dll en PHP, pero al poder instanciarla solo tenes que usar los metodos como configurarPuerto(), configurarVelocidad(), conectar(), etc.
también tiene otros métodos, como guardar un archivo de comandos en una carpeta especial y la dll chequea constantemente y si existe un archivo con comandos lo ejecuta y devuelve la respuesta en otro archivo.

podes comunicarte con la gente de Epson argentina soporte_sd_argentina@epson.com.ar, ellos dan cursos y soporte para poder implementarla

Primo Tango

unread,
Jan 10, 2018, 8:07:27 PM1/10/18
to Comunidad de Visual Foxpro en Español
Ya saliio ok lo solucione , tenia mal declarada la funcion ! entonces se intercalaban los parametros , el formato esta ok 

gracias ! 

Pedro Wayar

unread,
Jan 10, 2018, 8:13:28 PM1/10/18
to publice...@googlegroups.com
de 10

Libre de virus. www.avg.com
El 10 de enero de 2018, 22:07, Primo Tango<primot...@gmail.com> escribió:
Ya saliio ok lo solucione , tenia mal declarada la funcion ! entonces se intercalaban los parametros , el formato esta ok 

gracias ! 


El miércoles, 10 de enero de 2018, 18:42:40 (UTC-3), Primo Tango escribió:
barbaro ! 

El miércoles, 10 de enero de 2018, 17:47:53 (UTC-3), Pedro Wayar escribió:
A la noche t paso ya lo tengo funcionando
El 10/1/2018 17:36, "Primo Tango" <primot...@gmail.com> escribió:
cantidad string Multiplicidad del ítem. Expresado bajo la siguiente precisión: “nnnnn.nnnn”.  (5,4)
precio string Precio unitario del ítem. Expresado bajo la siguiente precisión: “nnnnnnn.nnnn”.  (7,4)

este dice el manual 

El miércoles, 10 de enero de 2018, 17:32:26 (UTC-3), Primo Tango escribió:
NO HAY CASO , con punto con coma sin punto sin coma con los ceros a la izquiera , sin los ceros , no va , es muy raro  , me tira siempre el mismo error de largo de campo 


El miércoles, 10 de enero de 2018, 15:48:13 (UTC-3), Ariel escribió:
proba sin los puntos decimales

err = ImprimirItem(200,'detalle producto','1','10',5,1,'0',1,xcod,'0')
El 10 de enero de 2018, 15:43, Primo Tango <primot...@gmail.com> escribió:
Hola como va,  me tira siempre el error Largo de campo Invalido , estoy usando la DLL en el comando ImprimirItem 

 err = ImprimirItem(200,'detalle producto','1.0000','10.0000',5,1,'0.0000',1,xcod,'0')   && da error 

miro el manual y sigo las pautas de formato pero no se que onda ...

alguien sabe que puede pasar o si algo cambio ?? 




El jueves, 4 de enero de 2018, 12:00:23 (UTC-3), Ariel escribió:
Hola Mariano, es bastante fácil porque epson desarrollo una Dll de alto nivel. No se como se manejan las dll en PHP, pero al poder instanciarla solo tenes que usar los metodos como configurarPuerto(), configurarVelocidad(), conectar(), etc.
también tiene otros métodos, como guardar un archivo de comandos en una carpeta especial y la dll chequea constantemente y si existe un archivo con comandos lo ejecuta y devuelve la respuesta en otro archivo.

podes comunicarte con la gente de Epson argentina soporte_sd_argentina@epson.com.ar, ellos dan cursos y soporte para poder implementarla

Primo Tango

unread,
Jan 10, 2018, 8:56:54 PM1/10/18
to Comunidad de Visual Foxpro en Español
Dale gracias mañana lo miro ahora quede quemado !! pero ya funciona ABrazo grande 
podes comunicarte con la gente de Epson argentina soporte_sd_arge...@epson.com.ar, ellos dan cursos y soporte para poder implementarla

Daniel Del Giudice

unread,
Jan 27, 2018, 8:30:20 AM1/27/18
to Comunidad de Visual Foxpro en Español
Hola amigos, les cuento que estoy bastante avanzado con el proyecto de la TM-900FA, sólo me quedan un par de detalles. Si necesitan una mano con alguna función de alto nivel con gusto comparto ejemplos. Al mismo tiempo, si alguien tiene un ejemplo de enviarcomando() y obtenerrespuestaextendida() le agradecería.

Este es el ejemplo que me envía de Epson en Basic, pero no logro hacerlo andar en Fox.


CON ESTO PIDO MONTO 

 

str_cmd = "0B0B|0001"

 errorEE = EnviarComando(str_cmd)

 

 

'CON ESTO PIDO RESPUESTA 1

errorEE = TomarRespuestaEE(1)

 

ESTA ES LA FUNCION Q OBTIENE RESPUESTA

'------------------------------------------------------------------------------------------------------------

Private Function TomarRespuestaEE(nro_campo As Integer) As Long

On Error Resume Next

'devuelve respuesta en str_respu_EE, se supone q antes se envio comando

' constante

Const str_respu_EE_largo_maximo As Long = 60

Dim Index

Dim str_respu_EE_largo_real As Long

str_respu_EE = ""

str_respu_EE_largo_real = 0

 

If errorEE = 0 Then

' leer campo de respuesta número nro_campo

 Dim buffer(str_respu_EE_largo_maximo) As Byte

 errorEE = ObtenerRespuestaExtendida(nro_campo, VarPtr(buffer(1)), str_respu_EE_largo_maximo, VarPtr(str_respu_EE_largo_real))

  If errorEE = 0 Then ' construyendo en buffer a un string

   For Index = 1 To str_respu_EE_largo_real

     str_respu_EE = str_respu_EE + Chr$(buffer(Index))

   Next

  End If

End If

 TomarRespuestaEE = errorEE

End Function



Daniel Del Giudice
Santiago del Estero
Argentina

Luciano Wendler

unread,
Jan 30, 2018, 2:30:55 PM1/30/18
to Comunidad de Visual Foxpro en Español
Buenas Tardes, como haces para que la fiscal reconosca las funciones con EpsonFiscalInterface.dll??? Porque descargo esa dll y no sè que hacer con ella.
Saludos!!

Daniel Del Giudice

unread,
Jan 30, 2018, 4:22:25 PM1/30/18
to Comunidad de Visual Foxpro en Español
Hola,

alcanza con poner la DLL en el directorio donde está el sistema y hacer las llamadas. Al inicio declaras las funciones, por  ejemplo:

  DECLARE INTEGER ConfigurarPuerto IN "EpsonFiscalInterface.dll" STRING puerto
  DECLARE INTEGER ConfigurarVelocidad IN "EpsonFiscalInterface.dll" INTEGER velocidad
  DECLARE INTEGER ImprimirCierreX IN "EpsonFiscalInterface.dll"
  DECLARE INTEGER ImprimirCierreZ IN "EpsonFiscalInterface.dll"
  DECLARE INTEGER Conectar IN "EpsonFiscalInterface.dll"
  DECLARE INTEGER Desconectar IN "EpsonFiscalInterface.dll"
  DECLARE INTEGER CargarDatosCliente IN "EpsonFiscalInterface.dll" ;
    STRING nombre_o_razon_social1, STRING nombre_o_razon_social2, ;
    STRING domicilio1, STRING domicilio2, STRING domicilio3, ;
    INTEGER id_tipo_documento, STRING numero_documento, INTEGER id_responsabilidad_iva
  DECLARE INTEGER CargarComprobanteAsociado IN "EpsonFiscalInterface.dll" STRING descripcion
  DECLARE INTEGER AbrirComprobante IN "EpsonFiscalInterface.dll" INTEGER id_tipo_documento
  DECLARE INTEGER CargarTextoExtra IN "EpsonFiscalInterface.dll" STRING descripcion
  DECLARE INTEGER ImprimirItem IN "EpsonFiscalInterface.dll" ;
    INTEGER id_modificador, STRING descripcion, STRING cantidad, STRING precio, INTEGER id_tasa_iva, INTEGER ii_id, ;
    STRING ii_valor, INTEGER id_codigo, STRING codigo, STRING codigo_unidad_matrix, INTEGER código_unidad_medida
  DECLARE INTEGER ImprimirTextoLibre IN "EpsonFiscalInterface.dll" STRING descripcion
  DECLARE INTEGER ImprimirSubtotal IN "EpsonFiscalInterface.dll"
  DECLARE INTEGER CerrarComprobante IN "EpsonFiscalInterface.dll"
  DECLARE INTEGER ConsultarSubTotalBrutoComprobanteActual IN "EpsonFiscalInterface.dll" STRING @respuesta, INTEGER respuesta_largo_maximo
  DECLARE INTEGER ConsultarSubTotalNetoComprobanteActual IN "EpsonFiscalInterface.dll" STRING @respuesta, INTEGER respuesta_largo_maximo
  DECLARE INTEGER CargarAjuste IN "EpsonFiscalInterface.dll" INTEGER id_modificador, STRING descripcion, STRING monto, INTEGER id_tasa_iva, STRING codigo_interno
  DECLARE INTEGER CargarOtrosTributos IN "EpsonFiscalInterface.dll" INTEGER codigo_otros_tributos, STRING descripcion, STRING monto, INTEGER id_tasa_iva
  DECLARE INTEGER CargarPago IN "EpsonFiscalInterface.dll" INTEGER id_modificador, INTEGER codigo_forma_pago, INTEGER cantidad_cuotas, STRING monto, ;
    STRING descripción_cupones, STRING descripcion, STRING descripcion_extra1, STRING descripcion_extra2
  DECLARE INTEGER Cancelar IN "EpsonFiscalInterface.dll"
  DECLARE INTEGER ConsultarFechaHora IN "EpsonFiscalInterface.dll" STRING @respuesta, INTEGER respuesta_largo_maximo
  DECLARE INTEGER EstablecerFechaHora IN "EpsonFiscalInterface.dll" STRING fecha_hora
  DECLARE INTEGER ConsultarDescripcionDeError IN "EpsonFiscalInterface.dll" INTEGER numero_de_error, STRING @respuesta, INTEGER respuesta_largo_maximo
  DECLARE INTEGER ConsultarNumeroPuntoDeVenta IN "EpsonFiscalInterface.dll" STRING @respuesta, INTEGER respuesta_largo_maximo
  DECLARE INTEGER ConsultarEstado IN "EpsonFiscalInterface.dll" INTEGER id_consulta, INTEGER @respuesta
  DECLARE INTEGER EstablecerEncabezado IN "EpsonFiscalInterface.dll" INTEGER numero_encabezado, STRING descripcion
  DECLARE INTEGER EstablecerCola IN "EpsonFiscalInterface.dll" INTEGER numero_cola, STRING descripcion
  DECLARE INTEGER ConsultarNumeroComprobanteUltimo IN "EpsonFiscalInterface.dll" STRING tipo_de_comprobante, STRING @respuesta, INTEGER respuesta_largo_maximo
  DECLARE INTEGER ConsultarTipoComprobanteActual IN "EpsonFiscalInterface.dll" STRING respuesta, INTEGER respuesta_largo_maximo
  DECLARE INTEGER EnviarComando IN "EpsonFiscalInterface.dll" STRING commando

Luego ya puedes usarlas. Por ejemplo:

Cierre Z

nresultado = ImprimirCierreZ()
if nresultado > 0
  respuesta = SPACE(100)
  respuestalen = 100

  nresultado2 = consultardescripciondeerror(nresultado, @respuesta, respuestalen)
  MESSAGEBOX("RESPUESTA DEL CONTROLADOR FISCAL: " + CHR(13) + CHR(13) + respuesta, 48, "ERROR")
endif

Espero que te sirva.

Daniel Del Giudice
Santiago del Estero
Argentina

Luciano Wendler

unread,
Jan 31, 2018, 3:04:57 PM1/31/18
to Comunidad de Visual Foxpro en Español
Y por las dudas no has trabajados con ocx??, porque trabajo tambien en power builder y no puedo lograr que me reconozca el ocx a pesar de que me dà como que lo registra correctamente

Daniel Del Giudice

unread,
Feb 1, 2018, 9:23:24 AM2/1/18
to Comunidad de Visual Foxpro en Español
Pedro, el celular que publicaste contesta siempre la operadora que no está disponible. Te escribí por privado varias veces. Podrías pasarnos el ejemplo de como funciona obtenerrespuestaextendida()? Es urgente, estoy parado con un proyecto sólo por este tema. Gracias.

Daniel Del Giudice
podes comunicarte con la gente de Epson argentina soporte_sd_arge...@epson.com.ar, ellos dan cursos y soporte para poder implementarla

edgar Edgar

unread,
Feb 8, 2018, 2:12:58 PM2/8/18
to Comunidad de Visual Foxpro en Español
Hola a Todos!!!!
Veo que estan con el desarrollo de una aplicación para facturar en la TM-T900AF
Tengo una aplicación y está funcionando perfectamente. Utilizo la EpsonFiscalInterface.dll

Lo único que me falta es recuperar la CTD (cinta testigo digital), para esto utilizo la libreria "Descargar" del manual .PDF, pero me guarda un  archivo, en la PC, con extención .pem (esta extension es  certificados de páginas web ó servidores)
Alguno de Uds pudo recuperarla con la libreria "Descargar" que está en el manual .PDF????

Cualquier cosa me avisa por favor!!!!!!
El sistema lo hice en Visual Basic 6, sobre un Windows 7 64bits, y monte todas las funciones en un módulo desde donde realizo todas las llamadas

Fabián Jara

unread,
Feb 8, 2018, 2:35:55 PM2/8/18
to publice...@googlegroups.com
Hola a todos. Y si tiramos el código de lo que tenemos hecho acerca de EpsonFiscalInterface.dll y vemos que es lo que le sirve a cada uno?

Adrian Alberto Auvieux

unread,
Feb 13, 2018, 8:54:54 PM2/13/18
to Comunidad de Visual Foxpro en Español

Fabiana

unread,
Feb 21, 2018, 9:17:40 AM2/21/18
to Comunidad de Visual Foxpro en Español
Hola!

Estoy programando en PowerBuilder un módulo para conectar mi sistema con la Impresora Fiscal Epson TM-T900FA. Para ello estoy utilizando la dll provista por Epson "EpsonFiscalInterface.dll".

Ya estoy utilizando varias de las funciones correctamente, pero no puedo abrir un Tiquet Factura "A".

Alguien ha tenido un inconveniente similar?

Las funciones que utilizo son:

CargarDatosCliente("NombreComprador1", "NombreComprador2", "DomicilioComprador1", "DomicilioComprador2", "DomicilioComprador3", 3 /*Tipo Documento CUIT*/, "xxxxxxxxxxx" /*Nº CUIT*/, 1 /*id_responsabilidad_iva Responsable Inscripto*/)

AbrirComprobante(2 /*Tique factura A/B/C/M.*/)

Desde ya, muchas gracias.

Fabiana Ortiz

Fabián Jara

unread,
Feb 21, 2018, 9:47:37 AM2/21/18
to publice...@googlegroups.com
  
Acá te paso lo que yo uso

 *** ESTABLEZCO CONDICION DE IVA
    id_responsabilidad_iva = 1 && RESPONSABLE INSCRIPTO    
    id_tipo_documento = 3 && CUIT OBLIGATORIO
    
    *** NOMBRE
    nombre_o_razon_social1 = ALLTRIM(LcNomclicf)
    nombre_o_razon_social2 = '-'
    
    *** DOMICILIO
    domicilio1 = ALLTRIM(LcDirclicf)
    domicilio2 = ALLTRIM(LcNloclicf)  
    domicilio3 = '-'
    
    *** CUIT
    numero_cuit = STRTRAN(LcNucuitcf,'-','')

    *** ENVIO DE DATOS DE CLIENTE
    err = CargarDatosCliente(nombre_o_razon_social1,nombre_o_razon_social2,domicilio1,domicilio2,domicilio3,id_tipo_documento,numero_cuit,id_responsabilidad_iva)


Libre de virus. www.avast.com

Daniel Del Giudice

unread,
Feb 21, 2018, 9:47:39 AM2/21/18
to Comunidad de Visual Foxpro en Español
Fabiana, te está faltando esto:

cargarcomprobanteasociado(_comprobante_asociado)

que en el caso de Epson es obligatorio. Si no hay un comprobante asociado tal como un Remito, entonces debes hacer una autoreferencia al mismo comprobante. Para hacer esto último puedes consultar el número del último comprobante emitido y sumarle 1:

respuestalen = 8
respuesta = REPLICATE(" ", respuestalen)
_resultado = consultarnumerocomprobanteultimo(tipo_comprobante, @respuesta, respuestalen)

El tipo de comprobante debe ser el mismo del que estás tratando de emitir, obviamente. Suerte!

Daniel Del Giudice
Santiago del Estero


Carla Varela

unread,
Feb 22, 2018, 10:01:12 AM2/22/18
to Comunidad de Visual Foxpro en Español
Daniel buen día,  te hago una consulta referida a ConsultarNumeroComprobanteUltimo, ese procedimiento funciona luego de AbrirComprobante?
Porque estoy tratando de hacer lo que decis, tomar el nro de la fiscal para luego sumarle 1 y grabar el ticket con ese nro , pero no me funciona. muchas gracias!

Daniel Del Giudice

unread,
Feb 22, 2018, 10:05:31 AM2/22/18
to publice...@googlegroups.com
Es antes de abrir. Lo mismo que lo utilizas dedos de cerrar para obtener el comprobante recién emitido. 

Daniel

Fabiana

unread,
Feb 22, 2018, 1:22:26 PM2/22/18
to Comunidad de Visual Foxpro en Español
Buenas tardes.
Gracias por las respuestas, Fabian y Daniel.
Aunque me sigue sin funcionar ;(
Puede ser que haya alguna versión más actual de la dll? Ya que cuando invoco a la función ConsultarNumeroComprobanteUltimo() me da error de que no la encuentra en la librería. La versión de EpsonFiscalInterface.dll que utilizo es la 2.3.0 del 30/08/2017.
 
Desde ya muchas gracias!.
Fabiana 

El miércoles, 21 de febrero de 2018, 11:47:39 (UTC-3), Daniel Del Giudice escribió:

Carla

unread,
Feb 22, 2018, 2:48:55 PM2/22/18
to Comunidad de Visual Foxpro en Español
Fabiana como estas, si, bajatela de la página de Epson que hay nueva DLL con nuevo manual. Slds

Daniel Del Giudice

unread,
Feb 22, 2018, 3:13:01 PM2/22/18
to Grupo Visual FoxPro
Hola Fabiana,

hiciste las declaraciones previamente? Yo tengo estas:

  DECLARE INTEGER ConsultarEncabezado IN "EpsonFiscalInterface.dll" INTEGER numero_encabezado, STRING @respuesta, INTEGER respuesta_largo_maximo
  DECLARE INTEGER EstablecerEncabezado IN "EpsonFiscalInterface.dll" INTEGER numero_encabezado, STRING descripcion
  DECLARE INTEGER EstablecerCola IN "EpsonFiscalInterface.dll" INTEGER numero_cola, STRING descripcion
  DECLARE INTEGER ConsultarNumeroComprobanteUltimo IN "EpsonFiscalInterface.dll" STRING tipo_de_comprobante, STRING @respuesta, INTEGER respuesta_largo_maximo
  DECLARE INTEGER ConsultarTipoComprobanteActual IN "EpsonFiscalInterface.dll" STRING respuesta, INTEGER respuesta_largo_maximo
  DECLARE INTEGER EnviarComando IN "EpsonFiscalInterface.dll" STRING commando
  DECLARE INTEGER ImprimirAuditoria IN "EpsonFiscalInterface.dll" INTEGER id_modificador, STRING desde, STRING hasta


Saludos cordiales,

Daniel Del Giudice

Daniel Del Giudice

unread,
Feb 22, 2018, 3:14:38 PM2/22/18
to Comunidad de Visual Foxpro en Español
El jueves, 22 de febrero de 2018, 15:22:26 (UTC-3), Fabiana escribió:

bunker...@gmail.com

unread,
Mar 1, 2018, 3:11:20 PM3/1/18
to Comunidad de Visual Foxpro en Español
Hola Muy Buenas Gente
Disculpen la Pregunta no es para  Fox

Fabiana, Luciano

Desarrollo con Power Builder y me esta volviendo loco
la dll

Pueden compartir como se conenctaron
me da Puerto Invalido

gracias

Hector Kuhn

unread,
Mar 1, 2018, 3:33:38 PM3/1/18
to publicesvfoxpro
Buenas tardes. fijate en el nro de puerto, si es como los modelos anteriores, com1 = 0, com2 = 1, etc, etc.

Claudio Alemán

unread,
Mar 1, 2018, 7:28:57 PM3/1/18
to Comunidad de Visual Foxpro en Español
Pedro sabes si en modo entrenamiento hay que enviar datos para que no den errores? si puedes enviarme a coal...@gmail.com te voy a agradecer.-

El jueves, 16 de noviembre de 2017, 10:38:10 (UTC-2), Pedro Wayar escribió:
Avisen ya lo tengo. Funcionando. 

El 16/11/2017 9:32, "Ariel Octavio D'Alfeo" <ariel...@gmail.com> escribió:
Este es el instructivo de la dll de alto nivel, no esta completa pero se pueden enviar comandos como antes para las funciones que le faltan "Supuestamente" porque lo intente con el metodo que dice en el PDF pero no pude lograr que funcione, ya pregunte a Epson, pero no tuve respuesta.

El 16 de noviembre de 2017, 9:20, Ariel Octavio D'Alfeo <ariel...@gmail.com> escribió:
Yo justamente estoy con el desarrollo de la TM900 2da Genereacion. Con  las anteriores usabamos unas Dll que vendian en www.impresoras-fiscales.com.ar, pero estas dll no son compatibles con la nueva generación. Asique estoy desarrollando todo desde cero utilizando la dll de alto nivel de epson
El 16 de noviembre de 2017, 9:15, Fabián Jara <fabia...@gmail.com> escribió:
Hola Fabio. Pudiste hacer andar el aparatito? En mi caso tengo una TM-T900FA también. conectada por usb pero no hay forma de hacerla andar. Me pide puerto com


El viernes, 12 de mayo de 2017, 21:10:12 (UTC-3), globalso...@yahoo.com.ar escribió:
Hola gente, como están? Escribo para consultarles si a alguno le ha tocado trabajar con las nuevas impresoras fiscales de Epson, las TM-T900FA, y si les han generado problemas de compatibilidad con las impresoras anteriores (por ejemplo TM-2000AF+)

Desde ya gracias y saludos a la comunidad.

Fabio Castro

--

Ariel Octavio D'Alfeo
Córdoba, Argentina

Pedro Wayar

unread,
Mar 1, 2018, 7:33:28 PM3/1/18
to publice...@googlegroups.com
Pasame tu skype

Daniel Del Giudice

unread,
Mar 2, 2018, 8:15:15 AM3/2/18
to Comunidad de Visual Foxpro en Español
Para qué Pedro? Yo sigo esperando el ejemplo que prometiste por privado. Si tienes intención de ayudar, publicá en el grupo, así todos podemos aprender, los que estamos ahora y los que vengan en el futuro. No sirve ayudar por privado, no es la filosofía del grupo.

Saludos,

Daniel Del Giudice

Pedro Wayar

unread,
Mar 2, 2018, 10:58:38 AM3/2/18
to publice...@googlegroups.com
Ok

Javier Brumatti

unread,
Mar 2, 2018, 11:43:02 AM3/2/18
to publice...@googlegroups.com
Paso ejemplo de un ticket fiscal... algo hecho rapido nomas.. pero funciona..

    DECLARE INTEGER ConfigurarVelocidad IN "EpsonFiscalInterface.dll" INTEGER velocidad
    DECLARE INTEGER ConfigurarPuerto IN "EpsonFiscalInterface.dll" STRING puerto
    DECLARE INTEGER Conectar IN "EpsonFiscalInterface.dll"
    DECLARE INTEGER Desconectar IN "EpsonFiscalInterface.dll"
    DECLARE INTEGER Cancelar IN "EpsonFiscalInterface.dll"
    DECLARE INTEGER ConsultarEstado IN "EpsonFiscalInterface.dll" INTEGER id_consulta, INTEGER @respuesta
    DECLARE INTEGER ConsultarDescripcionDeError IN "EpsonFiscalInterface.dll" INTEGER numero_de_error, STRING @respuesta_descripcion, INTEGER respuesta_descripcion_largo_maximo

    DECLARE INTEGER AbrirComprobante IN "EpsonFiscalInterface.dll" INTEGER id_tipo_documento
    DECLARE INTEGER ImprimirItem IN "EpsonFiscalInterface.dll" INTEGER id_modificador, STRING descripcion, STRING cantidad, STRING precio, INTEGER id_tasa_iva, INTEGER ii_id, STRING ii_valor, INTEGER id_codigo, STRING codigo, STRING codigo_unidad_matrix, INTEGER código_unidad_medida
    DECLARE INTEGER CargarPago IN "EpsonFiscalInterface.dll" INTEGER id_modificador, INTEGER codigo_forma_pago, INTEGER cantidad_cuotas, STRING monto, STRING descripción_cupones, STRING descripcion, STRING descripcion_extra1, STRING descripcion_extra2
    DECLARE INTEGER CerrarComprobante IN "EpsonFiscalInterface.dll"



&& defines variables
    LOCAL err, lestado

&& connect
    configurarvelocidad (9600)
    configurarpuerto (_puerto)

    err = conectar()
    ldescripcion = REPLICATE( CHR(0), 200 )
    IF err<>0
        MESSAGEBOX ("2"+STR (err))
        consultardescripciondeerror(err,@ldescripcion,200)
        MESSAGEBOX (ldescripcion)
        RETURN .F.
    ENDIF

&& print X
    lrespuesta = 0
    err = consultarestado(7015,@lrespuesta)
    ldescripcion = REPLICATE( CHR(0), 200 )
    IF err<>0
        MESSAGEBOX ("3"+STR (err))
        consultardescripciondeerror(err,@ldescripcion,200)
        MESSAGEBOX (ldescripcion)
    ENDIF

    IF lrespuesta = 1
        = MESSAGEBOX("ERROR: La impresora no esta en línea", 48, "Atención")
        RETURN .F.
    ELSE
*    = MESSAGEBOX("TODO OK", 48, "Atención")
    ENDIF


    LOCAL lcodigo
    lcodigo = 1

    err = abrircomprobante(lcodigo)
    ldescripcion = REPLICATE( CHR(0), 200 )
    IF err<>0
        MESSAGEBOX ("5"+STR (err))
        consultardescripciondeerror(err,@ldescripcion,200)
        MESSAGEBOX (ldescripcion)
        err = cancelar()
        err = desconectar()
        RETURN .T.
    ENDIF


    SELECT QUERY
    SCAN FOR NOT DELETED()

        ldescripcion = REPLICATE( CHR(0), 200 )
        err = imprimiritem( 200, QUERY.nombre, '1', STR(QUERY.importe,9,2), 5, 0, '0', 1, 'CodigoInterno1', "", 7)
        IF err<>0
            MESSAGEBOX ("6"+STR (err))
            consultardescripciondeerror(err,@ldescripcion,200)
            MESSAGEBOX (ldescripcion)
            err = cancelar()
            err = desconectar ()
            RETURN .T.
        ENDIF

        SELECT QUERY
    ENDSCAN

    err = cargarpago( 200, 8, 1, STR(THISFORM.txttotal.VALUE,9,2), "", "", "", "" )
    IF err<>0
        MESSAGEBOX ("7"+STR (err))
        consultardescripciondeerror(err,@ldescripcion,200)
        MESSAGEBOX (ldescripcion)
        err = cancelar()
        err = desconectar ()
        RETURN .T.
    ENDIF

    err = cerrarcomprobante()
    IF err<>0
        MESSAGEBOX ("8"+STR (err))
        consultardescripciondeerror(err,@ldescripcion,200)
        MESSAGEBOX (ldescripcion)
        err = cancelar()
        err = desconectar ()
        RETURN .T.
    ENDIF

&& close port
    err = desconectar ()
    IF err<>0
        MESSAGEBOX ("9"+STR (err))
    ENDIF

Claudio Alemán

unread,
Mar 6, 2018, 5:31:00 PM3/6/18
to Comunidad de Visual Foxpro en Español
closa...@hotmail.com es mi skype ALEMANCLAUDIO

Claudio Alemán

unread,
Mar 6, 2018, 6:07:20 PM3/6/18
to Comunidad de Visual Foxpro en Español
Pedro me dicen que hay un comando para evitar el error 1304 que es cuando la impresora esta en modo entrenamiento, vos sabes cuales son los comandos?
coal...@gmail.com no tengo skype


El jueves, 4 de enero de 2018, 8:36:18 (UTC-2), Pedro Wayar escribió:
Edcribime a pjw...@hotmail.com y t ayudo
El 3/1/2018 23:31, "Mariano Lema" <h3g...@gmail.com> escribió:
Hola Ariel, te queria preguntar, tengo un sistema php de punto de venta, tengo que enlazar el sistema de impresora fiscal en cuestion pero no se por donde empezar, para hacer una conexion bidireccional donde recupero los datos y mando a imprimir e ingresar los datos en la memoria fiscal de la misma, no termino de entender como funciona la impresora fiscal, si vos o alguno me podrian dar una mano se los agradeceria,

Luciano Wendler

unread,
Mar 9, 2018, 8:14:38 AM3/9/18
to Comunidad de Visual Foxpro en Español
buenos dias Pedro, no puedo entrar para enviarte el correo a esa direccion, me interesa saber eso que pregunto Ariel 
  • Nro Ultimo Cierre Z
  • cantidad de notas de credito
  • cantidad de dnfh (documentos NO Fiscales homologados) 
  • cantidad de dnf (documentos NO Fiscales)
  • cantidad de df (documentos Fiscales)
  • cantidad facturas bc 
  • cantidad facturas A  
  • Nro ultima Factura fiscal
  • total de ventas $
  • total de impuestos $
  • total de recepción de dinero $
  • ultima factura A
  • ultima nota de crédito  A    
  • ultima nota de credito  BC
  • Ultimo Remito   
  • Total $ de nota de credito
Si me podes ayudar 

Luciano Wendler

unread,
Mar 9, 2018, 8:15:53 AM3/9/18
to Comunidad de Visual Foxpro en Español

Buenos Dias Ariel, lograron ayudarte con :
  • Nro Ultimo Cierre Z
  • cantidad de notas de credito
  • cantidad de dnfh (documentos NO Fiscales homologados) 
  • cantidad de dnf (documentos NO Fiscales)
  • cantidad de df (documentos Fiscales)
  • cantidad facturas bc 
  • cantidad facturas A  
  • Nro ultima Factura fiscal
  • total de ventas $
  • total de impuestos $
  • total de recepción de dinero $
  • ultima factura A
  • ultima nota de crédito  A    
  • ultima nota de credito  BC
  • Ultimo Remito   
  • Total $ de nota de credito
estoy tambien necesitando orientarme con eso
 

Ariel Octavio D'Alfeo

unread,
Mar 10, 2018, 6:46:37 AM3/10/18
to publice...@googlegroups.com
para recuperar esos datos, hay que enviar el comando Hexa.

loepsontm900=CREATEOBJECT("TmT900FA")
lcerr = loepsontm900.enviarcomandohex("080A|0000|83") &&Ticket

loepsontm900.obtenerrespuestaextendida(3)
_cierrezeta   =VAL(loepsontm900.respuesta)+1


loepsontm900.obtenerrespuestaextendida(7)
_cant_df = VAL(loepsontm900.respuesta)

loepsontm900.obtenerrespuestaextendida(8)
_cant_df_canc =VAL(loepsontm900.respuesta)



loepsontm900.obtenerrespuestaextendida(9)
_total_gral_tk   = VAL(loepsontm900.respuesta)


loepsontm900.obtenerrespuestaextendida(10)
_total_iva_tk     = VAL(loepsontm900.respuesta)/100


Y la funcion es 


FUNCTION obtenerrespuestaextendida
LPARAMETERS tncampo
LOCAL BUFFER
LOCAL bufferlen
LOCAL bufferfinallen

bufferlen = 100

                && get answer field:  1
BUFFER = REPLICATE( CHR(0), bufferlen )    && IMPORTANTE: inicializar
bufferfinallen = 0                         && IMPORTANTE: inicializar
err = obtenerrespuestaextendida ( tncampo, @BUFFER, bufferlen, @bufferfinallen )
THIS.respuesta=BUFFER

RETURN THIS.respuesta



ENDFUNC

Luciano Wendler

unread,
Mar 10, 2018, 9:02:42 AM3/10/18
to Comunidad de Visual Foxpro en Español
Gracias Ariel!

Fabián Jara

unread,
Mar 10, 2018, 9:09:14 AM3/10/18
to publice...@googlegroups.com
Excelente aporte Ariel!

martin Cracogna

unread,
Mar 23, 2018, 7:14:49 PM3/23/18
to Comunidad de Visual Foxpro en Español
Hola Luciano, Pudiste hacer "aparecer" el control OCX en powerBuilder?? tengo el mismo problema con el mismo OCX, de la misma impresora, y hace lo mismo, no da ningun msg de error, pero no logro que aparezca en el entorno de programacion, la unica diferencia es que trabajo con VisualFox,
Alguien utilizo el OCX ???? 
desde ya muchas gracias. 
Martin.  

El miércoles, 31 de enero de 2018, 17:04:57 (UTC-3), Luciano Wendler escribió:
Y por las dudas no has trabajados con ocx??, porque trabajo tambien en power builder y no puedo lograr que me reconozca el ocx a pesar de que me dà como que lo registra correctamente

El martes, 30 de enero de 2018, 18:22:25 (UTC-3), Daniel Del Giudice escribió:
Hola,

alcanza con poner la DLL en el directorio donde está el sistema y hacer las llamadas. Al inicio declaras las funciones, por  ejemplo:


  DECLARE INTEGER ConfigurarPuerto IN "EpsonFiscalInterface.dll" STRING puerto
  DECLARE INTEGER ConfigurarVelocidad IN "EpsonFiscalInterface.dll" INTEGER velocidad
  DECLARE INTEGER ImprimirCierreX IN "EpsonFiscalInterface.dll"
  DECLARE INTEGER ImprimirCierreZ IN "EpsonFiscalInterface.dll"
  DECLARE INTEGER Conectar IN "EpsonFiscalInterface.dll"
  DECLARE INTEGER Desconectar IN "EpsonFiscalInterface.dll"
  DECLARE INTEGER CargarDatosCliente IN "EpsonFiscalInterface.dll" ;
    STRING nombre_o_razon_social1, STRING nombre_o_razon_social2, ;
    STRING domicilio1, STRING domicilio2, STRING domicilio3, ;
    INTEGER id_tipo_documento, STRING numero_documento, INTEGER id_responsabilidad_iva
  DECLARE INTEGER CargarComprobanteAsociado IN "EpsonFiscalInterface.dll" STRING descripcion
  DECLARE INTEGER AbrirComprobante IN "EpsonFiscalInterface.dll" INTEGER id_tipo_documento
  DECLARE INTEGER CargarTextoExtra IN "EpsonFiscalInterface.dll" STRING descripcion
  DECLARE INTEGER ImprimirItem IN "EpsonFiscalInterface.dll" ;
    INTEGER id_modificador, STRING descripcion, STRING cantidad, STRING precio, INTEGER id_tasa_iva, INTEGER ii_id, ;
    STRING ii_valor, INTEGER id_codigo, STRING codigo, STRING codigo_unidad_matrix, INTEGER código_unidad_medida
  DECLARE INTEGER ImprimirTextoLibre IN "EpsonFiscalInterface.dll" STRING descripcion
  DECLARE INTEGER ImprimirSubtotal IN "EpsonFiscalInterface.dll"
  DECLARE INTEGER CerrarComprobante IN "EpsonFiscalInterface.dll"
  DECLARE INTEGER ConsultarSubTotalBrutoComprobanteActual IN "EpsonFiscalInterface.dll" STRING @respuesta, INTEGER respuesta_largo_maximo
  DECLARE INTEGER ConsultarSubTotalNetoComprobanteActual IN "EpsonFiscalInterface.dll" STRING @respuesta, INTEGER respuesta_largo_maximo
  DECLARE INTEGER CargarAjuste IN "EpsonFiscalInterface.dll" INTEGER id_modificador, STRING descripcion, STRING monto, INTEGER id_tasa_iva, STRING codigo_interno
  DECLARE INTEGER CargarOtrosTributos IN "EpsonFiscalInterface.dll" INTEGER codigo_otros_tributos, STRING descripcion, STRING monto, INTEGER id_tasa_iva
  DECLARE INTEGER CargarPago IN "EpsonFiscalInterface.dll" INTEGER id_modificador, INTEGER codigo_forma_pago, INTEGER cantidad_cuotas, STRING monto, ;
    STRING descripción_cupones, STRING descripcion, STRING descripcion_extra1, STRING descripcion_extra2
  DECLARE INTEGER Cancelar IN "EpsonFiscalInterface.dll"
  DECLARE INTEGER ConsultarFechaHora IN "EpsonFiscalInterface.dll" STRING @respuesta, INTEGER respuesta_largo_maximo
  DECLARE INTEGER EstablecerFechaHora IN "EpsonFiscalInterface.dll" STRING fecha_hora
  DECLARE INTEGER ConsultarDescripcionDeError IN "EpsonFiscalInterface.dll" INTEGER numero_de_error, STRING @respuesta, INTEGER respuesta_largo_maximo
  DECLARE INTEGER ConsultarNumeroPuntoDeVenta IN "EpsonFiscalInterface.dll" STRING @respuesta, INTEGER respuesta_largo_maximo
  DECLARE INTEGER ConsultarEstado IN "EpsonFiscalInterface.dll" INTEGER id_consulta, INTEGER @respuesta
  DECLARE INTEGER EstablecerEncabezado IN "EpsonFiscalInterface.dll" INTEGER numero_encabezado, STRING descripcion
  DECLARE INTEGER EstablecerCola IN "EpsonFiscalInterface.dll" INTEGER numero_cola, STRING descripcion
  DECLARE INTEGER ConsultarNumeroComprobanteUltimo IN "EpsonFiscalInterface.dll" STRING tipo_de_comprobante, STRING @respuesta, INTEGER respuesta_largo_maximo
  DECLARE INTEGER ConsultarTipoComprobanteActual IN "EpsonFiscalInterface.dll" STRING respuesta, INTEGER respuesta_largo_maximo
  DECLARE INTEGER EnviarComando IN "EpsonFiscalInterface.dll" STRING commando

Luego ya puedes usarlas. Por ejemplo:

Cierre Z

nresultado = ImprimirCierreZ()
if nresultado > 0
  respuesta = SPACE(100)
  respuestalen = 100

  nresultado2 = consultardescripciondeerror(nresultado, @respuesta, respuestalen)
  MESSAGEBOX("RESPUESTA DEL CONTROLADOR FISCAL: " + CHR(13) + CHR(13) + respuesta, 48, "ERROR")
endif

Espero que te sirva.

Daniel Del Giudice
Santiago del Estero
Argentina

Luciano Wendler

unread,
Apr 4, 2018, 9:25:33 AM4/4/18
to Comunidad de Visual Foxpro en Español
Buenos dias, el ocx nunca lo pude hacer aparecer, segui el consejo de usar la libreria de alto nivel y llamando los metodos

martin Cracogna

unread,
Apr 17, 2018, 5:30:13 PM4/17/18
to Comunidad de Visual Foxpro en Español
Hola gente, estoy con ésta nueva generacion de impresores fiscales, y la doc de Epson es muy muy mala, alguien a podido imprimir un ticket factura A con duplicado??? si alguien lo logro, me pasa el ejemplo, supongo que sea con el metodo enviarcomando porque no hay otra opción desde las funciones de la DLL. 
gracias. 
MArtin 

roxanas...@gmail.com

unread,
Apr 18, 2018, 11:11:20 AM4/18/18
to Comunidad de Visual Foxpro en Español
Hola, yo tampoco logro imprimir un tique factura A, solo tique me salen, si quiero hacer una A me dice campo no opcional y tengo todos los campos con los datos, no se a que campo se refiere, si alguien sabe y me puede dar una ayuda se lo agradeceria.

Daniel Del Giudice

unread,
Apr 18, 2018, 11:59:38 AM4/18/18
to Comunidad de Visual Foxpro en Español
Martin / Roxana, les adjunto partes de la rutina de impresión del tique-factura Epson 900 (2da generación). Yo no imprimo tique, sólo tique factura. Recorden que si falta algún dato en el cliente Epson imprime directamente un tique, en cambio Hasar protesta por el dato faltante. En Epson el comprobante asociado es obligatorio, si no hay, se debe hacer una autoreferencia (esto dicho por la gente de soporte de Epson). La rutina es sólo una guia de la secuencia de comandos y la forma de usarlos, si no entienden algo en particular con gusto les explico. Suerte!

o.nresultado = cargardatoscliente(_cliente, "", _domicilio1, _domicilio2, _domicilio3, _tipo_documento, _numero_documento, _condicion)

IF o.nresultado > 0
  THISFORM.e2g_cancela_tique_factura(o.nresultado, 1)
  RETURN
ENDIF


_linea_extra1 = ALLTRIM(cola_impresion.linea_extr)
_linea_extra2 = ALLTRIM(cola_impresion.linea_ext2)


IF _letra = "A"
  _descuento = descuento_sin_iva
ELSE
  _descuento = descuento_con_iva
ENDIF

_total = TOTAL
_total_efectivo = total_efectivo
_total_tarjeta = total_tarjeta
_total_ctacte = total_ctacte
_total_cheques = total_cheques
_total_credito = total_credito
_total_vales = total_vales
_total_retenciones = retencion_iva + retencion_ganancias + retencion_ib + retencion_suss + retencion_municipal
_efectivo_recibido = efectivo_recibido
* Fin de definición de variables con valores de la tabla facturas


* Definición de variables de Remitos
STORE "" TO _remitos1, _remitos2
USE ..\remitos_facturados
LOCATE FOR factsec = cola_impresion.secuencial
IF FOUND()
  _remitos = TRIM(remitos)
  IF LEN(_remitos) <= 40
    _remitos1 = "RTOS: " + _remitos
  ELSE
    _remitos1 = "RTOS: " + LEFT(_remitos,40)
    _remitos2 = "RTOS: " + ALLTRIM(SUBSTR(_remitos,41,40))
  ENDIF
ENDIF
USE


* Encabezado líneas 1 a 10 para el Comercio
* líneas 11 a 20 para el cliente

* Almacena números de Remitos
_linea = 11

IF NOT EMPTY(_remitos1)
  o.nresultado = establecerencabezado(_linea, _remitos1)
  _linea = _linea + 1

  IF o.nresultado > 0
    THISFORM.e2g_cancela_tique_factura(o.nresultado, 2)
    RETURN
  ENDIF
ENDIF

IF NOT EMPTY(_remitos2)
  o.nresultado = establecerencabezado(_linea, _remitos2)
  _linea = _linea + 1

  IF o.nresultado > 0
    THISFORM.e2g_cancela_tique_factura(o.nresultado, 3)
    RETURN
  ENDIF
ENDIF


* Limpia los valores previos en las líneas de encabezado no utilizadas ahora
IF _linea < 14
  FOR j = _linea TO 13
    o.nresultado = establecerencabezado(j, "")

    IF o.nresultado > 0
      THISFORM.e2g_cancela_tique_factura(o.nresultado, 5)
      RETURN
    ENDIF
  ENDFOR
ENDIF


* Cola: líneas 1 a 10

* Almacena línea extra
_linea = 1
IF NOT EMPTY(_linea_extra1)
  o.nresultado = establecercola(_linea, _linea_extra1)
  _linea = _linea + 1

  IF o.nresultado > 0
    THISFORM.e2g_cancela_tique_factura(o.nresultado, 6)
    RETURN
  ENDIF
ENDIF

IF NOT EMPTY(_linea_extra2)
  o.nresultado = establecercola(_linea, _linea_extra2)
  _linea = _linea + 1

  IF o.nresultado > 0
    THISFORM.e2g_cancela_tique_factura(o.nresultado, 7)
    RETURN
  ENDIF
ENDIF

* Limpia los valores previos en las líneas de cola no utilizadas ahora
IF _linea < 3
  FOR j = _linea TO 3
    o.nresultado = establecercola(j, "")

    IF o.nresultado > 0
      THISFORM.e2g_cancela_tique_factura(o.nresultado, 8)
      RETURN
    ENDIF
  ENDFOR
ENDIF


* Tipos de comprobante
* 81  - Tique factura A.
* 82  - Tique factura B.
IF _letra = "A"
  _tipo_comprobante = "081"
ELSE
  _tipo_comprobante = "082"
ENDIF


* Obtiene número de próximo comprobante en _nro_comprobante
_nro_comprobante = ""
o.nresultado = THISFORM.obtiene_ultimo_comprobante(1)
IF o.nresultado > 0
  THISFORM.e2g_cancela_tique_factura(o.nresultado, 11)
  RETURN
ENDIF


* Carga comprobante asociado
* Intenta hacer referencia al mismo comprobante
_comprobante_asociado = _tipo_comprobante + "-" + o.punto_de_venta + "-" + _nro_comprobante
o.nresultado = cargarcomprobanteasociado(_comprobante_asociado)
IF o.nresultado > 0
  THISFORM.e2g_cancela_tique_factura(o.nresultado, 11)
  RETURN
ENDIF


* Tipos de comprobante
*  1 - Tique.
*  2 - Tique factura A/B/C/M.
*  3 - Tique nota de crédito, tique nota crédito A/B/C/M.
*  4 - Tique nota de débito A/B/C/M.
* 21 - Documento no fiscal homologado genérico.
* 22 - Documento no fiscal homologado de uso interno.
o.nresultado = abrircomprobante(2)

IF o.nresultado > 0
  THISFORM.e2g_cancela_tique_factura(o.nresultado, 12)
  RETURN
ENDIF


respuestalen = 8
respuesta = REPLICATE(" ", respuestalen)

o.nresultado = consultartipocomprobanteactual(@respuesta, respuestalen)

IF o.nresultado > 0
  THISFORM.e2g_cancela_tique_factura(o.nresultado, 13)
  RETURN
ENDIF


* Abre cajón de dinero
IF _total_efectivo > 0
  IF o.cajon_dinero

    o.nresultado = enviarcomando("0707|0000")

    IF o.nresultado > 0
      THISFORM.e2g_cancela_tique_factura(o.nresultado, 14)
      RETURN
    ENDIF
  ENDIF
ENDIF


* Imprime líneas
USE ..\rubros ORDER rubsec IN 0
USE ..\vehiculos ORDER vehsec IN 0
USE ..\marcas ORDER marcsec IN 0
SELECT 0
USE ..\precios ORDER presec
SET RELATION TO rubsec INTO rubros
SET RELATION TO vehsec INTO vehiculos ADDITIVE
SET RELATION TO marcsec INTO marcas ADDITIVE
SELECT 0
USE ..\facturas_detalle
SET RELATION TO presec INTO precios


STORE 0 TO o.neto1, o.neto2, o.iva1, o.iva2, o.exento
SCAN FOR factsec = cola_impresion.secuencial
  o.nresultado = THISFORM.e2g_imprime_item("C") && Descripción (C)ompleta

  IF o.nresultado > 0
    THISFORM.e2g_cancela_tique_factura(o.nresultado, 15)
    RETURN
  ENDIF
ENDSCAN

USE
USE IN rubros
USE IN vehiculos
USE IN marcas
USE IN precios


* id_modificador
* 400 - Descuento.
* 401 - Ajuste.
* 402 - Ajuste negativo.

* Si hay un descuento en el sistema lo aplica

IF _descuento > 0
  * CargarAjuste(Integer id_modificador, String descripcion, STRING monto, INT id_tasa_iva, STRING codigo_interno)
  *  err = CargarAjuste(400, "Descuento", "10", 5, "1234567890")
  o.nresultado = imprimirsubtotal()

  IF o.nresultado > 0
    THISFORM.e2g_cancela_tique_factura(o.nresultado, 16.1)
    RETURN
  ENDIF

  _neto = o.neto1 + o.neto2 + o.exento
  IF o.neto1 > 0
    _porcdto = ROUND(o.neto1 / _neto, 5)
    _descuentoneto = ROUND(_descuento * _porcdto, 2)
    o.nresultado = cargarajuste(400, "Descuento", TRANSFORM(_descuentoneto, "@l 9999999999.99"), 5, "1234567890")
    o.neto1 = o.neto1 - _descuentoneto
  ENDIF

  IF o.neto2 > 0 AND o.nresultado = 0
    _porcdto = ROUND(o.neto2 / _neto, 5)
    _descuentoneto = ROUND(_descuento * _porcdto, 2)
    o.nresultado = cargarajuste(400, "Descuento", TRANSFORM(_descuentoneto, "@l 9999999999.99"), 4, "1234567890")
    o.neto2 = o.neto2 - _descuentoneto
  ENDIF

  IF o.exento > 0 AND o.nresultado = 0
    _porcdto = ROUND(o.exento / _neto, 5)
    _descuentoneto = ROUND(_descuento * _porcdto, 2)
    o.nresultado = cargarajuste(400, "Descuento", TRANSFORM(_descuentoneto, "@l 9999999999.99"), 1, "1234567890")
    o.exento = o.exento - _descuentoneto
  ENDIF

  IF o.nresultado > 0
    THISFORM.e2g_cancela_tique_factura(o.nresultado, 16.1)
    RETURN
  ENDIF
ENDIF


* Verifica si es necesario aplicar ajustes por redondeo y en caso afirmativo lo hace
STORE 0 TO _redondeo_descuento, _redondeo_percepcion
o.nresultado = THISFORM.e2g_verifica_redondeo()
IF o.nresultado > 0
  THISFORM.e2g_cancela_tique_factura(o.nresultado, 22)
  RETURN
ENDIF


THISFORM.e2g_imprime_pagos


* Obtiene los valores del controlador de Neto, Iva y Total
STORE 0 TO _neto_controlador, _iva_controlador, _total_controlador
STORE SPACE(11) TO _cneto, _ctotal
o.nresultado = THISFORM.asigna_totales_controlador()


* Cierra el comprobante fiscal
o.nresultado = cerrarcomprobante()
IF o.nresultado > 0
  THISFORM.e2g_cancela_tique_factura(o.nresultado, 22)
  RETURN
ENDIF


_nro_comprobante = ""
o.nresultado = THISFORM.obtiene_ultimo_comprobante(0)
IF o.nresultado > 0
  THISFORM.e2g_cancela_tique_factura(o.nresultado, 22)
  RETURN
ENDIF


SELECT 0
USE ..\facturas
LOCATE FOR factsec = cola_impresion.secuencial
IF fecha # o.fecha AND NOT EMPTY(o.fecha)
  REPLACE fecha WITH o.fecha
ENDIF

REPLACE ;
  comprobante WITH _letra + o.punto_de_venta + _nro_comprobante, ;
  total_controlador WITH _total_controlador, ;
  neto_controlador WITH _neto_controlador - o.exento, ;
  iva_controlador WITH _iva_controlador

IF _comprobante = "T"
  REPLACE origen WITH "T"
ELSE
  REPLACE origen WITH "C"
ENDIF

REPLACE ;
  redondeo_descuento WITH _redondeo_descuento, ;
  redondeo_percepcion WITH _redondeo_percepcion

IF o.n_razones_sociales
  REPLACE razon_social WITH o.razon_social
ENDIF

o.nresultado = THISFORM.corrige_totales_sistema()

IF _total_ctacte > 0
  IF o.guardar_ctas_ctes = 2
    USE ..\cuentas_corrientes
    LOCATE FOR ID = cola_impresion.secuencial AND tipo = 92
    IF FOUND()
      REPLACE detalle WITH "Factura " + _letra + " " + o.punto_de_venta + "-" + _nro_comprobante
    ENDIF
  ENDIF

  IF _comprobante = "T" AND o.talon_ctacte
    THISFORM.talon_ctacte_e2g("D", _cliente, _letra + "-" + o.punto_de_venta + "-" + _nro_comprobante, _total_ctacte)
  ENDIF
ENDIF

Daniel Del Giudice

unread,
Apr 18, 2018, 12:00:35 PM4/18/18
to Comunidad de Visual Foxpro en Español
Roxana, fijate lo que le contesté a Martín, seguramente encuentres la respuesta. Comprobante asociado es obligatorio en Epson, te debe estar faltando eso.

Daniel

Roxana Specogna

unread,
Apr 18, 2018, 12:52:18 PM4/18/18
to publice...@googlegroups.com
Muchas gracias, dale lo pruebo...

martin Cracogna

unread,
Apr 18, 2018, 5:10:26 PM4/18/18
to Comunidad de Visual Foxpro en Español

Hola Daniel ( y Roxana), muchas gracias por responder, si era eso el problema, el comprobante asociado, que por supuesto no está en ningún lado documentado, lamentable... 
Otra consulta, estoy tratando de capturar el estado del impresor al inicio del día para saber si se hizo o no el cierre Z, si envio un comando me devuelve el error "falta cierre Z", pero quiero capturar el error antes de enviar abrir un cbte, he intentado con ConsultarEstado pero no hay código de consulta para consultar si falta cierre Z, tampoco en la funcion Obtenderestadofiscal me devuelve el nro 49280 y no se si es decimal o hexa, tampoco encuentro documentación sobre ese numero. He intentado enviando un comando con enviarcomando pero no encuentro que numero de comando enviar, ni como interpretar la respuesta... 
Otra Consulta, alguien a podido hacer una ticket factura A con duplicado ??? se que se puede pero no hay nada en la DLL que se pueda usar para imprimir el duplicado..... 
Espero su generosa ayuda...
saludos. 
Martín  

Daniel Del Giudice

unread,
Apr 18, 2018, 6:10:34 PM4/18/18
to Comunidad de Visual Foxpro en Español
Martín,

yo al principio sólo verifico que todo esté bien con la impresora. Sólo cuando va a imprimir avisa si faltó hacer el Z del día anterior y recién ahí puedes tomar la acción que creas pertinente en tu aplicación. Yo no tomo ninguna, simplemente no imprime el comrpobante y el usuario debe hacer lo que le faltó hacer la noche anterior, es decir, emitir el Z.

Con respecto a los duplicados, la idea en estos controladores de segunda generación es que se imprima sólo la copia para el cliente y para el usuario queda la CTD o Cinta Testigo Digital. Si el cliente lo requiere, por pérdida del comprobante u otra razón, el controlador permite emitir un duplicado. Yo le permito especificar el tipo de comprobante (Factura, Nota de Crédito o Nota de Débito), la letra y el número y luego reimprimo con este código:

  IF o.letra_comprobante = 1 && A
    DO CASE
    CASE o.tipo_comprobante = 1
      _tipo_comprobante = "081"
    CASE o.tipo_comprobante = 2
      _tipo_comprobante = "112"
    CASE o.tipo_comprobante = 3
      _tipo_comprobante = "115"
    ENDCASE
  ELSE && B
    DO CASE
    CASE o.tipo_comprobante = 1
      _tipo_comprobante = "082"
    CASE o.tipo_comprobante = 2
      _tipo_comprobante = "113"
    CASE o.tipo_comprobante = 3
      _tipo_comprobante = "116"
    ENDCASE
  ENDIF

  * Comienza descrga del duplicado con opción de impresión en Verdadero
  o.nresultado = enviarcomando("08F0|0001|" + _tipo_comprobante + "|" + TRANSFORM(o.numero_comprobante))

  IF o.nresultado = 0
    * Continúa la descarga del duplicado
    DO WHILE .T.
      o.nresultado = enviarcomando("08F4|0000")
      IF o.nresultado = 0
        respuestalen = 10
        respuesta = REPLICATE(CHR(0), respuestalen)
        largofinal = 0
        * Pregunta si hay más datos para descargar
        o.nresultado = obtenerrespuestaextendida(2, @respuesta, respuestalen, @largofinal)
        IF o.nresultado = 0
          IF "N" $ respuesta
            EXIT
          ENDIF
        ELSE
          THISFORM.e2g_muestra_error(o.nresultado)
          EXIT
        ENDIF
      ELSE
        THISFORM.e2g_muestra_error(o.nresultado)
        EXIT
      ENDIF
    ENDDO

    * Finaliza la descarga del duplicado
    o.nresultado = enviarcomando("08F5|0000")
    IF o.nresultado > 0
      THISFORM.e2g_muestra_error(o.nresultado)
    ENDIF
  ELSE
    THISFORM.e2g_muestra_error(o.nresultado)
  ENDIF


No tiene sentido que el comercio guarde una copia impresa de cada comprobante, ya que es imprime sobre papel químico y en poco tiempo no se ve nada. Recuerden que deben descargar los reportes electrónicos cada 7 días.

Saludos!

Daniel Del Giudice

martin Cracogna

unread,
Apr 18, 2018, 6:55:31 PM4/18/18
to Comunidad de Visual Foxpro en Español
Gracias Daniel, voy a ver que me sirve de ese código, el duplicado es para las facturas que son a cta-cte, quieren imprimir el duplicado para tener una constancia firmada, obvio, en un par de meses si no lo cobran les va a quedar la firma nomas jajajaja, pero no se como manejar ese tema, cualquier documento que se emita con el tiempo se va a borrar.. que debería hacer? imprimir un duplicado con una impresora laser? la afip no permite eso... 
saludos. 
Martín  

Daniel Del Giudice

unread,
Apr 18, 2018, 7:14:00 PM4/18/18
to Comunidad de Visual Foxpro en Español
Martín,

al final de la rutina de impresión que te envié hay una llamada a thisform.talon_ctacte_e2g(). Al final del comprobante si hay un monto asignado a Cuenta Corriente imprime un talón que se le hace firmar al cliente. Te paso el código. Con eso soluciono yo lo ese tema desde la primera generación de controladores.

PARAMETERS pmodo, ptalon_cliente, ptalon_comprobante, ptalon_importe

* Abro comprobante no fiscal
o.nresultado = abrircomprobante(21)
IF o.nresultado = 0
  o.nresultado = imprimirtextolibre("TALON DE CUENTA CORRIENTE")

  * Datos del cliente
  o.nresultado = imprimirtextolibre(REPLICATE("-",48))
  o.nresultado = imprimirtextolibre("Cliente: " + LEFT(ptalon_cliente,48))
  o.nresultado = imprimirtextolibre(REPLICATE("-",48))

  * Imprime total
  o.nresultado = imprimirtextolibre(" ")
  IF pmodo = "D"
    o.nresultado = imprimirtextolibre("Se debitara en su cuenta corriente por")
    o.nresultado = imprimirtextolibre("el valor de la compra la suma de pesos")
  ELSE
    o.nresultado = imprimirtextolibre("Se acreditara en su cuenta corriente por")
    o.nresultado = imprimirtextolibre("el valor de la devolucion la suma de pesos")
  ENDIF
  o.nresultado = imprimirtextolibre(" ")
  o.nresultado = imprimirtextolibre("IMPORTE: " + LTRIM(STR(ptalon_importe,10,2)))
  o.nresultado = imprimirtextolibre(" ")
  o.nresultado = imprimirtextolibre("Correspondiente al comprobante: " + ptalon_comprobante)
  o.nresultado = imprimirtextolibre(" ")
  o.nresultado = imprimirtextolibre(" ")
  o.nresultado = imprimirtextolibre(" ")
  o.nresultado = imprimirtextolibre(REPLICATE("-",48))
  o.nresultado = imprimirtextolibre(PADC("FIRMA",48))
  o.nresultado = imprimirtextolibre(" ")
  o.nresultado = imprimirtextolibre(" ")
  o.nresultado = imprimirtextolibre(REPLICATE("-",48))
  o.nresultado = imprimirtextolibre(PADC("ACLARACION",48))

  * Cierro comprobante no fiscal
  cerrarcomprobante()
ENDIF


Lo que Afip no permite es una impresora común en el salón de ventas. Si la impresora está en la oficina contigua o mínimamente escondida, entonces es una opción buena para este tipo de impresiones. 


Daniel Del Giudice

martin Cracogna

unread,
Apr 18, 2018, 7:26:45 PM4/18/18
to Comunidad de Visual Foxpro en Español

Gracias hermano, es una muy buena opción, y creo voy a terminar implementando, por el momento me diste una buen empujón para seguir con ésto. cualquier otra duda te estere jodiendo nuevamente... 
saludos. 

martin Cracogna

unread,
Apr 19, 2018, 4:34:44 PM4/19/18
to Comunidad de Visual Foxpro en Español
Daniel, otra consulta, como haces para abrir el cajón de dinero desde el sistema?? con la version anterior se usaba OpenCashDrawer(1) pero no encuentro nada en la nueva dll... 
saludos. 

Roxana Specogna

unread,
Apr 19, 2018, 4:40:03 PM4/19/18
to publice...@googlegroups.com
Recien ahora tuve mas tiempo para probar lo que me decias, pero no se sigo varada y no me doy cuenta, la impresora no esta inicializada capaz sea por eso, no creo, porque con otras no he tenido problemas pero al intentar poner el comprobante asociado me da error: punto de venta del documento asociado invalido y sigue en la misma, probe de hacer el proceso de ConsultarNumeroPuntoDeVenta y me da que esta en blanco, puse blanco total es un string y no hay caso, puse 00000 y tampoco. Supongo que es una tontera pero no me doy cuenta. Si me podes dar una mano te lo agradeceria.

El 18 de abril de 2018, 13:00, Daniel Del Giudice<daniel...@gmail.com> escribió:

Daniel Del Giudice

unread,
Apr 19, 2018, 5:22:04 PM4/19/18
to Comunidad de Visual Foxpro en Español
Hola Martín, está en el ejemplo que te envié.

* Abre cajón de dinero
IF _total_efectivo > 0
  IF o.cajon_dinero

    o.nresultado = enviarcomando("0707|0000")

    IF o.nresultado > 0
      THISFORM.e2g_cancela_tique_factura(o.nresultado, 14)
      RETURN
    ENDIF
  ENDIF
ENDIF


Daniel Del Giudice

Daniel Del Giudice

unread,
Apr 19, 2018, 5:34:59 PM4/19/18
to Comunidad de Visual Foxpro en Español
Hola Roxana,

Estos controladores devuelven 5 dígitos para el punto de venta. Yo sigo usando 4 en el software de gestión, por eso la rutina corta en 4. Pero además, si vos te fijas, devuelve otros caracteres "invisibles" al final de la respuesta. 
Esto hago yo para obtener el punto de venta:

  * Obtiene punto de venta
  respuestalen = 6
  respuesta = REPLICATE(" ", respuestalen)

  o.nresultado = consultarnumeropuntodeventa(@respuesta, respuestalen)

  IF o.nresultado = 0
    * Quita un último carácter " " que devuelve y de eso toma los últimos 4 dígitos
    _pv = RIGHT(LEFT(respuesta,5),4)
  ENDIF
return _pv

Luego, esto para el comprobante asociado:

  * Tipos de comprobante
  * 81  - Tique factura A.
  * 82  - Tique factura B.
  IF _letra = "A"
    _tipo_comprobante = "081"
  ELSE
    _tipo_comprobante = "082"
  ENDIF


  * Obtiene número de próximo comprobante en _nro_comprobante
  _nro_comprobante = ""
  o.nresultado = THISFORM.obtiene_ultimo_comprobante(1)
  IF o.nresultado > 0
    THISFORM.e2g_cancela_tique_factura(o.nresultado, 11)
    RETURN
  ENDIF


  * Carga comprobante asociado
  * Intenta hacer referencia al mismo comprobante
  _comprobante_asociado = _tipo_comprobante + "-" + o.punto_de_venta + "-" + _nro_comprobante
  o.nresultado = cargarcomprobanteasociado(_comprobante_asociado)
  IF o.nresultado > 0
    THISFORM.e2g_cancela_tique_factura(o.nresultado, 11)
    RETURN
  ENDIF

Donde OBTIENE_ULTIMO_COMPROBANTE es:

PARAMETERS pagrega
* pagrega será 0 o 1 dependiendo si quiere conocer el último comprobante o el que le sigue

* Obtiene último comprobante
respuestalen = 8
respuesta = REPLICATE(" ", respuestalen)
_resultado = consultarnumerocomprobanteultimo(_tipo_comprobante, @respuesta, respuestalen)

IF _resultado = 0
  _ultimo_comprobante = VAL(ALLTRIM(respuesta))
  _nro_comprobante = TRANSFORM(_ultimo_comprobante + pagrega, "@l 99999999")
ENDIF

RETURN _resultado

Probalo, tiene que andar.

Daniel Del Giudice

Roxana Specogna

unread,
Apr 20, 2018, 8:05:19 AM4/20/18
to publice...@googlegroups.com
Gracias Daniel, vuelvo a probar, a la tarde te comento, y si va a andar como sea pero va a andar..Gracias, sino te volvere a molestar

Roxana Specogna

unread,
Apr 20, 2018, 11:57:55 AM4/20/18
to publice...@googlegroups.com
Barbaro Daniel, ya arranco, era eso nomas, muchisimas gracias por tu ayuda

Gustavo Redin

unread,
May 9, 2018, 10:37:34 AM5/9/18
to Comunidad de Visual Foxpro en Español
Hola Roxana, como lo solucionaste?, me da el mismo error q a vos y no consigo encontrar que estoy haciendo mal.
Estoy haciendo las pruebas con una impresora no inicializada. Puedo imprimir tique y factura B a consumidor final, pero si quiero imprimir una factura A o B a un resp inscripto o a un exento, me da un codigo de error 2834 al mandar el comando "AbrirComprobante", que no tiene ninguna descripcion de lo que significa. Cargo el comprobante asociado tal cual lo indican, con el formato correcto  y no pasa nada. Para que el comando "CargarComprobanteAsociado" no me de error tengo que pasar el Nro de punto de venta con 4 digitos (ej. "081-0000-00000001").

Martín Saracco

unread,
May 10, 2018, 3:52:12 PM5/10/18
to Comunidad de Visual Foxpro en Español
Hola como estas?

Probaste con poner como comprobante asociado al mismo comprobante que estas emitiendo, obteniendo el número del comprobante actual ?
Yo lo solucione así.

Martín Saracco

unread,
May 10, 2018, 3:55:55 PM5/10/18
to Comunidad de Visual Foxpro en Español
Hola como están ?

Alguno por casualidad tiene idea de como mandar los datos del transportista si se imprime un comprobante del tipo Remito R ya que imprime datos como Transporte El Misionero ( algo por defecto que jamás le pasé como parámetro ) y patentes ABC000, etc.
Busqué en la documentación pero no aparece nada.
Es lo único que no logre hacer que funcione.
Desde ya muchas gracias.



El viernes, 12 de mayo de 2017, 21:10:12 (UTC-3), globalso...@yahoo.com.ar escribió:
Hola gente, como están? Escribo para consultarles si a alguno le ha tocado trabajar con las nuevas impresoras fiscales de Epson, las TM-T900FA, y si les han generado problemas de compatibilidad con las impresoras anteriores (por ejemplo TM-2000AF+)

Desde ya gracias y saludos a la comunidad.

Fabio Castro

Daniel Del Giudice

unread,
May 10, 2018, 8:09:02 PM5/10/18
to Comunidad de Visual Foxpro en Español
Hola Martín, probaste con establecerencabezado() y establecercola()? Me parece que los datos que te imprime están asignados en alguna línea del encabezado o cola. Yo uso el siguiente código para datos de la cola en Tique Factura:


  * Cola: líneas 1 a 10

  * Almacena línea extra
  _linea = 1
  IF NOT EMPTY(_linea_extra1)
    o.nresultado = establecercola(_linea, _linea_extra1)
    _linea = _linea + 1

    IF o.nresultado > 0
      THISFORM.e2g_cancela_tique_factura(o.nresultado, 6)
      RETURN
    ENDIF
  ENDIF

  IF NOT EMPTY(_linea_extra2)
    o.nresultado = establecercola(_linea, _linea_extra2)
    _linea = _linea + 1

    IF o.nresultado > 0
      THISFORM.e2g_cancela_tique_factura(o.nresultado, 7)
      RETURN
    ENDIF
  ENDIF

  * Limpia los valores previos en las líneas de cola no utilizadas ahora
  IF _linea < 3
    FOR j = _linea TO 3
      o.nresultado = establecercola(j, "")

      IF o.nresultado > 0
        THISFORM.e2g_cancela_tique_factura(o.nresultado, 8)
        RETURN
      ENDIF
    ENDFOR
  ENDIF

Fijate y avisa.

Daniel Del Giudice

Martín Saracco

unread,
May 11, 2018, 6:15:48 AM5/11/18
to Comunidad de Visual Foxpro en Español
Hola buen día.
Probé recien as mandar los 20 encabezados y las 10 colas ( por las dudas mande tambien de cola 11 a 20 que no salen impresas ) y sigue mandando como dato de transporte debajo de los items y antes de la Firma y Aclaración , en el REMITO R y REMITO X lo siguiente:
El Misionero Logistica
Balcarce 236
Capital Federal
CUIT: 30-68633202-7
IVA Responsable INscripto
Ernesto Sabbat de Joaquin Medieval
DNI Nro: 27991408
Domino ABC456
Domino ABC456


Tenes idea si hay algún teléfono para llamar a EPSON y preguntar porque me parece que esto quedó en duro de parte de ellos en la DLL.
Con el resto de todos los comprobantes no tuve ningún problema y funciona perfecto al menos desde asp.net
Gracias !!!!!

Gustavo Redin

unread,
May 14, 2018, 8:17:50 AM5/14/18
to Comunidad de Visual Foxpro en Español
Hola Matin, gracias por responder, uso el comando "ConsultarNumeroComprobanteUltimo" al que le sumo 1 para obtener el actual. Pero al tratar de abrir un comprobante nuevo usando esta numeracion (que es correcta), me da un error 2834, el cual paso al comando "ConsultarDescripcionDeError" el cual no devuelve ninguna descripcion. El tipo y numero de comprobante es correcto, ya no se que mas probar.

Daniel Del Giudice

unread,
May 14, 2018, 9:15:34 AM5/14/18
to Comunidad de Visual Foxpro en Español
Gustavo, ya le había pasado código a Martín y Roxana, lo leíste?

Para obtener punto de venta:
(Ojo, yo lo dejo en 4 dígitos de los 5 que devuelve el controlador, vos puedes dejarlo en 5, es indistinto al momento de informar el comprobante asociado


  * Obtiene punto de venta
  respuestalen = 6
  respuesta = REPLICATE(" ", respuestalen)

  o.nresultado = consultarnumeropuntodeventa(@respuesta, respuestalen)

  IF o.nresultado = 0
    * Quita un último carácter " " que devuelve y de eso toma los últimos 4 dígitos
    o.punto_de_venta = RIGHT(LEFT(respuesta,5),4)
  ENDIF


Para informar comprobante asociado


* Tipos de comprobante
* 81  - Tique factura A.
* 82  - Tique factura B.
IF _letra = "A"
  _tipo_comprobante = "081"
ELSE
  _tipo_comprobante = "082"
ENDIF


* Obtiene número de próximo comprobante en _nro_comprobante
_nro_comprobante = ""
o.nresultado = THISFORM.obtiene_ultimo_comprobante(1)
IF o.nresultado > 0
  THISFORM.e2g_cancela_tique_factura(o.nresultado, 11)
  RETURN
ENDIF


* Carga comprobante asociado
* Intenta hacer referencia al mismo comprobante
_comprobante_asociado = _tipo_comprobante + "-" + o.punto_de_venta + "-" + _nro_comprobante
o.nresultado = cargarcomprobanteasociado(_comprobante_asociado)
IF o.nresultado > 0
  THISFORM.e2g_cancela_tique_factura(o.nresultado, 11)
  RETURN
ENDIF


Daniel Del Giudice

Gustavo Redin

unread,
May 14, 2018, 10:52:54 AM5/14/18
to Comunidad de Visual Foxpro en Español
Hola Daniel, si, lei tu codigo y lo adapte a mi proyecto. Yo programo en Lazarus, por lo que no publique mi codigo para no confundir. Como comente, para que el comando "CargarComprobanteAsociado" no me de error, al punto de venta lo paso con 4 digitos porque con los 5 digitos me dice "nro de punto de venta invalido". En los tique que imprimo el nro de punto de venta es '00000' ya que todavia no esta inicializada. La situacion es la sgte, a ver si la puedo aclarar:
  • Si paso el nro de punto de venta con 4 digitos ('0000') al comando "CargarComprobanteAsociado" este no me da error pero al ejecutar "AbrirComprobante" me devuelve "nro de punto de venta invalido".
  • Si paso el nro de punto de venta con 5 digitos ('00000') al comando "CargarComprobanteAsociado" este me devuelve "nro de punto de venta invalido".

Daniel Del Giudice

unread,
May 14, 2018, 11:20:13 AM5/14/18
to Comunidad de Visual Foxpro en Español
Ese es el problema. 0000 no es válido como punto de venta y no puede ser parte de un número de comprobante. En tu rutina que obtiene el punto de venta debes agregar que si te devuelve 0000 por no estar inicializada entonces vos lo pones en 0001.

Te paso la rutina completa.


_pv = "----"

DO CASE
CASE o.protocolo = 1

  TRY
    THISFORM.hasar.obtenerdatosdeinicializacion
  CATCH
  ENDTRY

  TRY
    _pv = THISFORM.hasar.respuesta(7)
  CATCH
  ENDTRY

CASE o.protocolo = 2

  _resultado = THISFORM.epson.STATUS("C")
  IF _resultado
    _pv = THISFORM.epson.answerfield_4
  ENDIF

CASE o.protocolo = 3

  * Obtiene punto de venta
  respuestalen = 6
  respuesta = REPLICATE(" ", respuestalen)

  o.nresultado = consultarnumeropuntodeventa(@respuesta, respuestalen)

  IF o.nresultado = 0
    * Quita un último carácter " " que devuelve y de eso toma los últimos 4 dígitos
    _pv = RIGHT(LEFT(respuesta,5),4)
  ENDIF

CASE o.protocolo = 4

  o.resultado = lohasar.consultardatosinicializacion()

  IF o.resultado
    * Los equipos 2G devuelven PV en formato de 5 caracteres: 00000
    _pv = lohasar.loprohasar.get_nodevalue_hasar_2g("PuntoVenta")
    _pv = RIGHT(LEFT(_pv,5),4)
  ENDIF

ENDCASE

IF _pv = "0000"
  _pv = "0001"
ENDIF

RETURN _pv


Si hay un error al solicitar el punto de venta entonces este queda en "----" y de ahí puedes manejarlo como quieras.


Daniel Del Giudice

Gustavo Redin

unread,
May 15, 2018, 7:37:02 AM5/15/18
to Comunidad de Visual Foxpro en Español
Muchisimas gracias Daniel!!!, era ese el problema. Ya esta solucionado.

Saludos

alejandro falca

unread,
May 22, 2018, 8:36:42 PM5/22/18
to Comunidad de Visual Foxpro en Español
Ariel, buenas noches, hice lo siguiente

DECLARE INTEGER EnviarComando IN "EpsonFiscalInterface32.dll" STRING comando
DECLARE INTEGER ObtenerRespuestaExtendida IN "EpsonFiscalInterface32.dll" INTEGER numero_campo, STRING @buffer_salida, INTEGER largo_buffer_salida, INTEGER @largo_final_buffer_salida
lrespuesta = REPLICATE(CHR(0), max_answer)
comando = "080A|0000|0"
lrespuesta = enviarcomando(comando)

MESSAGEBOX(lrespuesta)

CLEAR
LOCAL i as Integer 
FOR i = 1 TO 14
respuesta = REPLICATE(CHR(0),10)
largo_respuesta = 10
largo_final = 0
err = obtenerrespuestaextendida( i, @respuesta, largo_respuesta, @largo_final )
MESSAGEBOX( respuesta)
IF err # 0
lcerror = REPLICATE( CHR(0), max_answer)
consultardescripciondeerror(err,@lcerror,max_answer)
MESSAGEBOX (lcerror)
ENDIF
? respuesta
NEXT i

siguiendo la información brindada por los PDF's de Epson utilizar el campo 4 de respuesta del comando que me informaría si debo o no realizar un cierre Z.
Cuando ejecuto el comando para extraer información extendida me devuelve un error diciendo que el "Nro. de campo es erróneo". Me podrás guiar para entender que estoy haciendo mal?
previo a eso configuro puerto (USB) y conecto con el CF (TM-T900FA).


El sábado, 10 de marzo de 2018, 8:46:37 (UTC-3), Ariel escribió:
para recuperar esos datos, hay que enviar el comando Hexa.

loepsontm900=CREATEOBJECT("TmT900FA")
lcerr = loepsontm900.enviarcomandohex("080A|0000|83") &&Ticket

loepsontm900.obtenerrespuestaextendida(3)
_cierrezeta   =VAL(loepsontm900.respuesta)+1


loepsontm900.obtenerrespuestaextendida(7)
_cant_df = VAL(loepsontm900.respuesta)

loepsontm900.obtenerrespuestaextendida(8)
_cant_df_canc =VAL(loepsontm900.respuesta)



loepsontm900.obtenerrespuestaextendida(9)
_total_gral_tk   = VAL(loepsontm900.respuesta)


loepsontm900.obtenerrespuestaextendida(10)
_total_iva_tk     = VAL(loepsontm900.respuesta)/100


Y la funcion es 


FUNCTION obtenerrespuestaextendida
LPARAMETERS tncampo
LOCAL BUFFER
LOCAL bufferlen
LOCAL bufferfinallen

bufferlen = 100

                && get answer field:  1
BUFFER = REPLICATE( CHR(0), bufferlen )    && IMPORTANTE: inicializar
bufferfinallen = 0                         && IMPORTANTE: inicializar
err = obtenerrespuestaextendida ( tncampo, @BUFFER, bufferlen, @bufferfinallen )
THIS.respuesta=BUFFER

RETURN THIS.respuesta



ENDFUNC


El 9 de marzo de 2018, 10:15, Luciano Wendler <lucw...@gmail.com> escribió:

Buenos Dias Ariel, lograron ayudarte con :
  • Nro Ultimo Cierre Z
  • cantidad de notas de credito
  • cantidad de dnfh (documentos NO Fiscales homologados) 
  • cantidad de dnf (documentos NO Fiscales)
  • cantidad de df (documentos Fiscales)
  • cantidad facturas bc 
  • cantidad facturas A  
  • Nro ultima Factura fiscal
  • total de ventas $
  • total de impuestos $
  • total de recepción de dinero $
  • ultima factura A
  • ultima nota de crédito  A    
  • ultima nota de credito  BC
  • Ultimo Remito   
  • Total $ de nota de credito
estoy tambien necesitando orientarme con eso
 



--

Ariel Octavio D'Alfeo
Córdoba, Argentina
Message has been deleted
It is loading more messages.
0 new messages