Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-01-2014
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Bueno ya no sigo por hoy con el monologo y espero no estar haciendo el ridículo, se que lo que he puesto debería estar bien ya que lo he probado, pero no me gustaría estar dando mal la información por que yo este equivocado, de hecho os hablo por que he estado al otro lado de la barra y se que era lo que me hacia falta, pero eso no quiere decir que mi verdad pueda ser la única.

Sigo diciendo que no soy la persona más adecuada, para enseñar, ya que me queda mucho por aprender, pero estoy seguro y muy seguro de que muchas de las cosas de las que hablo están en la red o debieran estar, lo único que hago es unificarlas y darles un punto de vista determinado, claro esta el mio.

Me considero bueno analizando problemas en los programas y a veces logro dar soluciones buenas, pero como me enseño mi amigo Jesús en programación normalmente a problema puede abordarse de varias maneras, que sean más o menos efectivas ya depende del programador, su experiencia y lo que quiera arriesgar.

Como ya dije no pienso poner esta vez el programa ni módulos completos, sólo es la teoría de como debe funcionar un TPV.

Que tengáis buen día.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #2  
Antiguo 01-01-2014
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Gracias por la clase, magistral y cercana, como siempre.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #3  
Antiguo 02-01-2014
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.297
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Fantástica explicación.



Gracias.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 03-01-2014
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Vamos con las rejillas y el stock



se pueden hacer con bastante trabajo mediante abundante código, las he visto incluso con un dbgrid normal y uno vertical, incluso de manera más común en un Stringrid, pero según mi modesta opinión lo mejor es usar un componente para ello, de hecho en el programa que estoy realizando es el único componente al que no le he metido mano y no es mio, lo llevo recomendando mucho tiempo es gratuito y lo podeis descargar junto con otros componente interesantes desde http://componentes.clubdelphi.com/, en este conjunto de componentes cedidos por algunos maestros del clubdelphi, así como un par de ellos míos y de otros compañeros, lo bueno de esta idea era que podi participar cualquiera independiente de su nivel y conocimientos, mientras el componente fuese suyo y lo cediera libremente, el componente si no recuerdo mal es CCDdBimagenGrid, la verdad que esta muy completo, sólo echo en falta el hint por casilla y que me da algunos problemas si los controles avanzar y retroceder páginas los inserto dentro de la rejilla, por ese motivo he optado por ponerlos en un panel aparte.

Lo bueno es que visualmente es atractivo, no he querido meterle mano y mirarlo con detenimiento, pero si lo hago le pediré permiso al compañero Luis Bataller, autor del componente, he intentaría añadirles propiedades como un auto hint con el teto del campo asociado y que la imagen pueda ser proporcional, para que no se deforme, el resto es muy muy bueno, seguro que hay componentes de pago que lograrán lo mismo, pero tampoco los he buscado.

Después de todo este monologo, paso a detallar lo que yo considero debemos tener en nuestra rejilla, es muy simple, principalmente su imagen descriptiva, recordar que vale más una imagen que mil palabras y mas en entornos de este tipo ya que nuestro cerebro asocia rápidamente la imagen a lo que deseamos mientras que el proceso de leer lleva muchísimo más tiempo, es recomendable que aparezca el texto descriptivo, he incluso su precio, pero con los dos primeros debemos darnos por contento.

Si os fijáis en la banda negra que pone artículos, es un panel que a su derecha tiene otro panel, donde pongo el artículo seleccionado, al no disponer del un autohint, debajo de esta tengo un panel con los botones para retroceder y avanzar página (flecha arriba y abajo), debajo de la primera flecha puse un estatic tex que relleno con los diferentes precios (*), y debajo de esta la palabra stock y un display donde nos mostrará el stock disponible de este producto, pero hablamos de productos como bocadillos, cafés etc, con esto quiero decir que no podemos poner un sistema de stock cerrado, simplemente regula ra el stock de los productos que nosotros deseamos al crear el artículo, dejando el uso de los otros libres, os pongo un ejemplo más claro.

Nosotros tenemos 10 cajas de cerveza de 250 c.c. a 18 botellas por caja nos da un total de 180 botella s de cerveza, de este artículo podemos hacer en su creación que tengamos el stock cerrado o no, realmente importa poco, la principal diferencia es que nos descuente o no del stock.

También tenemos 50 panes para bocadillos, pero no podemos darle entrada por e stock, salvo que sean ya preparados, ya que un bocadillo puede ser de tortilla, de lomo, etc

Esto no quiera decir que perdemos el control sobre las ventas, sólo lo perdemos sobre el stock, nosotros podemos saber cuantos bocadillos, cafés, cervezas, etc, hemos vendido, mediante una consulta SQL a nuestra tabla de tickets detalle.

