Como llamar un registro por código de barra


([N1] levip) #1

Hola compañeros
Pregunto y si alguien puede hecharme una mano de antemano gracias, la pregunta es como puedo llamar un registro por código de barra EAN13, teniando en cuenta que el campo de este solo contiene 12 caracteres ya que el otro pues es calculado.

La cuestion es que en el formulario donde esta el campo del codigo de barra al digitar el codigo de 12 digitos no hay problema, pero cuando se usa una pistola este leera 13 digitos y por ende el producto no sera encontrado.

Saludos


([N3] NexusFireMan) #2

Buenos días @levip

Has probado a cortar la cadena si supera los 12 caracteres?

Es decir, la búsqueda la realizas sobre la variable que contiene el código de barras, si antes de lanzar la búsqueda compruebas que esta variable tenga 12 caracteres y si tiene 13 eliminas el ultimo carácter, que seguramente sea un retorno de carro, es posible que soluciones tu problema.

Un saludo.


([N2] Esfero) #3

Hola levin, puedes aplicar varias estrategias:
1./ configurar los lectores de códigos de barras para que te devuelva el código sin el dígito de control (obviamente el lector te debe permitir hacer este tipo de configuración)
2./ comprobar solo los 12 primeros dígitos como te comenta NexusFireman
y si quieres comprobar la lectura, calculas el dígito de control con una función y compruebas que te coincida con ese 13 número que te devuelve la lectura
Ejemplo de la función de cálculo:
(https://es.m.wikipedia.org/wiki/European_Article_Number)


([N1] levip) #4

Hola y gracias a los que respondieron

Sera mucho pedir, pero como hago lo que me indican, no soy muy experto que digamos pero alli vamos, con respecto a la lectora creo que no se le puede configurar ya que es una chinita, y lo otro creo que el sistema deberia restar el ultimo numero cuando la lectora lea el codigo de esta manera esta bien en el sistema, ya que solo cuenta con 12 caracteres.

Y lo otro que no entiendo es de igual forma tengo este campo que solo acepte 12 caracteres, pero resulta que en tiempo de ejcución en el formulario puedo introducir muchos mas en el, entonces como deberia hacer para que solo me acepte 12 caracteres, en este caso el lector de codigo de barra me toma 13 digitos y en el sistema solo tiene 12.

En espera de su ayuda, gracias

Saludos


([N1] levip) #5

Hola, alguien que me ayude por favor


([N1] wikan) #6

Ten en cuenta que el campo aunque te des tamaño 12, debes mirar el valor inferior, el real de cuantos caracteres admite, te lo digo por si es ALFA40, ALFA64, etc.

El codigo real son 13, no se por que guardas solo 12, por eso se llama EAN13.

De todas formas, tal y como te he contestado en otro hilo, lee el código de barras en una variable para que puedas procesarlo. Incluso así podrás avisar al usuario si el código no existe.
En el caso que quieras mantener solo 12, podrías tener los 13 y ahorrarte tener que calcular el digito de control. De esa variable que contiene lo leído por el lector de códigos de barras, corta la variable despreciando el último carácter y haces el cargar lista o búsqueda.


([N1] levip) #7

Gracias por tu tiempo

Aqui esta el campo, como veras en la misma, solo tendria que aceptar 12, longitud 12 y su mazima es 12.
http://velneo.es/foros/files/2015/12/cod_bar_tabla.jpg

En cuando a porque 12 caracteres, sencillamente se guardan 12 porque en la mayoria de los casos el siguiente numero sera calculado en alguna funcion, tal es el caso que si yo pongo 13 caracteres entonces tendria un error cuandro agrege un codigo de barra a los informes con respecto al ZINT, el programita de codigo de barras.

Dado esta situacion entonces se usa 12, no tienes problemas para agregar campos con codigo de barra en los informes, ya que el programa te va a calcular el siguiente.

Pero en este caso en el campo que supustamente es de 12 y en el formulario acepta muchos caracteres mas, e alli el problema, lo cual entiendo yo que solo deberia aceptar los que en el campo diga.

Por eso quiero solventar esta situacion, de que solo 12 caracteres tiene que poderse escribir en el campo, ya sea escrito o con lectora, al menos asi lo pienso

saludos


([N3] pacosatu) #8

Hola levip.

Que yo sepa en un control Edición alfabética del formulario no se pueden introducir más caracteres que los definidos en el campo de la tabla. Por lo tanto es imposible introducir más de 12 caracteres en el control vinculado al campo COD_BAR.
Comprobado en sistema operativo Windows con Velneo 7.18 e introducción manual de los caracteres.
No lo he comprobado con un lector de código de Barras, me imagino que el tuyo será un USB que emula el teclado.

Otro tema es cómo gestionas los códigos de barras.
Como ya te han dicho los compañeros, guardar en el sistema un EAN13 con solo 12 dígitos es un poco extraño. Es como guardar un NIF sin la letra o una cuenta corriente sin el código de control.

Una cosa es generar un código de Barras EAN13, en este caso se introducen 12 dígitos y otra cosa es introducir un código de barras ya existente, y entonces necesitamos 13 dígitos para comprobar que no hay error en la entrada. Según esto Zint es un generador de códigos de barras.

En cualquier caso, revisa el formulario porque Sí que funciona el tamaño máximo en el control.

Saludos
Paco Satué


([N1] levip) #9

Gracias por los comentarios e intentos de ayuda, pero sigo sin resolver.

Estimado seh, si yo pongo el campo de 13 caracteres, lo que pasa en este caso es que cuando agregas una codigo de barra a algun informe con el ZINT este entonces te muestra un error de exceso de caracteres, supongo que porque el tendria que leer solamente 12 caracteres y pasa esto, pero con 12 todo bien en los informes.

Otro concepto es que no estoy gestionado los codigos de barra como tu lo mencionas con alguna funcion en especial

Y el otro caso es que en el la tabla el campo es de 12 caracteres y maximo tambien, pero en tiempo de jecucion este acepta mas, adjunto imagen para una mejor idea del asunto

Saludos


([N1] levip) #10

adjunto



([N3] pacosatu) #11

Hola levip.

  • En el formulario no estás editando el campo #COD_BAR sino el campo #ART.COD_BAR que es totalmente distinto.
  • El control #ART.COD_BAR no es un control de Edición sino un control de Visualización de campo del maestro.
  • El control #ART.COD_BAR no tiene comprobación de ancho, ni siquiera tiene Máscara para limitar a 12 dígitos.
  • El control #ART.COD_BAR es un campo del puntero a maestro y tiene un comportamiento especial.

Por lo tanto, no te queda más remedio que usar una variable local del formulario para recoger los 12 dígitos. Con la variable local ya podrás usar una máscara 999999999999 para la introducción de datos.

Saludos
Paco Satué


([N1] levip) #12

Hola seh, perdonad la ignorancia, como hago esto que me indicas siento esto que dices, osea cual seria el proceso que tendria que hacer para que en el campo solo pueda meter 12 digitos, aun si fuese con el teclado o lectora, disculpa la ignorancia

saludos


([N1] levip) #13

Hola amigos

Si bien es cierto que con el teclado he logrado reducir la cantidad de caracteres a introducir, sucede que con el scanner cuando este lee el codigo, lee 13 codigos y da un enter, osea cierra la ventana con este numero que porsupuesto no exito, dado que son de 12 digitos

adjunto

saludos



([N1] wikan) #14
  • Quita que el botón de aceptar sea por defecto.
  • Pon un botón que tenga esa tecla rápida y así lo anulas.

([N1] levip) #15

Hola, gracias

Pero asi deberia de funcionar al completar los datos, aceptar y llamar el productos, digo solamente, ahora que se podria que antes que dispare el boton aceptar este reste los digitos demas y deje solo los 12, que en este caso si llamaria el producto.

Ya probe al perder el enfoque, pero este funciona cuando se digita con el teclado, pero con la lectora, siempre deja mas de 12 caracteres y por supuesto llama el producto

saludos


([N4] carlitos) #16

Hola levip
creo que no tienes claro en concepto de EAN 13. Tal como te dicen arriba, el EAN13 siempre son 13 carácteres, y si el zint de da error es por que si pones un tipo de etiqueta EAN13 el dígito control (/el carácter 13) no está bien calculado. Un código de barras de 12 dígitos es un código UPC: https://www.codigoupc.com/preguntas-mas-frecuentes.html, y tiene poco que ver con el EAN…En mi opinión deberáis de trabajar siempre con 13 dígitos y no tendrías problemas.


([N1] wikan) #17

Perder el foco no te sirve por que hace el enter.

  • Puedes cambiar la configuración del lector para que haga un TAB.
  • En el botón Aceptar, ejecuta un manejador de evento que elimine el último digito y luego haces el Aceptar.

([N1] levip) #18

Estimado carlitos, tengo claro el EAN13, este es de 13 caracteres, pero el digito 13 siempre es calculado, no puedes inventarlo o ponerlo uno mismo, tal es el caso que si yo coloco 13 digitos, cuando quiera imprimir codigos de barra en algun reporte con el ZINT este dara un error, ya que el mismo solo necesita 12 digitos ya el otro como dige antes es calculado, y lo mismo pasa con la mayoria de sistemas donde todo lo que se agrega son 12 digitos

Ahora porbando lo que dice el amigo wikan, hay les cuento el resultado o al menos si solvente o no.

Pero la pregunta aqui con la sugerencia de wikan es como controlo un manejador de vento de otro, es decir el boton aceptar este en el formulario, pero el evento que controla los caracteres esta en otro separador

saludos


([N1] vgegeo) #19

@levip ,

Puedes, y creo que debes, trabajar en la base de datos con los 13 digitos.

Los tendras para la tabla, formulario, lector, etc…

Y si sabes que ZINT solo necesita los 12, pues le envias a ZINT los 12 digitos de la izquierda y que calcule el digito de control.

Pero en tu base de datos, trabaja con los 13, que si lo que te preocupa es el de control, solo deberas calcularo o comprobarlo en el momento que lo des de alta.


([N1] wikan) #20

No puedes usar eventos de otras vistas.
Duplica el manejador en el formulario principal o deja solo la comprobación en el formulario principal. Si tanta historia tienes con el código introduce un campo fómula alfabetico que te devuelva los 12 primeros.

Cuando trabajes con el lector, exportaciones o tengas que mostrarlo al usuario, usas el de 13 digitos que es lo que se “ve”
Cuando vayas a imprimir usas el campo fórmula.