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)

Kuk 14 de marzo de 2025 20:51

@Ale, por lo que veo en el ejemplo, debes usar tipo float, que en Cobol correponde a COMP-1 o COMP-2, de 4 y 8 bytes respectivamente (single & double precision).

Código COBOL:
  1.      01 PARAMETRO-PRECIO        pic x(6)     value "Precio".
  2.      01 precio                  COMP-1.

Ale 15 de marzo de 2025 04:20

controlador fiscal
 
hola nuevamente, muchas gracias por responder.
Perdón por incumplir las normas del foro, tendré que leerlas bien, para entenderlas.
Kuk voy a probar con COMP-1 O COMP-2 como me indicaste.
Este tema lo inicie yo hace bastante ya.
Utilizo powercobol V5, windows10, controlador Ellix40f .
utilizo la Dll: Sam4sFiscalDriver.dll
comunicación serial, a modo entrenamiento.

Abro el puerto, configuro la velocidad Baudios, abro item tiquet por ejemplo. todo bien. hasta ahí.
envio el comando: ItemVenta. como el ejemplo que envio, y tambien me lo toma bien.

Código COBOL:
  1.    working...
  2.    01 PARAMETRO-DESCRI1     PIC X(11) ValUE "Descripcion".  
  3.    01 PARAMETRO-DESCRI3     PIC X(32) VALUE spaces.
  4.  
  5.       MOVE "IFOpParamSet" TO FUNCION.
  6.       MOVE "Descripcion articulo1" TO PARAMETRO-DESCRI3.
  7.       CALL FUNCION WITH STDCALL USING BY REFERENCE PARAMETRO-DESCRI1                                    
  8.                                       BY REFERENCE PARAMETRO-DESCRI3
  9.                                       RETURNING RESPUESTA-IMPRESOR.

el problema es que no le encuentro la vuelta cuando envío comando Precio por ejemplo, que tiene que ser según el manual de la dll:
Código CPP:
  1. int IFOpParamFloatSet (const char * name, double value)
, (como explique en mensajes anteriores y también envie el manual).
El numero decimal creo que serian 7 entero 2 decimales. ¿Como definiría en la working... el importe del item? para que funcione.
saludos a todos.

Kuk 15 de marzo de 2025 10:43

@Ale, estas son las correspondencias de tipos:

[TABLE]Tipo C|Tipo COBOL
float|COMP-1
double|COMP-2[/TABLE]

Ambos son de coma flotante, es decir, no tiene posición fija para decimales.

Una vez que hayas recibido el valor, tienes que hacer un MOVE a un campo con decimales fijas, obtendrás así el valor en el formato que quieras (con cuantas decimales prefieras).

Ale 15 de marzo de 2025 16:11

controlador fiscal
 
Buen día genios.

Kuk
probe como me dijiste y nada. sigue largando en 0,00 el tiquet

Lo hago así. No se que esta mal.
Código COBOL:
  1.    WORKING...
  2.  01 funcion      PIC X(30) value spaces.
  3.  01 precio-uni    COMP-1.
  4.  01 unitario             PIC 9(7)V9(2) VALUE ZEROS.
  5.  01 comando-item-precio  PIC X(6) VALUE "Precio".
  6.  
  7.  
  8.  
  9.   procedure....    
  10.       move "IFOpParamFloatSet" to funcion.
  11.       move 2563.33 to unitario.
  12.       move unitario to precio-uni.
  13.       CALL funcion WITH STDCALL USING BY REFERENCE comando-item-precio
  14.                                       BY REFERENCE precio-uni
  15.                                       RETURNING respuesta-impresor.

probe tambien con By value y el compilador me tira error.

saludos y muchas gracias por su ayuda..

Kuk 15 de marzo de 2025 16:16

@Ale, esto:

Código CPP:
  1. int IFOpParamFloatSet (const char * name, double value)

se traduciría así:

Código COBOL:
  1.  01 precio-uni    COMP-2.   *> Double
  2. ...
  3.       CALL funcion WITH STDCALL USING BY CONTENT comando-item-precio
  4.                                       BY VALUE precio-uni
  5.                                       RETURNING respuesta-impresor

Ale 15 de marzo de 2025 17:06

controlador fiscal
 
Kuk lo hago como me indicas.

y el compilador me tira este error.

Código:

** DIAGNOSTIC MESSAGE ** (SAMTIQUE)
SAMTIQUE CmCommand1-Click(148) :  JMN3355I-S  'PRECIO-UNI' OF BY VALUE IN CALL STATEMENT MUST BE BINARY ITEM THAT USAGE IS COMPUTATINAL-5 AND LENGTH MUST NOT EXCEED 4 BYTES,1 BYTE ITEM OR NUMERIC LITERAL WITH UNDER THAN 9 DIGITS.


Kuk 15 de marzo de 2025 21:24

@Ale, inténtalo así a ver:

Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  01 funcion              PIC X(30) value spaces.
  3.  01 precio-uni           COMP-2.
  4.  01 precio-uni-bin redefines precio-uni BINARY-LONG.
  5.  01 unitario             PIC 9(7)V9(2) VALUE ZEROS.
  6.  01 comando-item-precio  PIC X(6) VALUE "Precio".
  7.  
  8.  PROCEDURE DIVISION.
  9.       move "IFOpParamFloatSet" to funcion
  10.       move 2563.33 to unitario
  11.       move unitario to precio-uni
  12.      
  13.       CALL funcion WITH STDCALL USING BY CONTENT comando-item-precio
  14.                                       BY VALUE precio-uni-bin
  15.                                       RETURNING respuesta-impresor
  16.                                      

Ale 15 de marzo de 2025 22:49

controlador fiscal
 
Ya me había ilusionado. lo probe, pero me tira este error al compilar.

SAMTIQUE CmCommand1-Click(44) : JMN1123I-S INVALID WORD 'BINARY-LONG' IS FOUND. IGNORED UNTIL NEXT VALID PARAGRAPH,SECTION OR DIVISION.
SAMTIQUE CmCommand1-Click(44) : JMN2222I-S PICTURE CLAUSE IS MISSING. PICTURE 9 ASSUMED.

escapa a mi saber...

fastpho 16 de marzo de 2025 01:38

Ale la version de powercobol v.5 desconoce la
declaracion BINARY-LONG.

Subi el ejemplo COMPLETO de como
estas armando para enviar el comando "ItemVenta"

como estas enviando los parametros ?

Descripcion
Cantidad
Precio
Iva
MontoImpIntFijo
CodigoInterno
CodigoProducto
UnidadMedida



tambien subi el archivo cobol85.cbr para ver como declaraste las funciones del libreria

Saludos...



Post añadido a las 01:38. Post anterior a las 01:27


Ale podes sacar x y Z ?

Saludos

Ale 16 de marzo de 2025 02:32

controlador fiscal
 
Hola fastpho.
Esto tengo.

Código COBOL:
  1. cobol85.cbr
  2. [samtique.Entry]
  3. SerialPortOpen=Sam4sFiscalDriver.dll
  4. SerialBaudSet=Sam4sFiscalDriver.dll
  5. SerialPortClose=Sam4sFiscalDriver.dll
  6. IFOpBegin=Sam4sFiscalDriver.dll
  7. IFOpSend=Sam4sFiscalDriver.dll
  8. IFOpWaitingIs=Sam4sFiscalDriver.dll
  9. IFOpWait=Sam4sFiscalDriver.dll
  10. IFOpAbort=Sam4sFiscalDriver.dll
  11. IFOpParamSet=Sam4sFiscalDriver.dll
  12. IFOpParamGet=Sam4sFiscalDriver.dll
  13. IFOpParamIntSet=Sam4sFiscalDriver.dll
  14. IFOpParamIntGet=Sam4sFiscalDriver.dll
  15. IFOpParamFloatSet=Sam4sFiscalDriver.dll
  16. IFOpParamFloatGet=Sam4sFiscalDriver.dll
  17. IFOpParamBoolSet=Sam4sFiscalDriver.dll
  18. IFOpParamBoolGet=Sam4sFiscalDriver.dll
  19. IFOpCmdOkIs=Sam4sFiscalDriver.dll
  20. IFOpErrorGet=Sam4sFiscalDriver.dll
  21. IFOpErrorDescGet=Sam4sFiscalDriver.dll
  22. IFOpStateGet=Sam4sFiscalDriver.dll
  23. IFOpRetGet=Sam4sFiscalDriver.dll
  24. IFOpRetIntGet=Sam4sFiscalDriver.dll
  25. IFOpRetFloatGet=Sam4sFiscalDriver.dll
  26. IFOpRetBoolGet=Sam4sFiscalDriver.dll
  27. IFOpBusyStateGet=Sam4sFiscalDriver.dll
  28. IFOpBusyStepGet=Sam4sFiscalDriver.dll
  29. IFOpBusyTotalGet=Sam4sFiscalDriver.dll
  30. IFOpListGet=Sam4sFiscalDriver.dll
  31. IFOpParamListGet=Sam4sFiscalDriver.dll
  32. IFOpRetListGet=Sam4sFiscalDriver.dll
  33. IFOpStateListGet)=Sam4sFiscalDriver.dll

Código COBOL:
  1. ***   ejemplo simplificado. **** mainform = samtique
  2.  workimg..
  3.  01 FUNCION               PIC X(25) VALUE SPACES.
  4.  01 COMANDO               PIC X(50).
  5.  01 RESPUESTA-IMPRESOR    PIC S9(9) COMP-5.
  6.  01 ABRE-TIQUE            PIC X(10) VALUE "AbrirTique".
  7.  01 COMANDO-ITEM-VTA        PIC X(9) value "ItemVenta".
  8.  01 COMANDO-ITEM-CANTI      PIC X(8) VALUE  "Cantidad".
  9.  01 COMANDO-ITEM-PRECIO     PIC X(6) VALUE "Precio".
  10.  01 COMANDO-ITEM-IVA        PIC X(3) VALUE "IVA".
  11.  01 COMANDO-ITEM-CODIGO     PIC X(14) VALUE "CodigoProducto".
  12.  01 CODIGO-LINEA-ITEM       PIC X(15) VALUE SPACES.
  13.  
  14.  
  15.  procedure division.
  16.   inicio.
  17. *** ya movio 9600 a baudios.
  18. *** ya abrio el puerto com.
  19. ****************** ACA ARRANCA CON EL TIQUE *****************
  20.       MOVE SPACES TO FUNCION3.    
  21.       MOVE "IFOpBegin" to FUNCION.      
  22.       CALL FUNCION WITH STDCALL USING BY REFERENCE ABRE-TIQUE RETURNING RESPUESTA-IMPRESOR.
  23.       IF RESPUESTA-IMPRESOR = 1 MOVE "ABRO-TIQUET" TO POW-TEXT OF ABRO-TIQUE.                
  24.       PERFORM ENVIAR-COMANDO.    
  25. ***    
  26. ***  AHORA ARRANCA CON ITEM-VENTAS
  27.       MOVE SPACES TO FUNCION.    
  28.       MOVE "IFOpBegin" to FUNCION.      
  29.       CALL FUNCION3 WITH STDCALL USING BY REFERENCE COMANDO-ITEM-VTA RETURNING RESPUESTA-IMPRESOR.
  30.       IF RESPUESTA-IMPRESOR = 1 MOVE "item si" TO POW-TEXT OF ERROR-ITEM.
  31. ****  descripcion articulo.
  32.       MOVE SPACES TO FUNCION.
  33.       MOVE "IFOpParamSet" TO FUNCION.
  34.       MOVE "Bomba de agua" TO PARAMETRO-DESCRI3.
  35.       CALL FUNCION WITH STDCALL USING BY REFERENCE PARAMETRO-DESCRI1                                    
  36.                                       BY CONTENT PARAMETRO-DESCRI3
  37.                                       RETURNING RESPUESTA-IMPRESOR.
  38.       MOVE RESPUESTA-IMPRESOR TO POW-TEXT OF ERROR-DESCRI.
  39. *** ahora cantidad.
  40.       MOVE SPACES TO FUNCION.
  41.       MOVE "IFOpParamFloatSet" TO FUNCION.
  42.       MOVE 33.33 TO CANT-UNI.
  43.       CALL FUNCION WITH STDCALL USING BY REFERENCE COMANDO-ITEM-CANTI
  44.                                       BY REFERENCE CANT-UNI
  45.                                       RETURNING RESPUESTA-IMPRESOR.
  46.  
  47. *** Ya esta ultima Función es la que no me funciona, enviar valor flotante.
  48. **************
  49.  
  50. ********************************************
  51. ******************** envia comando. *******
  52.   enviar-comando.
  53.       MOVE 1 TO ESPERA.
  54.       move spaces to comando.
  55.       MOVE "IFOpSend" TO COMANDO.
  56.       CALL COMANDO WITH STDCALL USING BY VALUE ESPERA RETURNING RESPUESTA-IMPRESOR.
  57.       MOVE RESPUESTA-IMPRESOR TO POW-TEXT OF VELO4.

Perdón porque utilizo en mayuscula para programar, porque no veo bien.
Tengo hasta ahí echo, porque Precio, Iva, me pasaría lo mismo (no se como enviar Valor flotante).
el tique hasta descripción del articulo, lo imprimo. luego sale del programa y no responde mas.

gracias por su ayuda....


La franja horaria es GMT +2. Ahora son las 15:44.

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