Muchos generadores de informes modernos le permiten itegrar otro informe, así llamado subinforme. ¿Para qué? Por ejemplo, para hacer la proyección del informe más cómoda. Si el informe principal y el subinforme son de un tipo diferente, es más conviniente crearlos separadamente.
Además, dividir el informe en partes de esta manera puede gestionar la estructura del informe según las condiciones. Por ejemplo, muestra alguna información nueva en el informe principal, pero según estos datos o algún parámetro del informe, se seleccionará uno de varios subinformes. Esto hace su informe más universal. No hay necesidad de crear varios informes en cada caso particular.
El usuario del generador de informes ActiveReports ha encarado este problema:
La respuesta del soporte técnico:
Sí, puede seleccionar subinformes desde el informe padre a base de unas condiciones. Por ejemplo, puede utilizar la propiedad Visible del elemento de gestión SubReport en un evento del formato Detail para gestionar el registro de los informes adjuntados a base de una variable del contador que se aumenta cada vez que se invoca el evento Detail.
En FastReport.Net un subinforme se crea simplemente en otra página y tiene el acceso a los mismos datos que el informe principal. Al informe principal se añade el objeto Subreport en el lugar en el que tiene pensado colocar el subinforme. El objeto es un hipervínculo a la página del informe que se crea enseguida. Como parte de la nueva página del informe cree un modelo necesario.
Por cierto, primero puede crear un informe con varias páginas y después, si quiere, añadir un objeto subreport y colocar en sus propiedades un hipervínculo a la página deseada.
Vamos a examinar cómo hacer un informe que muestre un subinforme según una condición. En realidad, la idea es muy fácil. Gracias al script integrado en el informe vamos a establecer una propiedad de visualización para el subinforme deseado. Al mismo tiempo, los subinformes tienen que estar colocados en un mismo lugar, un objeto encima del otro.
Supongamos que nuestro informe muestra información sobre los pedidos. A la tabla de pedidos están relacionadas unas más: más detalles del pedido, productos, clientes. Aparte de la información sobre el pedido, nos gustaría mostrar la lista de productos en el pedido o la información sobre el cliente. El informe tiene un parámetro sugún la condición. De este parámetro vamos a mostrar bien la lista de productos, bien la información del cliente.
The template of the main report is pretty simple:
La información principal del pedido se saca de la tabla Orders. Al lado de los campos añadidos colocamos un objeto Subreport. En las propiedades de Subreport1 hay que poner la propiedad PrintOnParent en true.
Cuando hemos añadido a la página del informe el objeto Subreport, se ha ñadido automáticamente una nueva página del informe. En esta página creamos un modelo de subinforme que va a mostrar la lista de productos. Como la tabla Orders está relacionada a Order Details, el subinforme mostrará información que corresponda al pedido actual. La tabla Order Details también está relacionada con la tabla Products y vamos a utilizar los datos de esta relación:
Por eso los hipervínculos a los campos se ven así: Order Details.Products.ProductName.
Ahora añadimos un objeto más Subreport. Lo colocamos encima del objeto Subreport1. Para ese también hay que poner una propiedad PrintOnParent = true.
Al modelo del segundo subinforme añadimos los campos de la tabla Customers que está relacionada a Orders.
Ahora tenemos un informe con dos subinformes. Añadimos al informe un parámetro. El valor del parámetro puede establecer desde fuera del informe, por ejemplo, desde el programa del usuario.
Para la banda Data en el informe principal creamos un manejador de evento BeforePrint:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
private void Data1_BeforePrint(object sender, EventArgs e) { if ((int)Report.GetParameterValue("Parameter") == 1) { Subreport1.Visible = false; Subreport2.Visible = true; } else { Subreport1.Visible = true; Subreport2.Visible = false; } } |
El código es muy simple, por eso basta tener conocimientos mínimos de programación ara crear un informe así.
Al final, el variante de la lista de productos se verá así:
Y el variante con la información sobre el cliente así: