Ver Mensaje Individual
  #22  
Antiguo 05-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
Reputación: 22
José Luis Garcí Va camino a la fama
Bueno vamos a ir dando un spring final para acabar este tema, para ello voy a comentar varios apartados, por encima, ya que muchos de ellos son apartados más o menos normales en otros programas.

--Mensajes
como tratamos con un entorno que debe ser totalmente táctil, debemos tener en cuenta que mensajes tipo showmessage, no son adecuados (esto me lo recordó un compañero y tenia toda la razón), por lo que debemos crear nuestros propios forms con los mensajes que queramos poner, aquí os dejo uno de mis mensajes



--El Editor

Debemos tener un editor para las diferentes necesidades dentro de nuestro programa, yo si puedo inserto el teclado en el form, pero muchas veces no podemos, por lo que uso un form con los diferentes apartados dentro de un pagecontrol, lo tengo para campos string (texto), memos (Notas), time (Hora), Date (fecha), Integer(Enteros) y double o rela (decimales), este no lo tengo terminado pero pongo un pequeño montaje y el código al activarse y al salir, para que entendáis como funciona



Código Delphi [-]
procedure TFeditor.FormActivate(Sender: TObject);
begin
   case PC.TabIndex of
    0:Edit1.SetFocus;
    1:Memo1.SetFocus;
//    3:Variablederetorno:=PanelTouchDate1.Value;
  end;
end;

procedure TFeditor.spbSalirClick(Sender: TObject);
begin
  case PC.TabIndex of
    0:Variablederetorno:=Edit1.Text;
    1:Variablederetorno:=Memo1.Lines.Text;
    3:Variablederetorno:=PanelTouchDate1.Value;
  end;
  if Memo1.Lines.Text<>'' then Memo1.Lines.Clear;
  Close;
end;

Como podéis ver activo el pagecontrol antes de hacer el show del form, al activase indica que componente tiene el foco, sólo en los dos primeros, la variabledeRetorno esta ubicada en nuestro datamodule, para que tenga acceso, practicamente desde cualquier apartado, esta la debemos dejar con el dato de entrada, por si no cambiamos nada y es un string, así devuelva lo que de vuelva con un try finally, hacemos la conversión a lo que necesitamos y listo, pongo el código de una llamada para que se entienda mejor

Código Delphi [-]
//------------------------------------------------------------------------------
//**********************************************************[ Otras fechas ]****
//------------------------------------------------------------------------------
begin
   Variablederetorno:=dbeFechaCaducidad.Text;
   try
     Feditor.PanelTouchDate1.DateIn:=StrToDate(dbeFechaCaducidad.Text);
     Feditor.PC.TabIndex:=3;
     Feditor.ShowModal;
   finally
     dbeFechaCaducidad.Text:=Variablederetorno;
     Perform(WM_NEXTDLGCTL, 0, 0); //Pasamos al siguiente control
   end;
end;


Realmente falta un variable más y un botón en el mismo panel que esta el botón salir para poder recuperar el dato de entrada, en cualquier momento, también se podría poner un undo y un redo, pero ya sabéis se puede mejorar y mucho

--Cierre z y cierr x o y

Primero aclarar que realmente este apartado no he llegado aún y no tengo claro cual es cual, pero si puedo deciros que uno es la impresión de todos los tickets del día y el otro es un resumen del día, en estos debemos incluir datos como formas de pago, en efectivo, tarjetas, talones, pagares, cupones, etc, deberíamos añadir si ha habido invitaciones, o sin pagar, e incluso un pequeño mensaje de si hay productos con poco stock, no hace falta especificar cuales, sólo darnos un aviso para que lo miremos, totalizar , número de tickets vendidos, cobrados y pendientes e incluso ventas y comisiones por camarero.

--Cambios del ticket

Este apartado debe ser ágil, ya que en un momento determinado, podemos tener múltiples tickets abiertos, yo uso el siguiente form, que me queda que mejorar visualmente, añadir un groupbox y un campo edit para búsquedas, pero esta casi terminado.



