Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Sintaxis] Manejo OCX impresora Fiscal Epson nueva generación (https://www.cobolforo.es/showthread.php?t=601)

fastpho 20 de abril de 2017 16:08

1 Archivos Adjunto(s)
Hola Kuk claro vos le mandas a la ocx el comando a ejecutar sobre la impresora y la ocx lo que hace es completar con los datos necesarios para cumplir con el protocolo de comunicacion de la impresora , la ocx es la que se encarga realmente de comunicarse con el impresor y procesar la respuesta del dato enviado.
Cuando uno invoca al comando "SendCommand" Este método retorna verdadero , si las condiciones internas del control son válidas para el inicio de la transacción con la impresora fiscal. Si el estado del control indica que esta cerrado o que existe una operación en progreso el retorno es falso.
Esto es lo que dice la ayuda del comando "AddDataField" :

Cita:

Descripción

Suma un campo al buffer de comandos.

Parámetro
String

Retorno

Booleano

Requerido
Si

Observaciones

Cada comando que recibe la impresora fiscal esta compuesto comúnmente por varios campos separados por un carácter especial que oficia de separador. Cuando el comando así lo requiera ejecute tantas veces este método, con el campo específico como parámetro, para llenar toda la información que requiera el comando. Este método retorna verdadero si los campos especificados en los parámetros son validos, la siguiente regla se aplica según el tipo del protocolo.
  • Protocolo compatible son válidos los caracteres entre el 32 y el 255 de la tabla ASCII
  • Protocolo extendido son válidos los caracteres de toda la tabla ASCII

Si el comando requiere caracteres no imprimibles, utilice la notación específica de su lenguaje de programación para embeber estos.
Voy a subir el ejemplo completo en vb6 y la ayuda de la ocx junto con la ocx

Rapinto 21 de abril de 2017 00:04

Kuk,

os dados a enviar para a impressora, pelo exemplo Chr$(&H8)
podem ter que ser enviados em decimal e não em hexadecimal.
POderá ter que converter X"0A" para 10.
Eu não conheço a epson fiscale, pois em Portugal não se usa muito.
Só com o OCX e alguma documentação (não tenho a impressora para testar)
é que poderíamos analisar melhor.
(Desculpa escrever em Português).
Un saludo,
Rui Pinto

fastpho 21 de abril de 2017 00:25

Gracias Rapinto probe de mandar los datos en decimal tambien pero no funciona, con el comando informe x lo que logre ver es que le agrega siempre el caracter 00 despues del comando sCmd y del sCmdExt que no lo hace en el ejemplo de visual.-

Rapinto 21 de abril de 2017 00:46

Em VB todas as strings terminal com o Hex 00
O cobol não faz isso. Temos que adicionar o Hex 00
por exemplo:
Código COBOL:
  1. 01  aa       pic x(015).
  2.  
  3. move "abcde" to aa.
  4. move x"00"    to aa(5:1).
Poderá ser isso?
Rui

Kuk 21 de abril de 2017 08:55

Cita:

Citación del post de Rapinto (Mensaje 2924)
Em VB todas as strings terminal com o Hex 00

Es vedad, podría ser por eso. Casi todos los lenguajes, al menos bajo Windows, suelen trabajar con "null-terminated strings" y posiblemente el OCX espere por defecto recibir siempre un nulo al final de cada string, de manera implícita... :piensa:

fastpho 21 de abril de 2017 16:54

voy a probar de mandar esto a ver que hace :
Código COBOL:
  1.  move X'00' & X'01' & X'00' to sCmd.
Código COBOL:
  1.  move X'00' & X'00' & X'00' to sCmdExt


---------- Post añadido : 15:54 ---------- Post anterior : 15:11 ----------

No es al reves el power le manda al final de cada string el caracter X"00" el tema es como sacarlo
cuando es necesario porque para el informe "X" no es necesario enviarlo por que para
Código COBOL:
  1.     move X"08" & X"02"  to sCmd.
  2.      INVOKE EpsonFPHostControl1 "AddDataField" USING sCmd        RETURNING ReturnDEValue.
  3.      move X"0C" & X"21"  to sCmdExt.
  4.      INVOKE EpsonFPHostControl1 "AddDataField" USING sCmdExt     RETURNING ReturnDEValue.
y escribe en el puerto
06 02 9C 08 1B 02 00 1C 0C 21 00 03 30 31 30 46
no deberia ir el X"00"
para el caso del informe estado
Código COBOL:
  1.    move X'00' & X'01'   to sCmd.
  2.      if bAnswer not = zeros
  3.              INVOKE EpsonFPHostControl1 "AddDataField" USING sCmd          RETURNING bAnswer
  4.              move X'00' & X'00'   to sCmdExt
  5.                   if bAnswer not = zeros
  6.                                 INVOKE EpsonFPHostControl1 "AddDataField" USING sCmdExt          RETURNING bAnswer
  7.                                
  8.                                if bAnswer not = zeros
  9.                                   INVOKE EpsonFPHostControl1 "SendCommand"                      RETURNING bAnswer
  10.                                   CALL "BUSY"
  11.                                end-if
  12.                   end-if
  13.      end-if.
y escribe en el puerto
06 02 FF 00 1C 00 03 30 31 32 30

Kuk 21 de abril de 2017 17:29

fastpho, lo siguiente:
Cita:

Citación del post de fastpho (Mensaje 2926)
No es al reves el power le manda al final de cada string el caracter X"00"

Pasa porque hemos definido los campos como:

Código COBOL:
  1.  01  sCmd            PIC X(2) VALUE X'0001'.
  2.  01  sCmdExt         PIC X(2) VALUE X'0C00'.

Intenta hacer pruebas con:

Código COBOL:
  1.  01  sCmd            PIC X(250) VALUE X'0001'.
  2.  01  sCmdExt         PIC X(250) VALUE X'0C00'.

fastpho 21 de abril de 2017 23:38

le mande esto para obtener el informe
Código COBOL:
  1.  01  sCmd            PIC X(250) VALUE X'0802'.
  2.  01  sCmdExt         PIC X(250) VALUE X'0C21'.    
y es lo mismo que esto
Código COBOL:
  1.      01  sCmd             PIC X(4) VALUE X'0802'.
  2.      01  sCmdExt         PIC X(4) VALUE X'0C21'.    
siempre le ponde el x'00' al final de cada campo

---------- Post añadido : 22:38 ---------- Post anterior : 22:29 ----------

tengo que lograr sacarle el "null-terminated strings" para que me funcione

Kuk 22 de abril de 2017 10:38

Cita:

Citación del post de fastpho (Mensaje 2933)
siempre le pone el x'00' al final de cada campo

¿Estas seguro de ello? Porque no es normal, en COBOL aunque hagamos
Código COBOL:
  1.      MOVE "A" TO WS-CAMPO *> PIC X(1000)

Se le mueve la "A" en la posición 1 y el resto se rellena de espacios.

Rapinto 24 de abril de 2017 00:07

fastpho,
Alguns exemplos de Argentina que eu vi, dizem que o OCX é para .Net (Dot.NET)
vi alguns exemplos e usavam Visual Studio 10.
O problema deve ser esse.
Un saludo,
Rui Pinto


La franja horaria es GMT +2. Ahora son las 04:26.

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