jump to navigation

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

Posted by ravelus in Informática.
trackback

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.

Comentarios»

No comments yet — be the first.