Guía rápida para usuarios de Crystal Reports (4ª parte) (reeditado)

Continuación…

10.- En cuanto a la vinculación de informes padre e hijos, se pueden contar bastantes cosas: normalmente la condición de lo que se muestra en el hijo se puede hacer desde la propiedad del subinforme “vinculación” (clic derecho del ratón sobre el control subinforme recién añadido). De ahí la utilidad del punto 8. Podéis coincidir un parámetro que es un id para el informe padre y un fk del subinforme (¿me seguís? el típico caso de información relacionada que interesa tener en un informe pero, por cuestiones de integridad en distintas tablas). ¿Qué pega hay en todo esto? pues que en el combobox que aparece en la parte de abajo en el cuadro de diálogo solamente sugiere campos para vincular que APARECEN en el subinforme (no todos los que tiene el subinforme, como parecería más útil), lo cual considero una limitación bastante grande. Solución: punto 8, si no queréis que en vuestro subinforme se pinten identificadores, claro.

11.- En cuanto a la inserción de subinformes: primero insertad objeto subinforme, elegid el informe a “pegar”, colocadlo, y después estableced la vinculación padre-hijo. En este orden, porque al elegir el informe destino a encasquetar se os da la opción de establecer la vinculación… pero ya os digo yo que no funciona bien. Es mejor hacerlo después… y comprobar que no se ha perdido, porque a veces introduces la vinculación y al volver a hacer clic derecho y comprobar… ¡oh, sorpresa!, a desaparecido. Otra cosa, si vais a pegar varios subinformes dentro de un mismo padre, pegad cada uno en una sección diferente (Asistente de sección; clic derecho sobre el nombre de una sección…) para que no se os solapen unos con otros.

12.- Si hacéis algún cambio en el subinforme, no olvidéis actualizar su aparición en el padre (clic derecho sobre el control subinforme….) o los cambios no se harán efectivos.

13.- Las secciones que se pueden añadir tienen las propiedades que las réplicas de las que se clonan; es decir: secciones tipo detalles (que repetirán sus contenidos mientras queden datos),
secciones tipo encabezado y pie de página (que deberán caber en una página) y del tipo encabezado y pie de informe (que irán al principio y al final del informe y deberán caber en una página).

14.- Por último, existe la opción de hacer que no se muestre un subinforme si éste se encuentra vacío de contenido (la consulta no ha devuelto datos y estaría en blanco). Para ello, haced que el subinforme se cargue en una subsección (una opción muy recomendable, lo de insertar los subinformes en subsecciones propias, porque así se autoajustan los espacios en blanco para que no haya “huecos”), y en las opciones contextuales de esta sección existe una para ocultar la sección si está en blanco. Marcadla y ya está. Repito, esta opción es muy interesante para dar una presentación al informe como debe ser, suprimiendo espacios blancos innecesarios cuando, por cualquier circunstancia, la consulta que carga el subinforme no devuelve nada y el subinforme se cargaría en blanco.

Finalmente, este es el código que a mi me funciona. Para los que deseen más información, no tienen más que echar un vistazo a la segunda parte de esta pequeña guía. Lo que hago es crear un informe de la clase del informe concreto que pretendo generar, indicar la fuente de datos (DataSet) de los subinformes contenidos, indizados en un array, establecer la fuente de datos del informe padre o contenedor principal, establecer sus parámetros y abrir el formulario que contendrá el control CrystalReportViewer, que me permitirá mostrar el informe. Este esquema funciona; comprobado.

Dim informeOferta As New informeOfertasVenta()
informeOferta.Subreports(0).SetDataSource(datosSeleccionado1.Tables(0))
informeOferta.Subreports(1).SetDataSource(datosSeleccionado2.Tables(0))
informeOferta.Subreports(2).SetDataSource(datosSeleccionado.Tables(0))
informeOferta.SetDataSource(listaOfertas.Tables(0))
informeOferta.SetParameterValue(“id_oferta”, idOfertaSeleccionada)
frmReportes.CRVinforme.ReportSource = informeOferta
frmReportes.ShowDialog()

Esto es todo. Soy consciente de que me explico fatal, así que si alguien tiene algún problema que no dude en enviármelo y le atenderé con gusto.

4 pensamientos en “Guía rápida para usuarios de Crystal Reports (4ª parte) (reeditado)

  1. no entiendo muy bien lo de las secciones. . . .tengo dos subinformes . .donde los ubico . . por q si los pongo en la seccion de detalles me sale una hoja por registro . . si lo coloco en la seccion head me queda bien . . ?? pero esa es la forma correcta de hacerlo?

    • Hace ya mucho que no toco Crystal Reports, pero si no recuerdo mal la sección de detalles se entiende como la sección variable, la que contiene los datos, que puede crecer varias páginas y que cada página tiene contenidos diferentes, y que la sección head es una sección de tamaño constante y que se repite en todas las páginas (una cabecera, sin más). En tu caso, si sabes que los datos de ambos registros te van a caber siempre en una sola página puedes meterlo en la sección head, pero si sospechas que pueden ocupar más de una página tenlo en cuenta y ponlo en los detalles o de lo contrario el resultado puede no ser satisfactorio. Prueba con una buena cantidad de datos de relleno a ver qué sale.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s