Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Sintaxis] Problema en enviar null x"00" a impresora termica (https://www.cobolforo.es/showthread.php?t=699)

drvedia1981 9 de agosto de 2017 04:14

Problema en enviar null x"00" a impresora termica
 
Hola amigos de este nuevo foro no entre mucho del viejo (escobol) mi nick era drvedia, el tema es que estoy mandando una cadena de datos para imprimir un tique con el ocx mcscomm pero al llegar al caracter x"00" en visual basic chr(0) se detiene que puede ser ? ahy otra forma de mandar un null ?
Muchas Gracias

Codigo
Código COBOL:
  1.  01 ENVIO.
  2.     03 FILLER           PIC X VALUE X"1D".
  3.     03 FILLER           PIC X VALUE X"28".
  4.     03 FILLER           PIC X VALUE X"4C".
  5.     03 FILLER           PIC X VALUE X"06".
  6.     03 FILLER           PIC X VALUE B"00".
  7.     03 FILLER           PIC X VALUE X"30".
  8.     03 FILLER           PIC X VALUE X"45".
  9.     03 FILLER           PIC X VALUE X"20".
  10.     03 FILLER           PIC X VALUE X"20".
  11.     03 FILLER           PIC X VALUE X"01".
  12.     03 FILLER           PIC X VALUE X"01".

Kuk 9 de agosto de 2017 11:50

drvedia1981, por lo pronto has puesto B"00" y no X"00". En cuanto a tu problema, haz un REDEFINES :

Código COBOL:
  1.  01 ENVIO.
  2.     03 FILLER           PIC X VALUE X"1D".
  3.     03 FILLER           PIC X VALUE X"28".
  4.     03 FILLER           PIC X VALUE X"4C".
  5.     03 FILLER           PIC X VALUE X"06".
  6.     03 FILLER           PIC X VALUE B"00".
  7.     03 FILLER           PIC X VALUE X"30".
  8.     03 FILLER           PIC X VALUE X"45".
  9.     03 FILLER           PIC X VALUE X"20".
  10.     03 FILLER           PIC X VALUE X"20".
  11.     03 FILLER           PIC X VALUE X"01".
  12.     03 FILLER           PIC X VALUE X"01".
  13.  01  ENVIO-R REDEFINES ENVIO PIC X(11).

Y manda a la impresora el campo ENVIO-R a ver qué tal.

drvedia1981 9 de agosto de 2017 14:42

Hola kuk probé con redefines pero nada, copie mal el codigo porque estaba haciendo pruebas se envia x"00" no b"00"
Solo se recibe por puerto serie
Código:

1B 61 31 1D 28 4C 06
y se corta
Gracias Saludos

Kuk 9 de agosto de 2017 15:05

drvedia1981, ¿si omites el X"00" recibe el resto de valores? (aunque no sea código válido, pruébalo a ver)

drvedia1981 10 de agosto de 2017 02:19

Hola Kuk probé sin el X"00" y no funciona, es algo que tiene que recibir la impresora, en visual basic 6 envió chr(0) y funciona perfecto creo que voy a llamar de cobol a un programita en vb que imprima y devuelva el control pero quería evitar eso.
Gracias Saludos

---------- Post añadido : 00:05 ---------- Post anterior : 23:07 ----------

Kuk con respecto a tu pregunta, si quito el x"00" sigue con los demas caracteres sin problema, no es solo que no lo envia sino que bloquela el envio de los demas caracteres lo prove con el mcscomm.ocx y el ocx de Serial Port ActiveX Control y hace lo mismo
Gracias Saludos

---------- Post añadido : 01:19 ---------- Post anterior : 00:05 ----------

La impresora es una epson tm-t20ii

Kuk 10 de agosto de 2017 08:59

drvedia1981, normalmente el X"00" significa Fin de cadena de caracteres. En este caso, no sé por qué razón, es justamente lo que está pasando, que tu cadena de caracteres se corta en el X"00" porque se piensa que no hay nada más detrás de ello. :piensa:

¿Puedes publicar el código VB para ver cómo lo haces?

drvedia1981 10 de agosto de 2017 23:01

Hola kUk este es el código emite un tique de turnos por una impresora térmica epson tm-t20ii, te comento que lo solucione con una ocx echa en vb6 que manejo de power si interesa la subo con fuente pero tendrían que adaptarla a cada necesidad.
Saludos

Código VB:
  1. SerialCom.Output = Chr(27) & "a" & Chr(49)
  2. SerialCom.Output = Chr(29) & Chr(40) & Chr(76) & Chr(6) & Chr(0) & Chr(48) & Chr(69) & Chr(32) & Chr(32) & Chr(1) & Chr(1)
  3. SerialCom.Output = Chr(29) & "!" & Chr(37)
  4. SerialCom.Output = "A-001" & Chr(10)
  5. SerialCom.Output = Chr(29) & "!" & Chr(0)
  6. SerialCom.Output = Chr(27) & "!" & Chr(17) & "Por favor espere el llamado en pantalla   20/07/2017 13:39" & Chr(10) & Chr(10) & Chr(27) & "!" & Chr(0)
  7. SerialCom.Output = Chr(29) & "h" & Chr(40)
  8. SerialCom.Output = Chr(29) & "w" & Chr(2)
  9. SerialCom.Output = Chr(29) & "H" & Chr(0)
  10. SerialCom.Output = Chr(29) & Chr(107) & Chr(4) & "A-125" & Chr(0)
  11. SerialCom.Output = Chr(27) & "a" & Chr(48)

Kuk 11 de agosto de 2017 08:59

drvedia1981, hace poco alguien tuvo un problema parecido... Sería interesante resolverlo.

Oye, y si intentas pasar el valor directamente en el INVOKE o CALL haciendo:

Código COBOL:
  1.      ... USING BY CONTENT X"1D284C0600304520200101"

¿Puedes intentarlo a ver qué pasa?

drvedia1981 12 de agosto de 2017 04:18

Hola enviando la cadena completa como me decias ... USING BY CONTENT X"1D284C0600304520200101" es lo mismo llega hasta el 06 y se detiene el envio, como te comente lo pude resolver por otro lado pero es raro parece no se puede.
Saludos y gracias por la ayuda

Kuk 18 de agosto de 2017 09:15

Cita:

Citación del post de drvedia1981 (Mensaje 3389)
si interesa la subo con fuente pero tendrían que adaptarla a cada necesidad.

Sí súbelo todo por aquí, seguro que a alguien le servirá. ;)


La franja horaria es GMT +2. Ahora son las 23:46.

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