PDA

Ver la Versión Completa : Tickets en espera


Rox77
16-07-2003, 19:23:01
Hola:

Tengo un par de dudas (aunque en proceso de solucionar) que quiero compartir para oir (leer) opiniones al respecto:

Estoy desarrollando una pequeña aplicacion de TPV para hacer tickets (es muy sencillita es para pruebas y tal) y me encuentro con el siguiente problema:

Yo hasta ahora tengo una tabla tickets y una detalle_tickets en master-details por medio del numero de ticket...hasta hay todo normalito. Cuando accedo al TPV se situa en espera a crear un nuevo ticket...lo crea y asigna un numero de ticket q guardo en una variable de una tabla configuracion. Termina el ticket y lo imprime. Hasta aqui todo esta solucionado. Ahora me surge la idea-necesidad de poder poner tickets "en espera" y claro ahora hay un problema. Como asigno el numero de ticket (el cual debe ser correlativo y ademas un ticket terminado no puede borrarse). Esto es: un cliente llega y toma algo (imaginemos un bar) le abro un ticket y le añado la pepe-cola q se esta tomando. Ahora llega otro cliente y me pide una cerveza con mucha sed (jejje) se la bebe y me la quiere pagar entonces la idea es meter el ticket anterior en espera y registrar este nuevo y "AHI" empiezan los problemas...q numero le asigno porq si le asigno el siguiente me va a dar uno mas que el q tengo en espera y si luego quisiera (por la razon q sea) borrar el q esta en espera "lio al canto" ya tengo un hueco en la numeracion q no debo tener.

La solucion pasa por no hacer tickets en espera ... pero quiero tener tickets en espera ... jejeje ;)

Se me habia ocurrido variar la estructura de mis tablas creando un campo COD, NTICKET en la tabla tickets y que los detalles de tickets se relacionen con COD y el numero de tickets se lo asigne a NTICKET cuando lo termine..asi internamente los tickets en espera tendran un COD diferente pero solo se le asignara el NTICKET (unico y correlativo) al ticket terminado .

Admito todo tipo de sugerencias sobre el tema ... :D

Si alguien ha desarrollado alguna aplicacion por el estilo q no dude en comentar sus experiencias..Gracias a Todos de
antemano.

Salu2.

P.D: Un temita....para controlar lectores de codigos de barras e impresoras de tickets....se admiten apuestas-comentarios. Caña.

andres1569
16-07-2003, 20:56:32
Hola:

La solución que planteas me parece acertada, a la hora de grabar miras el último NTICKET asignado y grabas ese número + 1, así tienes números correlativos, sin huecos, y la clave primaria COD va por su cuenta, que es donde ligas los detalles de tickets. Pero de todas formas no te evitas el tener un mecanismo que grabe el NTICKET correspondiente, es decir el último y correlativo. Por esto, tanto si usas la misma clave primaria como número de ticket como si usas un campo auxiliar, éste deberá estar indexado como UNIQUE, para que el motor proteste en caso de duplicidades (es la mejor manera de asegurarnos). Y el valor que tome ese NTICKET se va a decidir en la grabación, claro está, no antes.

Puede ser interesante tener una tabla auxiliar donde almacenas el último número de ticket grabado, y de ahí tomas la información, de manera que cuando te dispones a grabar un ticket tomas ese valor de esa tabla y lo incrementas. Ten en cuenta que deberás idear algún mecanismo, ya sea por bloqueos o manualmente, mediante algún semáforo, para evitar que nadie acceda a ese registro antes de que lo incrementes, para que no tome un valor equivocado.

La verdad es que yo suelo usar un SELECT MAX() y ninguna tabla auxiliar. De esta forma, cuando insertas un nuevo registro (en OnNewRecord), asignas en NTICKET el número que le corresponde del SELECT MAX, (si se conectan diez terminales o si abres diez nuevos tickets desde la misma terminal, todas tomarán el mismo número). Hay que tener en cuenta que ese número es testimonial y en muchos casos no será el que se grabará. A la hora de grabar, me quedo esperando el error de índice duplicado; si ese NTICKET ya existe porque alguien se adelantó, intercepto el error (lo hago usando ApplyUpdates e intercepto el evento OnUpdateError), si falla es porque alguien ha grabado antes y vuelvo a lanzar el SELECT MAX() y vuelvo a grabar. Así hasta que el ticket es aceptado (te hablo de cómo lo tengo en mis programas, no te hablo de TPVs ni de tickets, pero puede servir). Quizás, dependiendo de tu aplicación y de tu motor de BD, sea una solución lenta, pero creo que es efectiva.