Lo correcto para la entrada de productos es tener un form distinto, donde nos permita buscar el artículo, darle la cantidad de entrada, asegurarnos de que entra al mismo precio y si no es así si debemos cambiar el precio de nuestros productos.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #5  
Antiguo 03-01-2014
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Precios de los productos o artículos

Aquí es donde podemos dar muchas veces un toque de distinción entre nuestro programa y los de la competencia, lo habitual en la entrada de productos, es poco más o menos los siguientes campos

Código
Familia
Imagen
Descripción
Precio
stock

Yo me he ido un poco más lejos y os pongo algunos de ellos no todos pero casi, y os pongo el motivo de ellos

Código (sin comentarios)
Código de Familia (sin comentarios)
Código de subfamilia (como ya explique prefiero el sistema de familias->Subfamilias->Productos, que el estándar de Familias->Productos)
Nombre o descripción (sin comentarios)
PVP ración (precio de una ración o unidad)
PVP media Ración (precio de la medía ración)
PVP Tapa (precio de pincho o tapa)
PVP ración en oferta (lo mismo que su equivalente pero si esta marcado como oferta)
PVP media Ración en oferta (lo mismo que su equivalente pero si esta marcado como oferta)
PVP Tapa en oferta (lo mismo que su equivalente pero si esta marcado como oferta)
En oferta (si el producto queremos que este en oferta)
En menú (si el producto entra dentro del menú)
Combinar (si el producto tiene combinaciones)
Código del proveedor (sin comentarios)

Se que esto es rizar el rizo pero todo tiene fácil explicación

Por qué los formatos ración, media y tapa, fácil, o metes tres veces el producto cada uno con su precio o lo simplificas de esta manera, de esta lo único es seleccionar previamente el formato ya veremos como hacerlo.

Por qué los formatos anteriores como ofertas, esto es más simple aún, los motivos de las ofertas son los siguientes, captar público, productos que le quedan poco tiempo para caducarse, librarse de una mercancía para dejar espacio, para lo que sea y seguro que hay más, pero básicamente estos son los principales, imaginemos un proveedor que nos deja la botella de cerveza a 0,20 céntimos, pero le quedan 2 semanas para caducar, que hacemos, colocar la oferta lo más visible para sacar antes la mercancía, es lo lógico, pero además deberemos cambiar nuestro precios, vale pues yo en mi caso, simplemente lo marco como oferta y listo, después veréis un análisis de como debe actual el programa al pulsar sobre un artículo.

En menú, normalmente se suelen ofrecer en estos establecimientos un menú compuesto por primeros, segundos, postre 1 bebida y 1 pan, debe especificarse las cantidades para no tener problemas, pero es también habitual, que el cliente no quiera los primeros o los segundos por que no le gusta, o nos pida un licor reserva, normalmente se opta por poner x menús y no detallar su consumo y estoy totalmente de acuerdo con ello cara al ticket, pero no cara a nuestro sistema, ya que podíamos dar aun cliente de menú un Santateresa gran reserva como bebida, cuando el coste puede ser hasta más del 25% del precio del menú, con lo que reduciría el margen de beneficios del cliente dramáticamente, para ello cada vez que creamos un nuevo artículo se marca el producto como que puede entrar en el menú, sólo si lo desmarcamos no será posible ponerlo dando el mensaje al operario al introducirlo.

Combinar, para mi este apartado es fundamental, todos conocemos el cuba libre (Ron+cola), como ejemplo de un combinado, podemos optar por poner los dos artículos por separado, pero normalmente por lo menos en mi tierra, el precio del combinado, siempre es inferior al de los dos productos por separado, de hecho en mi programa tengo un form y una tabla para crear combinados, os pongo una imagen del combinado que hablamos



y de como los creo



Si os fijáis me permite combinar hasta 4 artículos diferentes Flecha roja y con la flecha azul, marco la foto que coge por defecto, luego podemos cambiarla, pero de entrada hace un montaje con los artículos de los que se compone, claro como mínimo deben de ser 2 artículos y el máximo al que yo lo he limitado de 4.

Como llevarlo a cabo, e aquí la madre del cordero, seguro que se os ocurre mil métodos, pero yo os explico por encima el mio con este pequeño análisis al pulsar sobre un artículo

Previamente tengo en la parte baja de mi pantalla tres botones con las opciones , ración, media y tapa, son speedbutons con los que tengo en grupo en cada tag tiene una de las siguientes cantidades 100, 50, 25, perteneciente a uno de los formatos, entonces sabiendo esto estos son lo pasos que hago

Mostramos los datos, stock y precios del producto seleccionado.
compruebo que tipo esta pulsado y asigno el valor de su tag.
Compruebo si esta en oferta, para saber si debo buscar por PVP de ofertas o normales
Ahora busco sabiendo el tag si debo buscar en ración, en media o en tapa, si el campo PVP esta vacio o a 0, doy un mensaje de que este formato no es valido, en caso contrario continuo.
compruebo cual es la entrada (en mi caso tengo 3 sistemas, el numpad, un contador de entradas y por pulsación en la rejilla).
//En la tabla----------------------------------------
Pasamos a buscar si ya existe este artículo, en nuestra tabla, con e número de ticket ya asignado, si lo encontramos, sumamos la cantidad de artículos que tenia con la nueva. En caso contrario lo creamos y metemos los datos.
Calculamos el nuevo total y subtotal, pero sabiendo si esta marcada la casilla descuento, para saber que total y subtotal poner.
Si es stock cerrado restamos de su stock la cantidad correspondiente
//Pasamos ahora al listview-------------------------------
Realizamos la búsqueda del artículo igual poco más o menos que como con la tabla.
Actualizamos subtotal y totales, con los mismos criterios que antes.

Lo dejamos preparado para el siguiente artículo

Si estamos en menú, lo único que hacemos diferente, es comprobar si el artículo esta permitido para el menú y que el artículo marque la opción no visible en la tabla ticket y en el listview, para que no salga reflejado.

Queda alguna cosa más pero me la guardo para mi.

Bueno con esto es todo por hoy
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #6  
Antiguo 04-01-2014
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
El Arqueo de caja

Yo en mi programa uso dos tipos de arqueo, pero primero explicar que es el arqueo, este simplemente es comprobar la cantidad de monedas o billetes que tenemos en nuestra caja, para obtener el total, es decir como si dijésemos el stock de dinero disponible.

Aclarado el concepto os pongo una imagen de mi sistema de arqueo



Esta pantalla tiene acceso a 20 valores diferentes (moneda o billetes), como ya dije tengo dos arqueos posibles en mi programa, desde 0 que es para saber únicamente el dinero que tienes en caja, usando la pantalla, el arqueo comparativo que te permite introducir los valores al igual que desde 0 pero , al valor de cada moneda pone encaja: 0, pues en este caso pondría el total de esta moneda que tiene registrado el programa.

Esta pantalla tiene capacidad para 20 valores como ya dije pero como veis se ven ahora sólo 15, esto es debido a que si la base de datos, donde registramos nuestra moneda (valores monedas y billetes), tiene menos de 20 registro mostrará ´solo los que estén registrando, dejando en visible a false el resto de los huecos.

Esta pantalla se usa en 4 situaciones, para los dos tipos de arqueo como ya comente, a la hora del cierre (realmente es un arqueo comparativo) y en la apertura, aunque este último caso, nos lo podemos saltar en cierta forma si lo establecemos en nuestro programa, de manera que al hacer el cierre, y haber totalizado nos deje para la apertura , introduciendo con cuanto abrimos al día siguiente.

Debo decir que esta es una imagen antigua ya que le he añadido un panel en la parte inferior con algunos botones más, algunos visibles en unos momentos o no, botones como por ejemplo descontar, que en vez de añadir descuenta en el valor, el propio totalizar y un botón de apertura automática, que ya tiene configurado unos valores, si a la hora de hacer el cierre, dispone de esos valores o lo más cercanos posibles los deja como apertura al totalizar, ejemplo 20 monedas de 1 euro y quedan 18 pues deja 18 simplemente.

Para que el form nos sirva para las 4 utilidades que tiene lo único que utilizo es una variable fija en mi DataModule, según el valor que le de en la llamada, cambia el caption y deja ver o no ciertos componentes.


Con respecto a si el arqueo automático es real, depende mucho de como se lleve, si se lleva correctamente si, pero si optamos por cobros directos y demás no, esto es algo que debemos saber, se que existe un aparato que pones las monedas y billetes (dos apartados diferentes) y el te los cuenta y te los contabiliza de manera automática, tipo al que tiene la Caixa para los billetes. pero no lo he usado nunca y pienso que la mayor parte de nuestros clientes simplemente usarán el cajón motorizado.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #7  
Antiguo 04-01-2014
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
El cobro

veamos una imagen




En primer lugar pedir disculpas ya que esta pantalla no la tengo terminada e incluso debo corregir algunos componentes, el ancho de la misma al pulsar sobre teclado, etc.
Como podemos ver uso nuevamente el sistema de 20 valores de moneda, dejando visible solo las que dispongamos, vemos arriba a la izquierda 5 displays, en diversos colores,creo que quedan claro para que son, luego 4 botones con los tipos de cobros, especificar de estos, simplemente el de banco es para pagarés y talones y el de otros, por si tenemos, vales, cupones, a cuenta(ya creada), descuento de una cantidad ya entregada o a crédito, por poner los más comunes.

