Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol Fujitsu COBOL
Fujitsu COBOL Sub-Foro dedicado a Compiladores e IDE-s de Fujitsu.
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Compilador] Problemas con los *.SE/*.FD Socavi PowerCOBOL (ActiveX, v4 - v11) 8 23 de agosto de 2021 22:47
[Duda] Impresoras Fiscales de 2da Generacion Alejo Gonzalez AcuCobol 0 29 de junio de 2020 02:38
[Duda] Impresoras fiscales de 2da generacion Alejo Gonzalez AcuCobol 0 27 de agosto de 2019 01:12
[Compilador] Impresoras Fiscales Hasar Alejo Gonzalez AcuCobol 5 20 de julio de 2018 03:29
[Compilador] Problemas con el DEBUG Josber PowerCOBOL (ActiveX, v4 - v11) 3 12 de abril de 2015 21:16

Respuesta

  #1
Antiguo 1 de febrero de 2022, 14:59
Ale
Forero Junior
Última Actividad 23.06.2026 00:14
Posts Posts: 43
Likes enviados Enviados: 19
Likes recibidos Recibidos: 2
Predeterminado Problemas con comunicación impresoras fiscales.
0 Inactivo Inactivo

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....
Ale is offline   Responder Con Cita
  #2
Antiguo 2 de febrero de 2022, 16:29
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 21.08.2026 18:08
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243

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....
fastpho is offline   Responder Con Cita
  #3
Antiguo 2 de febrero de 2022, 19:50
Ale
Forero Junior
Última Actividad 23.06.2026 00:14
Posts Posts: 43
Likes enviados Enviados: 19
Likes recibidos Recibidos: 2

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.....
Ale is offline   Responder Con Cita
  #4
Antiguo 2 de febrero de 2022, 20:45
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 21.08.2026 18:08
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243

@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
fastpho is offline   Responder Con Cita
  #5
Antiguo 2 de febrero de 2022, 21:45
Ale
Forero Junior
Última Actividad 23.06.2026 00:14
Posts Posts: 43
Likes enviados Enviados: 19
Likes recibidos Recibidos: 2

Muchas Gracias Genio!!. voy a probar si me sale..
abrazo..
Ale.
Ale is offline   Responder Con Cita
  #6
Antiguo 6 de febrero de 2022, 02:23
Ale
Forero Junior
Última Actividad 23.06.2026 00:14
Posts Posts: 43
Likes enviados Enviados: 19
Likes recibidos Recibidos: 2
Predeterminado Ayuda con comunicación por Dll con impresor fiscal
0 Inactivo Inactivo

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

Última edición por Kuk fecha: 6 de febrero de 2022 a las 15:08. Razón: Botones de sintaxis/duplicado de hilos
Ale is offline   Responder Con Cita
  #7
Antiguo 6 de febrero de 2022, 17:22
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 21.08.2026 18:08
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243

Hola @Ale, podes subir el manual al que haces referencia de la dll para poder ayudarte
Saludos..
fastpho is offline   Responder Con Cita
  #8
Antiguo 7 de febrero de 2022, 01:35
Ale
Forero Junior
Última Actividad 23.06.2026 00:14
Posts Posts: 43
Likes enviados Enviados: 19
Likes recibidos Recibidos: 2

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..
Archivos Adjuntos
Tipo de Archivo: rar Sam4sFiscalDriver.rar (517,0 KB)Descargas: 86
Ale is offline   Responder Con Cita
  #9
Antiguo 7 de febrero de 2022, 15:35
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 21.08.2026 18:08
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243
Tableta Informe Z Sam4s
0 Inactivo Inactivo

@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...
fastpho is offline   Responder Con Cita
  #10
Antiguo 8 de febrero de 2022, 02:58
Ale
Forero Junior
Última Actividad 23.06.2026 00:14
Posts Posts: 43
Likes enviados Enviados: 19
Likes recibidos Recibidos: 2

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...
Ale is offline   Responder Con Cita
Respuesta


Herramientas

Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 15:49.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.