Ver la Versión Completa : [Sintaxis] Problemas con comunicación impresoras fiscales.
Ale
1 de febrero de 2022, 14:59
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:
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:
[MainForm.Entry]
SerialPortOpen=Sam4sFiscaldriver.dll
SerialBaudset=Sam4sFiscaldriver.dll
AbrirTique=Sam4sFiscaldriver.dll
Luego dentro de tu aplicacion llamas a la funcion :
WORKING-STORAGE SECTION.
01 Respuesta-Impresor PIC S9(9) COMP-5.
01 Puerta PIC S9(9) COMP-5.
01 Funcion PIC X(50).
PROCEDURE DIVISION.
MOVE "SerialPortOpen" TO Funcion.
MOVE 1 TO Puerta. *> COM1
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
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.
[tpv.Entry]
SerialPortOpen=Sam4sFiscalDriver.dll
SerialBaudSet=Sam4sFiscalDriver.dll
SerialPortClose=Sam4sFiscalDriver.dll
IFOpBegin=Sam4sFiscalDriver.dll
IFOpSend=Sam4sFiscalDriver.dll
dentro de mi programa.:
WORKING-STORAGE SECTION.
01 RESPUESTA-IMPRESOR PIC S9(9) COMP-5.
01 FUNCION PIC X(50).
PROCEDURE DIVISION.
inicio.
MOVE "SerialPortClose ()" to FUNCION.
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.:
WORKING-STORAGE SECTION.
01 RESPUESTA-IMPRESOR PIC S9(9) COMP-5.
01 FUNCION PIC X(50).
PROCEDURE DIVISION.
inicio.
MOVE "SerialPortOpen (1)" to FUNCION.
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.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'MsgBox("Sam4sFiscalDriver Version: " + Drv.version)
'Configura velocidad de comunicacion del puerto serial
Dim baudrate = 9600
If (Drv.SerialBaudSet(baudrate) = 0) Then
MsgBox("No se pudo configurar la velocidad " & baudrate)
Return
End If
'Abre el puerto serial
Dim comnum = 8
If (Drv.SerialPortOpen(comnum) = 0) Then
MsgBox("No se pudo abrir el puerto serial " & comnum)
Return
End If
' Si hay un documento abierto, lo cancela primero
Drv.IFOpBegin("DocumentoEnCurso")
If (Drv.IFOpSend(1) = 0) Then
CmdError("DocumentoEnCurso")
Return
End If
If (Drv.IFOpRetIntGet("CodigoTipo") <> 0) Then
Drv.IFOpBegin("Cancelar")
If (Drv.IFOpSend(1) = 0) Then
CmdError("Cancelar")
Return
End If
End If
'Ejemplo: Tique
Drv.IFOpBegin("AbrirTique")
If (Drv.IFOpSend(1) = 0) Then
CmdError("AbrirTique")
Return
End If
Drv.IFOpBegin("ItemVenta")
Drv.IFOpParamSet("Descripcion", "Item de prueba")
Drv.IFOpParamFloatSet("Precio", 1.2345)
Drv.IFOpParamFloatSet("IVA", 21.0)
Drv.IFOpParamSet("CodigoProducto", "7791234567898")
If (Drv.IFOpSend(1) = 0) Then
CmdError("ItemVenta")
Return
End If
---------- Post añadido el 6 de febrero de 2022 a las 02:40 ----------
Perdón. logre encotrarle la vuelta
working...
01 NPORT PIC S9(9) COMP-5.
MOVE 1 TO NPORT.
MOVE "SerialPortOpen" to FUNCION.
CALL FUNCION WITH STDCALL USING BY VALUE NPORT RETURNING RESPUESTA-IMPRESOR.
ahora no me toma funciones. las envio asi.
MOVE 'IFOpBegin ("CierreZ")' TO FUNCION.
CALL FUNCION WITH STDCALL using by reference RESPUESTA-IMPRESOR.
el manual explica esto.:
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..
drv.IFOpBegin("CierreZ");
cmd_send(drv);
saludos, perdón por las molestias.. muchas gracias...
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
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
@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/publicesvfoxpro/c/LTCEtn-Nqmk/m/Q-fexaz_AQAJ
Ejemplo para hacer una Informe Z
WORKING-STORAGE SECTION.
01 Funcion-SAM4-LIB PIC X(50).
01 sPort PIC S9(9) COMP-5.
01 sWait PIC S9(9) COMP-5.
01 sBaudio PIC S9(9) COMP-5.
01 Respuesta-Impresor PIC S9(9) COMP-5 value 0.
01 CierreZSam4s PIC X(7) VALUE "CierreZ".
PROCEDURE DIVISION.
*> BAUDIOS DE COMUNICACION
*SerialBaudSet
move spaces TO Funcion-SAM4-LIB.
MOVE 115200 TO sBaudio. *> Chequear a que velocidad esta el impresor fiscal OJO !!!!
MOVE "SerialBaudSet" TO Funcion-SAM4-LIB.
CALL Funcion-SAM4-LIB WITH STDCALL USING BY VALUE sBaudio returning Respuesta-Impresor.
DISPLAY Respuesta-Impresor.
IF Respuesta-Impresor NOT = 1
INVOKE POW-SELF "DisplayMessage" USING "ERROR"
END-IF.
*> OPEN PORT.
*SerialPortOpen
move spaces TO Funcion-SAM4-LIB.
MOVE 1 TO sPort *> COM1 , Chequear en que puerto esta el impresor fiscal OJO !!!!!
MOVE "SerialPortOpen" TO Funcion-SAM4-LIB.
CALL Funcion-SAM4-LIB WITH STDCALL USING BY VALUE sPort returning Respuesta-Impresor.
DISPLAY Respuesta-Impresor.
IF Respuesta-Impresor NOT = 1
INVOKE POW-SELF "DisplayMessage" USING "ERROR"
END-IF.
*>CIERRE "Z"
move spaces TO Funcion-SAM4-LIB.
MOVE "IFOpBegin" TO Funcion-SAM4-LIB.
CALL Funcion-SAM4-LIB WITH STDCALL USING BY REFERENCE CierreZSam4s returning Respuesta-Impresor.
DISPLAY Respuesta-Impresor.
IF Respuesta-Impresor NOT = 1
INVOKE POW-SELF "DisplayMessage" USING "ERROR"
END-IF.
move spaces TO Funcion-SAM4-LIB.
MOVE "IFOpSend" TO Funcion-SAM4-LIB.
MOVE 1 TO sWait.
CALL Funcion-SAM4-LIB WITH STDCALL USING BY VALUE sWait returning Respuesta-Impresor.
DISPLAY Respuesta-Impresor.
IF Respuesta-Impresor NOT = 1
INVOKE POW-SELF "DisplayMessage" USING "ERROR"
END-IF.
Saludos...
Ale
8 de febrero de 2022, 02:58
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.
WORKING..
01 PARAMETRO-VENTA PIC X(9) VALUE 'ItemVenta'.
MOVE SPACES TO FUNCION5.
MOVE "IFOpBegin" TO FUNCION5.
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
15 de febrero de 2022, 02:10
hola. tengo que enviar al impresor fiscal item venta, así como me indica el ejemplo.:
IFOpBegin("ItemVenta")
Drv.IFOpParamSet("Descripcion", "Item de prueba")
Drv.IFOpParamFloatSet("Precio", 1.2345)
Drv.IFOpParamFloatSet("IVA", 21.0)
Drv.IFOpParamSet("CodigoProducto", "7791234567898")
ahora en COBOL esta bien la sintaxis como la hago ? porque no me tira error, pero no me imprime ningun dato.
todo en cero. Y descripción espacio en blanco.
así envio por ejemplo el importe
No se si el error estara en la sintaxis del Call.
MOVE 'IFOpParamFloatSet' TO FUNCION.
MOVE 225.22 TO PARAMETRO-PRECIO3.
CALL FUNCION WITH STDCALL USING BY REFERENCE PARAMETRO-PRECIO1 PARAMETRO-PRECIO2
PARAMETRO-PRECIO3 RETURNING RESPUESTA-IMPRESOR.
working
01 PARAMETRO-PRECIO1 PIC X(6) VALUE 'Precio'.
01 PARAMETRO-PRECIO2 PIC X(2) VALUE ", ".
01 PARAMETRO-PRECIO3 PIC 99999.99 VALUE ZEROS.
Perdón por molestar, le agradecería mucho me puedan ayudar a resolverlo.
saludos...
Utiliza los botones de resalto de sintaxis: https://www.cobolforo.es/images/editor/cobol.gif https://www.cobolforo.es/images/editor/vb.gif etc.
fastpho
15 de febrero de 2022, 13:31
Hola @Ale, , por lo que se puede ver no estas respetando las funciones de la libreria.
*funcion IFOpParamFloatSet* devuelve un entero
int IFOpParamFloatSet (const char * name, double value)
La funcion recibe dos parametros le estas mandando 3 y chequea el retorno que es un entero si te da 0 error y 1 exito
El campo descripcion sale con espacios por que no lo estas mandando o pone el ejemplo completo usando botones de resalto.
Saludos...
Ale
15 de febrero de 2022, 14:39
Hola Fastpho como siempre agradecido por tu ayuda. Estas en lo cierto.. no había percatado eso.
pero lo raro es que me devuelve valor 1. pero no me imprime el importe, lo mismo me pasa con Descripcion. Y no me doy cuenta como armarlo solo con dos parámetros.
Probe varias formas y por ejemplo : 01 PARAMETRO-PRECIO1 PIC X(6) VALUE 'Precio'. tengo que enviarlo en el using solo separado. ej: USING BY REFERENCE PARAMETRO-PRECIO1 PARAMETRO-PRECIO2.... por eso tengo
dividirlo en 3.
saludos y muchas gracias por tu ayuda....
fastpho
16 de febrero de 2022, 14:43
Hola @Ale , te paso un ejemplo de como pasar parametros a la funciones.
WORKING-STORAGE SECTION.
01 Titulo-descripcion pic x(11) value "Descripcion".
01 Titulo-precio pic x(6) value "Precio".
01 Description pic x(15) value "Prueba de Venta".
01 Precio pic s9(9) COMP-5.
01 SALIDA-IMPRESOR pic s9(9) COMP-5 value 0.
int IFOpParamSet (const char * name, const char * value)
*******************************************
* Descripcion
*************
move spaces TO FUNCION.
MOVE "IFOpParamSet" TO FUNCION.
CALL FUNCION WITH STDCALL USING BY REFERENCE Titulo-descripcion
BY REFERENCE Description
returning SALIDA-IMPRESOR.
int IFOpParamIntSet (const char * name, int value)
*******************************************
* Precio
********
move spaces TO FUNCION.
move 123 TO Precio.
MOVE "IFOpParamIntSet" TO FUNC-SAM4-LIB.
CALL FUNCION WITH STDCALL USING BY REFERENCE Titulo-precio
BY VALUE Precio
returning SALIDA-IMPRESOR.
Saludos ....
Ale
17 de febrero de 2022, 01:32
hola fastpho. nuevamente gracias por tu gran ayuda..
Buenísimo los ejemplos fue un gran asesoramiento, pero vos sabes que Precio sigue sin funcionar.. me lo imprime en 0.00 al tique.
Descripción si anda.. pero todo lo que sea importe ya sea Precio, Cantidad, Iva. no anda ninguno.
realmente se me acaba el tiempo y no logro hacerlo funcionar..
un gran saludo...
y agradecido como siempre.
fastpho
17 de febrero de 2022, 12:44
Hola @Ale deberia funcionarte usando en todos los campos numericos , el ejemplo
que te puse , es decir usando la funcion Entero , NO uses la del Funcion Flotante.
int IFOpParamIntSet (const char * name, int value)
Saludos.....
Ale
17 de febrero de 2022, 13:37
Hola fastpho, perdón pero no me doy cuenta.. pongo otro ejemplo en otro lenguaje por las dudas.
Probé de varias maneras y no hay caso. Lo unico pude hacer funcionar es "Descripcion".
printf("AbrirTique\n");
IFOpBegin("AbrirTique");
cmd_send();
printf("ItemVenta\n");
IFOpBegin("ItemVenta");
IFOpParamSet("Descripcion", "Item de prueba");
IFOpParamFloatSet("Precio", 1.2345);
IFOpParamFloatSet("IVA", 21.0);
IFOpParamSet("CodigoProducto", "7791234567898");
cmd_send();
printf("Cerrar\n");
IFOpBegin("Cerrar");
saludos. Ale.
Fito
17 de febrero de 2022, 14:54
Hola:
Los valores numéricos tenés que finalizarlos con un null. Ejemplo
Working...
02 oCant.
03 xxCant pic 9(5).9999. *> Cantidad
03 pic x value X"00".
02 oPreuni.
03 xxPreuni pic 9(7).9999. *> Precio unitario.
03 pic x value X"00".
Procedure...
call ImprimirItem with stdcall using
by value xSuma
by reference oArtdenom
by reference oCant
by reference oPreuni
by value oIva
by value oImpint
by reference oValor
by value oIdCod
by reference oCodigo
by reference oCodigoUM
by value oMedida
returning wError
Saludos...
Fito...
Ale
14 de marzo de 2025, 16:35
hola amigos! espero que estén bien..
Aun no puedo lograr enviar esta función a la fiscal (no me funciona),
para enviar el importe en decimales item y cantidad.
manual de la DLL: dice
int IFOpParamFloatSet (const char * name, double value)
Agrega un parámetro de número flotante por nombre al comando que se está preparando.
Parámetros:
• name: nombre del parámetro. Ver detalles en el Capítulo III.
• value: valor del parámetro. Retorno: 1 en caso de éxito, 0 en caso de error.
ejemplos: otro lenguaje.
drv.IFOpParamFloatSet("Precio", 1.2345);
oPrtFis:IFOpParamFloatSet("Precio", aLinea5).
como se envía con cobol.? y como lo defino en la working a la variable que lleva el precio del articulo.
01 precio.... ya probé definiéndolo como PIC S9(9) COMP-5 y no anduvo.
algo así tengo armado:
move spaces TO FUNCION.
MOVE "IFOpParamFloatSet" TO FUNCION
CALL FUNCION WITH STDCALL USING BY REFERENCE PARAMETRO-PRECIO
BY VALUE Precio
returning SALIDA-IMPRESOR.
WORKI...
01 PARAMETRO-PRECIO pic x(6) value "Precio".
01 precio .... ?????
Si alguien me puede dar una mano, desde ya muchas gracias..
Saludos a todos....
fastpho
14 de marzo de 2025, 18:01
Hola Ale
Para poder ayudarte podrias poner que version de powercobol estas usando , en que entorno estas
la impresora fiscal es ????? , esta fiscalizada o en modo entrenamiento , tipo comunicacion
serial o usb , que libreria estas usando , Podes sacar X y Z basico , subi un pequeño proyecto
para verlo completo como abris el puerto , como lo cerras , como haces el proceso de venta del item o articulo
etc etc
Respeta las normas del foro.....
Saludos ....
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).
01 PARAMETRO-PRECIO pic x(6) value "Precio".
01 precio COMP-1.
Ale
15 de marzo de 2025, 04:20
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.
working...
01 PARAMETRO-DESCRI1 PIC X(11) ValUE "Descripcion".
01 PARAMETRO-DESCRI3 PIC X(32) VALUE spaces.
MOVE "IFOpParamSet" TO FUNCION.
MOVE "Descripcion articulo1" TO PARAMETRO-DESCRI3.
CALL FUNCION WITH STDCALL USING BY REFERENCE PARAMETRO-DESCRI1
BY REFERENCE PARAMETRO-DESCRI3
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:
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:
Tipo C|Tipo COBOL
float|COMP-1
double|COMP-2
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
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.
WORKING...
01 funcion PIC X(30) value spaces.
01 precio-uni COMP-1.
01 unitario PIC 9(7)V9(2) VALUE ZEROS.
01 comando-item-precio PIC X(6) VALUE "Precio".
procedure....
move "IFOpParamFloatSet" to funcion.
move 2563.33 to unitario.
move unitario to precio-uni.
CALL funcion WITH STDCALL USING BY REFERENCE comando-item-precio
BY REFERENCE precio-uni
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:
int IFOpParamFloatSet (const char * name, double value)
se traduciría así:
01 precio-uni COMP-2. *> Double
...
CALL funcion WITH STDCALL USING BY CONTENT comando-item-precio
BY VALUE precio-uni
RETURNING respuesta-impresor
Ale
15 de marzo de 2025, 17:06
Kuk lo hago como me indicas.
y el compilador me tira este error.
** 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:
WORKING-STORAGE SECTION.
01 funcion PIC X(30) value spaces.
01 precio-uni COMP-2.
01 precio-uni-bin redefines precio-uni BINARY-LONG.
01 unitario PIC 9(7)V9(2) VALUE ZEROS.
01 comando-item-precio PIC X(6) VALUE "Precio".
PROCEDURE DIVISION.
move "IFOpParamFloatSet" to funcion
move 2563.33 to unitario
move unitario to precio-uni
CALL funcion WITH STDCALL USING BY CONTENT comando-item-precio
BY VALUE precio-uni-bin
RETURNING respuesta-impresor
Ale
15 de marzo de 2025, 22:49
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
Hola fastpho.
Esto tengo.
cobol85.cbr
[samtique.Entry]
SerialPortOpen=Sam4sFiscalDriver.dll
SerialBaudSet=Sam4sFiscalDriver.dll
SerialPortClose=Sam4sFiscalDriver.dll
IFOpBegin=Sam4sFiscalDriver.dll
IFOpSend=Sam4sFiscalDriver.dll
IFOpWaitingIs=Sam4sFiscalDriver.dll
IFOpWait=Sam4sFiscalDriver.dll
IFOpAbort=Sam4sFiscalDriver.dll
IFOpParamSet=Sam4sFiscalDriver.dll
IFOpParamGet=Sam4sFiscalDriver.dll
IFOpParamIntSet=Sam4sFiscalDriver.dll
IFOpParamIntGet=Sam4sFiscalDriver.dll
IFOpParamFloatSet=Sam4sFiscalDriver.dll
IFOpParamFloatGet=Sam4sFiscalDriver.dll
IFOpParamBoolSet=Sam4sFiscalDriver.dll
IFOpParamBoolGet=Sam4sFiscalDriver.dll
IFOpCmdOkIs=Sam4sFiscalDriver.dll
IFOpErrorGet=Sam4sFiscalDriver.dll
IFOpErrorDescGet=Sam4sFiscalDriver.dll
IFOpStateGet=Sam4sFiscalDriver.dll
IFOpRetGet=Sam4sFiscalDriver.dll
IFOpRetIntGet=Sam4sFiscalDriver.dll
IFOpRetFloatGet=Sam4sFiscalDriver.dll
IFOpRetBoolGet=Sam4sFiscalDriver.dll
IFOpBusyStateGet=Sam4sFiscalDriver.dll
IFOpBusyStepGet=Sam4sFiscalDriver.dll
IFOpBusyTotalGet=Sam4sFiscalDriver.dll
IFOpListGet=Sam4sFiscalDriver.dll
IFOpParamListGet=Sam4sFiscalDriver.dll
IFOpRetListGet=Sam4sFiscalDriver.dll
IFOpStateListGet)=Sam4sFiscalDriver.dll
*** ejemplo simplificado. **** mainform = samtique
workimg..
01 FUNCION PIC X(25) VALUE SPACES.
01 COMANDO PIC X(50).
01 RESPUESTA-IMPRESOR PIC S9(9) COMP-5.
01 ABRE-TIQUE PIC X(10) VALUE "AbrirTique".
01 COMANDO-ITEM-VTA PIC X(9) value "ItemVenta".
01 COMANDO-ITEM-CANTI PIC X(8) VALUE "Cantidad".
01 COMANDO-ITEM-PRECIO PIC X(6) VALUE "Precio".
01 COMANDO-ITEM-IVA PIC X(3) VALUE "IVA".
01 COMANDO-ITEM-CODIGO PIC X(14) VALUE "CodigoProducto".
01 CODIGO-LINEA-ITEM PIC X(15) VALUE SPACES.
procedure division.
inicio.
*** ya movio 9600 a baudios.
*** ya abrio el puerto com.
****************** ACA ARRANCA CON EL TIQUE *****************
MOVE SPACES TO FUNCION3.
MOVE "IFOpBegin" to FUNCION.
CALL FUNCION WITH STDCALL USING BY REFERENCE ABRE-TIQUE RETURNING RESPUESTA-IMPRESOR.
IF RESPUESTA-IMPRESOR = 1 MOVE "ABRO-TIQUET" TO POW-TEXT OF ABRO-TIQUE.
PERFORM ENVIAR-COMANDO.
***
*** AHORA ARRANCA CON ITEM-VENTAS
MOVE SPACES TO FUNCION.
MOVE "IFOpBegin" to FUNCION.
CALL FUNCION3 WITH STDCALL USING BY REFERENCE COMANDO-ITEM-VTA RETURNING RESPUESTA-IMPRESOR.
IF RESPUESTA-IMPRESOR = 1 MOVE "item si" TO POW-TEXT OF ERROR-ITEM.
**** descripcion articulo.
MOVE SPACES TO FUNCION.
MOVE "IFOpParamSet" TO FUNCION.
MOVE "Bomba de agua" TO PARAMETRO-DESCRI3.
CALL FUNCION WITH STDCALL USING BY REFERENCE PARAMETRO-DESCRI1
BY CONTENT PARAMETRO-DESCRI3
RETURNING RESPUESTA-IMPRESOR.
MOVE RESPUESTA-IMPRESOR TO POW-TEXT OF ERROR-DESCRI.
*** ahora cantidad.
MOVE SPACES TO FUNCION.
MOVE "IFOpParamFloatSet" TO FUNCION.
MOVE 33.33 TO CANT-UNI.
CALL FUNCION WITH STDCALL USING BY REFERENCE COMANDO-ITEM-CANTI
BY REFERENCE CANT-UNI
RETURNING RESPUESTA-IMPRESOR.
*** Ya esta ultima Función es la que no me funciona, enviar valor flotante.
**************
********************************************
******************** envia comando. *******
enviar-comando.
MOVE 1 TO ESPERA.
move spaces to comando.
MOVE "IFOpSend" TO COMANDO.
CALL COMANDO WITH STDCALL USING BY VALUE ESPERA RETURNING RESPUESTA-IMPRESOR.
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....
Kuk
16 de marzo de 2025, 11:19
@Ale, bueno pues inténtalo así, con COMP-1:
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 pgm pic x(10) value "program".
01 double comp-1.
01 num redefines double pic s9(9) comp-5.
PROCEDURE DIVISION.
call pgm using by content "Precio"
by value num
El caso es que este es de 4 bytes, y lo importes muy grandes no van a entrar.
fastpho
16 de marzo de 2025, 14:57
@Ale proba con este ejemplo a ver si enviando
valores enteros a la .dll logras facturar
algo , juga con los numeros de los campos
cantidad precio y ver si logras que el impresor
multiplique la cantidad por el precio y facture
un importe.
Otra cosa podes sacar el informe Z ?
Saludos ..
WORKING-STORAGE SECTION.
*---------------------------------------------------------
01 FUNC-SAM4-LIB PIC x(50).
01 sWait PIC s9(9) COMP-5.
01 Respuesta-Impresor PIC s9(9) COMP-5 value 0.
*---------------------------------------------------------
01 AbrirTiquetSam4s PIC x(10) VALUE "AbrirTique".
01 CerrarSam4s PIC x(6) VALUE "Cerrar".
01 ItemVentaSam4s PIC x(9) VALUE "ItemVenta".
01 ItemBonificacionSam4s PIC x(16) VALUE "ItemBonificacion".
01 titulo-descripcion PIC x(11) value "Descripcion".
01 titulo-precio PIC x(6) value "Precio".
01 titulo-iva PIC x(3) value "IVA".
01 titulo-codigointerno PIC x(13) value "CodigoInterno".
01 titulo-cantidad PIC x(8) value "Cantidad".
01 titulo-unidadmedida PIC x(12) value "UnidadMedida".
01 titulo-impinterno PIC x(15) value "MontoImpIntFijo".
01 ArticuloSam4 PIC x(13).
01 DescriptionSam4 PIC x(40).
01 PrecioSam4 PIC s9(9) COMP-5.
01 IvaSam4 PIC s9(9) COMP-5.
01 CantidadSam4 PIC s9(9) COMP-5.
01 MontoImpIntFijoSam4 PIC S9(9) COMP-5.
01 UnidadMedidaSam4 PIC s9(9) COMP-5.
PROCEDURE DIVISION.
************************************************** ********
*Begin AbrirTique
move spaces TO FUNC-SAM4-LIB.
MOVE "IFOpBegin" TO FUNC-SAM4-LIB.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE AbrirTiquetSam4s returning Respuesta-Impresor.
************************************************** ********
*Send AbrirTiquetSam4s
move spaces TO FUNC-SAM4-LIB.
MOVE "IFOpSend" TO FUNC-SAM4-LIB.
MOVE 1 TO sWait.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY VALUE sWait returning Respuesta-Impresor.
*-----------------------------------------------------------------------------------------------------------------------
* Los campos PrecioSam4 IvaSam4 CantidadSam4 MontoImpIntFijo UnidadMedidaSam4 USAMOS LA FUNCION ENTERO : IFOpParamIntSet
*-----------------------------------------------------------------------------------------------------------------------
************************************************** ***********************
* muevo valores necesarios para poder facturar un item o articulo
move 1210 TO PrecioSam4.
move 2100 TO IvaSam4.
move 5000 TO CantidadSam4.
move zeros TO MontoImpIntFijoSam4.
move 7 TO UnidadMedidaSam4.
move "Esto es una prueba" TO DescriptionSam4.
move "7790060023417" TO ArticuloSam4.
****************************************
*Begin ItemVenta
move spaces TO FUNC-SAM4-LIB.
MOVE "IFOpBegin" TO FUNC-SAM4-LIB.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE ItemVentaSam4s
returning Respuesta-Impresor.
************
*Descripcion
move spaces TO FUNC-SAM4-LIB.
MOVE "IFOpParamSet" TO FUNC-SAM4-LIB.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE titulo-descripcion
BY REFERENCE DescriptionSam4
returning Respuesta-Impresor.
**********
*Cantidad
move spaces TO FUNC-SAM4-LIB.
MOVE "IFOpParamIntSet" TO FUNC-SAM4-LIB.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY CONTENT titulo-cantidad
BY VALUE CantidadSam4
returning Respuesta-Impresor.
*******
*Precio
move spaces TO FUNC-SAM4-LIB.
MOVE "IFOpParamIntSet" TO FUNC-SAM4-LIB.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE titulo-precio
BY VALUE PrecioSam4
returning Respuesta-Impresor.
****
*Iva
move spaces TO FUNC-SAM4-LIB.
MOVE "IFOpParamIntSet" TO FUNC-SAM4-LIB.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE titulo-iva
BY VALUE IvaSam4
returning Respuesta-Impresor.
****************
*Codigo Interno
move spaces TO FUNC-SAM4-LIB.
MOVE "IFOpParamSet" TO FUNC-SAM4-LIB.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE titulo-codigointerno
BY REFERENCE ArticuloSam4
returning Respuesta-Impresor.
****************************
*MontoImpIntFijo
move spaces TO FUNC-SAM4-LIB.
MOVE "IFOpParamIntSet" TO FUNC-SAM4-LIB.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE titulo-impinterno
BY VALUE MontoImpIntFijoSam4
returning Respuesta-Impresor.
*****************
*Unidad de Medida
move spaces TO FUNC-SAM4-LIB.
MOVE "IFOpParamIntSet" TO FUNC-SAM4-LIB.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE titulo-unidadmedida
BY VALUE UnidadMedidaSam4
returning Respuesta-Impresor.
************************************************** ********
*Send item
move spaces TO FUNC-SAM4-LIB.
MOVE "IFOpSend" TO FUNC-SAM4-LIB.
MOVE 1 TO sWait.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY VALUE sWait returning Respuesta-Impresor.
*------------------------
*Begin "Cerrar"
move spaces TO FUNC-SAM4-LIB.
MOVE "IFOpBegin" TO FUNC-SAM4-LIB.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE CerrarSam4s returning Respuesta-Impresor.
*Send Cerrar
move spaces TO FUNC-SAM4-LIB.
MOVE "IFOpSend" TO FUNC-SAM4-LIB.
MOVE 1 TO sWait.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY VALUE sWait returning Respuesta-Impresor.
Ale
16 de marzo de 2025, 18:55
Hola gente. muchas gracias, voy a probar todo y les cuento..
Si cierre Z los larga bien. El tique también, alcanza a largar descripción del articulo, y luego cuando llega a cantidad larga en cero, o si no el compilador no me deja probar otros Pic...
Fastpho voy a probar también con entero, pero el parámetro por ejemplo (precio), me indica que tiene que ser flotante. No se si lo tomaría, o como hago cuando el valor sea con decimales.
saludos chicos. y eternamente agradecido igual...
fastpho
16 de marzo de 2025, 19:23
@Ale, no importan los decimales el impresor va a.poner el pto decimal no te preocupes por eso
Proba como te lo mande , te envía todo
Debería poner precio 1.21 cantidad 5.00
Vamos a probar todos los valores numéricos
Como enteros por ahora ..
Saludos
Ale
16 de marzo de 2025, 20:41
Chicos, le comento que probé las dos opciones que me enviaron.
Kuk probé lo que me enviaste. El compilador no me tira error. Pero en ejecución me cancela el tiquet. Y no imprime mas que descripción.
fastpho probé también lo que me indicaste, y tuvo una notable mejoría, si bien me cancela igual el comprobante, precio unitario le muevo 2200 a la variable y en el tiquet me imprime 22,00. Y le muevo
210 a iva y me imprime en el tiquet 2,10. cantidad le envio 300 y me imprime 0,00. y tambien mejoro en el sentido de que no se cierra el programa. Cosa que antes si.
Una leve esperanza le sigo teniendo al cobol..
Todo comenzó porque tengo que hacer el sistema de facturación nueva. por las nuevas resoluciones de Afip y la leyenda a consumidor finales. Me venia comunicando con el controlador fiscal, con la aplicación (Samdrv.exe) por medio de comandos armados en un archivo de texto... pero resulta que la aplicación por lo que estuve averiguando no tiene ningún comando que permita armar esa leyenda. Llamo a la empresa que lo hizo y no me dan respuesta, se ve que es como pienso yo..
Por eso tengo que hacer todo de nuevo comunicándome por DLL . Tengo tiempo hasta Abril.
Fastpho debes saber de lo que hablo..
Hago todo esto para mi negocio, y como se programar algo de cobol, me largue hacer mis sistemas..
Agradecido eternamente a uds.. y disculpen las molestias.
Kuk
17 de marzo de 2025, 10:38
Kuk probé lo que me enviaste. El compilador no me tira error. Pero en ejecución me cancela el tiquet. Y no imprime mas que descripción.
Es que yo tengo otra versión de PowerCOBOL más reciente... Y tampoco tengo la DLL que utilizas...
Habría que asegurarnos primero de que el problema viene del campo/tipo de campo.
Has probado pasando un valor "en duro", es decir algo así:
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 pgm pic x(10) value "program".
01 double comp-1.
01 num redefines double pic s9(9) comp-5.
PROCEDURE DIVISION.
call pgm with stdcall using by content "Precio"
by value 1.16
Por cierto, en mi ejemplo de antes se me había olvidado añadir el convenio del call WITH STDCALL, lo mismo el problema viene de ahí.
Prueba otra vez con el convenio (si no lo habías hecho ya):
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 pgm pic x(10) value "program".
01 double comp-1.
01 num redefines double pic s9(9) comp-5.
PROCEDURE DIVISION.
call pgm WITH STDCALL using by content "Precio"
by value num
Ale
17 de marzo de 2025, 13:24
hola amigos.
Voy a probar enviar el valor en bruto como me decis a ver que pasa.
De la otra forma probé y como comente en el mensaje anterior, no tira error el compilador, pero no funciona.
Descripción, iva, precio unitario enviándolo como Int. en vez de float , algo esta funcionando, no cancela el comprobante, pero no logro que imprima cantidad.
Algo así hago y no toma nada, lo raro que en precio unitario, iva, y los demás valores numéricos los toma.
De todas maneras el manual dice enviar "IFOpParamFloatSet", seguimos en la lucha.
move spaces TO FUNC-SAM4-LIB.
MOVE "IFOpParamIntSet" TO FUNC-SAM4-LIB.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY CONTENT titulo-cantidad
BY VALUE CantidadSam4
returning Respuesta-Impresor.
Utilizo powercobol 5 , pero tengo version 7, que no la utilice mucho hasta ahora, que opinan? podría probar con esa? tendría que migrar todo el sistema a esa version.
O se podra copartir en la misma pc las dos versiones.?
fastpho
17 de marzo de 2025, 13:36
@Ale con el ejemplo que te di te anda ? no esta claro
************************************************** ***********************
* muevo valores necesarios para poder facturar un item o articulo
move 1210 TO PrecioSam4. *> 1.21
move 2100 TO IvaSam4. *> 21.00
move 5000 TO CantidadSam4. *> 5000 tiene 3 decimal el impresor tenes que poner 10000 para que te ponga 10.000
move zeros TO MontoImpIntFijoSam4.
move 7 TO UnidadMedidaSam4. *> este campo le decis tipo unidades
************************************************** ***********************
* muevo valores necesarios para poder facturar un item o articulo
move 15260 TO PrecioSam4. *> 15.26
move 2100 TO IvaSam4. *> 21.00
move 15000 TO CantidadSam4. *> 5000 tiene 3 decimal el impresor tenes que poner 15000 para que te ponga 15.000
move zeros TO MontoImpIntFijoSam4.
move 7 TO UnidadMedidaSam4. *> este campo le decis tipo unidades
Esto para trabajar los campos numericos como IFOpParamIntSet
subi alguna foto del ticket porfa , y con el valor que manda en estas variables
Saludos..
Ale
17 de marzo de 2025, 13:49
fastpho si si funciona, pero el único que no funciono es el de cantidad. No se porque.
si envio como el ejemplo : IFOpParamIntSet a la tarde subo foto de tique, no lo tengo a mano aca.
Kuk
17 de marzo de 2025, 13:58
@Ale, "int" es el tipo Integer, que viene a ser de tipo entero, no te vale para valores con decimales.
La verdad es que no sé qué diferencia hay entre la v5 y la v7. Lo interesante sería, probar mi ejemplo con BINARY-LONG en la v7 y ver si lo acepta. No obstante, aunque el compilador coja esta definición, no garantiza que vaya a funcionar.
No se puede tener 2 instancias NetCOBOL/PowerCOBOL instaladas en el mismo SO. Puedes pasar por otro PC o una VM.
Ale
17 de marzo de 2025, 14:06
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
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 (https://www.cobolforo.es/showthread.php?t=1435&p=7531)
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
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.
WORKING.....
01 REG-TEXTADD GLOBAL.
03 FILLER PIC X(8) value "[txtadd]".
03 FILLER PIC X VALUE ";".
03 TEXTO-ITEM-FISCAL PIC X(26) VALUE SPACES.
** probado no mas de 26 caracteres para texto item
03 FILLER PIC X VALUE ";".
01 REG-ITEM GLOBAL.
03 FILLER PIC X(6) value "[item]".
03 FILLER PIC X VALUE ";".
03 COD-ARTICULO-FISCAL pic X(16) value SPACES.
03 FILLER PIC X VALUE ";".
03 CANT-UNI-FISCAL PIC X(7) VALUE SPACES.
03 FILLER PIC X VALUE ";".
03 PRECIO-UNI-FISCAL PIC X(8) VALUE SPACES.
03 FILLER PIC X VALUE ";".
03 TAZA-IVA-FISCAL PIC XX VALUE "21".
03 FILLER PIC X VALUE ";".
03 FILLER PIC X(10) VALUE "0.00000000".
03 FILLER PIC X VALUE ";".
03 FILLER PIC 9 VALUE 0.
03 FILLER PIC X VALUE ";".
* 03 COD-ARTICULO-FISCAL PIC X(15).
03 FILLER PIC X VALUE ";".
03 FILLER PIC 9 VALUE 0.
03 FILLER PIC X VALUE ";".
********************************************
01 PASAJE-UNITARIO PIC 999999.99.
01 PASAJE-CANTIDAD PIC 9999.99.
01 PASAJE-TAZA PIC 99.99.
PROCEDURE...
******
MOVE "Numeric"(4) OF "ListItems" (ULTIMA-LINEA-ACTIVA) OF LIST1 TO PASAJE-CANTIDAD.
MOVE "Numeric"(5) OF "ListItems" (ULTIMA-LINEA-ACTIVA) OF LIST1 TO PASAJE-UNITARIO.
MOVE PASAJE-CANTIDAD TO CANT-UNI-FISCAL.
MOVE PASAJE-UNITARIO TO PRECIO-UNI-FISCAL.
*** aca arma el registro : 01 REG-ITEM global.
Formato del txt que envio : IN_ELLIX40F.TXT
[txtadd];DISCO FREN CLIO 1.4 R9 R11;
[item];4WD84705 ;0002.00;033000.0;21;0.00000000;0;;0;
[pago];0066000.00;20;
[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
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 Console.WriteLine(" Numero: {0}", drv.IFOpRetGet("Numero"));
Console.WriteLine(" CodigoTipo: {0}", drv.IFOpRetGet("CodigoTipo"));
fastpho
18 de marzo de 2025, 17:19
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 Console.WriteLine(" Numero: {0}", drv.IFOpRetGet("Numero"));
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
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.
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
MOVE "IFOpRetGet" TO FUNC-SAM4-LIB.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE "comando" returning "respuesta".
Ale
18 de marzo de 2025, 20:19
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?
fastpho
19 de marzo de 2025, 14:46
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
01 Respuesta PIC S9(9) COMP-5
Saludos..
Kuk
19 de marzo de 2025, 19:39
@Ale,
Usa los botones de resalto de sintaxis ;)
En cuanto a esto:
const char * IFOpRetGet (const char * name)
En Cobol se hace con un puntero:
WORKING-STORAGE SECTION.
01 ptrDato POINTER.
...
LINKAGE SECTION.
01 datosRecepcion PIC X(100).
PROCEDURE DIVISION.
call pgm with stdcall using by content "Precio"
returning ptrDato
set address of datosRecepcion to ptrDato
display datosRecepcion
Ale
21 de marzo de 2025, 17:50
hola amigos.. Les comento los resultados, por si a alguien le hace falta en algún momento.
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:
CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE "comando" returning "respuesta". . Pero lo tuve que enviar como:
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:
01 comando-item-canti pic x(8) value "Cantidad".
MOVE "IFOpParamSet" TO FUNCION.
*** MOVE "IFOpParamFloatSet" TO FUNCION.
CALL FUNCION WITH STDCALL USING BY reference COMANDO-ITEM-CANTI
by value 2.60
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
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"...
Pero lo tuve que enviar como:
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
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
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
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:
drv.IFOpBegin("EstablecerEncabezadoCola");
drv.IFOpParamIntSet("Numero", 19);
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
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
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
Drv.IFOpBegin("ItemVenta")
Drv.IFOpParamSet("Descripcion", "Item de prueba")
Drv.IFOpParamFloatSet("Precio", 1.2345)
Drv.IFOpParamFloatSet("IVA", 21.0)
Drv.IFOpParamSet("CodigoProducto", "7791234567898")
If (Drv.IFOpSend(1) = 0) Then
CmdError("ItemVenta")
Return
End If
Drv.IFOpBegin("Cerrar")
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
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
printf("EstablecerEncabezadoCola\n");
IFOpBegin("EstablecerEncabezadoCola");
IFOpParamIntSet("Numero", 19);
IFOpParamSet("Texto", "Cola libre 9");
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...
WORKING-STORAGE SECTION.
01 TITULO-ECabCola PIC X(24) VALUE "EstablecerEncabezadoCola".
01 TITULO-ECNumero PIC X(6) VALUE "Numero".
01 TITULO-ECTexto PIC X(5) VALUE "Texto".
01 Valor-ECNumero PIC S9(9) COMP-5.
01 Valor-ECTexto PIC X(50).
01 HEADER-11.
03 H-CAJERO PIC X(7) VALUE "CAJERO:".
03 H-CODIGO PIC 9(2).
03 FILLER PIC X VALUE SPACES.
03 H-NOMBRE PIC X(19).
03 H-CAJA PIC X(7) VALUE " CAJA:".
03 H-NUMERO PIC 9(4).
PROCEDURE DIVISION.
MOVE spaces TO FUNC-SAM4-LIB.
MOVE "IFOpBegin" TO FUNC-SAM4-LIB.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY CONTENT TITULO-ECabCola returning Respuesta-Impresor.
DISPLAY "TITULO-ECabCola " , Respuesta-Impresor.
************
*Texto Cola
MOVE spaces TO FUNC-SAM4-LIB.
MOVE "IFOpParamSet" TO FUNC-SAM4-LIB.
* MOVE SPACES TO Valor-ECTexto.
MOVE 2 TO H-CODIGO.
MOVE "Osvaldo Linea 11 " TO H-NOMBRE.
MOVE 3 TO H-NUMERO.
MOVE HEADER-11 TO Valor-ECTexto.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE TITULO-ECTexto
BY REFERENCE Valor-ECTexto
returning Respuesta-Impresor.
DISPLAY "TITULO-ECTexto " , Respuesta-Impresor.
*****************
*Numero Cola
MOVE spaces TO FUNC-SAM4-LIB.
MOVE "IFOpParamIntSet" TO FUNC-SAM4-LIB.
MOVE 11 TO Valor-ECNumero.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE TITULO-ECNumero
BY VALUE Valor-ECNumero
returning Respuesta-Impresor.
DISPLAY "titulo-ECNumero " , Respuesta-Impresor.
*--------------
* Send
MOVE spaces TO FUNC-SAM4-LIB.
MOVE "IFOpSend" TO FUNC-SAM4-LIB.
MOVE 1 TO sWait.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY VALUE sWait returning Respuesta-Impresor.
DISPLAY "SEND TITULO-ECabCola " , Respuesta-Impresor.
Saludos ....
Ale
28 de marzo de 2025, 01:35
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.
MOVE "IFOpBegin" to FUNCION3.
CALL FUNCION3 WITH STDCALL USING BY CONTENT PARAMETRO-ENCABEZADO RETURNING RESPUESTA-IMPRESOR.
*** numero-cola.
MOVE spaces TO FUNCION3.
* MOVE "IFOpParamIntSet" TO FUNCION3.
MOVE "IFOpParamSet"TO FUNCION3.
MOVE 11 TO Valor-ECNumero.
CALL FUNCION3 WITH STDCALL USING BY CONTENT TITULO-ECNumero
BY VALUE Valor-ECNumero
returning Respuesta-Impresor.
if respuesta-impresor = 0 move "error-cola" to pow-text of error-cod-cola.
**... texto-cola
MOVE spaces TO FUNCION.
MOVE "IFOpParamSet" TO FUNCION.
* MOVE SPACES TO Valor-ECTexto.
MOVE 2 TO H-CODIGO.
MOVE "Osvaldo Linea .11 " TO H-NOMBRE.
MOVE 3 TO H-NUMERO.
MOVE HEADER-11 TO Valor-ECTexto.
CALL FUNCION WITH STDCALL USING BY REFERENCE TITULO-ECTexto
BY REFERENCE Valor-ECTexto
returning Respuesta-Impresor.
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*
WORKING-STORAGE SECTION.
01 TITULO-ECabCola PIC X(24) VALUE "EstablecerEncabezadoCola".
01 TITULO-ECNumero PIC X(6) VALUE "Numero".
01 TITULO-ECTexto PIC X(5) VALUE "Texto".
01 Valor-ECNumero PIC S9(9) COMP-5.
01 Valor-ECTexto PIC X(50).
01 HEADER-11.
03 H-CAJERO PIC X(7) VALUE "CAJERO:".
03 H-CODIGO PIC 9(2).
03 FILLER PIC X VALUE SPACES.
03 H-NOMBRE PIC X(19).
03 H-CAJA PIC X(7) VALUE " CAJA:".
03 H-NUMERO PIC 9(4).
01 Respuesta-Impresor PIC S9(9) COMP-5.
PROCEDURE DIVISION.
MOVE spaces TO FUNC-SAM4-LIB.
MOVE "IFOpBegin" TO FUNC-SAM4-LIB.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY CONTENT TITULO-ECabCola returning Respuesta-Impresor.
DISPLAY "TITULO-ECabCola " , Respuesta-Impresor.
****************
*Numero Cola
MOVE spaces TO FUNC-SAM4-LIB.
MOVE "IFOpParamIntSet" TO FUNC-SAM4-LIB.
MOVE 11 TO Valor-ECNumero. *> Numero de Cola 11
CALL FUNC-SAM4-LIB WITH STDCALL USING BY CONTENT TITULO-ECNumero *> Esto cambie POR CONTENT
BY VALUE Valor-ECNumero
returning Respuesta-Impresor.
DISPLAY "titulo-ECNumero " , Respuesta-Impresor.
************
*Texto Cola
MOVE spaces TO FUNC-SAM4-LIB.
MOVE "IFOpParamSet" TO FUNC-SAM4-LIB.
MOVE 2 TO H-CODIGO.
MOVE "Osvaldo Linea 11 " TO H-NOMBRE.
MOVE 3 TO H-NUMERO.
MOVE HEADER-11 TO Valor-ECTexto.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY REFERENCE TITULO-ECTexto
BY REFERENCE Valor-ECTexto
returning Respuesta-Impresor.
DISPLAY "TITULO-ECTexto " , Respuesta-Impresor.
*--------------
* Send
MOVE spaces TO FUNC-SAM4-LIB.
MOVE "IFOpSend" TO FUNC-SAM4-LIB.
MOVE 1 TO sWait.
CALL FUNC-SAM4-LIB WITH STDCALL USING BY VALUE sWait returning Respuesta-Impresor.
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
hola amigos. como estan?
Les hago consulta, para ver si uds se dan cuenta como resolverlo.
working....
01 PARAMETRO-ENCABEZADO PIC X(24) VALUE "EstablecerEncabezadoCola".
01 TITULO-ECNumero PIC X(6) VALUE "Numero".
01 TITULO-ECTexto PIC X(5) VALUE "Texto".
01 Valor-ECNumero PIC S9(9) COMP-5.
01 Valor-ECTexto PIC X(26).
procedure.
inicio.
......
......
cargo (item-venta), envio (pago). y luego antes de cerrar comprobante.
voy a probar-cola.
PROBANDO-COLA.
MOVE SPACES TO comando.
move zero to respuesta-impresor.
MOVE "IFOpBegin" to comando.
CALL comando WITH STDCALL USING BY reference parametro-encabezado
RETURNING RESPUESTA-IMPRESOR.
if respuesta-impresor = 0 MOVE "ERROR estableziendo cola" TO POW-TEXT OF armado-cola.
****** este comando ya me larga (error) cuando lo envio. probe como (content) tambien.
*** numero-cola.
MOVE spaces TO FUNCION3.
MOVE "IFOpParamSet"TO FUNCION3.
*** Acá lo envio como ParamSet..(texto), porque como "IFOpParamIntSet" no me funciono (me larga error) valor 0
CALL FUNCION3 WITH STDCALL USING BY CONTENT TITULO-ECNumero
by CONTENT "19"
returning Respuesta-Impresor.
if respuesta-impresor = 0 move "error-colas" to pow-text of error-cod-cola.
*** texto-cola
MOVE spaces TO FUNCION.
MOVE "IFOpParamSet" TO FUNCION.
MOVE SPACES TO Valor-ECTexto.
move "probando transparencia fiscal" to Valor-ECTexto.
CALL FUNCION WITH STDCALL USING BY reference TITULO-ECTexto
BY REFERENCE Valor-ECTexto
returning Respuesta-Impresor.
if respuesta-impresor = 0 move "error-texto-cola" to pow-text of error-tex-cola.
*************************
Consulta que opinan y como hacerlo si envío todo junto. algo así:
moOVE SPACES TO comando.
move zero to respuesta-impresor.
MOVE "IFOpBegin" to comando.
CALL comando WITH STDCALL USING BY reference parametro-encabezado
by reference TITULO-ECNumero
by content "19"
by reference TITULO-ECTexto
....
....
RETURNING RESPUESTA-IMPRESOR.
saludos....
fastpho
31 de marzo de 2025, 20:03
@Ale esto asi esta mal por que no respeta el protocolo
*************************
Consulta que opinan y como hacerlo si envío todo junto. algo así:
moOVE SPACES TO comando.
move zero to respuesta-impresor.
MOVE "IFOpBegin" to comando.
CALL comando WITH STDCALL USING BY reference parametro-encabezado
by reference TITULO-ECNumero
by content "19"
by reference TITULO-ECTexto
....
....
RETURNING RESPUESTA-IMPRESOR.
MOVE SPACES TO comando.
move zero to respuesta-impresor.
MOVE "IFOpBegin" to comando.
CALL comando WITH STDCALL USING BY reference parametro-encabezado
RETURNING RESPUESTA-IMPRESOR.
if respuesta-impresor = 0 MOVE "ERROR estableziendo cola" TO POW-TEXT OF armado-cola.
****** este comando ya me larga (error) cuando lo envio. probe como (content) tambien.
*** numero-cola.
MOVE spaces TO FUNCION3.
MOVE "IFOpParamSet"TO FUNCION3.
*** Acá lo envio como ParamSet..(texto), porque como "IFOpParamIntSet" no me funciono (me larga error) valor 0
CALL FUNCION3 WITH STDCALL USING BY CONTENT TITULO-ECNumero
by CONTENT "19"
returning Respuesta-Impresor.
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
@Ale esto asi esta mal por que no respeta el protocolo
*************************
Consulta que opinan y como hacerlo si envío todo junto. algo así:
moOVE SPACES TO comando.
move zero to respuesta-impresor.
MOVE "IFOpBegin" to comando.
CALL comando WITH STDCALL USING BY reference parametro-encabezado
by reference TITULO-ECNumero
by content "19"
by reference TITULO-ECTexto
....
....
RETURNING RESPUESTA-IMPRESOR.
MOVE SPACES TO comando.
move zero to respuesta-impresor.
MOVE "IFOpBegin" to comando.
CALL comando WITH STDCALL USING BY reference parametro-encabezado
RETURNING RESPUESTA-IMPRESOR.
if respuesta-impresor = 0 MOVE "ERROR estableziendo cola" TO POW-TEXT OF armado-cola.
****** este comando ya me larga (error) cuando lo envio. probe como (content) tambien.
*** numero-cola.
MOVE spaces TO FUNCION3.
MOVE "IFOpParamSet"TO FUNCION3.
*** Acá lo envio como ParamSet..(texto), porque como "IFOpParamIntSet" no me funciono (me larga error) valor 0
CALL FUNCION3 WITH STDCALL USING BY CONTENT TITULO-ECNumero
by CONTENT "19"
returning Respuesta-Impresor.
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
[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
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
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
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
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.