Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Sintaxis] Codigo Ean 13 (https://www.cobolforo.es/showthread.php?t=890)

Breew 20 de septiembre de 2018 16:22

Codigo Ean 13
 
Hola.

Intento crear un campo con codigo de barras ean-13 , pero no consigo que lo lea el scaner.
Se que leerlo en pantalla, requiere un escaner especial, pero lo que me tiene mosca , es que si paso el codigo a papel, tampoco lo lee.
Utilizo una fuente que he descargado que se llama ean-13.ttf pero s simple vista, lo veo diferente al codigo del envase.

Si alguno ha intentado hacer etiquetas ean13, por favor indicarme con que font lo habeis conseguido, o bien como lo haceis.

Muchisimas Gracias

Kuk 20 de septiembre de 2018 20:11

Breew, pasa más bien por PowerFORM ;)

Roger 20 de septiembre de 2018 20:58

Hola Breew

Utilizo el font Bar-Code 39 y para la impresión uso
Código COBOL:
  1.  01 BARRAS.
  2.     02 FILLER PIC X VALUE "*".
  3.     02 COD-B PIC X(16).
  4.     02 FILLER PIC X VALUE "*".
  5.  PROCEDURE       DIVISION.
  6.       MOVE POW-TEXT OF CMTEXT45 TO COD.
  7.       INSPECT cod REPLACING ALL " " BY "$".
  8.       INSPECT cod REPLACING ALL "$$" BY "  ".
  9.       INSPECT cod REPLACING ALL "$ " BY "  ".
  10.       INSPECT cod REPLACING ALL " $" BY "  ".
  11.       INSPECT cod REPLACING ALL "$" BY " ".
  12.       MOVE COD TO COD-B.

Si tienes codigos menores a 16 caracteres eliminas los campos en blanco de esta manera el lector
los leera poniendo un asterisco al comienzo y final.

Kuk 20 de septiembre de 2018 22:07

Roger, puedes explicar qué hacen exactamente los INSPECT en este caso? Porque si lo primero que hacemos es:

Código COBOL:
  1.       INSPECT cod REPLACING ALL " " BY "$".

Y lo último es:

Código COBOL:
  1.       INSPECT cod REPLACING ALL "$" BY " ".

Volvemos a la situación del principio, no? :piensa:

Breew 20 de septiembre de 2018 22:31

Cita:

Citación del post de Kuk (Mensaje 4500)
Breew, pasa más bien por PowerFORM ;)

Hola Kuk.
Si, lo habia pensado, pero es que la primera intencion que tenia era poder leer el codigo en la pantalla con un scaner o un telefono movil.
Pero aparentemente con la fuente que utilizo, veo una diferencia enorme con la etiqueta .
El caso es que queria saber que fuente utilizais en la pantalla o si quizas utilizais algun control especifico. La impresion la he hecho desde una CMtable con la opcion printable.

Roger 20 de septiembre de 2018 22:52

Kuk
Código COBOL:
  1. INSPECT cod REPLACING ALL "$" BY " ".
esa linea no va.

Los codigos de barras de las etiquetas por defecto son 13.
puse 16 por una exigencia de la empresa.

Gusaiello 21 de septiembre de 2018 19:23

Yo creo que la diferencia que ves entre lo que aparece en pantalla y la etiqueta es por que el código EAN-13 no es solo cambiar de fuente, es una conversón de cada uno de los dígitos en función de unas tablas.

Eso funciona con el código 3 de 9, al cual solo hay que agregarle las mascas de inicio y fin que generalmente son asteriscos.

En el caso del EAN-13 las cosas son diferentes, por ejemplo el número 1234567890128 hay que convertirlo (mediante las tablas anteriormente mencionadas) en : 1CDOFQR*ijabci+

Esto es independiente del tamaño del campo, es decir que no importa si tu campo es de mas de 13 dígitos.

