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 1 de febrero de 2022 14:59

Problemas con comunicación impresoras fiscales.
 
Hola Coboleros.. tengo que comunicarme con impresora fiscal SAMS4S ELLIX40F. Con la herramienta de comunicación (SAMDRV.EXE) que viene con la impresora, que funciona como el viejo (PFBACH) logre programarla.
Pero ahora tengo que comunicarme por medio de la DLL que viene con la impresora.
Nunca lo hice, leyendo vi que las funciones o protocolos de esta DLL tengo que cargalas en COBOL85.
No se como se hace esto, paso a paso.
Tengo que ejecutar cobol85 y como agrego estos datos.?
powercobol 5
ej:
Código:

SerialPortOpen=Sam4sFiscalDriver.dll
SerialBaudSet=Sam4sFiscalDriver.dll

...

saludos a todos....

fastpho 2 de febrero de 2022 16:29

Hola @Ale, no he trabajado con este Impresor Fiscal , pero deberias mirar en el manual de la libreria cuales son los miembros de la clase "Sam4sFiscalDriver.DLL" para poder armar el archivo cobol85.cbr y luego
desde tu aplicacion llamar a esas funciones con los parametros que requiera tales miembros y calculo que devolvera un resultado a tales llamadas.

La libreria deberias registrarla , tu aplicacion y el archivo cobol85.cbr deben estar en el misma carpeta

En el foro hay varios ejemplos de como hacer estas llamadas (Ej Epson tm900 Fiscal , Epson no fiscal)

Saludos....

Ale 2 de febrero de 2022 19:50

hola y gracias por responderme fastpho.. si si el problema mío es que no se como se registran en cobol85 estas funciones. ej: SerialPortOpen=Sam4sFiscalDriver.dll no se como se hace para entrar al cobol85 e incluir estos compandos..
muchas gracias.. saludos.....

fastpho 2 de febrero de 2022 20:45

@Ale, el archivo cobol85.cbr es una archivo de texto , los editas con cualquier editor como bloc de notas o notepad etc ....
te quedaria algo asi ejemplo:
Código COBOL:
  1. [MainForm.Entry]
  2. SerialPortOpen=Sam4sFiscaldriver.dll
  3. SerialBaudset=Sam4sFiscaldriver.dll  
  4. AbrirTique=Sam4sFiscaldriver.dll

Luego dentro de tu aplicacion llamas a la funcion :

Código COBOL:
  1. WORKING-STORAGE SECTION.
  2.  01  Respuesta-Impresor       PIC S9(9) COMP-5.
  3.  01  Puerta                               PIC S9(9) COMP-5.
  4.  01  Funcion                             PIC X(50).
  5.  PROCEDURE DIVISION.
  6.      
  7.      MOVE "SerialPortOpen"   TO Funcion.              
  8.      MOVE 1                              TO Puerta. *>  COM1
  9.  
  10.      CALL Funcion  STDCALL  USING BY VALUE Puerta returning Respuesta-Impresor.

Hay muchos ejemplos en el foro de como implementarlo , bajate alguno y miralos .
Saludos

Ale 2 de febrero de 2022 21:45

Muchas Gracias Genio!!. voy a probar si me sale..
abrazo..
Ale.

Ale 6 de febrero de 2022 02:23

Ayuda con comunicación por Dll con impresor fiscal
 
Hola buenas noches. Sigo sin darme cuenta como comunicarme con impresora fiscal sam4s por intermedio de la DLL de la empresa.
no puedo abrir el puerto com1.
Parte del manual de las funciones de la DLL, dice asi:

MANUAL FUNCIONES

A continuación se describen las funciones que contiene la librería.
Ver ejemplos de uso en el Capítulo V y el la carpeta Ejemplos (incluida junto a esta documento).
int SerialPortOpen (int portnum)
Abre el puerto serial.
Parámetros:
portnum: número de puertos serial. Ej.: el COM8 es el 8.
Retorno: 1 en caso de éxito, 0 en caso de error.
int SerialBaudSet (int baudrate)
Establece la velocidad a usar con el puerto serial, debe coincidir con la configurada en el equipo. Por
ejemplo 115200. Llamar antes de SerialPortOpen. No tiene ningún efecto si el equipo se encuentra
conectado por USB.
Retorno: 1 en caso de éxito, 0 en caso de error.
int SerialPortClose ()
Cierra el puerto serial.
Retorno: 1 en caso de éxito, 0 en caso de error.
int IFOpBegin (const char * name)
Comienza a preparar un nuevo comando por nombre.
Parámetros:
name: nombre del comando. Ver comandos disponibles en el Capítulo III.
Retorno: 1 en caso de éxito, 0 en caso de error.
etc..

cargo las funciones y comando de la dll, en el cobol85 asi.

Código:

[tpv.Entry]
SerialPortOpen=Sam4sFiscalDriver.dll
SerialBaudSet=Sam4sFiscalDriver.dll
SerialPortClose=Sam4sFiscalDriver.dll
IFOpBegin=Sam4sFiscalDriver.dll
IFOpSend=Sam4sFiscalDriver.dll

dentro de mi programa.:

Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  01 RESPUESTA-IMPRESOR    PIC S9(9) COMP-5.
  3.  01 FUNCION               PIC X(50).
  4.  PROCEDURE       DIVISION.
  5.   inicio.
  6.     MOVE "SerialPortClose ()" to FUNCION.
  7.     CALL FUNCION WITH STDCALL RETURNING RESPUESTA-IMPRESOR.

** cerrar el puerto me funciona, porque según el manual valor 1 = operacion correcta.
ahora cuando quiero abrirlo no me funciona se cierra el programa y no tira ningun error.:
Código COBOL:
  1. WORKING-STORAGE SECTION.
  2.  01 RESPUESTA-IMPRESOR    PIC S9(9) COMP-5.
  3.  01 FUNCION               PIC X(50).
  4.  PROCEDURE       DIVISION.
  5.   inicio.  
  6.     MOVE "SerialPortOpen (1)" to FUNCION.
  7.     CALL FUNCION WITH STDCALL RETURNING RESPUESTA-IMPRESOR.
*** no se que estoy haciendo mal. les agradecería me ayuden si alguno logra darse cuenta.
utilizo Powecobol 5
ahora les pongo un ejemplo en otros lenguajes.
Código VB:
  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.         'MsgBox("Sam4sFiscalDriver Version: " + Drv.version)
  3.  
  4.         'Configura velocidad de comunicacion del puerto serial
  5.        Dim baudrate = 9600
  6.         If (Drv.SerialBaudSet(baudrate) = 0) Then
  7.             MsgBox("No se pudo configurar la velocidad " & baudrate)
  8.             Return
  9.         End If
  10.  
  11.         'Abre el puerto serial
  12.        Dim comnum = 8
  13.         If (Drv.SerialPortOpen(comnum) = 0) Then
  14.             MsgBox("No se pudo abrir el puerto serial " & comnum)
  15.             Return
  16.         End If
  17.  
  18.         ' Si hay un documento abierto, lo cancela primero
  19.        Drv.IFOpBegin("DocumentoEnCurso")
  20.         If (Drv.IFOpSend(1) = 0) Then
  21.             CmdError("DocumentoEnCurso")
  22.             Return
  23.         End If
  24.         If (Drv.IFOpRetIntGet("CodigoTipo") <> 0) Then
  25.             Drv.IFOpBegin("Cancelar")
  26.             If (Drv.IFOpSend(1) = 0) Then
  27.                 CmdError("Cancelar")
  28.                 Return
  29.             End If
  30.         End If
  31.        
  32.         'Ejemplo: Tique
  33.         Drv.IFOpBegin("AbrirTique")
  34.         If (Drv.IFOpSend(1) = 0) Then
  35.             CmdError("AbrirTique")
  36.             Return
  37.         End If
  38.  
  39.         Drv.IFOpBegin("ItemVenta")
  40.         Drv.IFOpParamSet("Descripcion", "Item de prueba")
  41.         Drv.IFOpParamFloatSet("Precio", 1.2345)
  42.         Drv.IFOpParamFloatSet("IVA", 21.0)
  43.         Drv.IFOpParamSet("CodigoProducto", "7791234567898")
  44.         If (Drv.IFOpSend(1) = 0) Then
  45.             CmdError("ItemVenta")
  46.             Return
  47.         End If


