Generación de tickets para un quiosco
Generación de tickets para un quiosco
Conceptos a tratar
Descripción
En nuestro quiosco vendemos una serie de artículos, de modo que cada artículo pertenece a una sola marca, mientras que a cada marca pertenecen distintos artículos.
Además, cada artículo nos lo surte un solo proveedor, mientras que cada proveedor nos surte de más de un artículo.
Por otro lado, cada marca es surtida por varios proveedores, mientras que cada proveedor nos surte varias marcas.
Para cada artículo especificaremos cuál es su IVA entre dos valores posibles que hay para este impuesto y qué cantidad tenemos de cada artículo.
También queremos llevar un recuento de los tickets de venta, cada uno con sus correspondientes líneas de venta, de modo que en cada línea del ticket indicaremos el artículo al que se refiere, la cantidad de artículos vendidos, el importe total con IVA y el importe total sin IVA.
Queremos que el stock o existencia de un artículo se actualice con la cantidad vendida, que aparece en la línea. Es decir, si una línea refleja la venta de tres artículos, el stock del artículo debe disminuir en tres unidades.
También queremos el valor acumulado de los importes sin IVA de las líneas con IVA 1 de un ticket, así como el valor acumulado de los importes sin IVA de las líneas con IVA 2 del mismo ticket (IVA 1 e IVA 2 son los dos posibles valores para el IVA).
Otra cosa que nos interesa es saber el número total de líneas que hay en un ticket.
También necesitamos obtener la suma de los importes con IVA de todas las líneas de un ticket, que será el importe total del ticket.
Esquema de la aplicación
Para resolver la primera parte de la aplicación vamos a crear las tablas ARTÍCULOS, PROVEEDORES y MARCAS, las tres de tipo maestro normal con clave numérica. Ahora bien: ¿cómo las enlazamos? Sabemos que cada artículo pertenece a una sola marca, mientras que a cada marca pertenecen distintos artículos, luego ARTÍCULOS es plural de MARCAS.
De igual modo, cada artículo nos lo surte un solo proveedor, mientras que cada proveedor nos surte de varios artículos, luego ARTÍCULOS también es plural de PROVEEDORES.
Por otro lado, un proveedor nos surte de distintas marcas y una marca es surtida por distintos proveedores, de modo que hay un doble plural entre MARCAS y PROVEEDORES, que resolveremos mediante una tabla de tipo histórico que haga de intermediaria: DISTRIBUCIONES.
En la tabla ARTICULOS hemos de añadir el campo Stock para llevar las existencias de cada artículo.
También incluimos el campo IVA, cuyo contenido deberá decidir el usuario entre los dos valores de IVA posibles y que obtenemos de sendas variables globales.
Otros dos campos más a incluir son PVSI (precio de venta sin IVA) y PVP (precio de venta al público, con IVA). El campo PVSI se calcula a partir de PVP y de IVA:
round( 100* #PVP / ( 100 + #IVA ), 2 )
Añadiremos a continuación las tablas que faltan, referidas a los tickets y a sus líneas. Éstas van a ser dos: TICKETS, que viene a ser la cabecera del ticket y que contiene datos generales como la fecha o el total, y TICKETS_LIN, en la que cada registro hace referencia a una línea de venta de un ticket.
Cada ticket contiene varias líneas, mientras que cada línea pertenece a un solo ticket, de modo que TICKETS es plural de TICKETS.
Por otro lado, en cada línea de ticket aparece un solo artículo, mientras que cada artículo puede aparecer en muchas líneas de ticket, luego LINEAS DE TICKET es plural de ARTICULOS.
Además, como cada línea de ticket pertenece exclusivamente a un ticket, creamos la tabla TICKETS de tipo submaestro, siendo su padre TICKETS, la cual es maestro normal con clave numérica. En la tabla TICKETS_LIN incluimos los siguientes campos:
Identificador
Nombre
Tipo
Longitud
FECHA
Fecha
Fecha
3
TOTAL
Total
Numérico
6
LINEAS
Líneas
Numérico
3
BASE1
Base 1
Numérico
6
BASE2
Base 2
Numérico
6
IVA1
I.V.A. 1
Numérico
1
IVA2
I.V.A. 2
Numérico
1
El campo IVA tiene como contenido inicial el valor del IVA del artículo que aparece en la línea: #ARTICULO.IVA
, lo mismo para el campo PVP con el valor del PVP del artículo. El campo PVSI se calcula para cada línea a partir de los valores de los campos IVA y PVP de la línea. Los campos Importe con IVA e Importe sin IVA se calculan multiplicando PVP_Cantidad y PVSI_Cantidad, respectivamente, donde Cantidad guarda el número total de artículos vendidos que aparece en la línea. Veamos ahora los campos que hemos incluido en la tabla TICKETS:
IVA1 es un campo al que pasamos como valor inicial el contenido de la variable IVA1.
Debemos recordar que los artículos admiten dos posibles valores para el IVA, de modo que al dar de alta un artículo elegiremos entre uno u otro. Si elegimos el primer valor, éste se guarda en la variable IVA1, si seleccionamos el segundo se guarda en IVA2. Lo mismo ocurre para IVA2 e $IVA2.
BASE1 es un campo cuya finalidad es la de acumular el Importe sin IVA de todas las líneas de un ticket cuyo artículo tenga IVA1, mientras que en BASE2 acumularemos el Importe sin IVA de todas las líneas de un ticket cuyo IVA sea IVA2.
En el campo Total sumaremos el valor del campo Importe con IVA de todas las líneas de un ticket, mientras que en el campo Líneas guardaremos el número total de líneas que componen un ticket.
Estas modificaciones en los campos de las tablas ARTÍCULOS y TICKETS que han de hacerse en función del contenido de los campos de la tabla TICKETS_LIN las realizaremos mediante actualizaciones.
La primera actualización es la del campo Stock de la tabla ARTICULOS. Para ello abrimos la tabla TICKETSLIN y seleccionamos el campo enlazado a Artículos, pulsando la opción de creación de actualización a continuación. Creamos un componente de actualización en el que definimos que el campo a modificar es el Stock de la tabla ARTÍCULOS. Seleccionamos como modo _Acumular, y la fórmula es:
-#CANTIDAD
De este modo restamos al contenido del campo Stock el valor del campo Cantidad de la línea, es decir, restamos el número de artículos vendidos.
La actualización se encargará de gestionar las modificaciones que realicemos en las líneas de las cantidades, tanto si modificamos el valor de la cantidad como si eliminamos el registro completo.
Nos quedan cuatro actualizaciones. Como las cuatro van contra la tabla TICKETS, el campo enlazado es Tickets. En la primera acumulamos el valor del campo Importe sin IVA de la tabla TICKETS_LIN en el campo Base1 de la tabla TICKETS, con la condición de que el IVA del artículo de la línea sea igual al contenido del campo IVA1 de la tabla TICKETS:
La segunda actualización a TICKETS, la referente al la segunda base, se define de igual forma, pero en este caso la condición será en base al segundo valor del IVA:
#IVA = #TICKETS.IVA2
La tercera actualización a TICKETS consiste en Acumular el contenido del campo Importe con IVA (#IMPORTE_IVA
) de todas las líneas de la tabla TICKETS_LIN en el campo Total de la tabla TICKETS.
La última actualización consiste en acumular el valor 1
en el campo Líneas de la tabla TICKETS, de modo que por cada línea de la tabla LINEAS DE TICKETS se irá sumando una unidad, resultando al final el número total de líneas que hay en un ticket.
Última actualización