El botón a devolver se activa de manera automática en cuanto ha superado el total, pero podemos activarlo o desactivarlo a voluntad, por qué es el caso típico de que el ticket sea 5,20 €, y el cliente nos da 10,20 € para que le devolvamos un billete de 5,00 €, al pulsar sobre el billete de 10,00 € ya se nos activaría de manera automática el botón a devolver con lo que al pulsar sobre los 0,20 céntimos los daría como que los hemos devuelto.

Dividir pago, esta pantalla no la tengo terminada, pero os pongo una imagen del form y os explico cual será el procedimiento que usare



A la izquierda ira el ticket maestro y podremos ir pasando artículos del mismo a la derecha, como veis los botones apuntan todos hacia abajo y realmente debería ir hacia la derecha 1 con una flecha simple y otro con una flecha doble e igualmente dos botones pero hacia la izquierda el uso de estos es bastante simple, los simples pasan una unidad de ese artículo al panel contrario y los dobles todas las unidades que queden de ese artículo, claro esta al quedarse a 0 desaparece de ese listview.

En el panel 1 faltan los botones confirmar y cancelar, realmente el confirmar, incluso sobraría ya que seria posible usarlo al darle a cobrar, que estos botones estén visibles dependerá del botón nuevo ticket, os hago un simple análisis del proceso.

Al entrar en esta pantalla tenemos el ticket maestro a la derecha y en blanco a la izquierda y el aspecto del form es similar a la imagen puesta.
Pulsamos nuevo ticket y aparecerán los botones confirmar y cancelar en panel 1 pasamos los diversos artículos al panel izquierdo que ya tendría su número de ticket.
Pulsamos en cobrar (este si ve que la tabla esta en edit o append o insert, pulsa por código el botón confirmar) i nos pasa ala ventana de cobro.
Una vez terminado el cobro nos devuelve a la de dividir ticket, hasta que quede vacio a la izquierda.

Claro esta el último ticket a crear es lo que quede del maestro.

Cada vez que se pulsa confirmar, sea directamente o por código, grabaremos en el nuevo ticket los datos y los descontaremos del maestro.

Si pulsamos cobrar sin datos en la derecha iría a cobrar el de la izquierda.

El botón restaurar, este es el que más miga tiene, ya que no visible en este fom existirá varios componentes como otro listview y un memo entre otros, este listview tendrá en todo momento los mismo datos que el maestro al llamar por primera vez (de ese ticket), en el memo al darle al botón confirmar introducirá el número del nuevo ticket, así podremos deshacer todo por código, dejando el ticket como estaba al principio, el único problema es en cobros, pero como dije no lo voy a dar todo echo

En esta pantalla también falta un display en panel 9 que indicará el total del listview de la derecha.




Volviendo a la pantalla de cobros tenemos el botón cobro exacto, este botón no respeta el arqueo ya que al pulsarlo simplemente introduce en entregado la misma cantidad que en total, no respetando el arqueo, dependiendo de la ocasión puede ser útil, de hecho que este visible lo tengo en mi programa puesto desde otro apartado.

Del resto de los botones comentare los siguientes ya que el resto son bastante claros en su descripción
Borrar Elimina todo lo que hemos introducido hasta este momento, respetando sólo el valor del total que teníamos de entrada, simplemente hago un commitRtaing y refresco los datos y el formulario.
Descontar los valores que introduzcamos, pulsando en los valores de monedas o billetes o por el numpad en vez de sumarse se restan.
Teclado muestra o oculta el teclado, este aparece si pulsamos en los botones tarjeta, banco o otros, al pulsar este último además aparece un TRadioGroup, con las opciones de otros.
Cobrado graba definitivamente los datos y marca el ticket como cobrado, aparte de esto si así lo indicamos en configuración muestra la siguiente pantalla



que bloque una cantidad que establecemos en configuración , mediante un timer, como es posible que tengamos prisa, podemos cerrarla antes gracias al botón salir, aparte de este lo lógico es poner una salida aun display por si lo tenemos, en mi caso como no he conseguido ninguno, no se exactamente como se hace, pero ya buscare que me presten uno y lo haré.

Pues creo que con esto es todo por hoy, espero como siempre que les queden claro los conceptos y les sea de utilidad.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Teoría del Infierno fidel Humor 5 28-10-2016 01:00:14
Teoria y Practica jcarteagaf Humor 0 18-08-2008 16:32:34
Teoría sobre Archivos de Recursos MaMu OOP 3 15-04-2008 12:36:31
Frameworks, Persistencia: ¿Teoria? Delphius OOP 8 12-04-2008 23:27:24
Teoría del Salario obiwuan Humor 0 06-05-2003 22:00:43


La franja horaria es GMT +2. Ahora son las 18:13:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi