Javascript y codigos de barra

2,053 views
Skip to first unread message

Mario Soto

unread,
Jul 22, 2010, 7:49:46 PM7/22/10
to ph...@googlegroups.com
Jóvenes tengo el siguiente problema:

Tengo que leer un código de barras en una aplicación web. Sencillo, el
código se mete en un campo de texto y el propio scanner al finalizar
pasa un enter.

Pero el escanner no pasa enters, ni tabs, ni nada mas que los números
y necesito saber cuando se ha terminado de leer el código de barras.

Ya intenté con el tamaño del codigo, pero hay códigos de diferentes
tamaños asi que no se puede.
Ya intenté con un código que pase al final (me metí a event y le di un
dump) y nada todo igual, lo que cambia es el codigo ascii del caracter
nada mas, incluso al final todo es igual.
Ya intenté ver si con keypress, keyup y keydown, pero el lector hace
como si se estuvieran apachando teclas del teclado y hace los 3
eventos en su secuencia habitual.

Y se me acabaron las ideas y/o estoy bloqueado. ¿Alguna idea que la
comunidad pueda aportarme?

Muchas gracias por su ayuda.


--
Mario Soto
can...@gmail.com
..._

Attakinsky

unread,
Jul 22, 2010, 8:05:44 PM7/22/10
to ph...@googlegroups.com
no te entiendo... si pasa una serie de numeros, osea algo como 43578943675893465894658936589736598747, eso no lo podes recibir en una variable y luego manipularlo a tu antojo???

o el problema es q lee, sigue leyendo, no para de leer???

Mario Soto

unread,
Jul 22, 2010, 10:33:13 PM7/22/10
to ph...@googlegroups.com
Algo asi. Lo que leo lo cargo a un textbox que al entrar y después de
cada operación le doy un focus. La cosa es que el escaner es como si
estuvieras apachando las teclas del teclado. De hecho yo creia que
cuando terminaba de leer insertaba un enter automático, y preparé para
que cuando el textbox recibiera un ascii 13 procesara la info. Ahora
tengo que encontrar que es lo que debo hacer en lugar del enter.

> --
> PHPGT :: Grupo de PHPeros de Guatemala
> email: ph...@googlegroups.com
> www: http://php.develsystems.com | http://groups.google.com/group/phpgt/

Mauricio Deleon

unread,
Jul 22, 2010, 11:55:47 PM7/22/10
to ph...@googlegroups.com
declarar
a =-1

y luego en el key release o como se llame en js
if(a!=-1) cleartimeout(a);
a = timeout ... con el codigo que vas a ejecutar y unos 200 ms o lo que consideres

perdon si no tiene ni sintaxis ni nada pero hace tiempo que no toco js, pero esa es la idea basica xD
Luis Déleon
Analista Desarrollador
Camara de Guatemalteca de Construcción
www.premioalaexcelencia.com
www.construguate.com

Francisco Nieves

unread,
Jul 23, 2010, 12:12:12 AM7/23/10
to ph...@googlegroups.com
Que no envie el enter al final depende del lector. Hay que
configurarlo para que lo haga. Normalmente en el manual vienen varios
codigos para configurar el lector.

Saludos

Francisco Nieves
"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs, and the Universe trying
to produce bigger and better idiots. So far, the Universe is winning.
" - Rich Cook

2010/7/22 Mauricio Deleon <lmdb...@gmail.com>:

Ulises Quinonez

unread,
Jul 23, 2010, 2:38:46 AM7/23/10
to ph...@googlegroups.com
sip, suena más a configuración del lector... R--ead the- F-ine- M-anual-...


2010/7/22 Francisco Nieves <fnie...@gmail.com>



--
Ing Ulises Quiñónez
SIEM Support Engineer
MFSI - 59378944

JAM

