Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Facturas con QReport (https://www.clubdelphi.com/foros/showthread.php?t=19337)

adebonis 10-03-2005 23:41:08

Facturas con QReport
 
Hola.

Utilizo delphi 5 y QReport 3.5. Quiero generar facturas y las dispongo así:

Una banda rbTitle para los datos de la factura (número, cliente...)
Una banda brColumnHeader par ala cabecera de las íneas de la factura
Una banda rbDetail para las líneas de la factura
Una banda rbSummary para los totales de la factura con la propiedad AlingToBottom en True

Cada una de las líneas de la factura contiene una texto variable que puede ocupar una o varias líneas en la factura. De hecho en una página me caben 23 líneas.

Bien. El caso es que si hay 23 o menos líneas no hay problema y se imprime correctamente en una sola página, pero si hay más de 23 líneas y hasta 31 se imprime en dos páginas, pero en la seguna página solo se imprimen la banda rbColumnHehader mas la rbSummary pero sin alinearse en el pie de la página. En cambio si hay más 31 líneas la segunda página se imprime correctamente (con una sola línea en la seguna página) y la banda rbSummary en el pie de la página.

O sea. que desde que hay 24 a 31 líneas la segunda página no se imprime corectamente, pues la banda rbSummary no se imprime al pie de la página que es lo que yo quiero. Y además no puedo controlar las líneas pues cada concepto de la factura puede contaner varias líneas.

Espero me puedan ayudar. Gracias.
Adolfo de Bonis Mora

diegoforever24 11-03-2005 02:17:00

Solución
 
Saludos,

Lo que debes es omitir la banda Title en la primera y utilizar solo el Head, para que pueda aparecer en todas las hojas y que el summary pueda aparecer después de la última línea al final de la última página.

pijo 11-03-2005 13:29:11

Es normal ....
 
... a mi tambien me ha pasado.
Dependiendo del impreso he encontrado dos maneras de solucionar el problema.

1.- La manera fácil que normalmente no funciona:
hacer una llamada al QuickRep1.resetpagefootersize dentro del beforeprint de la summary.

2.- La manera que siempre funciona:
en el afterprint de la líneas comprobar si se trata del último registro y si este esta entre las líneas 24 y 31, si es asi deberás llamar al método QuickRep1.NewPage y todo andará bien.

El problema es que si no pones este código, el QuickReport no se da cuenta de que el summary no cabe hasta que ya lo ha dibujado y entonces al ponerlo en una nueva página no lo alinea abajo. Si la llamada a la nueva página la haces tu antes de que quickreport lo haga el dibujado se hace correcto (supongo). A mi me ha funcionado varias veces ya.

ánimos

adebonis 13-03-2005 13:37:05

Facturas con QReoprt
 
Hola.

Esta solución ya la había pensado pero el problema que tengo es que las líneas de facturas tiene longitud variable y pueden ocupar varias líneas dentro de la bande detalle, y no puedo conrolar realmente el espacio ocupado por las líneas de detalle.

No he encontrado ninguna propiedad que diga la altura ocupada por la banda de detalle una vez impresa. Creo que esta sería la forma de controlarlo.

Bueno, si hay alguna idea más...

Gracias
Adolfo de Bonis Mora

jlmelida 13-03-2005 22:16:06

Cita:

Empezado por adebonis
Hola.

Esta solución ya la había pensado pero el problema que tengo es que las líneas de facturas tiene longitud variable y pueden ocupar varias líneas dentro de la bande detalle, y no puedo conrolar realmente el espacio ocupado por las líneas de detalle.

No he encontrado ninguna propiedad que diga la altura ocupada por la banda de detalle una vez impresa. Creo que esta sería la forma de controlarlo.

Bueno, si hay alguna idea más...

Gracias
Adolfo de Bonis Mora

No puedes saber la altura pero si el numero de registros que se imprimen en la banda detalle.
Usa una variable que sea visible en toda la unidad ( la declaras en la parte de implementación y despues de los uses)

implementation

uses MiUnidad1, MiUnidad2;

{$R *.DFM}
var
iContador:Integer;


La actualizas en el evento afterprint de la banda details y ves el valor en el evento beforeprint. Si ha llegado al valor problematico, usa el metodo que te ha indicado Pijo, que funciona de forma correcta, esto es, llamas al metodo NewPage y pones la variable a cero.

Como ayudas, procura que la banda rbsummary no tenga tanta altura. Normalmente tendrás que poner allí los totales. Cuanto menos ocupe, menos facturas con problemas tendrás.

Saludos:

adebonis 14-03-2005 17:46:54

Facturas con QReport
 
Hola.

Ya he encontrado la solución a mi problema.

Existe la propiedad "Expanded" de solo lectura que indica los mm que una banda ha tenido que expanderse debido a los controles insertados cada vez que se imprime. Normalmente su valor es 0, pero si el control QRExpr ocupa varias líneas y se expande, esta propiedad lo indica. Así que en lugar de controlar el número de líneas sólo debo controlar el espacio que ocupan, y me funciona perfectamente.

Garcias.
Adolfo de bonis MOra

pijo 15-03-2005 09:15:41

Otra de las posibles soluciones, ahora que ya has encontrado la tuya propia, es controlar el espacio que queda por imprimir en cada hoja para saber si te va caber el rbSummary o no. Hay una propiedad del quickReport que te indica la posición vertical en la que se esta generando el report (CurrentY).
Si sabes que despues de la última línea tienes que imprimir los totales, sabes lo que ocupa la banda de totales, sabes los márgenes que utilizas en el report, también puedes calcular si queda espacio disponible o no en la página para imprimir el rbSummary.

ánimos
Siempre hay más de una solución para un mismo problema.


La franja horaria es GMT +2. Ahora son las 11:55:47.

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