---------- Post añadido el 6 de febrero de 2022 a las 02:40 ----------

Perdón. logre encotrarle la vuelta
Código COBOL:
  1.  working...
  2.     01 NPORT                 PIC S9(9) COMP-5.
  3.  
  4.  
  5.     MOVE 1 TO NPORT.
  6.     MOVE "SerialPortOpen" to FUNCION.
  7.     CALL FUNCION WITH STDCALL USING BY VALUE NPORT RETURNING RESPUESTA-IMPRESOR.

ahora no me toma funciones. las envio asi.
Código COBOL:
  1.   MOVE 'IFOpBegin ("CierreZ")' TO FUNCION.
  2.   CALL FUNCION WITH STDCALL using by reference RESPUESTA-IMPRESOR.
el manual explica esto.:
Código CPP:
  1. int IFOpBegin (const char * name)
Comienza a preparar un nuevo comando por nombre.
Parámetros:
• name: nombre del comando. Ver comandos disponibles en el Capítulo III.
Retorno: 1 en caso de éxito, 0 en caso de error.

ejemplo en otro lenguaje..
Código CPP:
  1. drv.IFOpBegin("CierreZ");
  2.  cmd_send(drv);

saludos, perdón por las molestias.. muchas gracias...

Comentario de Moderador
Por favor, usa los botones de resalto de sintaxis para lenguajes de programación que hay en el editor.
También no crees hilos nuevos si ya existe uno tratando el mismo tema ;)

fastpho 6 de febrero de 2022 17:22

Hola @Ale, podes subir el manual al que haces referencia de la dll para poder ayudarte
Saludos..

Ale 7 de febrero de 2022 01:35

fiscales
 
1 Archivos Adjunto(s)
Hola y gracias nuevamente Fastpho por responderme..
Estoy un poco mareado con esta impresora, por intermedio de la aplicación Samdrv he podido hacerle funcionar casi todo. Pero no le encontre funciones para asociarle nota de credito a la factura..
Entonces me largue a tratar de comunicarme por intermedio de funciones y protocolos de la dll sams4sFiscalDriver.dll . Adjunto el manual.. lo unico logro hacer hasta ahora como puse en este tema es abrir y cerrar el puerto.. nada mas..
muchas gracias y saludos..

fastpho 7 de febrero de 2022 15:35

Informe Z Sam4s
 
@Ale,estuve viendo el manual tiene 2 librerias una para 32 y otra 64 bits , tenes que usar la 32
aparentemente no hay que registrarla solo copiarla dll en la carpeta del proyecto por lo que dice el manual .

Encontre en google un grupo de Visual FoxPro un programa en Python completo con todas las funciones te puede servir de ejemplo para traducirlo al powercobol.


y te paso el link del grupo para que leas los problemas que tienen con la libreria .....
https://groups.google.com/g/publices...m/Q-fexaz_AQAJ

Ejemplo para hacer una Informe Z