unread,
Jul 23, 2010, 4:26:28 AM7/23/10
to ph...@googlegroups.com
Coincido con Mauricio, los lectores de barras leen el código a una velocidad promedio, calculala con el código mas grande y pone timeouts, si es q leer el manual no funce..... jeje....

Saludos,

Douglas Francisco Yau Quan

unread,
Jul 23, 2010, 9:35:54 AM7/23/10
to ph...@googlegroups.com
Configura un carácter especial, digamos | como final de código en la lectora y te pegas al evento change del combo y cuando detectes ese carácter pues ya.

--
Enviado desde mi Gmail
logo_jam.png

Stuardo -StR- Rodríguez

unread,
Jul 23, 2010, 9:39:58 AM7/23/10
to ph...@googlegroups.com
No la cantidad de dígitos de los códigos de barras es la misma?   así como que lea 16 caracteres y haga el post automático?

Pero si, yo creo que es configuración de tu lector de barras


2010/7/23 Douglas Francisco Yau Quan <dougy...@gmail.com>
logo_jam.png

Mario Soto

unread,
Jul 23, 2010, 10:04:17 AM7/23/10
to ph...@googlegroups.com

Terrible pero debo confesarlo. Anoche estuve soñando con esa babosada y también se me ocurrió poner un timeout como me sugirió Mauricio.
Como dice Jam estaba pensando dejalo mas de 200ms, o talvez hacer un conteo cada 200ms y cuando llegue a 5 por ejemplo (1seg) ó a 10 (2seg) tirarlo automáticamente.

El problema con la configuración del lector y el RTFM es que no tengo acceso a configurarlo en cada máquina.... (suspiro) pues esa es la idea de que se haga web... (suspiro).

Igual voy a dejar el enter por si ocurre que tengo algún lector bien configurado :)

Douglas: El problema es que no tengo el control de todos los códigos, sino que ya vienen impresos y pegados en los productos.

Estudardo: No, los codigos de barras no vienen de un solo tamaño, aunque la mayoría tiene 12 dígitos y solo números, algunos códigos tiene 8 dígitos y otros tienen letras.

Además, el hecho que lo estén haciendo con código de barras implica que van a querer que yo genere los códigos de barras de los pedidos, órdenes etc (cosa que ya me sugirieron que investigue) y eso es fácil, consigo un ttf con esa fuente y creo una imagen, la pego en pdf o etc. Alli si voy a poner un caracter de control.

Voy a probar y con el timeout y les cuento.

Douglas Francisco Yau Quan

unread,
Jul 23, 2010, 10:16:23 AM7/23/10
to ph...@googlegroups.com
A la hora de configurarlo el lector le decís cual es el carácter de fin de linea, sino creo que el predeterminado es el de fin de linea


--
Enviado desde mi Gmail


--

Mario Soto

unread,
Jul 28, 2010, 1:17:20 PM7/28/10
to ph...@googlegroups.com
Resolví el clavo con un setInterval. Mando el código por si a alguien
le sirve. Solo busquen las variables globales. No uso objetos en esto.

$('#codigo').keypress(function(event){
if(!iniciado){
timer = setInterval('tiempo()',75);
iniciado = true;
}
contador = 0;

if (event.keyCode == '13') {
event.preventDefault();
codigo = $.trim($(this).val());
buscarCodigo();
}
});

