PDA

Ver la Versión Completa : Facturas con QReport


adebonis
10-03-2005, 23:41:08
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
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
... 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
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
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
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.