Código COBOL:
  1. WORKING-STORAGE SECTION.
  2.  01  Funcion-SAM4-LIB          PIC X(50).
  3.  01  sPort                     PIC S9(9) COMP-5.
  4.  01  sWait                     PIC S9(9) COMP-5.  
  5.  01  sBaudio                   PIC S9(9) COMP-5.
  6.  01  Respuesta-Impresor        PIC S9(9) COMP-5 value 0.
  7.  01  CierreZSam4s              PIC X(7) VALUE "CierreZ".
  8.  PROCEDURE       DIVISION.
  9. *> BAUDIOS DE COMUNICACION
  10. *SerialBaudSet
  11.      move spaces            TO Funcion-SAM4-LIB.
  12.      MOVE 115200            TO sBaudio. *> Chequear a que velocidad esta el impresor fiscal OJO !!!!
  13.      MOVE "SerialBaudSet"   TO Funcion-SAM4-LIB.
  14.      CALL Funcion-SAM4-LIB WITH  STDCALL  USING BY VALUE sBaudio      returning Respuesta-Impresor.
  15.      DISPLAY Respuesta-Impresor.    
  16.      IF Respuesta-Impresor NOT = 1
  17.          INVOKE POW-SELF "DisplayMessage" USING "ERROR"
  18.      END-IF.
  19.    
  20.      
  21. *> OPEN  PORT.
  22. *SerialPortOpen
  23.      move spaces             TO Funcion-SAM4-LIB.
  24.      MOVE 1                  TO sPort *> COM1  ,  Chequear en que puerto esta el impresor fiscal OJO !!!!!
  25.      MOVE "SerialPortOpen"   TO Funcion-SAM4-LIB.
  26.      CALL Funcion-SAM4-LIB WITH  STDCALL  USING BY VALUE sPort      returning Respuesta-Impresor.
  27.      DISPLAY Respuesta-Impresor.
  28.  
  29.      IF Respuesta-Impresor NOT = 1
  30.          INVOKE POW-SELF "DisplayMessage" USING "ERROR"
  31.      END-IF.
  32.          
  33.          
  34. *>CIERRE "Z"    
  35.      move spaces        TO Funcion-SAM4-LIB.
  36.      MOVE "IFOpBegin"   TO Funcion-SAM4-LIB.
  37.      CALL Funcion-SAM4-LIB WITH STDCALL USING BY REFERENCE CierreZSam4s returning Respuesta-Impresor.
  38.      DISPLAY Respuesta-Impresor.
  39.      IF Respuesta-Impresor NOT = 1
  40.          INVOKE POW-SELF "DisplayMessage" USING "ERROR"
  41.      END-IF.
  42.  
  43.      move spaces       TO Funcion-SAM4-LIB.
  44.      MOVE "IFOpSend"   TO Funcion-SAM4-LIB.
  45.      MOVE 1            TO sWait.
  46.      CALL Funcion-SAM4-LIB WITH STDCALL USING BY VALUE sWait returning Respuesta-Impresor.
  47.      DISPLAY Respuesta-Impresor.          
  48.      IF Respuesta-Impresor NOT = 1
  49.          INVOKE POW-SELF "DisplayMessage" USING "ERROR"
  50.      END-IF.
Saludos...

Ale 8 de febrero de 2022 02:58

fiscal
 
Muchas Gracias Fastpho.. me sirvió tu información, avanzo de apoco cada día.
Ahora me tira error y me cancela el comprobante cuando envio el comando ItemVenta y no se porque.
Código COBOL:
  1. WORKING..
  2.      01 PARAMETRO-VENTA       PIC X(9) VALUE 'ItemVenta'.
  3.  
  4.       MOVE SPACES TO FUNCION5.        
  5.       MOVE "IFOpBegin" TO FUNCION5.
  6.       CALL FUNCION5 WITH STDCALL USING BY REFERENCE PARAMETRO-VENTA RETURNING RESPUESTA-IMPRESOR.

Y lo hago luego de enviar sin errores el comando AbrirTique como corresponde el orden.
me falta poco, pero se me hace cada vez mas complicado..

Muchas Gracias nuevamente...
saludos...


La franja horaria es GMT +2. Ahora son las 16:38.

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