function tiempo(){
contador++;
if(contador >= 10){
clearInterval(timer);
iniciado = false;
codigo = $.trim($('#codigo').val());
buscarCodigo();

Mauricio Deleon

unread,
Jul 28, 2010, 1:33:22 PM7/28/10
to ph...@googlegroups.com
me no comprender porque tu usar interval xD
me.logic(chucho) not found xD

si tenes un contador y un intervalo cada t pero siempre subis el contador y la unica vez que se activa una logica dentro del intervalo es hasta que el contador llega a un numero x, entonces te es lo mismo que hacer setTimeout(funcion,x*t);

aparte veo que segun tu logica podes tener un intervalo y si se presiona enter, no se detiene el intervalo.
Que raro programas mario ^_^

--
PHPGT :: Grupo de PHPeros de Guatemala
email: ph...@googlegroups.com
www:   http://php.develsystems.com | http://groups.google.com/group/phpgt/

Mario Soto

unread,
Jul 28, 2010, 2:18:28 PM7/28/10
to ph...@googlegroups.com
A ver pues.

Cuando el lector de código de barras lee algo lo hace en secuencia
rápida. Calcula el tiempo desde que se presionó la ultima tecla y si
el tiempo que pasa es X (intervalo x veces) activa la búsqueda. Ahora
lo que me decis del enter es un bug que se me había pasado por alto.
Hay que agregar
clearInterval(timer);
iniciado = false;
dentro del area donde se lee el enter. Luego limpio el intervalo para
que no siga haciendo busquedas cada vez que el intervalo sin presionar
la tecla suceda.

La diferencia entre el setInterval y setTimeOut es que el primero se
ejecuta hasta que se cierre la página o hasta el primer clearInterval.
El segundo se ejecuta una vez en el tiempo establecido. Si pusiera un
timeout cada vez que se presiona la tecla activaria la busqueda cada
vez que se cumpliera el tiempo para cada letra. La otra opcion sería
limpiar el timeout cada vez, pero esto puede tomar tiempo y si es en
una misma variable puede obstruir el clearTimeOut. En las pruebas que
hice me sucedió que no limpiaba correctamente y si escribia 5
caracteres me realizaba hasta 4 busquedas porque no limpiaba el
timeout. Es mas fácil trabajarlo con una variable porque hay tiempo
entre que se presiona una tecla y ejecuta la acción.

Hice ensayos y estuve a prueba y error. Hay varias formas de hacer las
cosas muchas veces y que no le mirés lógica no quiere decir que no
funciones. Mi explicación del porqué lo hice así alli está.

Gracias por el bug que encontraste y que ahora corrijo.

--
Mario Soto
can...@gmail.com
..._

Attakinsky

unread,
Jul 28, 2010, 2:23:21 PM7/28/10
to ph...@googlegroups.com
...y a mi tía Carlota le dejo el gato para que lo cuide como solo ella sabe

.Manglio Reyes

unread,
Jul 28, 2010, 2:24:58 PM7/28/10
to ph...@googlegroups.com
jajaja
asdfklasdfjkasdfjkasjdfjklasdf

2010/7/28 Attakinsky <attak...@gmail.com>
...y a mi tía Carlota le dejo el gato para que lo cuide como solo ella sabe

--

Mario Soto

unread,
Jul 28, 2010, 2:28:36 PM7/28/10
to ph...@googlegroups.com
Releyendo mis palabras creo que soné como un grosero/abusivo. No es
esa mi intención. Si a alguien no le sonó asi, sea feliz.

.Manglio Reyes

unread,
Jul 28, 2010, 2:59:17 PM7/28/10
to ph...@googlegroups.com
no os ahueveis,
la lista no es para espiritus debiles
ademas con cada ayudita que le dan a uno se tiene que acostumbrar a que siempre
va cierta tiradera de popo fino aunque no en todos los casos



2010/7/28 Mario Soto <can...@gmail.com>

Mauricio Deleon

unread,
Jul 28, 2010, 3:27:38 PM7/28/10
to ph...@googlegroups.com
ta bueno mario pero no te enojes ya no te digo nada ^_^

--

Luis Fernando Macias Sevilla

unread,
May 28, 2015, 11:24:09 AM5/28/15
to ph...@googlegroups.com, in...@cancuen.net
$('#UUID').typing({
    start: function (event, $elem) {
$(document).CPreload();  //cerramos el loading
    },
    stop: function (event, $elem) {
buscar();
    },
    delay: 400
});
Reply all
Reply to author
Forward
0 new messages