Estas son las tablas que vas a necesitar
Código COBOL:
  1.      ******************************************************************
  2.      *            TABLAS PARA EL CODIGO DE BARRAS EAN-13              *
  3.  
  4.        77  CODIGO-AUX           PIC X(13).
  5.        01  DIGITOS REDEFINES CODIGO-AUX.
  6.            03 DIGITO-1          PIC 9(1).
  7.            03 DIGITO-2          PIC 9(1).
  8.            03 DIGITO-3          PIC 9(1).
  9.            03 DIGITO-4          PIC 9(1).
  10.            03 DIGITO-5          PIC 9(1).
  11.            03 DIGITO-6          PIC 9(1).
  12.            03 DIGITO-7          PIC 9(1).
  13.            03 DIGITO-8          PIC 9(1).
  14.            03 DIGITO-9          PIC 9(1).
  15.            03 DIGITO-10         PIC 9(1).
  16.            03 DIGITO-11         PIC 9(1).
  17.            03 DIGITO-12         PIC 9(1).
  18.            03 DIGITO-13         PIC 9(1).
  19.  
  20.        77  PUNTERO-DE-TABLA-DE-VALORES PIC 99.
  21.        77  PUNTERO-STRING       PIC 9(2).
  22.  
  23.        77  EAN-13-X             PIC X(15).
  24.  
  25.        01  DATOS-TABLA-DE-TABLAS.
  26.            03 CERO         PIC X(6) VALUE "111111".
  27.            03 UNO          PIC X(6) VALUE "112122".
  28.            03 DOS          PIC X(6) VALUE "112212".
  29.            03 TRES         PIC X(6) VALUE "112221".
  30.            03 CUATRO       PIC X(6) VALUE "121122".
  31.            03 CINCO        PIC X(6) VALUE "122112".
  32.            03 SEIS         PIC X(6) VALUE "122211".
  33.            03 SIETE        PIC X(6) VALUE "121212".
  34.            03 OCHO         PIC X(6) VALUE "121221".
  35.            03 NUEVE        PIC X(6) VALUE "122121".
  36.  
  37.       *  Tabla para determinar el set de datos a utilizar.
  38.        01  TABLA-DE-TABLAS REDEFINES DATOS-TABLA-DE-TABLAS.
  39.            02              OCCURS 9.
  40.               03 TABLA     PIC 9(1) OCCURS 6.
  41.  
  42.       *                                    12345
  43.        01  DATOS-TABLAS-DE-VALORES.
  44.            03              PIC X(5) VALUE "AKa0K".
  45.            03              PIC X(5) VALUE "BLb1l".
  46.            03              PIC X(5) VALUE "CMc2m".
  47.            03              PIC X(5) VALUE "DNd3n".
  48.            03              PIC X(5) VALUE "EOe4o".
  49.            03              PIC X(5) VALUE "FPf5p".
  50.            03              PIC X(5) VALUE "GQg6q".
  51.            03              PIC X(5) VALUE "HRh7r".
  52.            03              PIC X(5) VALUE "ISi8s".
  53.            03              PIC X(5) VALUE "JTj9t".
  54.  
  55.        01  TABLA-DE-VALORES REDEFINES DATOS-TABLAS-DE-VALORES.
  56.            02 VALOR        OCCURS 9.
  57.               03 CARACTER  PIC X(1) OCCURS 5.
  58.  
  59.        77  COLUMNA-VALORES PIC 9.
  60.        77  FILA-VALORES    PIC 99.
  61.      *                                                                *
  62.      ******************************************************************


Y esta es la rutina

Código COBOL:
  1.      ******************************************************************
  2.        GENERO-EAN-13.
  3.            INITIALIZE EAN-13-X.
  4.            MOVE CODBA-ARTI TO CODIGO-AUX.
  5.            MOVE DIGITO-1   TO EAN-13-X.
  6.  
  7.            MOVE DIGITO-1  TO PUNTERO-DE-TABLA-DE-VALORES.
  8.            ADD  1         TO PUNTERO-DE-TABLA-DE-VALORES.
  9.  
  10.       *    2° DIGITO.
  11.            MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 1) TO COLUMNA-VALORES
  12.            ADD  1 TO DIGITO-2 GIVING FILA-VALORES.
  13.            MOVE 2 TO PUNTERO-STRING.
  14.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  15.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  16.  
  17.       *    3° DIGITO.
  18.            MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 2) TO COLUMNA-VALORES
  19.            ADD  1 TO DIGITO-3 GIVING FILA-VALORES.
  20.            MOVE 3 TO PUNTERO-STRING.
  21.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  22.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  23.  
  24.       *    4° DIGITO.
  25.            MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 3) TO COLUMNA-VALORES
  26.            ADD  1 TO DIGITO-4 GIVING FILA-VALORES.
  27.            MOVE 4 TO PUNTERO-STRING.
  28.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  29.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  30.  
  31.       *    5° DIGITO.
  32.            MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 4) TO COLUMNA-VALORES
  33.            ADD  1 TO DIGITO-5 GIVING FILA-VALORES.
  34.            MOVE 5 TO PUNTERO-STRING.
  35.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  36.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  37.  
  38.       *    6° DIGITO.
  39.            MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 5) TO COLUMNA-VALORES
  40.            ADD  1 TO DIGITO-6 GIVING FILA-VALORES.
  41.            MOVE 6 TO PUNTERO-STRING.
  42.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  43.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  44.  
  45.       *    7° DIGITO.
  46.            MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 6) TO COLUMNA-VALORES
  47.            ADD  1 TO DIGITO-7 GIVING FILA-VALORES.
  48.            MOVE 7 TO PUNTERO-STRING.
  49.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  50.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  51.  
  52.       *    SEPARADOR
  53.            MOVE 8 TO PUNTERO-STRING.
  54.            STRING "*"
  55.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  56.  
  57.       *    EL RESTO ES DE LA TABLA C (3).
  58.      *    8° DIGITO.
  59.            MOVE  3 TO COLUMNA-VALORES
  60.            ADD   1 TO DIGITO-8 GIVING FILA-VALORES.
  61.            MOVE  9 TO PUNTERO-STRING.
  62.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  63.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  64.  
  65.       *    9° DIGITO.
  66.            MOVE  3 TO COLUMNA-VALORES
  67.            ADD   1 TO DIGITO-9 GIVING FILA-VALORES.
  68.            MOVE 10 TO PUNTERO-STRING.
  69.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  70.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  71.  
  72.       *    10° DIGITO.
  73.            MOVE  3 TO COLUMNA-VALORES
  74.            ADD   1 TO DIGITO-10 GIVING FILA-VALORES.
  75.            MOVE 11 TO PUNTERO-STRING.
  76.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  77.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  78.  
  79.       *    11° DIGITO.
  80.            MOVE  3 TO COLUMNA-VALORES
  81.            ADD   1 TO DIGITO-11 GIVING FILA-VALORES.
  82.            MOVE 12 TO PUNTERO-STRING.
  83.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  84.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  85.  
  86.       *    12° DIGITO.
  87.            MOVE  3 TO COLUMNA-VALORES
  88.            ADD   1 TO DIGITO-12 GIVING FILA-VALORES.
  89.            MOVE 13 TO PUNTERO-STRING.
  90.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  91.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  92.  
  93.       *    13° DIGITO.
  94.            MOVE  3 TO COLUMNA-VALORES
  95.            ADD   1 TO DIGITO-13 GIVING FILA-VALORES.
  96.            MOVE 14 TO PUNTERO-STRING.
  97.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  98.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  99.  
  100.       *    CIERRE.
  101.            MOVE 15 TO PUNTERO-STRING.
  102.            STRING "+"
  103.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  104.  
  105.            MOVE EAN-13-X TO CODBA-AUX.
  106.  
  107.       ******************************************************************


El digito verificador se obtiene :
Numerar los digitos de derecha a izquierda
Sumar los de las posiciones pares.(x)
Sumar los de las posiciones impares (y)
Calcular z=x*3y
Buscar el primer numero divisible por diez siquiente a este resultado (m)
El verivicador es m-z.

Por ejemplo el verificador de 123456789012 es 8
La suma de los digitos pares da 26
La suma de los impares da 22
26+22*3=92
100-92=8

Espero te sirva.

Kuk 21 de septiembre de 2018 19:35

Breew, yo en su día lo único que necesitaba era poder imprimir pegatinas con códigos de barras. Usar PowerFORM para lectura de pantalla lo veo más complicado, porque la salida de PowerFORM no se puede poner en un control visual. A lo mejor se podría intentar generar el informe en PowerFORM, convertirlo en PDF y mediante una OCX que lee dicho formato mostrarlo en pantalla. No es una solución ideal pero puede funcionar.

Breew 21 de septiembre de 2018 22:57

Hola.

He probado la solucion de Roger y funciona , pero es sumamente lento, creo que es debido al tamaño del codigo que hace que el lector tarde mucho en fijarlo todo sobre la pantalla.

Intentare el algoritmo de Gusaiello para crear un CmText y comprobar si el lector lo interpreta en la pantalla.

Y tambien lo imprimire en un pdf.
Kuk, has probado algun ocx que funcione?

Kuk 22 de septiembre de 2018 11:08

Cita:

Citación del post de Breew (Mensaje 4509)
Kuk, has probado algun ocx que funcione?

Mira este a ver, a mi me ha funcionado bien: [Aporte] FoxitReader - COBOL Foro


La franja horaria es GMT +2. Ahora son las 14:01.

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