Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   Fujitsu COBOL (https://www.cobolforo.es/forumdisplay.php?f=77)
-   -   [Sintaxis] Problemas con comunicación impresoras fiscales. (https://www.cobolforo.es/showthread.php?t=1435)

Ale 17 de marzo de 2025 14:06

controlador fiscal
 
si si "Int" entero. Estamos probando de esa forma, aunque manual de Dll indique que tiene que ser "float".
y menos "cantidad" lo demas funciona aparentemente.
Voy a tratar de probar en otra pc con version 7 Binary-long a ver que pasa. Toda prueba me sirve hasta lograr hacerlo funcionar.
Si es que lo logro.

Ale 17 de marzo de 2025 17:34

controlador fiscal
 
1 Archivos Adjunto(s)
leyendo manual de protocolos compatibles, les adjunto en un archivo, la parte que explica el formato de los datos.

Kuk 17 de marzo de 2025 21:46

@Ale, he mirado el documento y me ha entrado la duda, pero es que acabo de fijarme en el ejemplo de Fito siguiente: Problemas con comunicación impresoras fiscales. - Página 2 - Cobol Foro

Y la verdad es que.... :mm:

Es que la función se llama "*float" pero por lo que entiendo no lo es...
El formato supongo es el mismo en todas la funciones. Si es así, debes enviar un valor de texto, con su punto.
Fíjate en el ejemplo de Fito, el campo oPreunies de texto (editado de Cobol) con un nulo al final!
Has probado con ese ejemplo?

Ale 17 de marzo de 2025 23:13

1 Archivos Adjunto(s)
Adjunte los parámetros según manual de la Dll.
Y también a continuación les muestro, como lo tengo echo y (me funciona), de la otra forma de comunicarme con la misma fiscal.
Que como les indique anteriormente, no lo hago por esta Dll, lo hago con un programa que se llama (Samdrv.exe), que lo que hace es leerme un txt
que le envío armado para que imprima.

Código COBOL:
  1. WORKING.....
  2. 01 REG-TEXTADD GLOBAL.
  3.     03 FILLER            PIC X(8) value "[txtadd]".
  4.     03 FILLER            PIC X VALUE ";".
  5.     03 TEXTO-ITEM-FISCAL PIC X(26) VALUE SPACES.
  6. ** probado no mas de 26 caracteres para texto item    
  7.     03 FILLER            PIC X VALUE ";".
  8.  01 REG-ITEM GLOBAL.
  9.     03 FILLER             PIC X(6) value "[item]".
  10.     03 FILLER             PIC X VALUE ";".
  11.     03 COD-ARTICULO-FISCAL   pic X(16) value SPACES.    
  12.     03 FILLER             PIC X VALUE ";".
  13.     03 CANT-UNI-FISCAL    PIC X(7) VALUE SPACES.
  14.     03 FILLER             PIC X VALUE ";".
  15.     03 PRECIO-UNI-FISCAL  PIC X(8) VALUE SPACES.    
  16.     03 FILLER             PIC X VALUE ";".
  17.     03 TAZA-IVA-FISCAL    PIC XX VALUE "21".
  18.     03 FILLER              PIC X VALUE ";".
  19.     03 FILLER              PIC X(10) VALUE "0.00000000".
  20.     03 FILLER              PIC X VALUE ";".
  21.     03 FILLER              PIC 9 VALUE 0.
  22.     03 FILLER              PIC X VALUE ";".
  23. *    03 COD-ARTICULO-FISCAL PIC X(15).
  24.     03 FILLER              PIC X VALUE ";".
  25.     03 FILLER              PIC 9 VALUE 0.
  26.     03 FILLER              PIC X VALUE ";".
  27. ********************************************
  28.   01 PASAJE-UNITARIO  PIC 999999.99.
  29.   01 PASAJE-CANTIDAD  PIC 9999.99.
  30.   01 PASAJE-TAZA     PIC 99.99.
  31.  
  32.    PROCEDURE...
  33.          ******  
  34.           MOVE "Numeric"(4) OF "ListItems" (ULTIMA-LINEA-ACTIVA) OF LIST1 TO PASAJE-CANTIDAD.
  35.           MOVE "Numeric"(5) OF "ListItems" (ULTIMA-LINEA-ACTIVA) OF LIST1 TO PASAJE-UNITARIO.
  36.           MOVE PASAJE-CANTIDAD TO CANT-UNI-FISCAL.
  37.           MOVE PASAJE-UNITARIO TO PRECIO-UNI-FISCAL.  
  38.     *** aca arma el registro : 01 REG-ITEM global.
  39.            
  40.  
  41.  Formato del txt que envio :  IN_ELLIX40F.TXT                                                                                                                                                                    
  42.   [txtadd];DISCO FREN CLIO 1.4 R9 R11;                                                                                                                                                                    
  43.   [item];4WD84705        ;0002.00;033000.0;21;0.00000000;0;;0;                                                                                                                                            
  44.   [pago];0066000.00;20;                                                                                                                                                                                  
  45.   [cerrar];

Fito 18 de marzo de 2025 15:32

Hola:

Deberías probar pasarle el pdf del manual a una IA y ver qué te dice. Yo uso Claude y me ha sacado del paso

Saludos

Fito..

Ale 18 de marzo de 2025 16:30

controlador fiscal
 
hola Fito.
si ya no se que mas probar, tu ejemplo lo probé pero tampoco me lo tomo.
buscare lo que me dijiste.
muchas gracias....


Ahora se me presento este problema, como obtener la respuesta del texto enviado?
En esta función de la dll.
Código CPP:
  1. const char * IFOpRetGet (const char * name)
Obtiene un campo de respuesta por nombre.
Parámetros:
• name: nombre del campo de respuesta. Ver detalles en el Capítulo III.
Retorno: texto del campo de respuesta pedido.

Ejemplo: otro lenguaje
Código CPP:
  1. Console.WriteLine(" Numero: {0}", drv.IFOpRetGet("Numero"));
  2.                 Console.WriteLine(" CodigoTipo: {0}", drv.IFOpRetGet("CodigoTipo"));

fastpho 18 de marzo de 2025 17:19

Impresora fiscal ticket
 
Cita:

Citación del post de Ale (Mensaje 9959)
hola Fito.
si ya no se que mas probar, tu ejemplo lo probé pero tampoco me lo tomo.
buscare lo que me dijiste.
muchas gracias....


Ahora se me presento este problema, como obtener la respuesta del texto enviado?
En esta función de la dll.
const char * IFOpRetGet (const char * name) Obtiene un campo de respuesta por nombre.
Parámetros:
• name: nombre del campo de respuesta. Ver detalles en el Capítulo III.
Retorno: texto del campo de respuesta pedido.

Ejemplo: otro lenguaje
Código CPP:
  1. Console.WriteLine(" Numero: {0}", drv.IFOpRetGet("Numero"));
  2.                 Console.WriteLine(" CodigoTipo: {0}", drv.IFOpRetGet("CodigoTipo"));

@Ale que paso con el tema del ticket lo pudiste resolver , por que cambiaste el tema del problema original que
era no podias mandar valores numericos a las variables que lo requerian para confeccionar un ticket en la fiscal
Saludos...

Ale 18 de marzo de 2025 17:54

controlador fiscal
 
hola fastpho, si si funciono como me indicaste vos.
Logicaménte hay que jugar con los datos numéricos para lograr los decimales.
Enviándolo: MOVE "IFOpParamIntSet" TO FUNCION. Me tomo "precio", "IVA", pero no me tomo "Cantidad", y no se porque. Es numérico también.
Revise todo por las dudas varias veces y nada. No Cancela el tiquet, pero no toma ningún valor cantidad. Lo toma por defecto como cantidad = 1.
No me acuerdo si probé enviarlos como importe en bruto (by value 123.36), pero creo que lo probé.

Perdón que me fui a otro problema, es que se me junto todo.
Código CPP:
  1. const char * IFOpRetGet (const char * name)
Esto lo tengo que resolver, para leer el valor del numero de comprobante que me devuelve el impresor.

Muchas gracias por su aporte tiempo...
son muy amables. y la tienen muy clara.
saludos.

fastpho 18 de marzo de 2025 18:30

@Ale es igual la forma de implementacion
Código COBOL:
  1.  
  2.      MOVE "IFOpRetGet"   TO FUNC-SAM4-LIB.
  3.      CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE "comando" returning "respuesta".

Ale 18 de marzo de 2025 20:19

controlador fiscal
 
Gracias fastpho, a la noche arranco con las pruebas..
Código COBOL:
  1.  CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE "comando" returning "respuesta".
comando en este caso seria "Numero" (numero de comprobante), pero en respuesta, me traerá el numero de comprobante que preciso? o solo me trae el valor, si se ejecuto bien la función?

fastpho 19 de marzo de 2025 14:46

Cita:

Citación del post de Ale (Mensaje 9963)
Gracias fastpho, a la noche arranco con las pruebas..
CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE "comando" returning "respuesta".
comando en este caso seria "Numero" (numero de comprobante), pero en respuesta, me traerá el numero de comprobante que preciso? o solo me trae el valor, si se ejecuto bien la función?

@Ale te deberia traer el numero de ticket que confeccionaste en la variable "respuesta" que deberia ser
Código COBOL:
  1. 01 Respuesta PIC S9(9) COMP-5


Saludos..

Kuk 19 de marzo de 2025 19:39

@Ale,

Comentario de Moderador
Usa los botones de resalto de sintaxis ;)


En cuanto a esto:
Código CPP:
  1. const char * IFOpRetGet (const char * name)

En Cobol se hace con un puntero:

Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  01  ptrDato     POINTER.
  3. ...
  4.  LINKAGE SECTION.
  5.  01  datosRecepcion      PIC X(100).
  6.  
  7.  PROCEDURE       DIVISION.
  8.  
  9.      call pgm with stdcall using by content "Precio"
  10.                            returning ptrDato
  11.                            
  12.      set address of datosRecepcion to ptrDato
  13.      
  14.      display datosRecepcion

Ale 21 de marzo de 2025 17:50

controlador fiscal
 
hola amigos.. Les comento los resultados, por si a alguien le hace falta en algún momento.

Código CPP:
  1. const char * IFOpRetGet (const char * name)

En esta función, para traer el numero de comprobante desde la fiscal, probando lo que me explicaron uds, funciono esto:
Código COBOL:
  1.  CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE "comando" returning "respuesta".
. Pero lo tuve que enviar como:

Código CPP:
  1. const char * IFOpIntGet (const char * name)
como numérico (entero).

Ahora cuando tenga que traer algún valor como texto, como la función IFOpRetGet, no se como voy a hacer.
----

Y con respecto a enviar parámetro cantidad articulo, sigue sin funcionar, mejoro porque no me tira error, pero no me toma valor cantidad, lo mejor que funciono es esto:
Código COBOL:
  1.  01 comando-item-canti   pic x(8) value "Cantidad".
  2.  
  3.     MOVE "IFOpParamSet" TO FUNCION.
  4. ***        MOVE "IFOpParamFloatSet" TO FUNCION.
  5.     CALL FUNCION WITH STDCALL USING BY reference COMANDO-ITEM-CANTI
  6.                                       by value 2.60  
  7.                                       returning RESPUESTA-IMPRESOR.

probé como "IFOpParamIntSet" y "IFOpParamFloatSet" (como indica el manual) y no lo pude hacer funcionar. Lo raro es que en: por ejemplo comando "Precio" que tiene la misma arquitectura,
enviándolo como "IFOpParamIntSet" me lo tomo, pic S9(9) comp-5. Logicamente acomodando los decimales.
Ya me estoy entregando. Me supera.

saludos ....

Kuk 21 de marzo de 2025 19:27

Cita:

Citación del post de Ale (Mensaje 9969)
Código COBOL:
  1. CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE "comando" returning "respuesta".

Yo la verdad es que este código ni lo entiendo.... Ese returning "respuesta" con qué lo reemplazas? Porque tal cual, siempre trae un puntero a la cadena de caracteres en duro "respuesta"...


Cita:

Citación del post de Ale (Mensaje 9969)
Pero lo tuve que enviar como:
Código CPP:
  1. const char * IFOpIntGet (const char * name)
como numérico (entero).

:mm:

No entiendo nada de esta librería, la documentación y definición dice una cosa, pero funcion de otra. Qué narices es esto? Se necesita un vidente a tiempo completo para poder trabajar con ella :D

Cita:

Citación del post de Ale (Mensaje 9969)
acomodando los decimales

A qué te refieres? Cómo se acomodan las decimales, si el campo es un entero??? :flipa:

Ale 21 de marzo de 2025 22:02

controlador fiscal
 
jaja. Dale yo cuando este en mi casa, voy a enviarte algún ejemplo y tratar de explicarte.
En Argentina lamentablemente en nada la tenemos fácil.. jaja.

Gusaiello 24 de marzo de 2025 22:07

@Ale, Tira a la basura esa impresora y pasate a la factura electrónica. Es lo mas fácil que hay Y GRATIS!!!!

Ale 25 de marzo de 2025 15:45

controlador fiscal
 
En cualquier momento la revoleo...
El problema de la facturación online, es que luego tengo que pasar uno por uno los comprobantes al final del día al sistema..
Pude hacer funcionar varias funciones.
me falta resolver, el enviar al final del tique, la leyenda que exige (Arca), sobre transparencia fiscal.
Tengo que probar con esto:

Código CPP:
  1. drv.IFOpBegin("EstablecerEncabezadoCola");
  2.                 drv.IFOpParamIntSet("Numero", 19);
  3.                 drv.IFOpParamSet("Texto", "Cola libre 9");

Fito 25 de marzo de 2025 16:22

Hola:

Por qué pasar una a una las facturas al sistema.

Gustvo te sugiere hacer factura electrónica por webservice.

Saludos

Fito...

Ale 25 de marzo de 2025 22:19

controlador fiscal
 
Hola Fito, porque tengo hecho el sistema contable todo con (cobol), la información que envio y traigo del controlador fiscal, la chupo a mi sistema. Y por ejemplo, los item los saco de una lista de precios y los utilizo en la facturación, al igual que los datos de los clientes.
Mucho mas ágil, cosa que por facturador web de arca no me lo ofrece.
saludos...

Gusaiello 26 de marzo de 2025 19:46

Cita:

Citación del post de Ale (Mensaje 9982)
El problema de la facturación online, es que luego tengo que pasar uno por uno los comprobantes al final del día al sistema..

No debería ser asi. Yo no hablo de la factura en línea. me refiero a emitir factura electrónica desde tu programa, el mismo que esta intentando imprimir una factura en la impresora fiscal, que envíe los datos a ARCA y si la factura viene aprobada que guarde los datos que se necesiten en los archivos correspondientes (iva, cuenta corriente etc. etc.), es decir que en lugar de negociar la factura con la impresora fiscal, lo haces directamente con el servidor de afip.



Post añadido a las 15:46. Post anterior a las 15:42


Si necesitas ayuda con ese tema no tengo inconveniente ya que al principio me costó bastante encontrarle la vuelta, pero desde que migré todos los programas a factura electrónica se terminaron los problemas.
No solo tiene la ventaja de que podes imprimir en cualquier tipo de impresora, sino que tambien esta la opción de no imprimir; podes generar un pdf y luego enviarlo por e-mail.

Kuk 26 de marzo de 2025 22:25

@Ale, podrías decirme en qué lenguaje son los ejemplos qué pones? Porque no es ni C ni C++, tiene pinta de Visual Basic

Ale 27 de marzo de 2025 20:36

Código VB:
  1. Drv.IFOpBegin("ItemVenta")
  2.         Drv.IFOpParamSet("Descripcion", "Item de prueba")
  3.         Drv.IFOpParamFloatSet("Precio", 1.2345)
  4.         Drv.IFOpParamFloatSet("IVA", 21.0)
  5.         Drv.IFOpParamSet("CodigoProducto", "7791234567898")
  6.         If (Drv.IFOpSend(1) = 0) Then
  7.             CmdError("ItemVenta")
  8.             Return
  9.         End If
  10.  
  11.         Drv.IFOpBegin("Cerrar")
  12.         If (Drv.IFOpSend(1) = 0) Then

hay un par de archivos con ejemplos en distintos lenguajes. la carpeta dice (VBnet).

Kuk 27 de marzo de 2025 21:39

Cita:

Citación del post de Ale (Mensaje 9994)
VBnet

Acabaramos... Claro, ya decía yo. Es Visual Basic .NET que es la respuesta de Microsoft a Java... Por eso no funcionaba lo que decía, no funciona igual que C o C++.

Hay alguna subcarpeta que diga C o C++ o VB o algún archivo con extensiones similares?

La librería a la que llamas no está hecha en VB.NET porque no se puede llamar "código gestionado" (managed code) tal cual, sin pasar por el Run-Time .NET (equivalente a la JVM). Con lo cual, debe haber ejemplos para lenguajes de compilación nativa, como es el caso de C (unmanaged code).

Ale 27 de marzo de 2025 22:34

controlador fiscal
 
Código CPP:
  1. printf("EstablecerEncabezadoCola\n");
  2.         IFOpBegin("EstablecerEncabezadoCola");
  3.         IFOpParamIntSet("Numero", 19);
  4.         IFOpParamSet("Texto", "Cola libre 9");
  5.         cmd_send();
Este ejemplo esta e la carpeta lenguaje (C). Esto es lo que no logro hacer funcionar, enviar al impresor una leyenda. Entre los valores de 11 a 20 van los textos cola. Todas las demás operaciones, peleándola y gracias a todos uds, pude hacer funcionar. solo me falta esto.
Si precisan algún archivo de esas lineas de programación me avisan

fastpho 27 de marzo de 2025 23:28

@Ale te paso ejemplo...
Código COBOL:
  1. WORKING-STORAGE SECTION.
  2.  01 TITULO-ECabCola  PIC X(24) VALUE "EstablecerEncabezadoCola".
  3.  01 TITULO-ECNumero  PIC X(6)  VALUE "Numero".
  4.  01 TITULO-ECTexto   PIC X(5)  VALUE "Texto".
  5.  01 Valor-ECNumero   PIC S9(9) COMP-5.
  6.  01 Valor-ECTexto    PIC X(50).
  7.  01 HEADER-11.
  8.     03 H-CAJERO  PIC X(7) VALUE "CAJERO:".
  9.     03 H-CODIGO  PIC 9(2).
  10.     03 FILLER    PIC X VALUE SPACES.
  11.     03 H-NOMBRE  PIC X(19).
  12.     03 H-CAJA    PIC X(7) VALUE "  CAJA:".
  13.     03 H-NUMERO  PIC 9(4).
  14.  PROCEDURE       DIVISION.
  15.  
  16.  
  17.      MOVE spaces        TO FUNC-SAM4-LIB.
  18.      MOVE "IFOpBegin"   TO FUNC-SAM4-LIB.
  19.      CALL FUNC-SAM4-LIB WITH STDCALL USING BY CONTENT TITULO-ECabCola returning Respuesta-Impresor.
  20.      DISPLAY "TITULO-ECabCola " , Respuesta-Impresor.
  21.  
  22. ************    
  23. *Texto Cola
  24.  
  25.      MOVE spaces           TO FUNC-SAM4-LIB.
  26.      MOVE "IFOpParamSet"   TO FUNC-SAM4-LIB.
  27. *     MOVE SPACES  TO Valor-ECTexto.
  28.      MOVE 2 TO H-CODIGO.
  29.      MOVE "Osvaldo Linea 11 " TO H-NOMBRE.
  30.      MOVE 3 TO H-NUMERO.
  31.      MOVE HEADER-11        TO Valor-ECTexto.
  32.      CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE TITULO-ECTexto
  33.                                            BY REFERENCE     Valor-ECTexto
  34.                                            returning Respuesta-Impresor.
  35.      DISPLAY "TITULO-ECTexto " , Respuesta-Impresor.
  36.  
  37. *****************
  38. *Numero Cola
  39.      MOVE spaces              TO FUNC-SAM4-LIB.
  40.      MOVE "IFOpParamIntSet"   TO FUNC-SAM4-LIB.
  41.      MOVE 11                  TO Valor-ECNumero.
  42.      CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE TITULO-ECNumero
  43.                                            BY VALUE   Valor-ECNumero
  44.                                            returning Respuesta-Impresor.
  45.      DISPLAY "titulo-ECNumero " , Respuesta-Impresor.
  46.                                          
  47.  
  48.              
  49.  
  50. *--------------
  51. * Send
  52.      MOVE spaces          TO FUNC-SAM4-LIB.
  53.      MOVE "IFOpSend"   TO FUNC-SAM4-LIB.
  54.      MOVE 1            TO sWait.
  55.      CALL FUNC-SAM4-LIB WITH STDCALL USING BY VALUE sWait returning Respuesta-Impresor.
  56.      DISPLAY "SEND TITULO-ECabCola " , Respuesta-Impresor.

Saludos ....

Ale 28 de marzo de 2025 01:35

impresoras fiscales
 
muchas gracias. Fasthpo

Algo parecido estaba probando ayer. y probé con tu ejemplo.
Yo lo estoy enviando, luego de comando Pago y antes de Cerrar el documento.
Cuando envío numero de cola, no cancela comprobante pero no imprime nada.
Enviándolo como (IntSet) me tira error. respuesta impresor.
si lo envío como ParamSet no tira error respuesta-impresor, pero tampoco imprime nada.



Código COBOL:
  1.   MOVE "IFOpBegin" to FUNCION3.      
  2.       CALL FUNCION3 WITH STDCALL USING BY CONTENT PARAMETRO-ENCABEZADO RETURNING RESPUESTA-IMPRESOR.
  3.  
  4. *** numero-cola.
  5.      MOVE spaces              TO FUNCION3.
  6. *     MOVE "IFOpParamIntSet"   TO FUNCION3.
  7.      MOVE "IFOpParamSet"TO FUNCION3.
  8.      MOVE 11 TO Valor-ECNumero.
  9.      CALL FUNCION3 WITH STDCALL USING BY CONTENT TITULO-ECNumero
  10.                                            BY VALUE   Valor-ECNumero
  11.                                            returning Respuesta-Impresor.
  12.      if respuesta-impresor = 0 move "error-cola" to pow-text of error-cod-cola.
  13. **... texto-cola      
  14.      MOVE spaces           TO FUNCION.
  15.      MOVE "IFOpParamSet"   TO FUNCION.
  16. *     MOVE SPACES  TO Valor-ECTexto.
  17.      MOVE 2 TO H-CODIGO.
  18.      MOVE "Osvaldo Linea .11 " TO H-NOMBRE.
  19.      MOVE 3 TO H-NUMERO.
  20.      MOVE HEADER-11  TO Valor-ECTexto.
  21.      CALL FUNCION WITH STDCALL USING BY REFERENCE TITULO-ECTexto
  22.                                            BY REFERENCE Valor-ECTexto
  23.                                            returning Respuesta-Impresor.        
  24.      if respuesta-impresor = 0 move "error-texto-cola" to pow-text of error-tex-cola.

fastpho 28 de marzo de 2025 13:07

@Ale
Mandalo como te pongo en el ejemplo tal cual solo cambie el orden y la el numero de cola
por CONTENT

El envio de la cola lo podes probar sin la necesidad de hacer un ticket
pone un boton y envialo , si despues le metes un ticket al impresor
en la cola 11 deberia poner
*CAJERO:02 Osvaldo Linea 11 CAJA:3*
Código COBOL:
  1. WORKING-STORAGE SECTION.
  2.  01 TITULO-ECabCola  PIC X(24) VALUE "EstablecerEncabezadoCola".
  3.  01 TITULO-ECNumero  PIC X(6)  VALUE "Numero".
  4.  01 TITULO-ECTexto   PIC X(5)  VALUE "Texto".
  5.  01 Valor-ECNumero   PIC S9(9) COMP-5.
  6.  01 Valor-ECTexto    PIC X(50).
  7.  01 HEADER-11.
  8.     03 H-CAJERO  PIC X(7) VALUE "CAJERO:".
  9.     03 H-CODIGO  PIC 9(2).
  10.     03 FILLER    PIC X VALUE SPACES.
  11.     03 H-NOMBRE  PIC X(19).
  12.     03 H-CAJA    PIC X(7) VALUE "  CAJA:".
  13.     03 H-NUMERO  PIC 9(4).
  14. 01 Respuesta-Impresor PIC S9(9) COMP-5.
  15.  
  16. PROCEDURE       DIVISION.
  17.      MOVE spaces        TO FUNC-SAM4-LIB.
  18.      MOVE "IFOpBegin"   TO FUNC-SAM4-LIB.
  19.      CALL FUNC-SAM4-LIB WITH STDCALL USING BY CONTENT TITULO-ECabCola returning Respuesta-Impresor.
  20.      DISPLAY "TITULO-ECabCola " , Respuesta-Impresor.
  21.  
  22.  
  23.  
  24.  
  25. ****************
  26. *Numero Cola
  27.      MOVE spaces              TO FUNC-SAM4-LIB.
  28.      MOVE "IFOpParamIntSet"   TO FUNC-SAM4-LIB.
  29.      MOVE 11                  TO Valor-ECNumero. *> Numero de Cola 11
  30.      CALL FUNC-SAM4-LIB WITH STDCALL USING BY CONTENT TITULO-ECNumero *> Esto cambie POR CONTENT
  31.                                            BY VALUE   Valor-ECNumero
  32.                                            returning Respuesta-Impresor.
  33.      DISPLAY "titulo-ECNumero " , Respuesta-Impresor.    
  34.  
  35.  
  36.  
  37.  
  38. ************    
  39. *Texto Cola
  40.      MOVE spaces           TO FUNC-SAM4-LIB.
  41.      MOVE "IFOpParamSet"   TO FUNC-SAM4-LIB.
  42.      MOVE 2                   TO H-CODIGO.
  43.      MOVE "Osvaldo Linea 11 " TO H-NOMBRE.
  44.      MOVE 3                   TO H-NUMERO.
  45.      MOVE HEADER-11        TO Valor-ECTexto.
  46.      CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE TITULO-ECTexto
  47.                                            BY REFERENCE     Valor-ECTexto
  48.                                            returning Respuesta-Impresor.
  49.      DISPLAY "TITULO-ECTexto " , Respuesta-Impresor.
  50.  
  51. *--------------
  52. * Send
  53.      MOVE spaces       TO FUNC-SAM4-LIB.
  54.      MOVE "IFOpSend"   TO FUNC-SAM4-LIB.
  55.      MOVE 1            TO sWait.
  56.      CALL FUNC-SAM4-LIB WITH STDCALL USING BY VALUE sWait returning Respuesta-Impresor.
  57.      DISPLAY "SEND TITULO-ECabCola " , Respuesta-Impresor.

Saludos...

Ale 29 de marzo de 2025 02:31

fastpho probé pero no hay caso, no lo puedo resolver.. encima ahora me doy cuenta, que lo que tanto me costo hacer funcionar (cantidad en item) resulta que en tiquet anda perfecto, pero en inscr. monotr. exento, no me toma la cantidad, lo toma como valor 1.:enamor:
se me termina el tiempo y la esperanza.
saludos.

Ale 31 de marzo de 2025 18:33

impresoras fiscales
 
hola amigos. como estan?
Les hago consulta, para ver si uds se dan cuenta como resolverlo.

Código COBOL:
  1.  working....
  2.  01 PARAMETRO-ENCABEZADO  PIC X(24) VALUE "EstablecerEncabezadoCola".                                      
  3.  01 TITULO-ECNumero  PIC X(6)  VALUE "Numero".
  4.  01 TITULO-ECTexto   PIC X(5)  VALUE "Texto".
  5.  01 Valor-ECNumero   PIC S9(9) COMP-5.
  6.  01 Valor-ECTexto    PIC X(26).
  7.  
  8.  procedure.
  9.    inicio.
  10.          ......
  11.          ......
  12.          cargo (item-venta), envio (pago).  y luego antes de cerrar comprobante.
  13.          voy a probar-cola.
  14.    
  15.    
  16.    PROBANDO-COLA.
  17.       MOVE SPACES TO comando.    
  18.       move zero to respuesta-impresor.
  19.       MOVE "IFOpBegin" to comando.        
  20.       CALL comando WITH STDCALL USING BY reference parametro-encabezado                                    
  21.                                       RETURNING RESPUESTA-IMPRESOR.      
  22.       if respuesta-impresor = 0 MOVE "ERROR estableziendo cola" TO POW-TEXT OF armado-cola.
  23.  
  24. ****** este comando ya me larga (error) cuando lo envio.   probe como (content) tambien.                                                                                    
  25.  
  26. *** numero-cola.
  27.       MOVE spaces TO FUNCION3.
  28.       MOVE "IFOpParamSet"TO FUNCION3.
  29. *** Acá lo envio como ParamSet..(texto), porque como "IFOpParamIntSet" no me funciono (me larga error) valor 0
  30.       CALL FUNCION3 WITH STDCALL USING BY CONTENT TITULO-ECNumero
  31.                                        by CONTENT "19"
  32.                                        returning Respuesta-Impresor.
  33.       if respuesta-impresor = 0 move "error-colas" to pow-text of error-cod-cola.
  34. *** texto-cola      
  35.       MOVE spaces           TO FUNCION.
  36.       MOVE "IFOpParamSet"   TO FUNCION.
  37.       MOVE SPACES  TO Valor-ECTexto.      
  38.       move "probando transparencia fiscal" to Valor-ECTexto.
  39.       CALL FUNCION WITH STDCALL USING BY reference TITULO-ECTexto
  40.                                       BY REFERENCE Valor-ECTexto
  41.                                       returning Respuesta-Impresor.        
  42.       if respuesta-impresor = 0 move "error-texto-cola" to pow-text of error-tex-cola.    
  43.  
  44. *************************
  45.                 Consulta que opinan y como hacerlo si envío todo junto. algo así:
  46.      
  47.       moOVE SPACES TO comando.    
  48.       move zero to respuesta-impresor.
  49.       MOVE "IFOpBegin" to comando.        
  50.       CALL comando WITH STDCALL USING BY reference parametro-encabezado                                    
  51.                                       by reference TITULO-ECNumero
  52.                                       by content "19"
  53.                                       by reference TITULO-ECTexto
  54.                                       ....    
  55.                                       ....    
  56.                                       RETURNING RESPUESTA-IMPRESOR.

saludos....

fastpho 31 de marzo de 2025 20:03

@Ale esto asi esta mal por que no respeta el protocolo
Código COBOL:
  1. *************************
  2.                 Consulta que opinan y como hacerlo si envío todo junto. algo así:
  3.      
  4.       moOVE SPACES TO comando.    
  5.       move zero to respuesta-impresor.
  6.       MOVE "IFOpBegin" to comando.        
  7.       CALL comando WITH STDCALL USING BY reference parametro-encabezado                                    
  8.                                       by reference TITULO-ECNumero
  9.                                       by content "19"
  10.                                       by reference TITULO-ECTexto
  11.                                       ....    
  12.                                       ....    
  13.                                       RETURNING RESPUESTA-IMPRESOR.

Código COBOL:
  1. MOVE SPACES TO comando.    
  2.       move zero to respuesta-impresor.
  3.       MOVE "IFOpBegin" to comando.        
  4.       CALL comando WITH STDCALL USING BY reference parametro-encabezado                                    
  5.                                       RETURNING RESPUESTA-IMPRESOR.      
  6.       if respuesta-impresor = 0 MOVE "ERROR estableziendo cola" TO POW-TEXT OF armado-cola.
  7.  
  8. ****** este comando ya me larga (error) cuando lo envio.   probe como (content) tambien.                                                                                    
  9.  
  10. *** numero-cola.
  11.       MOVE spaces TO FUNCION3.
  12.       MOVE "IFOpParamSet"TO FUNCION3.
  13. *** Acá lo envio como ParamSet..(texto), porque como "IFOpParamIntSet" no me funciono (me larga error) valor 0
  14.       CALL FUNCION3 WITH STDCALL USING BY CONTENT TITULO-ECNumero
  15.                                        by CONTENT "19"
  16.                                        returning Respuesta-Impresor.
  17.       if respuesta-impresor = 0 move "error-colas" to pow-text of error-cod-cola.
y para este caso donde esta el "SEND"
Otra consulta : decime de año es la version de la libreria Sam4sFiscalDriver la fecha que te figura ?
consulta nro 2 : antes de querer implementar esto trabajabas por el samdrv.exe ?
Saludos



Post añadido a las 19:03. Post anterior a las 18:53


Cita:

Citación del post de fastpho (Mensaje 10005)
@Ale esto asi esta mal por que no respeta el protocolo
Código COBOL:
  1. *************************
  2.                 Consulta que opinan y como hacerlo si envío todo junto. algo así:
  3.      
  4.       moOVE SPACES TO comando.    
  5.       move zero to respuesta-impresor.
  6.       MOVE "IFOpBegin" to comando.        
  7.       CALL comando WITH STDCALL USING BY reference parametro-encabezado                                    
  8.                                       by reference TITULO-ECNumero
  9.                                       by content "19"
  10.                                       by reference TITULO-ECTexto
  11.                                       ....    
  12.                                       ....    
  13.                                       RETURNING RESPUESTA-IMPRESOR.

Código COBOL:
  1. MOVE SPACES TO comando.    
  2.       move zero to respuesta-impresor.
  3.       MOVE "IFOpBegin" to comando.        
  4.       CALL comando WITH STDCALL USING BY reference parametro-encabezado                                    
  5.                                       RETURNING RESPUESTA-IMPRESOR.      
  6.       if respuesta-impresor = 0 MOVE "ERROR estableziendo cola" TO POW-TEXT OF armado-cola.
  7.  
  8. ****** este comando ya me larga (error) cuando lo envio.   probe como (content) tambien.                                                                                    
  9.  
  10. *** numero-cola.
  11.       MOVE spaces TO FUNCION3.
  12.       MOVE "IFOpParamSet"TO FUNCION3.
  13. *** Acá lo envio como ParamSet..(texto), porque como "IFOpParamIntSet" no me funciono (me larga error) valor 0
  14.       CALL FUNCION3 WITH STDCALL USING BY CONTENT TITULO-ECNumero
  15.                                        by CONTENT "19"
  16.                                        returning Respuesta-Impresor.
  17.       if respuesta-impresor = 0 move "error-colas" to pow-text of error-cod-cola.
y para este caso donde esta el "SEND"
Otra consulta : decime de año es la version de la libreria Sam4sFiscalDriver la fecha que te figura ?
consulta nro 2 : antes de querer implementar esto trabajabas por el samdrv.exe ?
Saludos

Código:

[cli];5;LUIS OCAÑA;;96;17142938;;;;;
[txtadd];19 012 IC03 000764 P 11/09/2019;
[txtadd];49003524 PARTY JABX80GR CR;
[item];EMOSO;1,00;12,399;21,00;0.00000000;0;0;0;
[item];43204 REC. SEG.;1,00;0,115;21,00;0.00000000;0;0;0;
[descgral]; Descuento  1.52%;0,19;
[colaset];11;Regimen de Transparencia Fiscal;
[subinfo];
[cerrar]


Ale 31 de marzo de 2025 21:54

Impresoras fiscales
 
fastpho .
Venia utilizando la comunicación con la fiscal con (samdrv.exe) pero como probe :
[colaset];11;Regimen de Transparencia Fiscal; no me lo tomo de ninguna forma. Me largaba error. Nunca lo pude hacer.
Por eso me largue a hacer todo de nuevo, por comunicación por DLL. Y tampoco pude lograrlo hasta ahora.. La versión de la DLL 23/07/2021. solo me faltaría decifrár esto, lo deje para lo ultimo pensé que iba a ser mas facil.

fastpho 31 de marzo de 2025 22:09

@Ale la version de la dll es la misma que tengo yo con fecha 23-07-2021, cuando desarrolle para este impresor todo lo que te pase en los distintos post funcionaba
bien con esa libreria , realmente no se donde tenes el problema
y estuve mirando el samdrv.exe en los manuales y encontre la funcion [colaset];11;Regimen de Transparencia Fiscal; y pense que por ahi funcionaba

Saludos ...

Ale 31 de marzo de 2025 23:47

si desde ya muy agradecido, gracias a uds pude hacer funcionar casi todo...
Me falto solo esto de la leyenda, que supuestamente era lo mas fácil.
Y tengo también el problema que (cantidad), en item me funciona solo con los tiquet consumidor final. Tique factura no me toma el parametro (cantidad), me lo toma como unidad 1. Me rompí la cabeza y no le encotré la vuelta, es muy raro, porque de no funcionar no funcionaria para nigun de los dos tipos de comprobantes.
Y [colaset];11;... lo probé por todos lados y no funciono. Los técnicos de la marca. no me supieron informar sobre es comando.
saludos..

fastpho 1 de abril de 2025 22:56

@Ale te voy a preguntar algunos temas , por ahi te ayude
El puerto que estas usando es el com ? cual ?
Probaste usarla por usb ? , si no es asi hay meterle un driver para que funcione
Pregunta al servicio tecnico del impresor si las colas no estan desactivadas de su impresion y por eso no salen ?
el impresor fiscal , esta fiscalizado ?

Saludos. ...

Ale 2 de abril de 2025 00:00

1 Archivos Adjunto(s)
Esta conectada por com. Me comunico con la parte de sistema de sersa BS AS. yo estoy en La Pampa.
La impresora esta en modo practica y me la presta el tecnico de acá de la zona. que hoy me la pidió y se la devolví, cuando la desocupe me la vuelve a prestar.
La mía la tengo operativa, lógicamente no puedo facturar a cons.final.
Si, vos sabes que estos días estuve pensando si no seria un problema de la fiscal que me bloquea las colas.
La gente de bs as. me pidieron las lineas de programación para ver como envio los parametros y demas. Aun no me respondieron.
Antes de eso me preguntaron si lo estaba haciendo, con los comandos, que adjunto en un archivo:

Ale 9 de abril de 2025 16:54

controlador fiscal
 
1 Archivos Adjunto(s)
Hola amigos como están? Varios días renegando con la comunicación (impresora fiscal).
Logre hacer funcionar casi todo. Lo que no pude resolver de ninguna forma es: enviando parámetro (cantidad) al comando item venta, en un factura.
Tique cons.final funciona perfecto, enviándolo como "IFOpParamIntSet". es raro, porque tique si y factura no.
Según el manual tiene que ser : "IFOpParamFloatSet", calculo que ahí esta el problema si o si tiene que ser flotante, pero con cobol no puedo de ninguna forma.
Estuve leyendo algo de internet y encontre este articulo (adjunto), que opinan? podre hacer algo con eso.?
No me entrego facil.

fastpho 9 de abril de 2025 18:29

@Ale Si te anduvo la cantidad en la funcion ticket , te deberia funcionar tambien con la funciones de Ticket - Factura "A" y "B"
y con las funciones de Nota de Credito

Saludos...

Ale 9 de abril de 2025 21:22

fastpho es muy raro pero es así, lo revise 500 veces y pasa por la misma procedure y me toma como valor unidad 1. Con los tiquet funciona bien. Sera que clientes con cuit, si o si requiere el formato original (float) en cantidad. La verdad no se que hacerle, porque tengo todo listo pero mientras eso no funcione, estoy en la misma.. Estaba tratando de enganchar una parte con (samdrv.exe) y la otra por dll.
complicado. porque tengo que llamar a un (.bat) para ejecutarlo.

fastpho 9 de abril de 2025 21:34

@Ale , te envie un mensaje por privado , revisa tu casilla , y cualquer duda
me envias un mensaje por privado

Saludos


La franja horaria es GMT +2. Ahora son las 17:19.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.