Sobre el tema de lectores de códigos de barras, se ha tocado varias veces en estos foros y en los antiguos. Tengo una rutina que discrimina el código recibido de un lector del recibido del teclado, pues ambos generan el mismo evento. Lo tengo implementado mediante el evento OnMessage de TApplication, aunque quizás lo ideal sea hacerlo mediante Hooks de teclado, ahora que se han puesto de moda en los foros.

Rox77
18-07-2003, 11:41:26
Gracias por tu opinion andres1569.. creo q intentare mi idea a ver como sale...ahora me surge una cosa...buscando por internet sobre lectores de codigos de barras he leido (y en el foro tambien) que practicamente es un teclado..y q la complicación no esta en el lector de codigos sino en hacer las etiquetas de codigo..si ya estan echas con poner un campo codigo de barras en el articulo y escribir el numero luego solo habria que decidir en la ventana de tickets en que modo se capturan los datos si desde el lector o desde teclado (para buscar el codigo de barras del articulo o el codigo o nombre simplemente) ¿¿¿ estoy en lo cierto??? es asi de facil???

Otro tema que me ha quedado de vuelta y media es las impresoras de tickets...yo pensaba que lo unico que necesitaba para imprimir un ticket en estas impresoras es ajustarme al formato de papel y mandar la orden de impresion como cualquier impresora de windows configurada en el sistema. ¿Pero creo que no? ¿COMO FUNCIONA LA IMPRESION EN ESTAS IMPRESORAS DE TICKET? Ademas he leido cosas sobre las impresoras FISCALES en paises como Argentina y Venezuela....que no acabo de entender muy bien que son (soy Español) algo asi como un control de las ventas que queda registrada en la propia impresora???


Se aceptan comentarios sobre todos estos temas relacionados con el mundo del desarrollo de aplicaciones para TPV's


MODERADOR: podria ser un debate o algo asi..para que la gente participe y salgan todos los conocimientos sobre programacion de TPV's ;)

Saludos a todos. Gracias.
:D

__cadetill
18-07-2003, 12:17:52
Posteado originalmente por Rox77
solo habria que decidir en la ventana de tickets en que modo se capturan los datos si desde el lector o desde teclado (para buscar el codigo de barras del articulo o el codigo o nombre simplemente) ¿¿¿ estoy en lo cierto??? es asi de facil???
Pues sí, es así de fácil. Sólo has de tener en cuenta que un lector envía un carácter (Intro o Tab según se configure) al final de la secuencia de números leidos por lo que deberás controlar el efecto ese y configurar el scanner según tus necesidades

Posteado originalmente por Rox77
¿Pero creo que no? ¿COMO FUNCIONA LA IMPRESION EN ESTAS IMPRESORAS DE TICKET?
Nosotros, lo que hacemos, es una impresión directa a la impresora, o bien utilizando ficheros o bien el Canvas de la impresora así se puede controlar mucho más la impresión tanto en el rollo de Journal como en el de Split o el continuo (la impresora que tenemos es una TMU-950P que tiene 3 posibles formas de coger papel para impresión).

Bueno, espero te sirva

Rox77
21-07-2003, 17:06:33
Gracias Cadetill.

Yo tambien preparo los tickets sobre un fichero y los mando a la impresora (de momento una hp de injección normal) tengo q intentar probar con una de tickets (a ver si alguien me presta una ;) ) lo que no tenia claro era si sobre las de tickets funcionaba igual o eran especiales.


Sobre el lector lo del caracter de control ya lo habia leido por ahi, y creo q los drivers de algunos lectores te permiten configurar esto. (otro q tengo q probar) ademas ya he encontrado codigo de como crear codigos de barras en la propia aplicacion tanto Code 39 como 128 aunque es algo mas farragoso de lo que quisiera...esto lo dejare de momento, prefiero que los codigos de barras me los den ya hechos jejeje.

Probaremos cuando tenga tiempo. (y los aparatejos necesarios..jeje)


Gracias. Salu2.

pgraciap
11-08-2003, 22:36:17
Hola, Rox me a tocado hacer programas para ser usados con lectores de codigos de barras y hasta ahorita lo que tienen es que ellos decodifican el codigo y te lo envian al Edit con el focus actual y solo vez los numeros del codigo y estos a su vez te dan un tab o enter al final del codigo leido.

No son nesearios los drivers pues estos son tomados como una extencion del taclado (Bueno eso he visto hasta ahorita no se tal vez en otros si sea necesario).

----------------TPV's-----------------------------------------------------
En cuanto a esto creo que mejor seria tener cuentas abiertas. tener en una combo las cuentas que tienes abiertas en ese momento asi podras seleccionar la cuenta a la cual necesitas introducir mas articulos, creo por que el ticket lo imprimes a lo ultimo?

creo que esta seria una forma mas de tener cuentas o tickets abiertos!! :D