Importacion III

Para trabajar con los cierres de caja desde otro software hay que diferenciar entre 3 tipos de datos
1-Datos de Movimientos: las entradas y salidas de dinero de caja, así que para sumar todos los datos de movimientos del dia
2-Datos de Ventas: Ventas hechas en el día , partes invitadas, etc
3- Otros movimientos y funciones ejecutadas en caja(no importantes)

Para obtener los Datos Tendremos una SQL


SELECT 1 AS Expr1, `Cambios:` AS Movimientos, Sum([PrecioTotal]) AS valor,Sum([Cantidad]) AS unidades
,first(Camarero) as Agente
,min(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaINI ,max( format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaFIN
FROM Ventadia
WHERE (((Ventadia.Familia) Like `cambio`));

union
SELECT 2, `Pagos:` aS Movimientos, Sum([Pagado]) as valor,Sum([Cantidad]) AS unidades
,first(Camarero) as Agente
,min(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaINI ,max( format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaFIN
FROM Ventadia where familia like `Pagos*` and pagado <>0

Union
SELECT 2, `Retirado:` aS Movimientos, Sum([PrecioTotal]) as valor,Sum([Cantidad]) AS unidades
,first(Camarero) as Agente
,min(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaINI ,max( format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaFIN
FROM Ventadia where familia like `Pagos*` and PrecioTotal <>0

union
SELECT 3,`Ingresos:` aS Movimientos, Sum([PrecioTotal]) as Valor,Sum([Cantidad]) AS unidades
,first(Camarero) as Agente
,min(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaINI ,max( format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaFIN
FROM Ventadia where familia like `Ingreso*`
union

SELECT 4,`Cobro No Efectivo: FP:` & forma_De_Pago & ` ` AS Movimientos, Sum([Pagado]) as VAlor,Sum([Cantidad]) AS unidades
,first(Camarero) as Agente
,min(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaINI ,max( format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaFIN
FROM Ventadia where Forma_De_Pago <> `` and Forma_De_Pago <>`PENDIENTECOBRO` and Forma_De_Pago <>`EFECTIVO`
Group by forma_De_Pago
having Sum([Pagado]) >0

union
SELECT 4,`Cobros: pendiente de cobro:` AS Movimientos, Sum(Pagado) as VAlor ,Sum([Cantidad]) AS unidades
,first(Camarero) as Agente
,min(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaINI ,max( format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaFIN
FROM Ventadia where Forma_De_Pago =`PENDIENTECOBRO`


UNION
SELECT 5,`Venta total Tickets incluyendo invitaciones` AS Movimientos, Sum(abs(PrecioTotalADD)*Cantidad/(abs(Cantidad))) as Valor,Sum([Cantidad]) AS unidades
,first(Camarero) as Agente
,min(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaINI ,max( format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaFIN
FROM Ventadia where Familia <> `Forma_De_Pago` and Ticket <>`` and cantidad <>0 and codPLU <> `ADD`


Union
SELECT 5,`Venta Total sin invitar: ` as Movimientos, sum(abs(PrecioTotalADD)*Cantidad/(abs(Cantidad))) as Valor,Sum([Cantidad]) AS unidades
,first(Camarero) as Agente
,min(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaINI ,max( format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaFIN
FROM Ventadia where Ticket <>`` and tipo_Invitado=0 and familia <> `Forma_De_Pago` and cantidad <>0 and codPLU <> `ADD`


union
SELECT 5,`Venta Total Invitado: ` as Movimientos, sum(abs(PrecioTotalADD)*CAntidad/(abs(Cantidad))) as Valor,Sum([Cantidad]) AS unidades
,first(Camarero) as Agente
,min(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaINI ,max( format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaFIN
FROM Ventadia where Ticket <>`` and tipo_Invitado=-1 and familia <> `Forma_De_Pago` and cantidad <>0 and codPLU <> `ADD`

union
SELECT 5,`Venta Total de ` & Camarero & `: sin invitar ` as Movimientos, sum(abs(PrecioTotalADD)*Cantidad/(abs(Cantidad))) as Valor,Sum([Cantidad]) AS unidades
,first(Camarero) as Agente
,min(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaINI ,max( format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaFIN
FROM Ventadia where Ticket <>`` and tipo_Invitado=0 and familia <> `Forma_De_Pago` and cantidad <>0
Group by Camarero

union
SELECT 5,`Venta Total de ` & Camarero & ` invitado : ` as Movimientos, sum(abs(PrecioTotalADD)*Cantidad/(Abs(Cantidad))) as Valor,Sum([Cantidad]) AS unidades
,first(Camarero) as Agente
,min(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaINI ,max( format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaFIN
FROM Ventadia where Ticket <>`` and tipo_Invitado=-1 and familia <> `Forma_De_Pago` and cantidad <>0
Group by Camarero

UNION SELECT 6, `Z Total incluyendo Descuadre` as Movimientos, sum(PrecioTotal) as Valor,0 as unidades
,first (Camarero) as Agente
,min(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaINI ,max(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaFIN
From Ventadia where familia = `FUNCION` and (artnombre=`DESCUADRE` or artnombre=`Z`)

UNION SELECT 6, `Z Descuadre` as Movimientos, PrecioTotal as Valor,0 as unidades
,(Camarero) as Agente
,(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaINI ,( format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaFIN
From Ventadia where familia = `FUNCION` and artnombre=`DESCUADRE`;
UNION
SELECT 7,`Ticket:` & Ticket & ` cobrado` AS Movimientos, Sum(abs(PrecioTotalADD)*Cantidad/(abs(Cantidad))) as Valor,Sum([Cantidad]) AS unidades
,first(Camarero) as Agente
,min(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaINI ,max( format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaFIN
FROM Ventadia where Familia <> `Forma_De_Pago` and Ticket <>`` and tipo_Invitado=0 and cantidad <>0
Group by Ticket




UNION
SELECT 7,`Ticket:` & Ticket & ` invitado` AS Movimientos, Sum(ABS(PrecioTotalADD)*Cantidad/(abs(Cantidad))) as Valor,Sum([Cantidad]) AS unidades
,first(Camarero) as Agente
,min(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaINI ,max( format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaFIN
FROM Ventadia where Familia <> `Forma_De_Pago` and Ticket <>`` and tipo_Invitado=-1 and cantidad <>0
Group by Ticket;

UNION
SELECT 7,`Ticket:` & Ticket & ` info anula` AS Movimientos, ArtNombre,0 as unidades
,Camarero as Agente
,format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`) as FechaINI , format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`) as FechaFIN
FROM Ventadia where Familia =`Anulacion` and artNombre like `Anula el*`


UNION SELECT 7, `Ticket:` & Ticket & ` info anulado por` AS Movimientos, ArtNombre,0 as unidades
,(Camarero) as Agente
,(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaINI ,(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaFIN
FROM Ventadia where Familia =`Anulacion` and artNombre like `Anulado*`;

UNION SELECT 8, `Total ` & format(Fecha,`yyyy/mm/dd`) &` ` & format(Hora,`hh`) AS Movimientos, Sum(abs(PrecioTotalADD)*Cantidad/(abs(Cantidad))) as Valor,Sum([Cantidad]) AS unidades
,first(Camarero) as Agente
,min(format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaINI ,max( format(fecha,`yyyy/mm/dd`) & `H` & format(Hora,`hh:mm`)) as FechaFIN
FROM Ventadia
where Familia <> `Forma_De_Pago` and Ticket <>`` and tipo_Invitado=0 and cantidad <>0
Group by `Total ` & format(Fecha,`yyyy/mm/dd`) &` ` & format(Hora,`hh`)







El resultado en una Base de datos de Pruebas es el siguiente

MovimientosvalorCambios:1000Cobro: FP:ESPECIAL1 4Cobro: FP:ESPECIAL2 2Cobro: pendiente de cobro:14Ingresos:200Pagos:400Ticket:14 cobrado6,1Ticket:15 cobrado4Ticket:16 invitado4Ticket:17 cobrado3Ticket:18 cobrado8Ticket:18 info anulado porAnulado en T:21Ticket:19 cobrado8,5Ticket:20 cobrado15Ticket:20 invitado42Ticket:21 cobrado-8Ticket:21 info anulaAnula el ticket 18Ticket:22 cobrado19Ticket:23 cobrado18Ticket:24 cobrado14Venta Total de ?? invitado : 46Venta Total de ??: sin invitar 33,6Venta Total de Agente 1: sin invitar 3Venta Total de Agente 2: sin invitar 51Venta Total Invitado: 46Venta Total sin invitar: 87,6Z Descuadre1132,4Z Real en Caja2000
*Pagos y retirado los hemos juntado en uno solo pero es fail de separar desde la base de datos

Datos del Cierre

Efectivo= Total Ventas-Pend De cobro-TarjetasyCheques-Pagos-Retirado+Ingresos+Cambio inicial
Efectivo=87,6-4-2-14+200-400+1000=867,6
Al cerrar la caja hemos contado el real y en el ejemplo salen 2000 euros así que hay un descuadre positivo de: 2000-867,6=1132,4 ( que tambien aparecen en la consulta), en general los descuadres vienen de devolver mal un cambio. Y no son tan altos

Los datos de cada venta se pueden obtener de la lista de tickets, si en la SQL quitamos las agrupaciones veremos la lista de los artículos del ticket.



Otras Consultas de tickets


SELECT Ticket,
first(numero) as mesa,
val(max(0 & comensales))+abs(isnull(max(comensales))) as personas,
format(min(fecha & ` ` & hora),`hh`) as h24, first(Camarero) as Agente,
Sum(abs(PrecioTotalADD)*Cantidad/(abs(Cantidad))) as Total,
Sum([Cantidad]) AS Unidades,
0 as Total_Anulado,
0 as Unidades_Anuladas,
0 as Total_Invitado,
0 as Unidades_Invitadas,
format(`00:00:` & datediff(`s`,min(fecha & ` ` & hora),max(fecha & ` ` & hora)),`hh:mm:ss`) as tiempoabierta
FROM Ventadia where Familia <> `Forma_De_Pago` and Ticket <>`` and tipo_Invitado=0 and cantidad <>0
Group by Ticket
Union
SELECT Ticket,
first(numero) as mesa,
val(max(0 & comensales))+abs(isnull(max(comensales))) as personas,
format(min(fecha & ` ` & hora),`hh`) as h24, first(Camarero) as Agente,
0 as Total,
0 AS Unidades,
Sum(abs(PrecioTotalADD)*Cantidad/(abs(Cantidad))) as Total_Anulado,
Sum([Cantidad]) AS Unidades_Anuladas,
0 as Total_Invitado,
0 as Unidades_Invitadas,
`00:00:00` as tiempoabierta
FROM Ventadia where Familia <> `Forma_De_Pago` and Ticket <>`` and tipo_Invitado=0 and cantidad <>0
Group by Ticket
Union
SELECT Ticket,
first(numero) as mesa,
val(max(0 & comensales))+abs(isnull(max(comensales))) as personas,
format(min(fecha & ` ` & hora),`hh`) as h24, first(Camarero) as Agente,
0 as Total,
0 AS Unidades,
0 as Total_Anulado,
0 AS Unidades_Anuladas,
Sum(abs(PrecioTotalADD)*Cantidad/(abs(Cantidad))) as Total_Invitado,
Sum([Cantidad]) AS Unidades_Invitadas,
`00:00:00` as tiempoabierta
FROM Ventadia where Familia <> `Forma_De_Pago` and Ticket <>`` and tipo_Invitado=0 and cantidad <>0
Group by Ticket
Registros relacionados