FoxPro/Visual FoxPro - lector de codigo ayuda

   
Vista:

lector de codigo ayuda

Publicado por mario (90 intervenciones) el 13/11/2009 13:02:24
hola a todos tengo un problema estoy implementando en mi formulario de factura el uso del codigo de barra yo uso text para mostrar el codigo capturado y salta al text de cantidad una ves cargada la cantidad el resultado se acutaliza en una grilla: codigo,descripcion,precio, totales, todo funciona muy bien pero cuando genero el ejecutable no me funciona paso el lector por el codigo del producto parece que reconoce pero va directo al text de cantidad y luego al text del codigo de producto y en la grilla aparece todo en blanco, si alguien me puede ayudar por favor urgente que mañana devo entregar mis actualizaciones graciasssssss
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:lector de codigo ayuda

Publicado por xx (378 intervenciones) el 13/11/2009 19:34:02
Bueno lastimosamente no das mayores datos, pero si utilizas un lector usb o ps2 que cuando funciona reemplaza al teclado, pues entonces debes saber que dependiendo de la configuracion o mejor dicho como este programado el lector generalmente agrega un cambio de linea y un retorno de carro lf+cr lo que equivale a una pulsada de enter, y debes dar el foco al control sobre el cual deseas que capture el codigo extraer el codigo y validarlo para luego registrarlo, postea mayores datos para ayuda de mejor calidad.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:lector de codigo ayuda

Publicado por mario (90 intervenciones) el 14/11/2009 14:23:22
hola yo uso un lector usb(pistola, no se como esta programado el lector) yo e programado en un text(losfocus) la captura del codigo funciona muy bien me trae el codigo, en otro text me trae el precio, y en otro text la descripcion, una ves que me captura estos datos va al text cantidad para cargar la cantidad de productos a vender y luego me refleja todo a un grid, todo funciona perfecto aparentemente pero cuando genero el ejecutable es mi problema pues el captura todo pero no se detiene en el text cantidad y carga los datos al grid con cantidad "0", no se que mas hacer pues ya estuve revisando vastante y no encuentro el problema, espero tu ayuda y desde ya gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:lector de codigo ayuda

Publicado por xx (378 intervenciones) el 14/11/2009 22:20:30
Para saber si tu codigo de barras es leido correctamente prueba lo siguiente abre una consola cmd.exe desde el inicio (MS-DOS) y acto seguido realiza el escaneo deberia pasar lo sgte:

c:\windows\system32\032154654654
No se reconoce el comando interno o externo programa o archivo ...

esto significa que la lectura se produce correctamente, y acto seguido inserta un caracter de cambio de linea y seguido un retorno de carro chr(10) +chr(13), de lo contrario si no sale el error arriba mencionado pero si algun numero o letra quiere decir que tu lector no esta programado para emitir un cambio de linea y retorno de carro, y si no sale nada ni siquiera un digito ni letra significa que tu lector no esta capturando nada.

El lector de codigo de barras simplemente lo que hace por ti es teclear los digitos y/o letras que esta impreso en el codigo de barras, tus codigos de barras deberian estar compuestos de el caracter * +seguidos de numeros o letras y finalizando con otro * quedando: *01654654* dependiendo de la fuente que utilizas, quizas te permita meter ABCDEFGHIJKLMNOPQRSTUVZ y/o sus minusculas.

Sugerencia desarrolla tu aplicacion sin el lector una vez que funciona el EXE sin problemas pues prueba con el lector, ya que este no representa ningun cambio lo unico que hace es reemplaza al teclado en el momento de escanear o sea digita por ti el codigo.

El lector por lo menos el metrologic tiene un manual en la que estan unos codigos de barras impresos especiales que utilizas para programarlo, permitiendote cambiar por ejemplo el tiempo de espera entre escaneo y escaneo, el agregado de cambio de linea y retorno de carro al final entre otras cosas que no recuerdo.

Fijate que en el LostFocus() no puedes cambiar nada en lo que refiere a enviar foco a otro control y/o validar alguna entrada, generalmente se utiliza solo para dormir y despertar controles que esten en el formulario, quizas alli este tu problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:lector de codigo ayuda

Publicado por mauricio mauriciojpc@hotmail.com (2 intervenciones) el 18/05/2011 23:40:36
bueno, me podrias mandar el codigo fuente a mi correo yo lo reviso y te lo envio nuevamente
de igual manera si ya corregiste el error no importa enviame el codigo fuente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:lector de codigo ayuda

Publicado por xx (378 intervenciones) el 14/11/2009 22:25:20
Pd: Fijate una cosa importante que FUNCIONE en el IDE del foxpro no te garantiza que funcione de forma independiente en el EXE si este es tu problema se traduce en que estas codificando mal tus pantallas, sobre todo en los eventos de los controles deberias tener en cuenta el READ EVENTS, CLEAR EVENTS y probar bien tus pantallas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:lector de codigo ayuda

Publicado por mario (3 intervenciones) el 16/11/2009 14:45:51
hola amigo xx te comento lo que e podido realizar, la carga manual del codigo de producto funciona sin problema y cuando le paso el lector funciona me trae el codigo del producto, la descripcion y el precio, pero el debe detenerse en cantidad para poder cargar pero eso no pasa el directamente pasa el text de cantidad y me refreja ya en la grilla con la cantidad en "0" este es ahora mi problema desde ya muchas gracias .
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:lector de codigo ayuda

Publicado por xx (378 intervenciones) el 17/11/2009 01:10:40
Correcto si haces la prueba que te mencione podrias determinar si agrega un ENTER al terminar de leer el codigo de barras.

Tambien deberias tener en cuenta que el lector lo unico que hace es teclear letra por letra el codigo de barras por ti, esto se entiende asi: si tu codigo de barras tiene el codigo 123456 o sea para imprimir el codigo usaste *123456* y el lector te escanea (teclea por ti) 123456 + ENTER en el primer cuadro de edicion habilitado.

Traducido esto significa que no creo que el lector sea responsable del salto del text de cantidad.
Quizas tu problema este en la validacion del control cantidad que admite cero o quizas cuando escanees el text cantidad nunca recibe el foco o no este habilitado.

Haz lo siguiente consigue un codigo de barras impreso, luego haz la prueba sin el lector carga tu pantalla de ventas y simula una lectura del codigo de barras es decir digita letra por letra el codigo de barra desde el teclado y al final pulsa ENTER y verificaras que sucede lo mismo que con el lector, salvo que utilices otra pantalla para el escaneo.

Lo mas dificil es depurar formularios multiples, yo tambien pase por muchos problemas cuando realice mi pantalla de ventas, te cuento como resolvi todos mis problemas relacionados con los frustrantes eventos, coloque estas sentencias al iniciar mi FORM principal

SET TEXTMERGE TO "DEBUG.TXT"
SET TEXTMERGE ON

en cada evento del control que queria verificar o variable o al crear un objeto ponia \\THISFORM:ACTIVATE o algun texto que identificase al evento para saber que ha sido lanzado, podrias poner tambien en tu control text cantidad en GOTFOCUS, VALID y otros metodos que tengas supeditados.

y al descargar mi formulario en el evento RELEASE o DESTROY o UNLOAD
SET TEXTMERGE TO
SET TEXTMERGE OFF

entonces ejecutaba mis formularios desde el EXE y una vez finalizado lo inspeccionaba en el archivo DEBUG.TXT con algun editor de texto o con el modi comm debug.txt del VFP.

Si te interesa puedes postear parte del codigo donde radica el problema para revisarlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:lector de codigo ayuda

Publicado por mario (90 intervenciones) el 17/11/2009 15:30:51
hola xx, antes que nada muchas gracias por la ayuda que me estas dando te comento que seguido tus consejos yo e simulado una venta desde el ejecutable el codigo del producto lo ingrese manualmente y funciona correctamente esto significa que al ingresar el codigo y darle enter el va y se posiciona en cantidad esperando que se carge una cantidad pero cuando paso el lector de codigo no funciona es como si el lector estuviera dando dos enter porque carga el codigo, luego va a la cantidad y automaticamente pasa reconociendo el valor "0" que tiene la cantidad, mira te envio la marca del lector que estoy usando kaiomy hbs-310 haber si es el lector el del problema porque al comprar este lector no me trajo nada de manual, una ves mas gracias amigo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:lector de codigo ayuda

Publicado por xx (378 intervenciones) el 17/11/2009 18:55:49
Pues puede que si este dando dos ENTER, para confirmarlo vuelve a la pantalla de DOS, esto es inicio->ejecutar->CMD.EXE y una vez en la consola sin tocar ninguna tecla del teclado, escanea un codigo de barra y en caso de que obtengas dos enter deberias ver algo asi (obviamente los nros escaneados no coincidiran) pero si lo demas:
**********************************************************************************
Microsoft Windows XP [Versión 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\ADMIN>051454654
"051454654" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.

C:\Documents and Settings\ADMIN>
C:\Documents and Settings\ADMIN>
**********************************************************************************

y en caso que de solo un enter deberias ver algo asi:
**********************************************************************************
Microsoft Windows XP [Versión 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\ADMIN>051454654
"051454654" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.

C:\Documents and Settings\ADMIN>
**********************************************************************************

en todo caso la programación del lector de barras es bastante simple una vez que tengas el manual por supuesto, y consiste simplemente en escanear tres codigos de barra 1 el que te permite entrar en la programacion, 2 la opcion que deseas setear y 3 el codigo de barras que te permite grabar la opcion elegida, hablo solo del metrologic que es el unico que conozco.

Pero para estar seguro que caracteres envia tu escaner luego del codigo de barras prueba ejecutar este bucle en un PRG desde el VFP:

*// captura todas las pulsaciones de teclas y luego sale cuando se pulsa escape
MESSAGEBOX( [PROBA TU LECTOR AHORA, Y LUEGO PULSA ESCAPE], 64, [MESSAGE] )
_Xstr=""
_Xkey=0
_Bstr=""
DO WHILE .T.
_Xkey=INKEY(0)
IF _Xkey==27
EXIT
ENDIF
_Xstr=_Xstr + "CHR("+STR(_Xkey,3,0)+")+"
_Bstr=_Bstr + CHR(_Xkey)
ENDDO
WAIT _Xstr+CHR(13)+_Bstr WINDOWS

Te mostrara la secuencia de caracteres que es recibido desde el escaner, obviamente no debes probar con un codigo de barras demasiado extenso, no te olvides que al finalizar el escaneo debes pulsar ESCAPE para que el programa finalice.

Creo que de mas esta decirte que el ENTER es chr(13) y line feed es chr(10).

Porque no googleas la marca y modelo de tu lector quizas puedas imprimir el manual y los codigos de barra para programación, quizas desde la pagina del fabricante u otros.

suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:lector de codigo ayuda

Publicado por mario (90 intervenciones) el 18/11/2009 14:33:27
hola xx una ves mas gracias por tu ayuda mira en encuentro el problema e probado lo que me aconsejaste el lector da solo un enter segun lo que me mostraste y creo que la solucion es enviandote la programacion que estoy realizando pues creo que algo que no me estoy dando cuenta esta mal, aqui esta estare esperando si encuentras algun problema

este codigo uso en el Losfocus del txtcodproducto

If !Empty(Thisform.txtcod_producto.Value)
select producto
SET STEP ON
go top
locate for alltr(cod_producto) == alltr(thisform.txtcod_producto.value)
if found()
thisform.txtprod_precioventa.value = producto.prod_precioventa
thisform.text6.value = producto.prod_descripcion
thisform.text7.value = producto.talle
thisform.txtcantidad.Value = 1
thisform.txtcantidad.SetFocus
endif
endif


este codigo uso en el losfocus del txtcantidad
select producto
go top
locate for alltr(cod_producto) == alltr(thisform.txtcod_producto.value)
if found()
else
res = messagebox("El Codigo de Producto no se encuentra...Cancelar Operación ?",4+32+256,"ATENCIÓN")
IF res = 6
thisform.botones.cancelar.click
ELSE
ThisForm.txtcod_producto.value = ""

SELECT aux_ven
DELETE
NODEFAULT
thisform.Refresh ()
endif
endif

** CALCULAR CANTIDAD EXISTENTE DE PRODUCTO PARA VALIDAR **
ok = SQLEXEC(conectar,'select * from STOCK', 'STOCK')
SELECT STOCK
GO TOP
DO WHILE !EOF()
* IF aux_ven.cod_prod = stock.producto_cod_producto THEN
IF producto.cod_producto = stock.producto_cod_producto THEN
IF (THIS.Value) <> 0 AND (THIS.Value) > stock.can_exis THEN
WAIT "CANTIDAD NO EXISTENTE EN STOCK" windows TIMEOUT 1
mivar = 1
thisform.l_limpiar
thisform.txtcod_producto.SetFocus
SELECT aux_ven
DELETE
ELSE
mivar = 0
IF thisform.txtcantidad.value <> 0 then
SELECT aux_ven
replace cod_prod WITH Thisform.txtcod_producto.Value
replace prod_des WITH thisform.text6.value
replace det_cant WITH thisform.txtcantidad.value
replace talle WITH thisform.text7.value
replace det_precio WITH thisform.txtprod_precioventa.value
thisform.txtcod_producto.setfocus
ENDIF
ENDIF
ENDIF

SELECT stock
SKIP +1
ENDDO
** FIN DEL CALCULO DE CANTIDAD EXISTENTE DE PRODUCTO PARA VALIDAR **
*!* ************************************************

SELECT aux_ven
replace aux_ven.det_cant WITH 0
replace aux_ven.det_grav WITH 0
replace aux_ven.det_gravA WITH 0
replace aux_ven.det_exen WITH 0
STORE 0 TO ThisForm.txtexen.Value
STORE 0 TO ThisForm.txtgrav.Value
STORE 0 TO ThisForm.txtgravA.Value
STORE 0 TO totexen
STORE 0 TO totgrav
STORE 0 TO totgravA
STORE 0 TO ThisForm.txtdto.Value
STORE 0 TO ThisForm.txttot.Value
SELECT aux_ven
replace aux_ven.det_cant WITH thisform.txtcantidad.value
**calcula exentas**
IF producto.prod_exen = "F"
replace aux_ven.det_exen WITH (ROUND((aux_ven.det_precio * aux_ven.det_cant),0))
ENDIF
**calculo de iva 5%**
IF producto.prod_exen = "T" AND producto.prod_iva = 1 then
replace aux_ven.det_grav WITH ROUND((aux_ven.det_precio * aux_ven.det_cant),0)
ENDIF
**calculo de iva 10%**
IF producto.prod_exen = "T" AND producto.prod_iva = 2 then
replace aux_ven.det_grava WITH (ROUND((aux_ven.det_precio * aux_ven.det_cant),0))
ENDIF
sum(aux_ven.det_exen) to totexen
sum(aux_ven.det_grav)to totgrav
sum(aux_ven.det_gravA)to totgravA
ThisForm.txtexen.Value = totexen
ThisForm.txtgrav.Value = totgrav
ThisForm.txtgrava.Value = totgrava
ThisForm.txttot.Value = (ROUND((ThisForm.txtexen.Value + ThisForm.txtgrav.Value + ThisForm.txtGRAVA.Value),0))
mercodigo = facturadetalle.producto_cod_producto
*************************************
thisform.GRID11.refresh
thisform.txtcod_producto.SetFocus
thisform.txtcod_producto.Value = ""
thisform.txtcantidad.value =""
thisform.l_limpiar
*************************************
SELECT aux_ven
APPEND BLANK
thisform.Refresh
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:lector de codigo ayuda

Publicado por xx (378 intervenciones) el 18/11/2009 18:43:44
Mira he revisado tu codigo y francamente no encuentro nada malo, a lo sumo te sugeriria que cambiases la linea:

locate for alltrim(cod_producot)==alltrim(thisform.txtcod_producto.value)
*suponiendo que este ordenado tu tabla por este campo
por seek( thisform.txtcod_producto.value ) &&es mas eficiente, pero informate sobre el 1º

y
SQLEXEC(conectar, "SELECT * FROM STOCK", "STOCK" )
por
SQLEXEC(conectar,"SELECT * FROM STOCK WHERE STOCK.cod_producto==producto.cod_producto" )
&&que es mas eficiente y modificar
las lineas subsiguientes para que se adapte al comando cambiado

Ahora hay algo que quizas este ocurriendo y lo cual facilmente te podrias dar cuenta siguiendo la sugerencia sobre SET TEXTMERGE que te hice o poniendo muestreo de mensajitos en los eventos para saber que ha sido ejecutado dicho evento o metodo. Ese algo podria ser que el codigo que tu escaneas sea igual o mayor a la longitud del MAXLENGHT de tu txtcodproducto, fijate que si tu defines una longitud por decir de 15 letras y tu escaneas un codigo de barras que tiene 15digitos/letras tu txtcodproducto estaria perdiendo el foco antes de recibir el ENTER final entonces quedaria guardado esta pulsacion y al pasar a tu txtcantidad la descargaria y por ende grabaria con cantidad cero, ya que almenos no he visto o no posteaste un evento valid para tu txtcantidad lo que hace suponer que permite cantidades cero.

Para comprobar si esto esta ocurriendo pues facil buscate un codigo de barras que no alcance la longitud maxima del campo txtcodproducto y haz la prueba si queda en cantidad aleluya lo haz descubierto.

En caso que esto sea el problema la soluciones es muy facil, extiende MAXLENGHT a uno mas.

Por las dudas mi hotmail es xodrf si no logras dar con la solucion podrias quitar fotos o hacer un video del comportamiento de tu pantalla durante el escaneo o si quieres postear tu pantalla para mejor revisión.

***************************************************************************************
Veo: por tu calculo de IVA que somos compatriotas (py), yo soy de la capital del carnaval!!.
***************************************************************************************
Suerte!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:lector de codigo ayuda

Publicado por mario (90 intervenciones) el 19/11/2009 14:50:01
Hola xx, antes que nada mil gracias y si soy de PY, Asuncion, por fin e encontrado el problema que estaba en el lector pues como te fijaste la programacion no tenia problema manualmente y con el lector si, como te dije antes estuve investigando sobre el lector baje su manual y despues de mucho leer encontre que el lector faltaba configurar y mira problema solucionado por fin ahora no tengo problemas escanea y realiza lo que esta en la programacion, xx disculpa mi atrevimiento te comento un problema como hago para que cuando paso el lector por un codigo que tiene el peso me aparesca (asi como tienen los super ej. codigo: 11111, descripcion: carne, cantidad/kilo: 350 gr.,total: 15.000) es que soy nuevo en esto, una vez mas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:lector de codigo ayuda

Publicado por xx (378 intervenciones) el 19/11/2009 20:48:15
Ya me parecia que algo estaba mal!, bueno magnifico me alegra que lo hayas solucionado.

En cuanto a tu pregunta te juro que no tengo la menor idea pero te cuento algo primero investiga como imprime las balanzas su tiquet o sea ve al super y consigue algunos productos con su tiquet trae las bolsitas y escanealos en el MS-DOS hasta donde yo se todos los codigos de productos importados (EAN) no superan los 14 digitos y no utilizan letras, yo me IMAGINO que la balanza deberia imprimir algunos digitos previos para hacerle saber al programa de que los siguientes digitos seran definidos localmente (no es un codigo EAN) o sea algo asi:

*123 00350 00015000*
donde los primero tres(o quizas mas o menos) digitos definiria el tipo de producto como carne, los 5siguientes la cantidad de gramos, 8siguientes el importe

o quizas utilice letras dependiendo de la fuente, por ejemplo el SKANDATA soporta letras
*AAA 00350 00015000*

Deberias investigar como funciona la balanza que imprime el tiquet, salvo que los tiquet se impriman en una computadora lo cual hace mas facil, pudiendo adoptar la nomenclatura mencionada arriba.

No se si te fijaste que cuando tu compras algo la mamacita(en algunos super's) al mando de la balanza, presiona una tecla si pesas carne otra si compras pan, otra si es verdura etc, por eso me imagino que con esa tecla varia los primeros digitos del codigo y luego el peso y importe o quizas el importe y luego el peso.

Peeeeero ojo solo son conjeturas, deberias investigar posteriormente postearlo para que todos podamos aprender sobre el tema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar