PDA

Ver la Versión Completa : Agrupar en QuickReport


anitra_cattivo
20-08-2003, 23:02:53
Necesito Agrupar los Documentos de Venta.

Tablas a usar:

CLIENTES.DBF
DOCUMENTOS.DBF
MOVIMIENTOS.DBF

De la Tabla Clientes.dbf usare el Código y Razón
Social.

En la Tabla Documentos.dbf solo hay estos dos campos.
CODIGO Código del Documento
DESCRIPCIÓN Descripción del mismo (Factura, Boleta,
etc)

Hay personas que no tienen RUC, así que no pueden
solicitar Facturas por su compra, así que se le da
otro documento como una Boleta o simplemente no desean
Factura y piden Boleta.

Y la tabla Movimientos.dbf que contiene quien hace la
compra (código del cliente), en que fecha, que
documento (código de la tabla documentos.dbf) se le
emitió, el monto, etc

Si hago una relación Maestro/Detalle de Cliente a
Movimientos el Reporte me sale algo así:


000012 ROBLES S.A.C.
-------------------------------
08/01/2003 001-002536 150.00 Factura
09/01/2003 001-000039 110.50 Boleta
11/01/2003 001-002539 352.50 Factura


000014 COMAÑIA SEGUNDA
-------------------------------
08/01/2003 001-002535 254.20 Factura
10/01/2003 001-002541 198.00 Factura

.
.
.


Pero...... Hay un detalle, Como vemos en la ultima
columna esta el tipo de "documento" que se le emitio.

Me gustaría que salga así:

000012 ROBLES S.A.C.
-------------------------------
Factura
----------
08/01/2003 001-002536 150.00 Factura
11/01/2003 001-002539 352.50 Factura

Boleta
----------
09/01/2003 001-000039 110.50 Boleta


000014 COMAÑIA SEGUNDA
-------------------------------
Factura
----------
08/01/2003 001-002535 254.20 Factura
10/01/2003 001-002541 198.00 Factura


De tal forma que podría sumar la cantidad de Facturas
emitidas a ese cliente.


En la tabla MOVIMIENTOS.DBF Solo tengo el código del
Documento y el numero del mismo, la descripción del
documento lo tengo en la tabla Documentos.dbf.

Como puedo hacer en QuickReport para que me salga un
reporte parecido a este?.

Muchas pero muchisimas gracias.

__cadetill
21-08-2003, 00:42:25
bueno, esto es cuestion de ordenacion de tablas

necesitas un indice que se ordene por el campo Id_Documento que este en la tabla Movimientos y, antes de lanzar el report, ordenar la tabla por ese indice. Con esto te deberia funcionar

Espero te sirva

anitra_cattivo
21-08-2003, 01:00:20
Pero si la tabla de Movimientos esta ordenada ya por fecha?

y como se genera el Reporte despues de ordenar?. Recuerda que No solo necesito un maestro/detalle entre Clientes.dbf y Movimiento.dbf, debo ver la forma de que se considere el tipo de documento para despues poder hacer una suma de cantidades de documentos emitidos por cliente, como tambien la sumatoria de los totales (montos cobrados) por cada tipo de documento.

__cadetill
21-08-2003, 09:56:18
A ver si te he entendido...

Tienes la siguiente relacion

Clients -> Movimientos -> Documentos

no? Bien, si es así, en Movimientos es de suponer que tienes un campo Id_Cliente (por decirlo de alguna manera) que es el que te establece la relación Maestro-Detalle
Documentos es una tabla donde se almacena (por lo que he entendido) Id_Documento y Descripción y, según lo que dices en el primer Post, en Movimientos tienes un campo (llamemosle Id_Documento) que indica el tipo de Documento

Bien, visto esto, puedes ir al DatabaseDesktop y definir un indice secundario en Movimientos que sea (por ejemplo) Id_Cliente + Id_Documento + Fecha (llamemosle I_CliDocF). Entonces, antes de lanzar el listado puedes asignarle este indice a la tabla de Movimientos


TMovimientos.IndexName := 'I_CliDocF';


Ahora, ya puedes hacer las roturas como quieres con un QrGroup.

Para la descripción del tipo de documento, puedes crearte un campo de tipo Calculate en el TTable de Movimientos que te de la descripción y, mostrar ésta en el Report

Esta es una solución. Otra solución sería hacer una Query que hiciera una JOIN entre las tres tabla


select *
from clientes c inner join
movimientos m on (m.Id_Cliente = c.Id_Cliente) inner join
documentos d on (d.Id_Documento = m.IdDocumento)
where Condiciones que quieras
order by c.Id_Cliente, m.Id_Documento, m.Fecha


y hacer un report directamente de esta Query

Bueno, siento el rollo este :p

Espero te sirva

anitra_cattivo
22-08-2003, 01:01:44
Por favor. si no fuera mucha molestai. podrias explicarme un poco mas referente al segundo metodo. Me refiero al Query.

- Aqui tambien debo crear el indice que comentas en movimientos.dbf?
- A que tabla en si se le aplica el select y como debo hacer esto luego en el quickreport. Ya no es necesario el QrGroup?

En verdad no es un rollo, estoy aprendiendo mucho mientras hago pruebas, pero no sale como me gustaria. No comprendo mucho la banda QrGroup.


Muchas Gracias.

__cadetill
22-08-2003, 02:25:53
Para una demo con mas o menos explicaciones del funcionamiento del QrGroup, puedes descargarte de mi web el ejemplo que hay en ella sobre el QuickReport en Delphi-Demo de componentes

Aqui tambien encontraras la forma de unir dos tablas (o las que sean) mediante un SQL ya que el report se basa en una query

En este segundo caso, el de la Query, no hace falta que se cree ningun indice en las tablas, aunque si el volumen de datos es grande, sí es aconsejable para que la Query sea más rápida

La Query que has de lanzar es más o menos la que te he puesto en el post anterior, es decir, es una select contra la tabla "principal" que sería clientes y hacer una inner join contra la tabla de movimientos mediante el/los campo/s que una/n las dos tablas y, otra inner join para unir el resultado de la primera join con documentos para sacar la descripción del tipo de documento (uniendo también por los campos correspondientes que yo he puesto Id_Documento aunque no se realmente cual es ya que desconozco la estructura de las Tablas)

Bueno, a ver si con el ejemplo de mi web y estas explicaciones logramos que tires para delante ;)

anitra_cattivo
26-08-2003, 02:13:42
:confused:

Ok. Tengo una gran tabla formada por el Query, esta tabla contiene los datos de Clientes, Movimientos y Documentos.

Entonces, no necesito de una relacion Maestro/Detalle Pues es solo una tabla.

Veamos.

En mi reporte ira la tabla que se formo con el Query a Clientes.
Debere poner una franja de QrGroup para poner en Expression algo como Q_clientes=codigo si es que lo quiero agrupar por codigo de cliente. En la misma franja de QrGroup pondre un par de etiquetas QrDbText que contengan el Codigo del Cliente y el Nombre.

Ahora, necesito una Franja Detalles. No se que poner alli. Pues ya en el QrGroup esta el codigo y nombre del cliente.
En Detalles se me ocurre poner los movimientos de ese cliente.
Pero entre clientes (??) y su respectivo movimiento debe estar el tipo de documento.

Cliente

Ducumento
Movimientos de ese tipo de documento.

otro documento
Movimientos de ese tipo de otro documentodocumento.

Otro Cliente
.
.
.


La unica forma de que mis diminuta vista lo puede ver es asi:

Cliente (QrGroup)
Ducumento :( ( No se)
Movimientos de ese tipo de documento. (Detalle)


sniff.