Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Como Hacer Un Reporte De Ventas?? (https://www.clubdelphi.com/foros/showthread.php?t=56601)

metroyd 21-05-2008 21:53:28

Como Hacer Un Reporte De Ventas??
 
Hola, me interesa hacer un reporte de las ventas realizadas en el dia. Tengo dos tablas: VENTA (id_venta,fecha_venta,total_venta) y DETALLE_VENTA(id_venta,id_producto,cantidad_vendida,precio_venta).

El reporte me gustaria que quedara asi:

-------------------------------------------------------------------------
REPORTE DE VENTAS EN EL DIA
------------------------------------------------------------------------

ID VENTA: 1 FECHA: 12/05/2008 TOTAL: $354.00

DETALLE:
2 Chocolates
4 Cervezas
------------------------------------------------------------------------

ID VENTA: 2 FECHA: 12/05/2008 TOTAL: $114.00

DETALLE:
1 cigarros
9 Refrescos cola
-------------------------------------------------------------------------
ID VENTA: 3 FECHA: 12/05/2008 TOTAL: $451.00

DETALLE:
3 huevos
6 latas de atun
2 gomas mascar
------------------------------------------------------------------------

Algo asi. Utilizo quickreport, y qrsubdetail.
Si hago una consulta uniendo ambas tablas y lo mando al reporte, me imprime un registro por cada espacio en un QRSubdetail.
Espero su ayuda, gracias!!!!!

ContraVeneno 21-05-2008 22:40:46

pues solo te faltaría agregar una banda TQRGroupBand en la propiedad "Expression" colocar el nombre del campo de la ID de la venta. En esa misma banda, pondrías El id de la venta, la fecha y el total sería un TQRExpr con la expresión Sum(Total) y la propiedad ResetAfterPrint establecida a verdadero.

metroyd 22-05-2008 16:22:35

Cita:

Empezado por ContraVeneno (Mensaje 288414)
pues solo te faltaría agregar una banda TQRGroupBand en la propiedad "Expression" colocar el nombre del campo de la ID de la venta. En esa misma banda, pondrías El id de la venta, la fecha y el total sería un TQRExpr con la expresión Sum(Total) y la propiedad ResetAfterPrint establecida a verdadero.

El QRGroup Band va antes de los detalles de la venta??? Esta banda me servira para capturar aquellos registros repetidos?? Es decir, El ID de la venta, la fecha y el total?????
Y en subdetail pondria los detalles de las ventas???????

ContraVeneno 22-05-2008 16:45:58

Cita:

Empezado por metroyd (Mensaje 288526)
El QRGroup Band va antes de los detalles de la venta??? Esta banda me servira para capturar aquellos registros repetidos?? Es decir, El ID de la venta, la fecha y el total?????
Y en subdetail pondria los detalles de las ventas???????

La banda de agrupación se ajusta automáticamente en el orden que le corresponde, es decir, tu solo la pones en el reporte y ella busca su lugar, antes o después de donde le corresponda. Si es de agrupación, se pone antes del detalle, si le dices que la banda es de sumatoria, se pone al final.

Los registros se agruparán automáticamente dependiendo del campo que tu especifiques en la propiedad Expression de la QRGRoupBand y dependiendo del orden de tu consulta. Los campos comunes, como ID y fecha, los puedes poner en esta banda, para evitar que se vean repetidos (como si los pusieras en la banda detalle). El total tendría que ir en una banda GroupFooter para que sume los resultados de cada grupo.

El detalle de las ventas, pues tendrías que ponerlo en la banda QRDetail.

metroyd 22-05-2008 18:54:04

Hola, Pues con lo que me has explicado ya puedo lograr imprimir el resultado de una sola venta, por ejemplo:

ID VENTA:2 FECHA: 22/05/2008 TOTAL: $44.00

DETALLE: CANTIDAD VENDIDA COSTO ($)
-----------------------------------------------------------------------------------
Refrescos 2 10.0
chocolate 4 6.0


Pero ahora me gustaria poder imprimir las ventas realizadas en un rango de fechas, por ejemplo, el resultado seria asi:

ID VENTA:2 FECHA: 22/05/2008 TOTAL: $44.00

DETALLE: CANTIDAD VENDIDA COSTO ($)
-----------------------------------------------------------------------------------
Refrescos 2 10.0
chocolate 4 6.0
__________________________________________________________________________

ID VENTA:3 FECHA: 25/05/2008 TOTAL: $180.00

DETALLE: CANTIDAD VENDIDA COSTO ($)
-----------------------------------------------------------------------------------
Papas 10 15.0
chocolate 6 6.0
Pan Tostado 2 6.0
__________________________________________________________________________

ID VENTA:5 FECHA: 25/05/2008 TOTAL: $3.00

DETALLE: CANTIDAD VENDIDA COSTO ($)
-----------------------------------------------------------------------------------
Gomas de mascar 3 1.0
__________________________________________________________________________

La consulta que hago para obtener estos resultados es:
Código SQL [-]SELECT venta.id_venta,venta.fecha_venta,venta.total_venta,productos.descripcion,detalle_venta.precio_unitar io,detalle_venta.cantidad_vendida FROM venta,productos,detalle_venta WHERE venta.fecha_venta>="aki va la fecha" AND venta.fecha_venta<="aki va la otra fecha" AND venta.id_venta = detalle_venta.id_venta AND productos.id_producto = detalle_venta.id_producto order by venta.id_venta


Si aplico esta consulta con lo que ya tengo en el quickReport, me aparece en el qrgroup los datos de la primera venta, y en el SubDetail aparecen todos los productos vendidos de todas las ventas que cumplan el rango.

Código Delphi [-]
form18.QuickRep1.DataSet:=modulo.busqueda;
         form18.QRGroup1.Expression:=modulo.busqueda.fieldbyname('id_venta').AsString;
     form18.QRSubDetail1.DataSet:=modulo.busqueda;
     form18.QRDBText1.DataSet:=modulo.busqueda;
     form18.QRDBText2.DataSet:=modulo.busqueda;
     form18.QRDBText3.DataSet:=modulo.busqueda;
     form18.QRDBText4.DataSet:=modulo.busqueda;
     form18.QRDBText5.DataSet:=modulo.busqueda;
     form18.QRDBText6.DataSet:=modulo.busqueda;
     form18.QRDBText1.DataField:='id_venta';
     form18.QRDBText2.DataField:='fecha_venta';
     form18.QRDBText3.DataField:='total_venta';
     form18.QRDBText4.DataField:='descripcion';
     form18.QRDBText5.DataField:='cantidad_vendida';
     form18.QRDBText6.DataField:='precio_unitario';
     form18.QuickRep1.Preview;

Espero tu ayuda, gracias!!!!!

ContraVeneno 22-05-2008 19:06:25

Código Delphi [-]
with Modulo.Busqueda do begin
 If active then close;
 SQL.Clear;
 SQL.Add('SELECT V.id_venta, V.fecha_venta, V.total_venta, P.descripcion,');
 SQL.Add('DV.precio_unitario, DV.cantidad_vendida ');
 SQL.Add('FROM venta V');
 SQL.Add('join Detalle_Venta DV on V.ID_Venta = DV.ID_Venta');
 SQL.Add('join Productos P on DV.Id_Producto = P.ID_Producto');
 SQL.Add('WHERE V.fecha_venta between :FechaIni and :FechaFin');
 SQL.Add('order by V.id_venta');
 ParamByName('Fechaini').AsDateTime := unDateTimePickerIni.DateTime;
 ParamByName('FechaFin').AsDateTime := unDateTimePickerFin.DateTime;
 Open;
end; //with

metroyd 22-05-2008 19:45:36

mmmm:( , el resultado sigue siendo el mismo amigo:
http://www.subirimagenes.com/fondosy...do-506687.html

Esta es la estructura de mi quick Report:
http://www.subirimagenes.com/fondosy...te-506692.html

y este es el resultado de la consulta que me pasaste, que pues si funciona:
http://www.subirimagenes.com/otros-r...a2-506736.html

Y este es el codigo del boton Imprimir despues de haber seleccionado las fechas:
Código Delphi [-]
with Modulo.Busqueda do begin
        If active then close;
        SQL.Clear;
        SQL.Add('SELECT venta.id_venta, venta.fecha_venta, venta.total_venta, productos.descripcion,');
        SQL.Add('detalle_venta.precio_unitario, detalle_venta.cantidad_vendida ');
        SQL.Add('FROM venta');
        SQL.Add('join detalle_venta on venta.id_venta = detalle_venta.id_venta');
        SQL.Add('join productos on detalle_venta.id_producto = productos.id_producto');
        SQL.Add('WHERE venta.fecha_venta between "2008-05-01" and "2008-05-31"');
        SQL.Add('order by venta.id_venta');
        //ParamByName('Fechaini').AsDateTime := unDateTimePickerIni.DateTime;
        //ParamByName('FechaFin').AsDateTime := unDateTimePickerFin.DateTime;
        Open;
     end;

     form18.QuickRep1.DataSet:=modulo.busqueda;
     form18.QRGroup1.Expression:=modulo.busqueda.fieldbyname('id_venta').AsString;
     form18.QRSubDetail1.DataSet:=modulo.busqueda;
     form18.QRDBText1.DataSet:=modulo.busqueda;
     form18.QRDBText2.DataSet:=modulo.busqueda;
     form18.QRDBText3.DataSet:=modulo.busqueda;
     form18.QRDBText4.DataSet:=modulo.busqueda;
     form18.QRDBText5.DataSet:=modulo.busqueda;
     form18.QRDBText6.DataSet:=modulo.busqueda;
     form18.QRDBText1.DataField:='id_venta';
     form18.QRDBText2.DataField:='fecha_venta';
     form18.QRDBText3.DataField:='total_venta';
     form18.QRDBText4.DataField:='descripcion';
     form18.QRDBText5.DataField:='cantidad_vendida';
     form18.QRDBText6.DataField:='precio_unitario';
     form18.QuickRep1.Preview;

Como veras solo estoy probando las ventas del mes de mayo, tengo como 4 ventas, y solo me muestra la primera y en Detalle muestra los productos de todas las ventas

Gracias por tu paciencia amigo, espero sigas ayudandome

ContraVeneno 22-05-2008 19:52:55

PUes supongo que el problema será que estas utilizando una banda "Sub Detail" cuando debería ser "Detail"

metroyd 22-05-2008 19:59:19

Bueno, quite la SuDetail y agrege una QRBand con tipo Detail, y ahi meti los QRDBTEXT correspondientes a Descripcion, cantidad vendida y costo. pero no cambio el resultado!!
Si trato de poner su propiedad linkband al QRGroup no realiza la operacion de mostrar el reporte.
Tal vez este reporte sea imposible de hacer con QuickReports

ContraVeneno 22-05-2008 20:10:14

tengo infinidad de reportes que hacen eso que pides, todos hechos con quickreports. No es imposible.

Simplemente algún detalle está faltando.

¿Seguro que pusiste el campo "ID_Venta" en la propiedad "Expression" de la banda "GroupBand" ?

metroyd 22-05-2008 20:12:33

Cita:

Empezado por ContraVeneno (Mensaje 288611)
tengo infinidad de reportes que hacen eso que pides, todos hechos con quickreports. No es imposible.

Simplemente algún detalle está faltando.

¿Seguro que pusiste el campo "ID_Venta" en la propiedad "Expression" de la banda "GroupBand" ?

Código Delphi [-]
form18.QRGroup1.Expression:=modulo.busqueda.fieldbyname('id_venta').AsString;


Es correcto esto?

Ahora que recuerdo mencionaste algo de AfterPrint en Falso, pero este es un EVENTO, como puedo asignar el valor falso?? sera esto lo que hace que falle????

ContraVeneno 22-05-2008 20:16:44

ya vi el problema, jejeje

cuando haces:
Código Delphi [-]
form18.QRGroup1.Expression:=modulo.busqueda.fieldbyname('id_venta').AsString;

Estas agrupando por el valor de ID_Venta, no por el campo.

tiene que ser:
Código Delphi [-]
form18.QRGroup1.Expression:='ID_Venta';

///o tambien
form18.QRGroup1.Expression:=modulo.busqueda.Fields[0].FieldName;

metroyd 22-05-2008 20:20:50

Excelente Maestro
 
UFF, HASTA QUE POR FIN RESULTÓ :)
gRACIAS

OYE ME PODRIAS AYUDAR CON OTRO REPORTE PARECIDO A ESTE?? PERO AKI MANEJO LA CARTELERA DE UN CINE, DEJA TE PASO EL LINK DEL HILO DONDE PUSE ESTO

metroyd 22-05-2008 20:38:12

Ayuda Con Este Reporte
 
http://www.clubdelphi.com/foros/showthread.php?t=56570

metroyd 22-05-2008 20:48:19

aki va el problema que quiero resolver:
 
Hola otra vez espero me puedan ayudar. Tengo una tabla llamada HORARIOS, donde guardo peliculas que se exhiben en un cine:
http://www.subirimagenes.com/otros-horarios-506992.html

y otra tabla llamada

FUNCIONES (id_funcion,cve_pelicula,sala,dia,funcion). aki guardo los horarios de las funciones correspondientes a los dias de la semana para las peliculas. Los horarios de Lunes a Viernes son los mismos, solo cambian Sabados y domingos. puede haber un maximo de 6 funciones al dia:

http://www.subirimagenes.com/otros-f...es-507000.html


Entonces, ahora quiero imprimir la cartelera de la semana, de tal manera que que mi reporte quede mas o menos asi:

Reporte de cartelera de la semana
---------------------------------------------------------------------

00001 Soy legenda SALA:1 DUR: 89 Min. CLAS: b-15
LUNES - VIERNES: 2:30 pm 4:30 pm 6:30 pm 8:30 pm
SABADOS 1:25 pm 3:50 pm 7:00 pm
DOMINGOS 3:30 pm 5:30 pm 7:30 pm

----------------------------------------------------------------------
00002 amores prohibidos SALA:2 DUR: 101 Min. CLAS: b-15
LUNES - VIERNES: 5:30 pm 7:50 pm
SABADOS 3:25 pm 5:50 pm 8:00 pm
DOMINGOS 12:50 pm 3:00 pm 5:40 pm 8:00 pm
-----------------------------------------------------------------------

Si hago esta consulta: Código SQL [-]SELECT horarios.cve_pelicula,horarios.titulo,horarios.sala,horarios.distribuidor,horarios.duracion,horarios .clasificacion,funciones.dia,funciones.funcion FROM horarios,funciones WHERE horarios.titulo = funciones.pelicula and horarios.sala = funciones.sala order by sala,dia,funcion


Me muestra este resultado:

http://www.subirimagenes.com/otros-r...ta-507014.html

Y es lo que quiero plasmar en el reporte.
Con lo que me has enseñado los datos de las peliculas iran en un GroupBand asociado a la CVE_PELICULA, ahora, como y donde podria meter el campo Funciones, para que se desplegaran tal y como lo menciono mas arriba??

Ocupo esta estructura de reporte:
http://www.subirimagenes.com/otros-q...rt-500753.html

Espero tu ayuda nuevamente amigo, gracias!!!!!!

ContraVeneno 22-05-2008 23:00:36

  1. Sería mejor que maneras los días con número, Lunes = 2, martes = 3, etc. Al usuario se lo muestras con letra, pero en tu base de datos es mejor tenerlo como número.
  2. Como ya te había dicho, la banda tiene que ser de tipo "Detail", no "Sub Detail"
  3. Para sacar el reporte que necesitas, requieres de agruparlo dos veces, la primera por película y la segunda por sala. De esa forma ya puedes colocar los horarios como lo necesitas.

metroyd 23-05-2008 16:53:34

Cita:

Empezado por ContraVeneno (Mensaje 288676)

Para sacar el reporte que necesitas, requieres de agruparlo dos veces, la primera por película y la segunda por sala. De esa forma ya puedes colocar los horarios como lo necesitas.

A que te refieres con esto??
Ahora el problema que tengo es que, si te fijaste, en la banda Subdetail (q voy a cambiar por Detail) tengo un DBText para cada funcion, como de Lun a Vier son las mismas, solo tengo 6 QRDBText para esos dias, y como cada DBTExt lo asocio al campo Funcion, pues me aparece la misma funcion para todas las peliculas!!!!

ContraVeneno 23-05-2008 18:13:11

Cita:

Empezado por metroyd (Mensaje 288782)
Cita:

Empezado por ContraVeneno (Mensaje 288676)
  1. Para sacar el reporte que necesitas, requieres de agruparlo dos veces, la primera por película y la segunda por sala. De esa forma ya puedes colocar los horarios como lo necesitas.

A que te refieres con esto??

a que necesitas colocar dos bandas QRGroup, la primera en su propiedad "Expression" le pones "Cve_pelicula" y a la segunda "sala"

metroyd 28-05-2008 05:47:07

Calcular totales de venta
 
Hola, ya pude imprimir la cartelera, ahora quiero imprimir el total de un grupo de ventas realizadas, es decir, en mi tabla VENTAS tengo(id_venta, fecha_venta,total_venta),. pues ahora en mi reporte, cuando imprimo un grupo de ventas me gustaria que al final del reporte se visualize la sumatoria de todos los totales, por ejemplo:

REPORTE DE VENTAS DE MARZO A MAYO 2008
_________________________________________________________________

ID_ Venta: 4 Fecha: 15/03/2008 Total: $45.0

Detalle:

_________________________________________________________________
ID_venta: 6 FEcha:18/05/2008 Total:$50.0





Gran Total:$ 95.0
_______________________________________________________________
Pag. 1


Gracias por tu ayuda

ContraVeneno 28-05-2008 16:07:49

¿y ya viste la banda "Summary"?


La franja horaria es GMT +2. Ahora son las 19:48:14.

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