Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso CR
Curso CR
Este curso le ofrece todos los conocimientos que necesita para disear informes de datos Crystal Reports
e incorporarlos en sus aplicaciones .NET (tanto Windows como Web).
En este curso aprender:
Cmo crear informes de datos utilizando el diseador de informes integrado en Visual Studio 2005
Cmo utilizar los componentes que ofrece Crystal Reports para incorporar esos informes en
aplicaciones .NET.
Cmo crear instaladores para esas aplicaciones, para facilitar su despliegue.
REQUISITOS: Para una correcta asimilacin de los contenidos del curso, el alumno deber estar
familiarizado con los conceptos fundamentales de la programacin en Visual Basic .NET y con el entorno
de desarrollo Visual Studio 2005. Igualmente, deber conocer los principales conceptos relacionados con
el mundo de las bases de datos relacionales (base de datos, tablas, filas, columnas); una ligera
familiaridad con el lenguaje SQL (en particular, con la sentencia SELECT) no es imprescindible, pero s muy
conveniente.
REQUISITOS DE SOFTWARE: Crystal Reports .NET viene incluido nicamente en la edicin Profesional de
Visual Studio 2005; si se dispone de una edicin inferior, la alternativa es adquirir de manera
independiente el producto Crystal Reports Developer, e instalarlo sobre cualquier versin de Visual Studio
2005. Como motor de bases de datos, el curso utiliza Microsoft SQL Server 2005; cualquiera de sus
ediciones es vlida (en particular, la Express, disponible gratuitamente). Los ejemplos se basan en la base
de datos AdventureWorks, que viene incluida en las ediciones de pago de SQL Server 2005; si va a utilizar
la edicin Express, puede descargarla desde aqu.
QU ES CRYSTAL REPORTS
Crystal Reports es una herramienta potente a la vez que fcil de usar para el diseo y generacin de
informes a partir de datos almacenados en una base de datos u otra fuente de informacin. Es, con
diferencia, la herramienta ms popular en su categora, y no solo entre quienes podran considerarse sus
usuarios puros (aquellos que necesitan obtener peridicamente informacin para la toma de decisiones
a partir de los datos de la empresa), sino tambin entre los programadores, que lo han convertido en su
herramienta favorita a la hora de embeber capacidades de generacin de informes dentro de las
aplicaciones a medida. A este ltimo hecho indudablemente ha contribuido mucho el que, desde hace
ms de diez aos, Crystal Reports venga siendo incorporado de serie a las herramientas de desarrollo
de Microsoft (Visual Basic y luego Visual Studio).
Con la aparicin de .NET Framework, una transformacin revolucionaria de las tecnologas de desarrollo
de Microsoft, los fabricantes de Crystal Reports se dieron a la tarea de adaptar el producto a los nuevos
1
requerimientos de la plataforma y del entorno de desarrollo. Como resultado, todas las versiones .NET
aparecidas hasta la fecha de Visual Studio han incorporado las versiones correspondientes de lo que se ha
dado en llamar Crystal Reports .NET.
Este curso tiene dos objetivos fundamentales:
Ensearle a utilizar el diseador de Crystal Reports integrado en Visual Studio 2005 para crear informes
de datos potentes y flexibles.
Mostrarle cmo incorporar esos informes en sus aplicaciones .NET para Windows y la Web, utilizando
como lenguaje de programacin a Visual Basic.
Indudablemente, otra de las caractersticas que han hecho tan popular a Crystal Reports es la amplia
gama de orgenes de datos que soporta, as como de formatos de salida a los que se pueden exportar los
resultados. El Motor de Impresin de Crystal Reports tiene una arquitectura modular, y se apoya en
controladores (drivers) independientes para acceder a los diversos orgenes de datos soportados y
generar los informes en los diferentes formatos de salida posibles.
Las posibilidades de acceso a diferentes orgenes de datos sobrepasan ampliamente la mera capacidad
para comunicarse con bases de datos (prcticamente todos los sistemas de bases de datos, tanto
relacionales como planos estn soportados), y abarcan desde la lectura de todo tipo de bitcoras (logs),
por ejemplo las producidas por los servidores Web para el seguimiento de la navegacin de los usuarios,
hasta el acceso a objetos en memoria generados por las aplicaciones que hospedan al Motor de
Impresin. Por ejemplo, en este curso veremos cmo ejecutar informes contra conjuntos de datos
(objetos de la clase DataSet) que tengamos en nuestras aplicaciones.
En cuanto a las posibilidades de salida, el Motor de Impresin de Crystal no solo nos permite obtener
nuestros resultados en papel o en pantalla (una ventana, en caso de aplicaciones Windows; o el
navegador Web, en el caso de aplicaciones Web), sino que tambin ofrece la posibilidad de exportar los
resultados a numerosos formatos externos, como Adobe PDF, Microsoft Word, Microsoft Excel, ficheros
de texto o XML, entre otros.
Tenga en cuenta que, aunque an no podemos prescindir del papel ni mucho menos, la presentacin de
informes se est convirtiendo cada vez ms en una tarea interactiva. Las versiones ms recientes de
Crystal Reports incluyen numerosas facilidades que veremos en este curso (rbol de grupos, elementos
con hiperenlaces) y que estn orientadas nica y exclusivamente a la visualizacin de informes en una
ventana de Windows o en un navegador Web.
USO
Contiene tipos compartidos por Crystal Reports.NET y otras
aplicaciones de la empresa.
Contiene la implementacin de clases para conectarse a
diferentes orgenes de informes.
Interfaz con el Motor de Impresin de Crystal Reports.
Clases para la presentacin de informes Crystal en
aplicaciones Windows.
Clases para la presentacin de informes Crystal en
aplicaciones Web
3
Puede encontrar una amplia informacin sobre todas y cada una de las tablas y otros objetos de base de
datos que contiene AdventureWorks aqu. En general, el uso de las diferentes tablas a la hora de
componer los informes es bastante intuitivo, y siempre comenzaremos cada ejemplo concreto indicando
en qu tablas se almacena la informacin a partir de la que se desea disear el informe.
INTRODUCCIN
Antes que nada, es conveniente definir qu entendemos por informe. En este curso, consideraremos
como informe a cualquier documento que presente un subconjunto de los datos almacenados en un
origen de datos (generalmente, una base de datos relacional) de una manera ms o menos elaborada. En
4
este sentido, un simple listado de los empleados de la empresa podra perfectamente considerarse un
informe.
Otro documento que muestre a esos empleados agrupados por categoras segn su volumen de ventas
del ao anterior sera otro informe, claro est bastante ms elaborado que el anterior.
Definir o crear un informe consiste en indicar al Diseador de Crystal Reports de dnde tiene que obtener
los datos necesarios, cmo tiene que transformarlos y por ltimo, cmo debe presentar cada elemento
de datos sobre el documento final. Toda esa informacin se almacenar de la definicin del informe, que
tradicionalmente se guarda en un fichero externo .RPT para su posterior ejecucin. Pero antes de
enfrentarse al Diseador de Crystal Reports (o de hecho, a cualquier generador de informes), es
altamente conveniente realizar un trabajo de anlisis y diseo previos que nos den una idea clara de a)
qu necesita obtener exactamente el usuario que nos ha encargado el informe, b) en consecuencia,
cules son los datos que debemos utilizar y c) qu apariencia aproximada deber tener nuestro informe
cuando sea ejecutado. Tener las ideas claras nos ayudar a cumplir con los objetivos requeridos en el
menor tiempo y con la mayor calidad posible.
a) En primer lugar, cmo queremos disear el informe. Las opciones posibles son:
1. Utilizando el Asistente del Diseador. Como veremos a continuacin, el Asistente nos gua a travs de
diferentes pantallas para que definamos las caractersticas principales del informe. Una vez finalizado el
Asistente, podremos aadir al informe nuevas posibilidades o modificar las decisiones tomadas
anteriormente. Como se dar cuenta rpidamente, el Asistente de informes es una combinacin de otros
asistentes ms sencillos que podr invocar por separado posteriormente. En general, es conveniente
dejarse guiar por el Asistente, para obtener rpidamente un diseo inicial que luego podemos modificar a
voluntad.
2. Partiendo desde cero sobre un lienzo en blanco. Generalmente no es productivo ir por esta ruta
difcil.
3. A partir de un informe existente. Esta opcin es conveniente si queremos disear un informe muy
parecido a otro que ya hemos creado anteriormente.
b) Si decidimos utilizar el Asistente, ste es capaz de ayudarnos con tres tipos de informes diferentes:
1. Informe estndar. Esta opcin se utiliza para crear un informe de tipo listado. Es la opcin ms
conveniente en la gran mayora de los casos, a menos que se tenga claro que el informe nicamente
incluir una tabla cruzada, en cuyo caso es ms conveniente seleccionar la siguiente opcin.
2. Tablas cruzadas. Un informe de tabla cruzada es un informe que presenta en una tabla resmenes
agrupados por categoras, por ejemplo los volmenes de ventas de cada tipo de productos por cada pas
en el que la empresa opera. No es ningn problema aadir manualmente una tabla cruzada a un informe
estndar si se desea.
3. Etiqueta. Listado de mltiples filas y columnas, generalmente a partir de una tabla de clientes, para
producir las etiquetas a adherir a los sobres de correos cuando se hace un mailing.
Comenzaremos diseando un informe estndar por ejemplo, un informe que presente la lista de
productos que la empresa AdventureWorks ha vendido al pblico o vende actualmente. Mantenga las
opciones por defecto y pulse Aceptar.
PASO 1.
El primer paso a la hora de disear el informe es indicarle al Asistente dnde estn y cules son los datos
que se van a utilizar en el informe. Aqu tenemos que indicar:
a) La tecnologa a utilizar para conectarse al origen de datos. En este caso, tratndose de una base de
datos SQL Server, debemos indicar Crear nueva conexin | OLE DB (ADO) y luego elegir el proveedor
Microsoft OLE DB Provider for SQL Server. Pulse Siguiente.
b) El nombre del servidor, la base de datos y el usuario y contrasea necesarios para establecer la
conexin. En nuestro caso, utilizaremos como nombre de servidor .\SQLExpress (. significa la mquina
local, y SQLExpress es el nombre de la instancia en que se instala SQL Server Express de forma
predeterminada). De momento utilizaremos la autenticacin integrada (marcando la casilla
correspondiente), aunque la autenticacin de usuario/contrasea es ms utilizada en la vida real, sobre
todo en aplicaciones Web. Por ltimo, despliegue la lista de bases de datos disponibles y seleccione
AdventureWorks. Pulse Siguiente.
c) Por ltimo, se nos permite indicar las propiedades avanzadas de la conexin. No necesitamos ninguna
en este caso, y por eso pulsamos directamente en Finalizar.
6
Una vez indicados el servidor y la base de datos, la ver en la lista de los orgenes de datos disponibles.
En este momento es conveniente pulsar el botn derecho del ratn sobre el nombre del servidor y
utilizar la opcin Agregar a Favoritos para recordar este origen de datos para futuros informes.
PASO 2.
Llega ahora el momento de indicar la(s) tabla(s), vista(s) o procedimiento almacenado de la base de datos
de donde se deber obtener la informacin. En nuestro caso, necesitaremos la tabla Product del esquema
Production. Seleccione esa tabla en la vista de rbol (pasndola a la columna derecha del dilogo
mediante el botn >) y pulse Siguiente.
PASO 3.
El siguiente paso consiste en indicar cules de las columnas (campos) que componen la tabla elegida
queremos mostrar en las columnas del listado. En nuestro ejemplo, seleccionaremos los siguientes
campos:
ProductNumber el cdigo de identificacin del producto
Name el nombre del producto
Color el color del producto
Cuando haya elegido esos tres campos, pulse Siguiente.
PASO 4.
Una vez elegidas las columnas a mostrar en el listado, toca el turno a indicar los criterios por los que se
quiere agrupar las filas del resultado. Por ejemplo, en nuestro caso podramos agrupar los productos a
listar segn su color. Para este ejemplo inicial, sin embargo, no especificaremos criterio de agrupacin
alguno. Pulse Siguiente.
PASO 5.
La otra decisin importante que debemos tomar con respecto a los datos es qu filas de la tabla
seleccionada deseamos que aparezcan en el informe. Para ello es necesario especificar una condicin de
seleccin slo aquellas filas que satisfagan la condicin que indiquemos sern recuperadas del servidor
de base de datos. En nuestro ejemplo (necesitamos los productos que la empresa ha vendido o vende) el
producto debe ser un producto que se vende y no para consumo interno (en cuyo caso el campo
FinishedGoodsFlag ser 1, que significa verdadero). Fjese cmo al seleccionar un campo en la zona
inferior derecha de la ventana aparece un cuadro de combinacin en el que se muestran algunas de las
condiciones comunes para campos de ese tipo. En nuestro caso, nos interesa la condicin es Verdadero.
Observe tambin que no es necesario que el campo de la condicin est entre los campos a mostrar en el
informe para utilizarlo en la condicin de filtro. Una vez indicada la condicin, pulse Siguiente.
PASO 6.
Por ltimo, el Asistente nos permite elegir entre un conjunto de plantillas de estilos disponibles. Las
plantillas de estilos permiten establecer de una sola vez todo el conjunto de caractersticas visuales
(estilos) que se aplicarn a los diferentes tipos de objetos que pueden aparecer en el informe.
Mantenga el estilo Estndar y pulse Finalizar. En este momento el Asistente generar el informe, que
veremos reflejado en el rea de trabajo de Visual Studio 2005.
las modificaciones que queramos para adecuar ms el informe a los requerimientos de nuestra aplicacin
o usuarios.
Observe tambin en la parte inferior de la ventana la otra posible vista del informe que podemos
seleccionar, la Vista previa, que nos ofrecer instantneamente una presentacin del resultado de la
ejecucin del informe para que podamos ver cmo lucir nuestro informe con los datos reales. Aunque
formalmente el diseo del informe debe hacerse desde la vista Informe principal, ver que el Diseador
nos permite tambin realizar casi todas las tareas de diseo sobre esta vista previa.
Volviendo a la vista de diseo, ver que el diseo del informe consta de diferentes secciones que se
pueden expandir o contraer a voluntad y que juegan un papel conceptual muy importante en Crystal
Reports. Bsicamente, la seccin en la que est situado un elemento determina cundo y cuntas veces
se imprimir ese elemento al ejecutar el informe. Las secciones disponibles en Crystal Reports son las
siguientes:
Encabezado del informe: los elementos que se coloquen en esta seccin aparecern en el informe una
sola vez, en la parte superior de la primera pgina del informe. En esta seccin tpicamente se colocan el
ttulo del informe, la fecha de ejecucin, etc. Por defecto, esta seccin aparece inicialmente suprimida
(indicado por las rayas transversales).
Encabezado de pgina: los elementos que se siten en esta seccin aparecern en el informe una vez
por cada pgina del informe, en la parte superior de la misma. Tradicionalmente se colocan en esta
seccin los nmeros de pgina y las etiquetas de las columnas del informe (cosa que el Asistente de
informes ya ha hecho por nosotros).
Encabezado de grupo: habr uno por cada uno de los grupos que tenga el informe (nuestro informe
bsico no tiene grupos). Los elementos que se coloquen en esta seccin (un ejemplo tpico es el nombre
del grupo) aparecern en el informe una vez al principio de cada uno de los diferentes grupos que el
motor de ejecucin encuentre en los datos. Ms adelante en este mismo tema trataremos con
profundidad el tema de los grupos.
Detalles: en la seccin de Detalles se coloca todo aquello que se quiere que aparezca una vez por cada
uno de los registros del conjunto de datos de entrada. Tpicamente, si el informe es del tradicional estilo
listado, en esta seccin se colocan objetos que representan a los campos de la tabla o consulta de
origen. En un informe tpico de tabla cruzada, por ejemplo, la seccin de detalles se deja vaca (o se
suprime) porque no se desea que aparezca informacin sobre cada uno de los registros, sino solo los
resmenes (que normalmente se ponen en la seccin de Pie del Informe).
Pie de grupo: es la seccin opuesta al Encabezado de grupo, y se imprime una vez al finalizar cada
uno de los grupos que el motor de ejecucin encuentre en los datos que componen el informe. Habr una
seccin de Pie de grupo para cada Encabezado de grupo, y los grupos siempre estn perfectamente
anidados (por ejemplo, en un informe con dos grupos, por Pases y Provincias, los grupos
correspondientes a las provincias de un pas siempre quedarn anidados dentro del grupo
correspondiente al pas). En esta seccin tpicamente se colocan los totales de grupo (por ejemplo, la
cantidad de clientes por cada pas, en un listado de clientes agrupado por pases).
Pie de pgina: opuesta al Encabezado de pgina, los elementos que se siten en esta seccin
aparecern en el informe una vez por cada pgina del informe, en la parte inferior de la misma.
Tradicionalmente se colocan en esta seccin los totales acumulados (tipo suma y sigue) o tambin los
nmeros de pgina.
Pie del informe: los elementos que se coloquen en esta seccin aparecern en el informe una sola vez,
en la ltima pgina del informe. En esta seccin tpicamente se colocan los totales generales.
Si se pulsa con el botn derecho del ratn sobre cualquiera de las bandas que identifican a las secciones
(por ejemplo, sobre la seccin de Encabezado del informe) aparecer el men de contexto de la seccin,
que exploraremos con ms profundidad un poco ms adelante en el curso. Por el momento, ejecute la
opcin No suprimir sobre la seccin de Encabezado de informe, para indicar que queremos que esta
seccin aparezca al ejecutar el informe.
Otros tres elementos muy importantes de la interfaz de usuario que aparecen en modo de diseo para
ayudarnos con las tareas ms habituales son:
Las barras de herramientas de Crystal Reports
La barra de herramientas Principal ofrece mltiples botones para, por una parte, lanzar diferentes
asistentes que nos ayudarn con las tareas comunes (seleccin, ordenacin), y por otra parte, facilitarnos
las tareas de formato (atributos de texto, justificacin, cantidad de decimales en campos numricos)
La barra de herramientas Insertar ofrece botones que despliegan asistentes que nos permitirn
insertar objetos ms o menos complejos en el informe (grupos, totales, grficos, imgenes)
En el men principal de Visual Studio, o si se pulsa el botn derecho del ratn sobre el lienzo de diseo
(teniendo cuidado de no estar situado sobre una seccin, pues entonces aparecera el men de la
seccin), tendremos el men principal del diseador, que incluye todas las opciones de las barras de
herramientas ms algunas otras no disponibles en ningn otro sitio. Las principales opciones de este
men son las siguientes:
Insertar: para insertar diferentes objetos sobre el lienzo de diseo.
Base de datos: para realizar diferentes tareas relacionadas con la base de datos a la que accedemos,
por ejemplo agregar nuevas tablas al informe.
Report: para lanzar diferentes asistentes o establecer la configuracin del informe. Por ejemplo, vamos
a establecer el ttulo del informe y el nombre de su autor. Para ello utilizamos la opcin del men Report
| Resumen de informacin, que nos lanzar un cuadro de dilogo en el que podremos indicar esos
valores. Utilice como ttulo Listado de productos para venta; ponga su nombre en el campo Autor.
Diseo: para actuar sobre las opciones de configuracin general del diseador, que dictan cmo ste se
comporta de manera predeterminada. Por ejemplo, una opcin que puede resultar conveniente es la de
activar la opcin Cuadrcula, que har aparecer una rejilla de puntos sobre el diseador, lo que nos
ayudar a establecer la alineacin de los objetos.
El Explorador de campos, que aparece por defecto a la izquierda del lienzo de diseo, nos presenta una
vista de rbol desde la que podremos elegir cualquier elemento accesible a nuestro informe para
arrastrarlo sobre la seccin adecuada en el rea de diseo. Por ejemplo, si despliega el nodo Campos de
base de datos, encontrar la tabla Product con todos sus campos; por favor, seleccione el campo
SellEndDate (fecha en que el producto se dej de vender) y arrstrelo sobre la seccin de Detalles del
informe, justo a la derecha del campo Color. Si cambia a la Vista previa, ver que slo algunos productos
tienen asociada una fecha de vencimiento. En caso de que un campo tenga asociado el valor nulo,
simplemente no se mostrar nada en la posicin correspondiente.
Vista previa podr comprobar que el ttulo que hemos asignado al informe aparecer en el lugar elegido
(puede que haya que guardar el informe previamente).
Si lo que queremos es aadir al informe otro tipo de elemento visual (resumen, grfico, imagen, etc.),
tendremos que utilizar el correspondiente asistente desde el men de Crystal Reports o la barra de
herramientas Insertar. En cualquier caso, tambin se nos permitir indicar en qu seccin y posicin
concreta queremos colocar el elemento. Por ejemplo, vamos insertar un resumen general en la seccin
de Pie de informe que indique cuntos productos contiene el listado. Para ello tendremos que dar los
siguientes pasos:
Pulsar con el botn derecho del ratn sobre la seccin 4 (Pie del informe), y en el men de contexto de
la seccin seleccionar No suprimir, para hacer que visible a esa seccin.
Pulsar el botn Resumen de la barra de herramientas, que nos pedir que elijamos:
El campo a resumir (puede ser cualquier campo, no necesariamente uno de los que se va a mostrar). En
nuestro caso, un candidato ideal es el campo ProductNumber.
El tipo de resumen deseado. En este caso nos interesa un Recuento (conteo), aunque tambin podra
ser un Recuento distintivo, que producira exactamente el mismo resultado dado que el cdigo de
producto es nico para cada producto.
Ver que las opciones ms tpicas (Suma, Promedio, etc.) no estn disponibles en este caso, por tratarse
de un campo alfanumrico.
La posicin en la que se desea ubicar el resumen. Tratndose de un listado sencillo, sin grupos, la nica
opcin disponible es la de colocar el valor resultante al final de todo, al pie del informe. En presencia de
grupos, este asistente nos permitir tambin crear resmenes parciales por cada nivel de agrupacin.
Al pulsar el botn Aceptar, el Diseador colocar un objeto de resumen configurado segn le hemos
indicado en la seccin Pie del informe. Cambie a la Vista previa y vaya hasta la ltima pgina del informe,
y ver el total reflejado en el sitio adecuado.
Una vez que el objeto ha sido colocado sobre el lienzo de diseo, toca la labor de configurarlo para que
responda a los requisitos de diseo del informe:
En primer lugar, podemos seleccionar el objeto con el ratn y arrastrarlo hacia cualquier otro sitio, en
la misma seccin o una seccin diferente. Tenga especial cuidado al cambiar un objeto de una seccin a
otra su sentido comn le orientar correctamente en la mayora de los casos.
Cuando un objeto est seleccionado, en sus cuatro costados aparecen las tpicas grapas que nos
permiten redimensionarlo como queramos.
La barra de herramientas Principal ofrece diferentes botones que nos permiten establecer los
atributos del texto del objeto (fuente y tamao de letra, negrita, itlicas, etc.), la alineacin (izquierda,
derecha, centrada), o el formato de presentacin para datos numricos.
En el caso de los objetos de texto (por ejemplo, los que corresponden a las etiquetas en que se
muestran los encabezados de columnas), haciendo doble clic sobre el objeto se activar el modo de
edicin para que podamos modificar el texto a mostrar.
Por ltimo, pulsando con el botn derecho del ratn sobre el objeto seleccionado obtendremos un
men de contexto que incluye la opcin Dar formato a objeto. Esta opcin de men despliega un cuadro
de dilogo de mltiples pestaas que nos permitir configurar todas y cada una de las propiedades del
objeto. La mayora de las pestaas (Comn, Bordes, Fuente, Hipervnculo) son comunes a casi todos los
objetos, y para ciertos tipos de objetos aparece una pestaa especial con sus caractersticas especficas.
Por ejemplo, si seleccionamos el objeto que corresponde al campo SellEndDate, veremos una pestaa
Fecha y hora donde podemos establecer el formato de visualizacin de los datos de esa columna, que es
de tipo DateTime.
Debido a que estamos utilizando la versin del Diseador de Crystal Reports integrada en Visual Studio,
una alternativa al cuadro de dilogo anterior es utilizar la Ventana de Propiedades del entorno para
establecer los valores de las propiedades. Dado que las propiedades tienen nombres en ingls, mientras
10
que el cuadro de dilogo est traducido al castellano (adems de mejor organizado), recomendamos
utilizar ste ltimo.
Subinformes: Una tcnica bastante potente para componer informes complejos es la de insertar un
informe ya creado dentro de otro. Veremos los subinformes en el tema 5.
Objetos de texto: Los objetos de texto permiten mostrar una etiqueta de texto en cualquier seccin y
posicin del informe, horizontal o verticalmente.
Imgenes: Podemos incorporar a nuestros informes imgenes BMP, JPG o PNG con el logotipo de la
empresa, fondos de marca de agua, etc.
Lneas y cuadros: Por ltimo, tambin podemos utilizar objetos de lneas y cuadros para realzar los
informes.
EL VISOR DE INFORMES
Si ha activado la pestaa de Vista previa para ver el resultado en pantalla de la ejecucin del informe,
habr visto el informe presentado en un contenedor visual que se conoce como el Visor de informes para
aplicaciones Windows (en realidad, una versin especializada del mismo). Crystal Reports ofrece
igualmente otro visor basado en HTML y Javascript para su utilizacin en aplicaciones Web.
tendremos la posibilidad de ocultar aquellos botones que no tengan sentido o no queramos mostrar (por
ejemplo, el botn de rbol de grupos en un listado sencillo que no tenga grupos).
Para lograr esto, haremos uso de otro de los asistentes de Crystal, el Asistente de base de datos (opcin
Base de datos | Asistente de base de datos en el men de Crystal Reports). Se dar cuenta que este
dilogo de propiedades ya lo ha visto antes: se trata del primer asistente integrado en el Asistente de
informes general. Pues bien, debemos seleccionar nuestra tabla Production.ProductSubcategory en la
vista de rbol de la izquierda (despliegue el nodo Conexiones actuales y ver nuestro servidor de base de
datos y dentro de l, a la base de datos AdventureWorks) y aadirla a la vista de la derecha.
Inmediatamente despus de que agregue la tabla de subcategoras al informe, aparecer en el cuadro de
dilogo una segunda pestaa, Vnculos, que es donde debemos indicarle a Crystal cmo establecer la
relacin entre las dos tablas. Siempre que un informe incluya ms de una tabla, Crystal nos obligar a
establecer claramente cul es la relacin entre las mismas. Aunque el Diseador es capaz de proponernos
vnculos en base a las relaciones entre las tablas, como podr observar que ocurre en este caso.
En la pestaa Vnculos del asistente podemos establecer relaciones entre las tablas simplemente
arrastrando con el ratn desde el campo de origen hacia el de destino. Pruebe a borrar el vnculo creado
implcitamente (botn Borrar vnculos) y a volverlo a establecer. Una vez lo haya hecho, cierre el
asistente pulsando Aceptar.
Una vez que hayamos agregado la nueva tabla al informe, veremos que en el Explorador de campos
estarn disponibles todos los campos de la tabla de subcategoras, y podremos arrastrar los campos de
esa tabla sobre cualquier seccin del informe. Por ejemplo, para ver el nombre de la subcategora a la que
pertenece cada producto, arrastraremos el campo Name de la tabla Production.Subcategory sobre la
seccin de Detalles. Posteriormente habr que recolocar los objetos de esa seccin para mejorar el
aspecto del informe. Si cambia a la Vista previa, ver que para cada producto se muestra su subcategora.
ORDENACIN Y AGRUPACIN
Si al examinar la vista preliminar del informe tiene la impresin de que los registros ya llegan ordenados
por subcategoras, no se fe ello ha sido puramente coyuntural. En ningn momento hemos dicho que
queremos obtener el listado ordenado por subcategoras, nombres de producto u otro criterio. De hecho,
si examina la sentencia SQL que Crystal Reports enviar a la base de datos para recuperar la informacin
necesaria (en el men de Crystal Reports, seleccione Base de datos | Mostrar consulta SQL) ver que
sta tampoco incluye ninguna clusula ORDER BY. Para indicar los criterios de ordenacin, debemos
utilizar el Asistente de ordenacin de registros, en la barra de herramientas Principal o en el men
Report | Asistente de ordenacin de registros. Este asistente nos presenta un cuadro de dilogo en el
que podemos establecer el criterio de ordenacin principal, as como otros secundarios, que slo
entrarn en funcionamiento en caso de que el varios registros coincida en todos los campos anteriores.
Por ejemplo, si queremos que nuestros productos aparezcan ordenados por categora, y dentro de cada
categora, por nombre, debemos indicar ambos campos, en ese orden, al asistente. Observe que las
categoras aparecern en orden alfabtico, dado que se trata de un campo alfanumrico.
Hay que tener claro desde el primer momento que ordenar es un prerrequisito necesario para agrupar.
Para Crystal Reports, un grupo es un conjunto de registros consecutivos que tienen el mismo valor del
campo indicado. Si quitamos los criterios de ordenacin de registros que acabamos de establecer, y vez
de ello insertamos un grupo por subcategoras, utilizando el botn correspondiente de la barra de
herramientas Insertar (o la opcin Insertar | Grupo del men), y luego lanzamos de nuevo el Asistente
de ordenacin de registros, veremos que el campo correspondiente habr sido agregado a la lista de
criterios de ordenacin.
Cuando se selecciona la opcin de Insertar grupo, se presenta un cuadro de dilogo en el que podemos
indicar el campo por el que deseamos agrupar (en nuestro caso, ProductSubcategory.Name, si queremos
los grupos en orden alfabtico) y si queremos un orden ascendente o descendente. La pestaa Opciones
nos ofrece varias posibilidades adicionales, como la de indicar que deseamos mantener los registros de
cada grupo juntos siempre que sea posible (cambiando de pgina para ello si fuera necesario) o repetir el
encabezado del grupo en cada pgina al ejecutar el informe.
14
Observar que se crean dos nuevas secciones, de Encabezado y Pie de grupo, numeradas con #1 por
tratarse del primer (y nico) grupo del informe. En la seccin de Encabezado de grupo, el Diseador
coloca adems un objeto de nombre de grupo asociado al campo que hemos indicado como campo para
agrupar. En la Vista previa podremos ver cmo luce ahora el informe; y cmo en principio podemos
eliminar el nombre de subcategora (que se repite para cada producto del grupo) de la seccin de
Detalles.
Vamos a complicar ahora un poco ms el informe y crear un segundo grupo externo. Para ello,
necesitaremos agregar al informe otra nueva tabla, Production.ProductCategory, pues las subcategoras
pertenecen a su vez a categoras. El enlace esta vez se realiza a travs de la clave fornea
ProductCategoryID de la tabla Subcategory. Una vez agregada la tabla al informe, crearemos un nuevo
grupo utilizando como campo por el que agrupar al campo Name de la tabla de categoras. Esta vez lo
ms conveniente es hacerlo utilizando el Asistente de grupos (en el men de Crystal Reports,
seleccionamos Report | Asistente de grupos), pues queremos que este grupo quede a nivel externo,
englobando al de subcategoras. Una vez creado el grupo, en la Vista previa podremos observar el
resultado.
TOTALIZACIN (RESMENES)
Mediante el botn de Insertar resumen o la opcin correspondiente del men podremos aadir
resmenes estadsticos generales (basados en la totalidad de los datos obtenidos de la base de datos, y
normalmente mostrados en el Pie de informe) o parciales para cada uno de los grupos (que generalmente
se colocan en el Pie de grupo correspondiente). Ya anteriormente hemos hecho un recuento general de
los productos disponibles; vamos ahora a mostrar en el informe cuntos productos hay por cada
categora y subcategora.
Si pulsamos el botn de Insertar resumen, el Diseador nos preguntar, como antes, qu campo es el que
queremos resumir (Product.ProductNumber), qu tipo de operacin queremos realizar (Recuento) y la
ubicacin del resumen; observe que ahora, dado que tenemos dos grupos, el asistente nos propone tres
posibles lugares donde colocar el resumen: en el Pie del informe (si quisiramos un total general, que ya
tenemos), en el Pie del grupo externo (si quisiramos contar cuntos productos hay de cada categora) o
en el Pie del grupo interno (si quisiramos contar cuntos productos hay en cada subcategora). Primero
insertaremos un resumen a nivel de categoras (grupo externo); para mejorar la esttica del informe,
pondremos a su izquierda un objeto de texto que diga Total categora. Observe tambin que tendremos
que cambiar el formato del resultado, pues Crystal Reports por defecto muestra los campos numricos
con dos cifras decimales (opcin que puede cambiarse en la configuracin general del Diseador,
accesible desde la opcin del men Diseo | Especificaciones predeterminadas | Campos | Nmero).
A continuacin, repetiremos la operacin de insertar resumen, pero ahora contabilizando la cantidad de
productos por cada subcategora; para variar, mostraremos el resumen no como una cantidad absoluta,
sino como un porcentaje relativo a la cantidad de productos en su categora (opcin Mostrar como
porcentaje de).
Tenga en cuenta que los resmenes de grupos normalmente se colocan en el pie del grupo, pero pueden
tambin moverse a la seccin de Cabecera del grupo correspondiente; esto provocar una cierta
sobrecarga al motor de impresin de Crystal Reports, que tendr que generar en memoria todos los datos
del grupo antes comenzar a imprimirlo, pero este coste es generalmente asumible y poner los resmenes
en la cabecera es muchas veces estticamente conveniente. Esto es lo que haremos con este ltimo
resumen por subcategoras.
seccin muestra todas y cada una de las secciones (y subsecciones, posiblemente) de nuestro informe y
nos permite establecer para cada una de ellas todo un conjunto de propiedades como:
suprimir la seccin completamente. Por ejemplo, en nuestro informe la seccin de Pie de grupo del
grupo interno ha quedado vaca y lo mejor es suprimirla.
provocar un salto de pgina antes o despus de imprimir la seccin.
ajustar la seccin a la parte inferior de la pgina (lo que implica que el contenido de la prxima seccin
pasar a la pgina siguiente)
reiniciar la numeracin de las pginas despus de imprimir la seccin.
mantener unido todo el contenido de la seccin, aunque haya que cambiar de pgina para ello.
suprimir la seccin en caso de que no contenga nada.
hacer que el contenido de la seccin subyazca al de las siguientes secciones; ms adelante utilizaremos
esta opcin para provocar un efecto de marca de agua en todas las pginas del informe.
Por ltimo, queramos hacer especial nfasis en la opcin Ocultar (se permite profundizar), que nos
parece especialmente importante. Tenga en cuenta que cada vez ms los informes no se destinan a ser
presentados en papel, sino a ser consumidos de forma interactiva. Esta opcin, al igual que Suprimir,
hace que una seccin no se muestre cuando se presente el informe; pero a diferencia de la anterior,
permite que el usuario, haciendo clic con el ratn sobre un elemento de nivel superior (generalmente, un
nombre de grupo o resumen), despliegue el contenido de esa seccin oculta en una vista independiente.
Por ejemplo, marquemos con la opcin Ocultar (se permite profundizar) a la seccin de detalles de
nuestro informe y veamos el efecto que se obtiene: a primera vista, el informe slo contiene los
resmenes; pero si el usuario pulsa sobre cualquiera de los nombres de subcategoras, ver los productos
pertenecientes a esa subcategora en una nueva pestaa del visor. Esto es a lo que se le llama
profundizacin (drill down).
Desde el Asistente de seccin tambin tenemos la posibilidad de insertar y eliminar (sub)secciones. El
objetivo de la opcin Insertar de men, como hemos mencionado antes, es realmente el de que
podamos dividir una seccin en subsecciones con el objetivo de aplicarles distintos valores de
propiedades a cada subseccin. Veamos un ejemplo tpico. Supongamos que queremos poner el logotipo
de nuestra empresa como marca de agua en el centro de todas las pginas del informe. Para ello,
seguiremos los siguientes pasos:
a) Dividiremos la seccin de Encabezado de pgina (que, como sabemos, se imprime en la parte superior
de cada pgina del informe) en dos subsecciones. Para ello, seleccionamos la seccin de Encabezado de
pgina y pulsamos el botn Insertar. Ver que la seccin se divide en dos subsecciones, denominadas a
y b, y todo lo que hubiera en la seccin original es pasado a la subseccin a.
b) Configuraremos la nueva subseccin b (y solo ella) para que subyazca al resto de las secciones (opcin
Situar debajo de las secciones posteriores).
c) Ya en el Diseador, ampliaremos por la vertical la subseccin b del encabezado y pondremos cerca del
borde inferior el logotipo de nuestra empresa.
Listo! Si activa la Vista previa, ver que el logotipo subyace perfectamente a todas las pginas del
informe.
SELECCIN DE REGISTROS
El Asistente de seleccin de Crystal Reports permite establecer las condiciones que deben satisfacer los
registros que han de ser utilizados para la confeccin del informe. Para nuestro informe actual, el
asistente mostrar una nica pestaa asociada a la condicin de que el campo
Product.FinishedGoodsFlag sea verdadero. A esa pestaa podremos agregar otras con nuevas
condiciones, y Crystal Reports har que solo se utilicen los registros que satisfagan todas las condiciones
especificadas (o sea, se aplicar la operacin lgica AND a todas las condiciones). A modo de ejemplo,
vamos a limitar el conjunto de registros a aquellos productos que continan a la venta esos registros
tendrn un valor nulo en el campo SellEndDate. Pulsemos el botn Nuevo para indicar una nueva
16
condicin de seleccin. Elijamos el campo Product.SellEndDate (de nuevo, observe que podramos
seleccionar cualquier campo de cualquiera de las tablas implicadas en el informe). Para indicar que nos
interesan los registros con valores no nulos en el campo tendremos que utilizar la ltima opcin de la lista
desplegable que aparece en la pestaa: frmula. Y la frmula que deberemos teclear es IsNull
({Product.SellEndDate}).
Si pulsamos el botn Mostrar frmula del asistente, veremos una frmula con todas las de la ley escrita
en el lenguaje de frmulas de Crystal Reports (que estudiaremos en el tema 4). Se trata de un lenguaje de
programacin completo, complementado adems con una enorme biblioteca de funciones para todas las
necesidades comunes. En este lenguaje es que se escriben en ltima instancia las condiciones de
seleccin de un informe.
Nota avanzada: El Diseador de Crystal Reports determina, de manera inteligente, cundo es posible
traducir una frmula de seleccin escrita en el lenguaje de Crystal en una clusula WHERE de SQL para
pasarla al motor de bases de datos. Si incluye frmulas Crystal complejas en sus frmulas de seleccin, no
ser posible traducirlas a SQL y el filtrado de registros deber hacerse en la mquina cliente, con el
consiguiente incremento del trfico de red y prdida de rendimiento. Mediante la opcin Base de datos |
Mostrar sentencia SQL del men de Crystal Reports podr comprobar que las dos condiciones que hemos
puesto se traducen perfectamente a SQL.
incluye dos grupos. El grupo que nos interesa es el externo, que es el preseleccionado por defecto. En el
desplegable Ordenar seleccionamos Todo, y entonces a su derecha aparecer la lista de los resmenes
definidos a ese nivel, para que indiquemos el criterio segn el que queremos ordenar los grupos. En
nuestro caso, habr solo un resumen, que seleccionaremos. Adicionalmente, se nos permite indicar si
deseamos que los grupos aparezcan en orden ascendente o descendente (este ltimo, nuestro caso).
Despus de pulsar Aceptar podremos ver el resultado en la vista preliminar.
Hay que decir que este Asistente, adems de la ordenacin, tambin nos permite realizar una seleccin
de grupos segn criterios que se utilizan con relativa frecuencia en la prctica y cuya especificacin
mediante el Asistente de seleccin que hemos visto anteriormente requerira la programacin de
frmulas de cierta complejidad. Si en lugar de elegir la opcin Todo en el desplegable Ordenar
seleccionamos N superiores (N inferiores), estaramos indicando que deseamos incluir en el informe
solo los N primeros (ltimos) grupos segn el resumen indicado, en orden descendente (ascendente) de
los valores. Por otra parte, las opciones Porcentaje mximo y Porcentaje mnimo nos permiten limitar
el informe a aquellos grupos cuyo porcentaje sobre el total general supera o no supera un cierto valor P.
Tanto N como P pueden ser especificados segn nuestra conveniencia. Observe adems que existe la
posibilidad de agrupar los elementos que los grupos que no superen la criba en un grupo comn, cuyo
nombre por defecto es Otros.
GRFICOS.
Crystal Reports ofrece unas posibilidades muy amplias para la incorporacin de grficos comerciales en
nuestros informes; aqu simplemente mostraremos un ejemplo tpico que le dar una idea de cmo
pueden incorporarse a un informe tales grficos. Para poder incorporar un grfico a un informe, es
necesario haber definido previamente los resmenes que servirn como valores a partir de los cuales se
dibujar el grfico.
Para incorporar un grfico a un informe, se debe utilizar la opcin Insertar | Grfico del men o el botn
correspondiente de la barra de herramientas Insertar, que despliegan el Asistente de grficos. Este
asistente tiene dos modos de trabajo que se configuran mediante la casilla Establecer opciones
automticamente de su primera pestaa. Si la casilla est marcada, el asistente generar
automticamente los ttulos para el grfico y los ejes, escalas, colores, etc. En caso contrario, tendremos
la posibilidad de indicar todas esas caractersticas. Una buena tcnica puede ser mantener inicialmente la
configuracin automtica, y ms adelante editar las opciones del grfico y pasar al modo manual para
indicar esas opciones en detalle. Adems de esta opcin, en la primera pestaa se indica el tipo de grfico
que deseamos incorporar al informe (de barras, lneas, reas, circular o tarta, etc.). Para nuestro ejemplo
elegiremos un grfico de barras.
En la segunda pestaa del asistente es donde se especifica lo fundamental: los datos a partir de los cuales
se dibujar el grfico y la situacin del mismo. En nuestro caso, debido a que tenemos dos niveles de
agrupacin, podemos basar el grfico en dos series de datos: la cantidad de productos por cada categora,
en cuyo caso el grfico aparecer una sola vez en el pie o la cabecera del informe (recuerde que
generalmente los objetos situados en una seccin de pie pueden moverse a su cabecera hermana); o la
cantidad de productos por cada subcategora dentro de cada categora, en cuyo caso tendremos un
grfico para cada categora, situado en la seccin de pie (o la cabecera) del grupo correspondiente a las
categoras. Vamos a elegir aqu la opcin ms difcil, la segunda: indiquemos Por cada
ProductCategory.Name en el desplegable Ubicar. Ver que en el grupo Datos aparecen
automticamente la informacin adecuada: los valores a utilizar para el grfico se obtienen cuando
cambia la subcategora (el grupo ms interno), y el resumen a utilizar es el nico disponible a ese nivel, el
que cuenta la cantidad de productos de cada categora.
Por ltimo, la tercera pestaa del asistente permite establecer los textos que aparecern en el grfico
como ttulo, subttulo, nombres de ejes, etc. y sus propiedades. De momento, mantenga los valores
18
predeterminados y pulse Aceptar para cerrar el asistente. Ver cmo aparece en el informe un grfico de
subcategoras para cada una de las categoras.
TOTALES ACUMULADOS
Un tipo de resumen muy comn y que tiene sus particularidades que lo distinguen de los dems
resmenes son los totales acumulados. Los totales acumulados nos permiten implementar en nuestros
informes los conocidos suma y sigue frecuentes, por ejemplo, en listados de operaciones bancarias.
Suponga que deseamos listar los pedidos (cdigo, fecha, importe) recibidos a partir del 1/7/2004 (no hay
datos muy recientes en AdvertureWorks :-) En una columna del listado queremos mostrar un suma y
sigue con el total acumulado hasta ese momento del importe de los pedidos. Los datos generales sobre
los pedidos se almacenan en la tabla Sales.SalesOrderHeader de la base de datos. Adems, en la tabla
Sales.SalesOrderDetail se almacenan los detalles (lneas) de cada pedido, pero en este momento no
necesitaremos esa segunda tabla.
Ante todo, aadiremos a nuestro proyecto de Visual Studio un nuevo informe (botn derecho sobre el
nodo del proyecto en el Explorador de soluciones | Agregar | Nuevo elemento | Crystal Reports).
Llamemos al informe ListadoPedidos.rpt. Inmediatamente despus de indicar el nombre, el Asistente de
informes aparecer automticamente para que especifiquemos las caractersticas del informe. Se trata de
un informe estndar, y seleccionamos la base de datos AdventureWorks, y de ella la tabla
Sales.SalesOrderHeader. Los campos que nos interesan son SalesOrderID, OrderDate y TotalDue. No
necesitamos agrupaciones, por lo que saltamos directamente sobre esa pgina del Asistente. En la pgina
de seleccin de registros, indicamos que nos interesan los pedidos en los que OrderDate es posterior al
1/7/2004. Pulsamos Finalizar y podremos ver la presentacin preliminar del informe.
Ahora crearemos el total acumulado. Para ello, en el nodo Campos de totales acumulados del
Explorador de campos pulsamos el botn derecho del ratn y seleccionamos Nuevo. Aparecer un
cuadro de dilogo en el que se pueden indicar las caractersticas que queremos que tenga el total
acumulado.
Ante todo, se debe indicar el campo que se quiere acumular (en nuestro caso TotalDue) y la operacin de
resumen (aqu suma). En la seccin Evaluar se indica en qu momento queremos que el acumulador se
evale. En este caso dejaremos la opcin por defecto, evaluar para cada registro, pero observe que
tambin es posible evaluar el total acumulado solo cuando cambie el valor de un campo, cuando se
cambie de grupo, o cuando se cumpla una condicin cualquiera (expresada mediante una frmula). Por
su parte, en la seccin Restablecer indicamos cundo queremos que el acumulador se reinicie a cero.
Aunque tambin lo dejaremos ahora en Nunca, observe que se puede reiniciar el acumulador cada vez
que se cambia de campo, de grupo o cuando se cumpla una frmula. Estudiaremos el lenguaje de
frmulas de Crystal Reports en el siguiente tema. Y en principio, ya est! Basta con pulsar el botn
19
Finalizar y arrastrar el campo recin creado a la seccin de Detalles del informe (preferiblemente a la
derecha del importe del pedido). Ver la suma parcial de los importes evaluada para cada registro.
TRUCO: Frecuentemente en listados con este tipo de totales nos piden que pongamos el valor del total
acumulado hasta el momento al pie de cada pgina. Para ello, seleccione el campo de total acumulado,
cpielo al Portapapeles (CTRL-C) y luego pguelo (CTRL-V) en la seccin de Pie de pgina. Listo! Este es
uno de los pocos casos en los que tiene sentido mover objetos de una seccin a otra que no sea su
hermana.
FRMULAS
En este tema se presentan las frmulas de Crystal Reports y sus principales aplicaciones. Rpidamente se
convencer de que las frmulas juegan un papel muy importe tanto en informes bsicos como en
aplicaciones ms avanzadas.
INTRODUCCIN
Las frmulas son una caracterstica muy importante de Crystal Reports, que le dan la potencia necesaria
para acometer numerosas tareas que de otras maneras seran imposibles y limitaran seriamente las
posibilidades del producto.
Bsicamente, una frmula es una expresin ms o menos compleja escrita en uno de los dos lenguajes de
programacin que soporta Crystal Reports: Crystal y Visual Basic, y cuyo objetivo es calcular un valor que
debe ser utilizado en alguna de las fases de confeccin de un informe. En este curso utilizaremos la
sintaxis Visual Basic, que ser mucho ms familiar a los programadores que utilicen VB.NET. Para
garantizar que las frmulas utilicen ese lenguaje, por favor vaya a la opcin Crystal Reports | Diseo |
Especificaciones predeterminadas | Elaborando informes del men y selecciones Sintaxis Basic en el
desplegable Lenguaje de frmulas.
En general, los lenguajes de frmulas de Crystal Reports son lenguajes de programacin completos, que
incluyen declaraciones de variables, condicionales, estructuras de bucle, etc. No obstante, gracias a los
potentes asistentes incorporados al producto, rara vez es necesario hacer uso de tales facilidades y las
frmulas se utilizan en el sentido literal del trmino el de una expresin que produce un valor de un
determinado tipo.
contiene el nombre del cliente, y en un informe deseamos mostrar ese nombre en maysculas, podemos
escribir la siguiente frmula: UCase({Clientes.Nombre}).
Aunque pueda parecer necesaria una gran cantidad de tecleo, en realidad el programador no tiene que
teclear casi nada para componer estas frmulas: a continuacin veremos cmo un potente editor nos
ayuda con esta tarea.
Hay que tener en cuenta siempre el tipo de datos del resultado que una frmula produce. En ciertas
ocasiones una frmula puede producir un resultado de cualquier tipo que queramos, pero en otros casos
Crystal Reports espera que le suministremos una frmula que produce un resultado de un tipo
determinado y protestar si le suministramos una frmula que produce otra cosa, aunque sea
sintcticamente correcta.
CAMPOS CALCULADOS
La aplicacin ms tpica de las frmulas son los campos calculados. Un campo calculado es un campo (de
cualquier tipo de datos soportado por Crystal) que fsicamente no se almacena dentro de la base de
datos, pero que puede ser calculado por Crystal a partir de los valores de otros campos del informe.
Como ejemplo, supongamos que queremos determinar el tiempo que ha tardado cada pedido del ao
2004 en salir del almacn de la empresa de camino a su destinatario. En la tabla Sales.SalesOrderHeader
no tenemos directamente ese dato, pero s tenemos los campos OrderDate (la fecha en que se hizo el
pedido) y ShipDate (la fecha en que se hizo el envo). Podemos calcular el intervalo deseado restando
ambas fechas, y para ello hace falta una frmula.
En nuestro proyecto, seleccione el informe ListadoPedidos.rpt. En el Explorador de campos, pulse el
botn derecho del ratn sobre el nodo Campos de frmula y seleccione Nueva. Ante todo, es necesario
dar un nombre a la frmula: llammosle DasHastaSalida. Ver que para seguir adelante hay dos
opciones: Usar Asistente o Usar Editor. Se trata de dos herramientas diferentes con un mismo
propsito: ayudarnos a escribir las frmulas con un mnimo de tecleo y comprobacin de que la frmula
es correcta. En este curso utilizaremos el Editor, que nos parece ms intuitivo, sin carecer de ninguna de
las posibilidades.
Al pulsar el botn Usar Editor, aparecer ante nosotros el Editor de frmulas. En el panel de la izquierda
est un rbol con todas las frmulas del informe; podemos cerrarlo para hacer ms espacio para nuestra
frmula actual.
Ahora, la frmula se compone en la zona inferior del editor (donde ya aparece automticamente formula
=). La zona superior se divide en tres paneles: el panel de Identificadores, desde el que podemos elegir
los campos del informe o la base de datos, frmulas, totales acumulados, etc.; el panel de Funciones, en
el que tenemos a nuestra disposicin la lista de todas las funciones predefinidas de Crystal (algo
sumamente til) y el panel de Operadores, en el que podremos encontrar a todos los operadores del
lenguaje.
Para introducir nuestra frmula, buscamos en el panel de Identificadores el campo ShipDate de
SalesOrderHeader (como el campo no est incluido directamente en el informe, debemos bajar a buscarlo
en la lista general de todos los campos de la tabla) y hacemos doble clic sobre l ver que es copiado a
la frmula con la sintaxis correcta: {SalesOrderHeader.ShipDate}. El operador - podramos elegirlo de un
21
modo similar, seleccionndolo en el nodo de operadores aritmticos; pero en este caso la ventaja no est
tan clara, y probablemente sea mejor teclear el carcter. Por ltimo, seleccionamos del panel de
Identificadores el segundo operando, OrderDate. La frmula final es:
formula = {SalesOrderHeader.ShipDate} - {SalesOrderHeader.OrderDate}
En cualquier momento podemos comprobar la validez de una frmula pulsando el botn Revisar. Una
vez editada y validada la frmula, podemos guardarla y cerrar el editor mediante Guardar y cerrar. Y ya
definida la formula, podemos arrastrarla al informe en este caso, a la seccin de Detalles. Por supuesto,
tambin podramos definir resmenes basados en esa frmula, que se convierte en un campo ms del
informe.
FORMATO CONDICIONAL
La aplicacin de las frmulas al formato condicional consiste en que, mediante una frmula, es posible
programar las caractersticas visuales de cualquier campo o seccin del informe, o incluso que aparezca o
no en l.
Continuando con el mismo ejemplo, suponga que queremos resaltar aquellos pedidos que tardaron ms
de 7 das en salir del almacn. Para ello, vamos a resaltar en color rojo los valores correspondientes.
Seleccionamos la frmula, pulsamos el botn derecho del ratn y elegimos la opcin Dar formato al
campo. En el dilogo que aparece, activamos la pestaa Fuente. Lo que deseamos es cambiar el color
del texto, pero no incondicionalmente, sino sujeto a una condicin. Por eso, pulsamos el botn de
frmula situado a la derecha del desplegable correspondiente al color de la fuente. Aparece el editor de
frmulas, y en l debemos introducir la frmula que determinar el color del texto. En este caso, la
frmula es:
if {@DasHastaSalida} >= 5 then formula = crRed else formula = crBlack
Las constantes crRed y crBlack , aparecen en el panel de Funciones cuando se est editando una frmula
que deba producir un color, como es el caso.
De un modo similar, podemos programar cualquiera de las caractersticas visuales de los campos del
informe. En estos casos, la frmula que debemos utilizar tiene que producir un resultado del tipo
adecuado. Como otro ejemplo, suponga que deseamos que cierto campo no aparezca en el informe (o
sea, suprimirlo) en caso de que se cumpla una condicin. En tal caso, debemos utilizar la propiedad
Suprimir (pestaa Comn) del Editor de formato. La frmula debe producir un resultado booleano, y
cuando su valor sea True el campo se suprimir del informe.
Por ltimo, el formato condicional se puede aplicar no solo a campos individuales, sino a secciones
enteras. Por ejemplo, vamos a dar al listado de pedidos formato de pijama, haciendo que la seccin de
Detalles tenga alternativamente fondo gris o blanco para cada fila del informe. Para ello, lance el
Asistente de seccin y seleccione la seccin de Detalles. Active luego la pestaa Color y pulse sobre el
botn de frmula asociado al desplegable de color de fondo. Introduzca la siguiente frmula:
if RecordNumber mod 2 = 1 then formula = crSilver else formula = crWhite
RecordNumber es otra funcin predeterminada de Crystal, que produce un nmero secuencial para cada
registro del conjunto de datos (puede encontrarse bajo el nodo Estado de impresin).
GRUPOS PERSONALIZADOS
La siguiente aplicacin de las frmulas es la que tiene que ver con la seleccin de registros y grupos.
22
Como ya hemos presentado anteriormente, Crystal permite hacer una seleccin tanto de los registros
individuales como de los grupos que se utilizarn al ejecutar el informe. El Asistente de seleccin nos
permite especificar las condiciones que debern cumplir los registros o grupos en los casos de
condiciones sencillas, y se encarga de generar automticamente las frmulas correspondientes. Pero
cuando lo que queremos expresar va ms all de las posibilidades cubiertas por el asistente, es necesario
pasar a la accin y escribir la frmula nosotros mismos.
Para un ejemplo sencillo, suponga que deseamos que el listado de pedidos (adems de los pedidos a
partir de julio del ao 2004) incluya solamente los pedidos recibidos a travs de Internet (aquellos para
los que el campo SalesOrderHeader.OnlineOrderFlag es True). Simplemente lanzamos el Asistente de
seleccin (Crystal Reports | Report | Asistente de seleccin o el botn correspondiente en la barra de
herramientas Principal). Pulsamos el botn Nuevo para aadir una nueva condicin de seleccin. Y en
el desplegable que aparece seleccionamos es Verdadero. Si ahora pulsamos el botn Mostrar frmula
podremos ver la frmula correspondiente:
{SalesOrderHeader.OrderDate} >= #1/7/2004# and {SalesOrderHeader.OnlineOrderFlag}
Nota avanzada: Como hemos comentado anteriormente, es conveniente limitarse a frmulas de
seleccin sencillas siempre que sea posible, pues Crystal Reports determina automticamente cundo es
posible traducir una frmula de seleccin en una clusula WHERE de SQL para pasarla al motor de bases
de datos, lo que redunda en una mayor eficiencia.
PARMETROS
En este tema presentaremos los parmetros, que juegan un papel muy importante de cara a la
programabilidad de los informes.
INTRODUCCIN
La inmensa mayora de los informes se disean para luego utilizarlos frecuentemente de manera
peridica. Sin embargo, cada nueva ejecucin del informe necesitar pequeos ajustes derivado del
cambio de los datos de entrada del informe. Si los parmetros no existieran, cada nueva ejecucin
requerira una modificacin previa del informe en el Diseador un verdadero problema para la
productividad. Los parmetros nos permiten precisamente definir informes adaptables, en los que los
datos de entrada cambiantes se solicitan inmediatamente antes de la ejecucin.
Continuando con nuestro listado de productos de ejemplo, supongamos que nos interesara poder
ejecutar el informe para distintos valores de la fecha de inicio ahora mismo, el informe tiene clavado
el valor #1/7/2004#. Pues bien, lo ideal hubiera sido haber definido un parmetro para esa fecha de
inicio, cosa que mostraremos a continuacin.
24
Hay que sealar que (como veremos en el prximo tema) las libreras .NET de Crystal ofrecen la
posibilidad de asignar desde programa valores a los parmetros, de modo que el cuadro de dilogo no
aparezca en pantalla.
SUBINFORMES
Otra posibilidad muy interesante que ofrece Crystal Reports es la de anidar un informe dentro de otro,
una caracterstica que comnmente se conoce como subinformes. Para incorporar un informe como
subinforme dentro de otro, se utiliza el botn Insertar subinforme de la barra de herramientas Insertar
(o la opcin correspondiente del men). Esta posibilidad puede utilizarse, por ejemplo, para concatenar
un informe a continuacin de otro, insertndolo en una subseccin del pie de informe. Tal aplicacin es,
en general, sumamente directa, y la nica opcin interesante es la de integrar el subinforme completo
cuando se ejecuta el informe externo, o simplemente poner un hipervnculo para que el subinforme se
ejecute bajo demanda (a peticin es el trmino que utiliza Crystal).
SUBINFORMES PARAMETRIZADOS
La aplicacin ms importante de los subinformes son los subinformes parametrizados. En ellos, un
informe se integra como subinforme dentro de otro (normalmente en la seccin de Detalles de ste), y el
informe externo (contenedor) comunica al interno a travs de un parmetro un valor que le indica a ste
ltimo qu datos debe mostrar.
Como ejemplo, supongamos que queremos mostrar los detalles de cada uno de los pedidos de nuestro
listado de pedidos. Un posible enfoque podr ser el de integrar dentro de la seccin de Detalles del
informe actual un subinforme que presente los detalles del pedido actual. Esta tcnica tiene la ventaja de
que podramos indicar que el subinforme se ejecute bajo demanda, lo que reducira la carga sobre el
motor de base de datos.
Para empezar, inserte un subinforme en la seccin de detalles del listado de pedidos. Marque la casilla
Subinforme a peticin. Indique que desea crear un nuevo subinforme con el Asistente; llame al nuevo
subinforme DetallesPedido.rpt y pulse el botn Asistente de informes.
Al disear el nuevo informe, indicaremos que la tabla deseada es Sales.SalesOrderDetail. Elegiremos
varios campos, como ProductID (cdigo de producto en la vida real necesitaramos conectar con la tabla
de productos para obtener el nombre), OrderQuantity (cantidad), UnitPrice (precio unitario),
UnitPriceDiscount (descuento sobre precio unitario) y LineTotal (importe total de lnea). Pulse Finalizar
para terminar el diseo del informe. Ser llevado nuevamente al dilogo de insercin de subinforme; es
hora de pasar a la pestaa Vnculo para establecer la conexin entre el informe y el subinforme.
En la pestaa Vnculo, debemos primero indicar el campo del informe contenedor cuyo valor se debe
pasar al subinforme; es SalesOrderHeader.SalesOrderID, el cdigo del pedido. A continuacin, debemos
indicar el campo del subinforme que recibir (a travs de un parmetro cuyo nombre propone el
asistente) el cdigo del pedido cuyos detalles debe mostrar. En nuestro ejemplo, es SalesOrderID. Y solo
nos queda pulsar el botn Aceptar. De la creacin del parmetro y el establecimiento de la frmula de
seleccin adecuada en el informe recin creado se encarga el automticamente el asistente.
La presentacin de la vista previa nos mostrar cmo funcionan los informes con subinformes bajo
demanda: al pulsar sobre el hipervnculo asociado a un pedido, el subinforme con los detalles de dicho
pedido se desplegar en una nueva pestaa del visor de informes.
TCNICAS FUNDAMENTALES
Las diferentes subsecciones de esta seccin presentan los fundamentos tericos y las tcnicas comunes
que se utilizan en la incorporacin de informes Crystal a aplicaciones Windows Forms.
En segundo lugar, otra librera ofrece clases para la presentacin de informes en aplicaciones Windows
Forms. Estas clases se almacenan en el ensamblado CrystalDecisions.Windows.Forms.dll y entre ellas
destaca una en especfico CrystalReportViewer, que implementa el visor de informes Windows.
En tercer lugar, otra librera ofrece clases para la presentacin de informes en aplicaciones Web
ASP.NET. Estas clases se almacenan en el ensamblado CrystalDecisions.Web.dll y entre ellas destaca
tambin una en especfico una que tambin se llama CrystalReportViewer, aunque su espacio de
nombres es diferente, y que implementa el visor de informes para aplicaciones Web.
Hablaremos ms sobre esta clase en el siguiente tema.
Si busca los componentes de Crystal Reports instalados en el Cuadro de herramientas de Visual Studio,
ver que actualmente (estamos trabajando en una aplicacin Windows) aparecen dos: ReportDocument y
CrystalReportViewer. Un panorama similar se podr observar cuando trabajemos en una aplicacin Web,
slo que entonces se tratar del otro visor de informes, el adecuado para aplicaciones Web.
En general, cuando se habla del modelo de objetos de Crystal Reports, se hace referencia nicamente a
las clases de la primera librera, cuyo uso es comn tanto a las aplicaciones Windows como a las
aplicaciones Web. El modelo de objetos de Crystal contiene cientos de clases para representar con todos
sus detalles a todos los diferentes elementos que componen un informe o participan de algn modo en
l.
Por ejemplo, incluye una clase ParameterField para representar las caractersticas de un parmetro, y la
clase ReportDocument (que representa a un informe completo) ofrece una propiedad de tipo array
ParameterFields() mediante la que podramos acceder a todos los parmetros de un informe.
pregunta si realmente deseamos un objeto no tipado o si preferimos crear una clase tipada asociada a
alguno de los informes del proyecto.
Una de las caractersticas favoritas de los desarrolladores es la posibilidad de pasar directamente valores
de parmetros a los informes de manera transparente.
Ante todo, aadiremos dos parmetros a nuestro informe, correspondientes a la fecha de inicio y fecha
de fin de los pedidos. O sea, no deseamos obtener todos los pedidos de la base de datos, sino solo los que
estn entre las fechas de inicio y fin indicadas por los parmetros. Llamaremos a los parmetros FInicio y
FFin, y haremos que la frmula de seleccin del informe sea:
{SalesOrderHeader.OrderDate} in {?FInicio} to {?FFin}
Observe la utilizacin de los operadores in..to (desde..hasta) por parte del Asistente.
A continuacin, aadiremos las siguientes lneas de cdigo al evento Load del formulario: ' asignar valores
a parmetros CrystalReport11.SetParameterValue("FInicio", New DateTime(2003, 9, 1))
CrystalReport11.SetParameterValue("FFin", New DateTime(2003, 9, 5))
Esto es suficiente para hacer que se muestren solamente los pedidos efectuados entre el 1 y el 5 de
septiembre de 2003. El mtodo SetParameterValue de ReportDocument espera dos valores, el nombre
del parmetro y el valor a asignar, respectivamente. El segundo parmetro es de tipo Object, dado que
los parmetros pueden ser de distintos tipos. Hay que comprobar siempre que enviamos datos de los
tipos correctos al informe.
IMPRESIN DE INFORMES
Para la impresin de un informe desde cdigo, de nuevo podemos utilizar un potente mtodo de la clase
ReportDocument: PrintToPrinter(). Previamente, se debe utilizar la propiedad PrintOptions (una
propiedad con poca ciencia y bastante miga, sobre la que no daremos muchos detalles aqu) para
seleccionar la impresora activa y establecer mltiples opciones de impresin.
Por ejemplo, para enviar a mi impresora predeterminada una copia de todas las pginas del informe,
debo escribir:
' imprimir
CrystalReport11.PrintOptions.PrinterName = "Dell Laser Printer 5210n"
CrystalReport11.PrintToPrinter(1, False, 0, 0)
29
30
DESPLIEGUE
CRYSTAL
DE APLICACIONES
WINDOWS
Una vez terminado el desarrollo de una aplicacin, llega el momento del despliegue. Con ese objetivo,
Visual Studio ofrece diferentes tipos de proyectos de instalacin que permiten empaquetar los ficheros
que se deben copiar al equipo de destino, as como la secuencia de comandos que se deben ejecutar en
ste para que la aplicacin quede lista para funcionar en la mquina de destino.
En lo concerniente a Crystal Reports, para desplegar correctamente cualquier aplicacin .NET que utilice
informes Crystal es necesario incluir en el programa de instalacin:
las libreras .NET de Crystal Reports.
los ficheros .RPT que sean externos a la aplicacin.
Creemos un nuevo proyecto de instalacin para desplegar nuestra reciente aplicacin Ejemplo3. Para
ello, lo primero es utilizar Archivo | Nuevo proyecto y seleccionar la plantilla Proyecto de instalacin
debajo del nodo Otros tipos de proyectos | Instalacin e implementacin. Llamemos al proyecto
Instalar3 y pulsamos Aceptar. Se presentar un editor especializado en el que debemos especificar qu
ficheros, accesos directos, etc. queremos colocar en qu directorios del equipo de destino.
Generalmente, el ejecutable y los ensamblados privados que componen la aplicacin se colocan en la
carpeta de la aplicacin, y opcionalmente se colocan accesos directos al ejecutable en el men Programas
o el escritorio del usuario.
Ante todo, debemos seleccionar el nodo del proyecto en el Explorador de soluciones e introducir las
propiedades bsicas del proyecto, sobre todo Manufacturer (fabricante) y Product Name (nombre del
producto), que determinarn la carpeta de aplicacin por defecto (\[Archivos de programa]\[Fabricante]
\[NombreProducto]). Para agregar archivos a la carpeta de la aplicacin, pulsamos el botn derecho sobre
ella y seleccionamos la opcin Agregar. En este caso sencillo, utilizamos la opcin Archivo para aadir el
nico archivo necesario, el ejecutable Ejemplo3.exe (el informe Crystal utilizado est como recurso
incrustado).
Ahora debemos seleccionar la opcin Proyecto | Propiedades del men de Visual Studio. La mayor parte
de las opciones del dilogo que aparece son satisfactorias, pero s debemos pulsar el botn Requisitos
previos, que nos permite indicar qu software debe incluirse en nuestro proyecto para instalarlo en la
mquina de destino si no estuviera ya instalado. Adems de .NET Framework 2.0 (que ya deber estar
marcado), debemos marcar la casilla correspondiente a Microsoft Data Access Components 2.8
(necesario para .NET) y la casilla de Crystal Reports para .NET Framework 2.0.
Pulsamos Aceptar dos veces para cerrar los cuadros de dilogo, y ya casi est! Solo nos queda
seleccionar la opcin Generar | Generar de Visual Studio para generar el proyecto de instalacin.
El proyecto de instalacin siempre consiste de una jerarqua de carpetas con todos los recursos
necesarios para la instalacin, empaquetados o no, segn las opciones que hayamos seleccionado. En
cualquier caso, en el directorio raz siempre se incluye un fichero Setup.exe, que es el que debemos
ejecutar en la mquina de destino para proceder a la instalacin de la aplicacin.
En este tema estudiaremos las particularidades relacionadas con la programacin de aplicaciones Web
que utilicen Crystal Reports.
Los mecanismos para la incorporacin de informes Crystal Reports en aplicaciones Web son muy similares
a los que ya hemos visto para las aplicaciones de escritorio. Casi todos los recursos de programacin que
hemos visto anteriormente (conexin a la base de datos, aplicacin de parmetros, utilizacin de un
DataSet como origen del informe) son igualmente aplicables para el desarrollo de aplicaciones Web. Las
principales diferencias tienen que ver no con el modelo de programacin (como veremos, en el fondo se
utiliza la misma clase ReportDocument), sino con las caractersticas relacionadas con la visualizacin,
dado que las aplicaciones Web se ejecutan en un navegador como Internet Explorer.
El despliegue tambin es muy similar bsicamente se trata de hacer que las libreras .NET de Crystal
caigan en su sitio cuando se ejecute el programa de instalacin.
TCNICAS FUNDAMENTALES
Las diferentes subsecciones de esta seccin presentan las tcnicas especficas que se utilizan al incorporar
informes Crystal en aplicaciones Web ASP.NET.
Por ltimo, tenemos varias propiedades booleanas que determinan qu botones de la barra de
herramientas deben aparecer o no:
HasDrillUpButton mostrar o no el botn de Volver al informe anterior.
HasExportButton mostrar o no el botn de Exportar.
HasGotoPageButton mostrar o no el botn de Ir a pgina.
HasPageNavigationButtons mostrar o no los botones de navegacin por las pginas.
HasPrintButton mostrar o no el botn de Imprimir.
HasRefreshButton mostrar o no el botn de Actualizar.
HasSearchButton mostrar o no el botn de Buscar texto.
HasToggleGroupTreeButton mostrar o no el botn de Mostrar rbol de grupos.
HasZoomFactorList mostrar o no la lista de opciones de zoom.
incluyendo en nuestro caso los ficheros .rpt (que en las aplicaciones Web siempre se almacenan como
ficheros externos).
35