miércoles, 13 de febrero de 2008

Crystal Report. Ocultar cabecera de página cuando no hay detalle.

Típico listado de campos en columna, con una cabecera para cada columna y una línea de detalle por cada registro. También tenemos un ReportFooter con una firma. Queremos que si el detalle ocupa varias páginas la cabecera se repita en todas ellas. Sin problemas: creamos un PageHeader con nuestra cabecera de columnas.

El problema con este diseño viene cuando el reportFooter salta de página pero las líneas de detalle se quedan en la página anterior: tendremos una última página con el ReportFooter coronado con una bonita cabecera de columnas (el contenido del PageHeader) pero sin lineas de detalle.

Para solucionarlo hay que montarse una buena pajilla mental:

En el reportHeader poner esta fórmula oculta:

NumberVar x := 9999; //poner un número tan grande como el máx número de páginas previsto


En la sección de detalle, poner esta fórmula, oculta también:

NumberVar x;
If OnLastRecord and PageNumber < TotalPageCount Then x := PageNumber


Y al PageHeader poner en la fórmula asociada a su supresión:

NumberVar x;
PageNumber > x


Básicamente lo que hacemos es guardarnos el número de página en el que se acaba el detalle y usarlo para no imprimir la cabecera.(Solución copiada de aquí)

Si existe una solución más fácil ya saben, a comentarla.

2 comentarios:

Anónimo dijo...

Excelete truco, muchas gracias :)

Anónimo dijo...

Muy buen aporte, me funcionó perfecto.
Pero me funcionó colocando la primera fórmula en el encabezado de página y no en encabezado de informe.
De igual forma muchas gracias!
Saludos