Ver la Versión Completa : [Sintaxis] Codigo Ean 13
Breew
20 de septiembre de 2018, 16:22
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
01 BARRAS.
02 FILLER PIC X VALUE "*".
02 COD-B PIC X(16).
02 FILLER PIC X VALUE "*".
PROCEDURE DIVISION.
MOVE POW-TEXT OF CMTEXT45 TO COD.
INSPECT cod REPLACING ALL " " BY "$".
INSPECT cod REPLACING ALL "$$" BY " ".
INSPECT cod REPLACING ALL "$ " BY " ".
INSPECT cod REPLACING ALL " $" BY " ".
INSPECT cod REPLACING ALL "$" BY " ".
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:
INSPECT cod REPLACING ALL " " BY "$".
Y lo último es:
INSPECT cod REPLACING ALL "$" BY " ".
Volvemos a la situación del principio, no? :piensa:
Breew
20 de septiembre de 2018, 22:31
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
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
************************************************** ****************
* TABLAS PARA EL CODIGO DE BARRAS EAN-13 *
77 CODIGO-AUX PIC X(13).
01 DIGITOS REDEFINES CODIGO-AUX.
03 DIGITO-1 PIC 9(1).
03 DIGITO-2 PIC 9(1).
03 DIGITO-3 PIC 9(1).
03 DIGITO-4 PIC 9(1).
03 DIGITO-5 PIC 9(1).
03 DIGITO-6 PIC 9(1).
03 DIGITO-7 PIC 9(1).
03 DIGITO-8 PIC 9(1).
03 DIGITO-9 PIC 9(1).
03 DIGITO-10 PIC 9(1).
03 DIGITO-11 PIC 9(1).
03 DIGITO-12 PIC 9(1).
03 DIGITO-13 PIC 9(1).
77 PUNTERO-DE-TABLA-DE-VALORES PIC 99.
77 PUNTERO-STRING PIC 9(2).
77 EAN-13-X PIC X(15).
01 DATOS-TABLA-DE-TABLAS.
03 CERO PIC X(6) VALUE "111111".
03 UNO PIC X(6) VALUE "112122".
03 DOS PIC X(6) VALUE "112212".
03 TRES PIC X(6) VALUE "112221".
03 CUATRO PIC X(6) VALUE "121122".
03 CINCO PIC X(6) VALUE "122112".
03 SEIS PIC X(6) VALUE "122211".
03 SIETE PIC X(6) VALUE "121212".
03 OCHO PIC X(6) VALUE "121221".
03 NUEVE PIC X(6) VALUE "122121".
* Tabla para determinar el set de datos a utilizar.
01 TABLA-DE-TABLAS REDEFINES DATOS-TABLA-DE-TABLAS.
02 OCCURS 9.
03 TABLA PIC 9(1) OCCURS 6.
* 12345
01 DATOS-TABLAS-DE-VALORES.
03 PIC X(5) VALUE "AKa0K".
03 PIC X(5) VALUE "BLb1l".
03 PIC X(5) VALUE "CMc2m".
03 PIC X(5) VALUE "DNd3n".
03 PIC X(5) VALUE "EOe4o".
03 PIC X(5) VALUE "FPf5p".
03 PIC X(5) VALUE "GQg6q".
03 PIC X(5) VALUE "HRh7r".
03 PIC X(5) VALUE "ISi8s".
03 PIC X(5) VALUE "JTj9t".
01 TABLA-DE-VALORES REDEFINES DATOS-TABLAS-DE-VALORES.
02 VALOR OCCURS 9.
03 CARACTER PIC X(1) OCCURS 5.
77 COLUMNA-VALORES PIC 9.
77 FILA-VALORES PIC 99.
* *
************************************************** ****************
Y esta es la rutina
************************************************** ****************
GENERO-EAN-13.
INITIALIZE EAN-13-X.
MOVE CODBA-ARTI TO CODIGO-AUX.
MOVE DIGITO-1 TO EAN-13-X.
MOVE DIGITO-1 TO PUNTERO-DE-TABLA-DE-VALORES.
ADD 1 TO PUNTERO-DE-TABLA-DE-VALORES.
* 2° DIGITO.
MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 1) TO COLUMNA-VALORES
ADD 1 TO DIGITO-2 GIVING FILA-VALORES.
MOVE 2 TO PUNTERO-STRING.
STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
* 3° DIGITO.
MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 2) TO COLUMNA-VALORES
ADD 1 TO DIGITO-3 GIVING FILA-VALORES.
MOVE 3 TO PUNTERO-STRING.
STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
* 4° DIGITO.
MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 3) TO COLUMNA-VALORES
ADD 1 TO DIGITO-4 GIVING FILA-VALORES.
MOVE 4 TO PUNTERO-STRING.
STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
* 5° DIGITO.
MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 4) TO COLUMNA-VALORES
ADD 1 TO DIGITO-5 GIVING FILA-VALORES.
MOVE 5 TO PUNTERO-STRING.
STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
* 6° DIGITO.
MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 5) TO COLUMNA-VALORES
ADD 1 TO DIGITO-6 GIVING FILA-VALORES.
MOVE 6 TO PUNTERO-STRING.
STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
* 7° DIGITO.
MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 6) TO COLUMNA-VALORES
ADD 1 TO DIGITO-7 GIVING FILA-VALORES.
MOVE 7 TO PUNTERO-STRING.
STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
* SEPARADOR
MOVE 8 TO PUNTERO-STRING.
STRING "*"
DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
* EL RESTO ES DE LA TABLA C (3).
* 8° DIGITO.
MOVE 3 TO COLUMNA-VALORES
ADD 1 TO DIGITO-8 GIVING FILA-VALORES.
MOVE 9 TO PUNTERO-STRING.
STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
* 9° DIGITO.
MOVE 3 TO COLUMNA-VALORES
ADD 1 TO DIGITO-9 GIVING FILA-VALORES.
MOVE 10 TO PUNTERO-STRING.
STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
* 10° DIGITO.
MOVE 3 TO COLUMNA-VALORES
ADD 1 TO DIGITO-10 GIVING FILA-VALORES.
MOVE 11 TO PUNTERO-STRING.
STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
* 11° DIGITO.
MOVE 3 TO COLUMNA-VALORES
ADD 1 TO DIGITO-11 GIVING FILA-VALORES.
MOVE 12 TO PUNTERO-STRING.
STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
* 12° DIGITO.
MOVE 3 TO COLUMNA-VALORES
ADD 1 TO DIGITO-12 GIVING FILA-VALORES.
MOVE 13 TO PUNTERO-STRING.
STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
* 13° DIGITO.
MOVE 3 TO COLUMNA-VALORES
ADD 1 TO DIGITO-13 GIVING FILA-VALORES.
MOVE 14 TO PUNTERO-STRING.
STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
* CIERRE.
MOVE 15 TO PUNTERO-STRING.
STRING "+"
DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
MOVE EAN-13-X TO CODBA-AUX.
************************************************** ****************
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
Kuk, has probado algun ocx que funcione?
Mira este a ver, a mi me ha funcionado bien: [Aporte] FoxitReader - COBOL Foro (https://www.cobolforo.es/showthread.php?t=222)
Roger
22 de septiembre de 2018, 15:35
Siguiendo con el tema, Breew ¿Dices que la lectura es lenta? Esos códigos lo uso pegado en los
Productos en un Marquet y con el lector no he tenido problemas (a mas rayos de laser del lector la lectura es mejor) donde lo implemente tienen pistolas de lectura y también lector de mesa.
En cuanto a la impresión uso powerfom porque me permite usar número y letras en el código de barras lo ideal es solo números pero uno se topa con diferentes formas de códigos de barra.
El reportero cobview solo te permite números.
En cuanto a los Font de códigos de barras todos tienen diferentes formas de validación algunas más complejas que otras y esta la que uso es la más sencilla.
Breew
22 de septiembre de 2018, 23:35
Hola .
Te comento la historia.
Mi intencion inicial era poder leer el codigo de la pantalla de un pc/tablet, con un laser rojo desde un equipo de mesa.
No hay manera, ni con uno de esos de sobremesa que lanzan destellos en cuadricula, ni con uno de pistola.
Otra solucion era utilizar una aplicaccion de codigo de barras de un movil android. Eso si funciona, pero al ser el codigo mas largo, me tarda mas tiempo en enfocar y darme el ok, que con el ean13.
( seguramente es porque con el ean13 me caben fuentes mas grandes sin salirme de la pantala ).
Con el Ean13, y utilizando las tablas anteriores, el calculo me sale correcto, pero cuando lo meto en un cmtext con fuente ean13, el codigo no se dibuja bien. ( no se si es porque no calculo el codigo de control , simplemente lo copio )
Queria intentar imprimir en pantalla el codigo lo mas grande posible, utilizando un pdf, pero aun no se utilizar los ocx que habeis referido.
De todas maneras, tu solucion si que funciona.
Ahora mirare que sintaxis puedo utilizar para abrir el pdf con el foxitreader, porque no ha habido manera de poder leer el fichero pdf. ( por cierto, si alguno lo ha conseguido pues ..... :amigo:)
Breew
23 de septiembre de 2018, 10:18
Buenooooo.
He conseguido tambien que el codigo ean13 funcione correctamente.
El tipo de fuente era el problema. Con las tablas de Gusaiello y la fuente Code Ean13 en vez de otra que instale (Ean13), funciona a la perfeccion.
El tema del foxitreaderocx no me acaba de cargar en pantalla
INVOKE FoxitReaderOCX1 "OpenFile" USING "file.pdf" RETURNING ReturnValue
no se si necesito alguna otra linea de codigo.
ReturnValue me devuelve cero, pero aparentemente no veo en la pantalla ningun efecto.
Supongo que se abrira en el visor de FoxitReaderOCX1 o debo de volcarlo en algun campo?
.
Kuk
23 de septiembre de 2018, 10:58
Breew, tienes que pasarle la ruta completa del fichero. Y efectivamente, te va a mostrar el PDF en el marco del control FoxitReaderOCX1.
Breew
23 de septiembre de 2018, 17:54
Breew, tienes que pasarle la ruta completa del fichero. Y efectivamente, te va a mostrar el PDF en el marco del control FoxitReaderOCX1.
Hola Kuk.
Aparentemente no me surge efecto alguno.
He creado un CommandButton con la opcion click.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 strFilePath PIC X(34).
01 ReturnValue PIC 9(9) COMP-5.
PROCEDURE DIVISION.
INVOKE FoxitReaderOCX1 "OpenFile" USING "c:\Printer.PDF" RETURNING ReturnValue.
display ReturnValue
y nada, exista o no el fichero, me devuelve igualmente returnvalue 0 y el FoixitReaderOCX1 no pestañea nada.
Kuk
23 de septiembre de 2018, 21:41
Breew, el RC=0 significa que no encuentra el fichero. Si lo encuentra, devuelve un -1.
Prueba con otros directorios, siendo directorio raíz del SO, puede que sea problema de derechos.
Acabo de comprobarlo y a mi me funciona. Si sigue sin funcionar, puede que te falte alguna librería de la que tira el OCX.
Breew
24 de septiembre de 2018, 15:28
Hola Kuk.
No, me sigue sin funcionar, seguramente sera una libreria.
Al final he usado el ocx acropdf que este si que me funciona sin mas dolores de cabeza, me permite dirigir el listado a la impresora que necesite, y visualizar un pdf.
Gracias a todos.
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.