Como podéis ver esta dividido en varias partes como son:
Seleccionado (el ticket elegido)
Nº de tickets (la cantidad en ese momento)
Los tickets (con un DBCtrlGrid)
El contenido del ticket (un dbgrid)
El listado de camareros (con listview y un botón, así puedo elegir si de todos los camareros o de uno en especifico)
Y por último el panel en la parte baja donde falta el sistema de búsqueda y el debnavigator la opción previsualizar (muestra el contenido del ticket en el dbgrid)los botones salir (selecciona el ticket elegido en ese momento) y salir sin ticket, no opte por salir al pulsar sobre el dbctrlGrid, ya que si quisiéramos desplazarnos, muchas veces saldría directamente.

--Visor de clientes, visor de camareros



Como podéis ver es muy parecida a la anterior,pero de manera más simplificada, únicamente tiene el dbctrlgrid y los siguientes botones, subir y bajar, dar de alta a uno nuevo y salir y cancelar, con lo que deja el que tuviésemos elegido anteriormente y salir que legi sobre el que hayamos elegido, en este caso si funciona el pulsar sobre el dbctrlgrid, tanto con un click lo elegimos y con un doble click salimos con la elección, no inserte un sistema de búsqueda, ya que esta hecho con un querry y en la tabla tiene el campo activo y camarero, con lo que me muestra sólo los camareros que este en activo y cumpla ambas cualidades en la tabla de personal.

El acceder a esta pantalla es posible desde 2 opciones o pulsando el botón para tal fin o directamente sobre la imagen.

El de clientes es idéntico, salvo que tiene un panel al final con un sistema de búsqueda y llamada al editor

--Apertura del cajón

Este es muy simple aprovechamos dando el comando adecuado a nuestra impresora de tickets (yo personalmente grabo en un tabla la fecha la hora y el camarero)

--Registro de operaciones

Existen apartados que nos interesa registrar su movimiento para esto es esta tabla, básicamente es un log, pero en tabla que debe auto borrarse cada x meses, dejando únicamente un par de meses de información, en esta tiene campos como concepto, fecha, hora y operario

--Solicitud del passwords

Este apartado debe hacerse accesible desde configuración, teniendo que solicitarse o no, incluso debería ser obligatorio para la apertura del cajón sin ticket, para que no pueda abrirlo cualquier persona, pongo una imagen y no explico más.



--Modo consulta

Este es una de las cuestiones básicas ala hora de hacer un TPV, debemos saturar nuestro form, como ya explique al principio depende, pero debemos tener todas las opciones posibles en nuestro form de trabajo, yo creo que si, la verdad es que he optado por un sistema que creo es cómodo y simple, para entrar en modo consulta puede existir una de estas opciones, que no exista ticket en ese momento o que lo solicitemos nosotros, como, pulsando en el listview de nuestro ticket, tanto para entrar como para salir, pongo un montaje con lo que he explicado y algo más que detallare a continuación



Explico los diferentes apartados númerados

[1] Modo normal del ticket

[2] modo al pulsar en el ticket en el listview pasa a modo consulta si volvemos a pulsar pasamos a modo normal 1

[3] Opciones que nos da, en este caso de productos, pero alguna de ellas también en familias y subfamilias, esta opciones son

Alta nueva de l apartado en que estemos
Modificar, en la casilla y el apartado que estemos
Consulta ver 5 este nos permite ver cuantas ventas se han hecho de ese producto hoy
Asignar, al igual que el botón en el TPV llama al mapa
Entrada de productos, permitiendo dar entrada e a mercancías
Añadir a "Más usados" lo veremos más adelante

--Notas a cocina

Debemos tener en cuenta para que funciona esto, cuando hablamos de notas a cocinas no me refiero al ticket, me refiero a anotaciones como

"bisteck muy hecho y sin pimienta" o cosas mas serias como "Cliente alérgico al picante" o "Cliente celiaco" por poner unos ejemplos, en mi caso sólo hago una llamada al editor y lo descrito lo meto en la tabla tickets notas y a continuación veréis como lo ven en cocina.

--Ver ticket Cocina



como podéis ver a la izquierda el dbctrlGrid, en el centro un listview con el contenido del ticket (*) y la derecha el número de tickets pendientes, el ticket que estamos viendo, la notas que puedan existir de este ticket un dbnavigator y el botón salir.

Este apartado es específico de cocina por lo que no esta en nuestra pantalla de tpv genérica.

(*) marcamos lo que ya hemos servrvido, para evitar errores con un campo en nuestra tabla de tickets detalle, de hecho se me ocurrió despues, en productos, deberíamos añadir el campo cocina, con lo que aqui en el querry podríamos decir que mostrase sólo los productos que van a cocina y no todos los del ticket.

--Zona del numpad



Como podemos ver en este apartado disponemos de varias opciones, una pequeña descripción de ellas

Primero el Numpad, nos permite introducir cantidades, para que, pues según elijamos a su la do derecho, en este lado están

-El visor, marca el número que vamos a pasar.
-Cobrar, nos pasa al apartado de cobros, dividir pagos, etc
-Unidades, que es el apartado por defecto
-Precios, permite modificar el precio de un producto en el ticket
-Descuentos, permite hacer descuentos en el ticket
-Invitación, permite mediante popmenu invitar a el artículo marcado o a todo el ticket, ojo si aplicamos al artículo seleccionado y luego pulsamos sobre este se crea en un linea aparte y o entra en la invitación.
-Útiles varios como acceso a configuración, apertura y cierre (X y z), arqueos (0 y real), Compras (una lista de productos a comprar), Pasar nota a cocina (ya lo hemos visto), Cambiar orientación (permite pasar de derecha a izquierda y viceversa las familias, subfamilias y artículos) y número de columnas mínimo (podemos poner el número de columnas mínimo a mostrar en familias, subfamilias y artículos), todo esto en un popmenu
-apertura del cajón (ya lo hemos visto)

-listview Ticket




Bueno he puesto algo más de lo que es el tema pero lo detallo en la parte alta, tenemos datos, como la ubicación, la situación (esta marcado mal como número), el número de comensales, el display del total, el cliente la imagen de este y el número de ticket.

Debajo encontramos el listview con los artículos que contiene nuestro ticket, debajo de este esta información como el producto sobre el que esta posicionado, el total de artículos diferentes y el total de unidades.

A la derecha se encuentran los botones siguientes, Cambiar de ticket (lo vimos en cambios de ticket), Modificar linea (permite modificar el texto de la linea seleccionada), borrar linea, y los botones que nos permite subir y bajar dentro del listview.

Una pista que os doy sobre este listview, no todo lo que veis es todo lo que contiene.

--Usar la webcam

En este programa he usado la webcam, desde apartados como clientes y personal, para capturar la imagen, pero aparte de esto cree un form, que permite las siguientes opciones, os pongo una imagen y no comento más



--Capturar desde internet

Esto es una opción útil, que permite al cliente mediante el navegador buscar una imagen del plato copiarla al portapapeles y desde nuestro programa pegarla.

--------------------------------------------------Otros apartados que considero interesante


---Vales y cupones permite pagar con vales o cupones de hecho podemos vender un vale de 10 menús y identificarlo con número o código de barras y ir descontando teniendo claro en cada momento que debemos introducir el código de barras o número para controlar su descuento.

---Sinpa (Sin pagar) debemos tener un botón que especifique si ha existido tickets sin pagar, se nos incluye en los cierres

---Mas usados, una cosa que hecho de menos en los programas de TPV, es un apartado para los artículos más usados, de hecho yo tengo una familia por defecto con más usados, dentro de esta crea automáticamente las subfamilias combinados y más usados, en esta última ira todos los artículos que desde el modo consulta designemos como más usados, ejemplo, Café solo, cortado, bocadillo de tortilla, caña, etc. No es recomendable suturarlo y aunque se cree el objeto duplicado, hace referencia a un mismo artículo, así que tendréis que jugar un poco con un campo más en nuestra tabla y hacer una referencia cruzada, al entra en estos apartados.

---Consumo interno, mientras trabajamos, podemos tener autorización y consumir artículos, sin tener que pagarlos, pero de estos hay stock que puede ser controlado (ya lo hemos tratado), de esta manera, mediante un simple botón tendremos este control al día.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita