Saturday, January 20, 2007

Más TIPS sobre Crystal Reports

Continuando con la entrada anterior, acerca de tips de interés cuando utilizamos Crystal reports desde nuestras aplicaciones .NET (Windows Forms o ASP.NET), estas son algunas soluciones a ciertos problemas que se pueden presentar:

1. Supongamos que tenemos un reporte el cual contiene varios subreportes. Nuestro reporte principal tiene la orientación del papel de manera vertical, pero uno de los subreportes es demasiado ancho y necesita estar orientado de manera horizontal. Qué se puede hacer en este caso? Aqui está el código y el evento que debemos programar del CrystalReportViewer para alcanzar esta solución:

private void CrystalReportViewer1_DrillDownSubreport(object source, CrystalDecisions.Web.DrillSubreportEventArgs e)
{
if(e.NewSubreportName == "Subreport1")
{
ReportePrincipal.PrintOptions.PaperOrientation = PaperOrientation.Landscape;
}
}

Capturando el evento DrillDownSubreport, le estamos indicando en ese instante al subreporte que tiene asignado en su propiedad "name" el valor Subreport1, que debe utilizar el valor "Landscape" para la orientación del papel. Esta solución es muy efectiva para alcanzar el resultado esperado, además que podemos hacerlo con 1 o más subreportes adicionados al principal.

2. Cunado necesitamos agrupar información dentro de nuestro reporte, y mostrar cada grupo en una página diferente del reporte, Crystal ofrece un solución bastante simple, pero efectiva, que nos lleva a programar los eventos disparados por las diferentes secciones del reporte. En este caso vamos a programar el evento "New Page After" de las secciones GroupHeader y GroupFooter.

Lo primero entonces es indicarle al Group Header, que despligue la información del mismo grupo mientras no encuentre el último registro y el siguiente registro sea igual al que se está leyendo en el momento. Si no se cumple, entonces se ejecutaré el evento "New Page After", causando que se crea la nueva página para el nuevo grupo.

if(NOT OnLastRecord AND {sales.ord_num}=Next ({sales.ord_num}))then false

Pero esta solución causa un problema en el reporte y es que siempre se crea una página en blanco adicional, pero esto tiene una solución igualmente simple.
En la sección Group Footer, en el evento "New Page After" adicionamos la línea:

OnLastRecord

Con esto entonces tenemos dos simples soluciones a algo que en primera instancia parece ser un problema díficil de resolver. Como les decía en la entrada anterior sobre Crystal, esto es solo cuestión de conocer la herramienta y las capacidades que oferece a nível de programación.

Quiero recomendarles:
http://aspadvice.com/blogs/rjdudley/archive/tags/Crystal+Reports+.NET/default.aspx
http://www.crystalreportsbook.com/
Dos exelentes sites, de dos personajes que aportan bastante a dar soluciones efectivas a problemas con Crystal Reports utilizado desde nuestras aplicaciones .NET

3 comments:

Anonymous said...

BUENAS TARDES AMIGO, TENGO UN PROBLEMA CON ESE EVENTO NEW PAGE AFTER PERO NO ENTIENDO MUCHO LO QUE PONES EN TU ARTICULO PODRIAS MANDARME ALGUN EJEMPLO, GRACIAS
att
EDUARDO RAMIREZ
eduardoramirez80@gmail.com

Anonymous said...

Mira a lo que se refiere es que en la seccion en la cual te encuentras, si te fijas en las propiedades tienes la opcion New page After, es decir una vez que concluya ese requerimiento genera autoamticamente una nueva pagina con el siguiente registro o agrupacion.
Saludos
Andrés Espinoza
From: Ecuador

m@ntrax said...

Creo que la solucion es lo opuesto: not OnLastRecord

asi fue que a mi me funciono...