Crystal Report - Curso Practico

  • Published on
    27-Dec-2015

  • View
    31

  • Download
    0

Transcript

  • 1

    BIENVENIDO AL CURSO "DESARROLLO DE INFORMES DE DATOS CON CRYSTAL REPORTS .NET"! 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.

    INTRODUCCIN A CRYSTAL REPORTS .NET En esta primera leccin aprender qu es Crystal Reports, las particularidades de su versin para .NET Framework, su arquitectura y las posibilidades que ofrece para el diseo y ejecucin de informes de datos. La leccin consta de los siguientes temas: 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.

    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

  • 2

    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.

    ARQUITECTURA. COMPONENTES PRINCIPALES La arquitectura de Crystal Reports.NET gira alrededor del soporte para un tipo de ficheros de formato propietario, que se distingue por la extensin .RPT (report) y en el que se almacena la definicin de los informes. El producto se puede ver como la combinacin de tres componentes principales, que son: El Motor de Impresin (Crystal Reports Print Engine, CRPE). A pesar de lo que su nombre sugiere, este componente, escrito en cdigo no administrado, no slo se encarga de lo relacionado con la impresin en papel de los informes, sino adems con todo lo que tiene que ver con la ejecucin de los mismos, empezando por el acceso a la base de datos para leer la informacin y continuando con la generacin de la imagen de las diferentes pginas para luego volcarlas en pantalla, papel o exportarlas a otros formatos como Adobe PDF o Microsoft Word. Las Libreras de Cdigo Manejado encapsulan la funcionalidad del Motor de Impresin a travs de un conjunto de clases fcilmente accesibles desde aplicaciones escritas en Visual Basic, C# o cualquier otro lenguaje .NET. Estas son las libreras que utilizaremos desde nuestras aplicaciones o servicios (para Windows o la Web) para cargar, ejecutar e imprimir los informes. Por ltimo, el Diseador de Informes es el software que presenta la interfaz de usuario a travs de la cual un usuario, programador o no, puede crear (disear) un informe y guardarlo en un fichero .RPT para su posterior reutilizacin. Se trata de una aplicacin sofisticada, repleta de potentes asistentes que garantizan una alta productividad sin limitar las posibilidades a nuestra disposicin. La versin del Diseador que incluye Crystal Reports.NET se integra perfectamente dentro de Visual Studio 2005, permitiendo creando una experiencia an ms gil y productiva.

    Arquitectura de Crystal Reports

    POSIBILIDADES DE ACCESO A DATOS Y EXPORTACIN

  • 3

    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.

    LIBRERAS DE CRYSTAL REPORTS Las libreras de cdigo manejado incluidas en Crystal Reports.NET conforman una potente API Application Programming Interface - Interfaz para la Programacin de Aplicaciones) que facilita a los desarrolladores la tarea de integrar informes previamente desarrollados dentro de sus propias aplicaciones. Debido a la diversidad de contextos en los que se puede hacer uso de Crystal Reports en aplicaciones .NET (aplicaciones Windows, aplicaciones o servicios Web), el fabricante decidi crear diferentes ensamblados fsicos (DLLs) para simplificar las dependencias y el despliegue ulterior de las aplicaciones. La siguiente tabla presenta los principales ensamblados (libreras de clases) que forman parte de Crystal Reports.NET y se instalan en la Cach Global al instalar el producto. Generalmente no es necesario agregar explcitamente las referencias a estos ensamblados en nuestros proyectos, ya que los asistentes de Visual Studio se encargan automticamente de ello cuando, por ejemplo, incorporamos a una aplicacin un informe de Crystal Reports. ENSAMBLADO USO CrystalDecisions.Shared

    Contiene tipos compartidos por Crystal Reports.NET y otras aplicaciones de la empresa.

    CrystalDecisions.ReportSource Contiene la implementacin de clases para conectarse a diferentes orgenes de informes.

    CrystalDecisions.CrystalReports.Engine

    Interfaz con el Motor de Impresin de Crystal Reports.

    CrystalDecisions.Windows.Forms

    Clases para la presentacin de informes Crystal en aplicaciones Windows.

    CrystalDecisions.Web

    Clases para la presentacin de informes Crystal en aplicaciones Web

  • 4

    REQUISITOS PARA SEGUIR EL CURSO Para seguir este curso, necesitar tener instalado el siguiente software: Visual Studio 2005 edicin Profesional o superior. Las ediciones Express y Estndar *NO* incluyen, desgraciadamente, Crystal Reports.NET. La alternativa, en caso de disponer de alguna de esas ediciones de gama baja de Visual Studio, consiste en adquirir Crystal Reports.NET de forma independiente (dirjase al sitio web del fabricante). SQL Server 2005, cualquier edicin. Si no dispone de una edicin comercial de SQL Server 2005, puede descargar e instalar la edicin Express (Service Pack 1) desde aqu. En este ltimo caso, tambin le ser de utilidad el SQL Server Management Studio Express. La base de datos de ejemplo AdventureWorks, que utilizaremos para los informes. Si dispone de una edicin comercial de SQL Server 2005, la base de datos forma parte de la instalacin del producto; en cualquier caso, puede descargarse desde aqu. En principio, de esta descarga nicamente es necesario el fichero AdventureWorksDB.msi. El curso asume una cierta familiaridad con la programacin de aplicaciones .NET en Visual Basic y con el trabajo con bases de datos relacionales.

    PRESENTACIN DE LA BASE DE DATOS DE EJEMPLO Desarrollaremos los ejemplos de este curso utilizando como origen de datos para los informes a AdventureWorks, la base de datos de ejemplo que acompaa a SQL Server 2005. Se trata de una base de datos que almacena toda la informacin generada por una empresa ficticia dedicada a la fabricacin y venta de bicicletas. Dado que cubre todos los aspectos del funcionamiento de la empresa, es una base de datos bastante extensa, y por eso Microsoft ha dividido las tablas que componen la base de datos en los siguientes esquemas: Esquema Contiene objetos relacionados con Person Personas. Aqu se almacenan los nombres y direcciones de clientes

    individuales, proveedores y empleados. Purchasing Compras. Informacin sobre las piezas y productos que la empresa

    compra y sus proveedores. Production Produccin. Informacin sobre los productos fabricados y vendidos por

    la empresa. Sales Ventas. Informacin sobre los clientes y los pedidos que realizan. HumanResources Recursos Humanos. Informacin sobre los empleados de la empresa. 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.

    TCNICAS BSICAS DE DISEO DE INFORMES En este tema se presenta el Diseador de Informes de Crystal Reports integrado en Visual Studio 2005 y se presentan las tcnicas bsicas de diseo de informes en las que se apoyan los temas subsiguientes.

    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

  • 5

    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.

    CREACIN DE INFORMES ESTNDAR UTILIZANDO EL ASISTENTE Dentro de Visual Studio 2005, seleccione Archivo | Nuevo | Proyecto y cuando aparezca el cuadro de dilogo Nuevo proyecto elija Visual Basic | Aplicacin para Windows (observe que hay otra plantilla Aplicacin de Crystal Reports, que evitaremos de momento). Llame al proyecto Ejemplo1 y pngalo en el directorio adecuado. Como toda aplicacin para Windows, incluye un formulario principal inicialmente vaco. Ahora sobre el nombre del proyecto en el Explorador de Soluciones, pulse botn derecho del ratn y Agregar | Nuevo elemento. Del cuadro de dilogo con los distintos tipos de elemento posibles, elija Crystal Reports. Llame al nuevo fichero ListadoProductos.rpt. Al agregar un informe al proyecto, se activa el Diseador de Crystal Reports. Lo que ve en pantalla ahora (Galera de Crystal Reports) es la ventana introductoria del Diseador, que nos pregunta:

  • 6

    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.

  • 7

    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.

    ESPECIFICACIN DE LAS TABLAS DEL INFORME. OPCIONES DE ENLACE Como resultado del paso anterior, tenemos a nuestra disposicin en el rea de trabajo de Visual Studio como vista activa del informe el lienzo generado por el Asistente, sobre el que podremos hacer todas

  • 8

    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,

  • 9

    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.

    TCNICAS PRINCIPALES DE UTILIZACIN DEL ENTORNO DE DISEO Para insertar cualquier elemento en un informe, como hemos visto antes, se utilizan dos tcnicas fundamentales: Si se trata de un campo de base de datos, parmetro, grupo, etc. ya existente y visible en el Explorador de campos, basta con arrastrarlo desde all hacia la posicin deseada dentro de la seccin adecuada, como acabamos de hacer. Como segundo ejemplo, vamos a poner el ttulo del informe en la seccin de Encabezado del informe (para que aparezca una vez, en la parte superior de la primera pgina, cuando se ejecute el informe). Para ello iremos al Explorador de campos, desplegaremos el nodo Campos especiales, y elegiremos el elemento Ttulo del informe y lo arrastraremos hacia la seccin de Encabezado de informe, digamos que ms hacia la esquina izquierda del informe. De nuevo, pasando a la

  • 10

    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

  • 11

    que el cuadro de dilogo est traducido al castellano (adems de mejor organizado), recomendamos utilizar ste ltimo.

    PRINCIPALES TIPOS DE OBJETOS Cada vez que arrastramos algo desde el Explorador de campos, o insertamos un objeto desde el men o la barra de herramientas, el Diseador de Crystal Reports crea para nosotros un objeto del tipo correspondiente. Los principales tipos de objetos que podemos arrastrar sobre el lienzo de diseo desde el Explorador de campos son: Campos de bases de datos: objetos que mostrarn los valores de los campos de los diferentes registros extrados de la base de datos. En dependencia del tipo de datos del campo Crystal Reports distingue los tipos Alfanumrico (Cadena), Nmero, Moneda, Fecha, Hora, Fecha/Hora y Lgico (Booleano) -, el cuadro de dilogo de configuracin ofrecer una pestaa especfica para configurar los datos de ese tipo. Campos de frmula: Como estudiaremos en el tema 4, Crystal Reports ofrece un lenguaje de frmulas que nos permitir implementar, por ejemplo, campos calculados que no existan fsicamente en la base de datos. Se puede crear frmulas de cualquiera de los tipos de datos antes mencionados, y Crystal ofrece una amplsima biblioteca de funciones predefinidas para facilitarnos el desarrollo de frmulas. Campos de parmetro: Otro de los elementos importantsimos de Crystal Reports desde el punto de vista prctico son los parmetros. Los parmetros (que estudiaremos en el tema 5) hacen posible que un mismo informe pueda ser utilizado en mltiples situaciones sin necesidad de hacer retoques al diseo del informe. El informe se disea con uno o ms parmetros, y los valores de los parmetros se suministran al motor de impresin desde fuera, inmediatamente antes de cada ejecucin del informe. Campos de nombre de grupo: En un informe con datos agrupados, el nombre de grupo es el campo por el que se agrupan los datos. Por ejemplo, en un listado de clientes agrupados por pases, el nombre de grupo ser el nombre del pas. Generalmente, el nombre de grupo se coloca en la seccin de Encabezado de grupo. Campos de totales acumulados: Los totales acumulados permiten implementar los tpicos suma y sigue, resmenes que se van acumulando y pueden ser reiniciados cuando se desee (al final de cada grupo, al cambiar el valor de cierto campo, o nunca). Estudiaremos los totales acumulados en el tema 3. Campos especiales: Bajo el nombre comn de campos especiales se han agrupado toda una serie de elementos de informacin que generalmente se desea mostrar en los informes: ttulo y autor del informe (que ya hemos presentado antes), fecha de impresin o modificacin del informe, nmero de pgina actual, cantidad total de pginas del informe, entre otros. Por otra parte, desde el men de Crystal Reports o la barra de herramientas correspondiente podremos insertar en el informe objetos como: Secciones: Aunque ya el Asistente ha creado para nosotros cada una de las secciones tpicas de un informe, un programador podra estar interesado en dividir una seccin en dos o ms subsecciones. Hablaremos ms sobre las secciones algo ms adelante en el curso. Grupos: Al insertar un grupo en el informe, en realidad (como veremos a continuacin) se crean tres elementos diferentes: la seccin de Encabezado de grupo y Pie de grupo correspondiente, ms un campo de nombre de grupo asociado al campo por el que hemos indicado que queremos agrupar. Resmenes: Los objetos de resumen sirven para hacer totalizaciones generales o parciales (por grupos) de los valores de un campo de la base de datos. Tablas cruzadas: Una tabla cruzada permite mostrar 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. Generalmente las tablas cruzadas se insertan en la seccin de Pie del informe. Grficos: Crystal Reports permite incorporar a los informes diversos tipos de grficos comerciales (de lneas, barras, tarta, etc.) basados en los registros obtenidos de la base de datos. Generalmente los grficos se colocan en la seccin de Pie del informe o algn Pie de grupo.

  • 12

    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.

    Visor de aplicaciones Windows de Crystal Reports

    El Visor de informes ofrece los siguientes controles en su barra de herramientas: El botn de Exportar, que permite exportar el resultado del informe a diferentes formatos como Microsoft Excel, Microsoft Word, texto enriquecido (.RTF) o Adobe PDF. El botn de Imprimir, que permite seleccionar una impresora y enviar a ella el informe para as obtener una copia en papel. El botn de rbol de grupos, que permite mostrar u ocultar el rbol de grupos, banda situada a la izquierda del visor (ahora vaca, puesto que nuestro informe inicial no tiene grupos). En un informe con grupos, en esta banda se situarn los nombres de los diferentes grupos existentes en el informe, en forma de hiperenlaces a la pgina del informe en la que comienzan los datos correspondientes a cada uno de los grupos. Por ejemplo, en un listado de clientes agrupados por pases, en el rbol de grupos aparecer cada uno de los nombres de los pases en los que hay clientes, y podramos saltar a ver los clientes de cada pas con un simple clic de ratn. Los botones de navegacin, que permiten desplazarse hacia delante y hacia atrs por las pginas del informe. Tenga en cuenta que la generacin de las pginas de un informe se produce dinmicamente, a medida que va siendo necesario; desplazarse a la ltima pgina del informe provocar que se generen todas y cada una de las pginas (que el motor de Crystal almacena en memoria para su posterior reutilizacin). Un cuadro de texto que nos muestra la pgina actual y tambin nos permite teclear un nmero para saltar a cualquier otra pgina. El botn de Detener carga, que slo est activo mientras se est cargando el informe, con el objetivo de que podamos cancelar la carga de datos si ya hemos visto lo que queramos ver o hemos detectado un error en el informe. El botn de Actualizar (refrescar) informe, que nos permitir regenerar el informe desde cero (por ejemplo, para obtener una versin ms actual del informe en caso de que los datos de la base de datos hayan cambiado). El cuadro de combinacin de Zoom, que nos permitir establecer la escala de visualizacin de las pginas del informe. Este Visor de informes es casi el mismo que vern los usuarios de nuestras aplicaciones Windows que incluyan informes Crystal Reports cuando ordenen la visualizacin de un informe; desde programa,

  • 13

    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).

    EJEMPLO BSICO DE APLICACIN WINDOWS Estamos utilizando el Diseador de Crystal Reports embebido en Visual Studio, y no vamos a dejarle con la miel en los labios, sino que mostraremos ahora un sencillo ejemplo de cmo alcanzar uno de los objetivos finales de este curso, que es integrar los informes Crystal dentro de una aplicacin Windows. El proceso en relativamente muy simple, y muestra la potencia de la programacin basada en componentes que Visual Studio promueve. Seleccione el formulario principal (y nico) de la aplicacin y configure sus tres o cuatro propiedades principales (ttulo, estilo, dimensiones, posicin inicial). Luego coloque sobre el formulario un componente de la clase CrystalReportsViewer (ficha Crystal Reports). Encaje el visor en el rea cliente de la ventana para que la llene completamente. CrystalReportsViewer es un componente que encapsula el visor de Crystal Reports para aplicaciones Windows. Configuremos sus propiedades principales: La propiedad ReportSource es una propiedad polimrfica que puede apuntar a diferentes entidades capaces de proveer un informe. Para este primer ejemplo, despliegue la lista de posibles opciones para la propiedad y seleccione Crear una nueva instancia de ReportDocument | Ejemplo1.ListadoProductos. Ms adelante veremos con ms detalles qu significa eso. Si examina las propiedades disponibles en la Ventana de propiedades, ver toda una serie de propiedades lgicas con nombres Display y Show, cuyo objetivo es permitirnos configurar qu zonas o botones queremos que el visor muestre o no. En nuestro caso, dado que el informe no tiene grupos, vamos a asignar False a las propiedades DisplayGroupTree y ShowGroupTreeButton. Y ya est! Ejecute la aplicacin, y ver cmo hemos logrado mostrar en una ventana de Windows un informe Crystal Reports sin escribir ni una sola lnea de cdigo.

    TCNICAS FUNDAMENTALES DE DISEO DE INFORMES En este tema se presentan las tcnicas fundamentales que necesitar dominar perfectamente el programador que disee informes de Crystal Reports, pues se presentan en la prctica con mucha frecuencia.

    INFORMES CON MLTIPLES TABLAS Rara es la ocasin en que todos los datos necesarios para presentar en un informe se pueden obtener de una misma tabla de la base de datos. Las metodologas modernas de diseo de bases de datos relacionales favorecen la normalizacin, y esa tcnica promueve la separacin de la informacin en diferentes tablas para evitar problemas de redundancia e inconsistencia. Generalmente, al disear un informe necesitaremos combinar la informacin proveniente de la tabla principal con los contenidos de al menos uno o ms catlogos u otras tablas de propsito general. Por ejemplo, la base de datos AdventureWorks agrupa los productos por subcategoras y categoras. Suponga que necesitamos mostrar en nuestro informe anterior los productos organizados, inicialmente, por subcategoras. La tabla Products incluye un campo ProductSubcategory en la que se almacena el cdigo de subcategora, una clave externa (fornea) a otra tabla de la base de datos, Production.ProductSubcategory. Si queremos mostrar en el informe los nombres de las subcategoras en lugar de sus cdigos, tendremos que indicarle a Crystal Reports que obtenga la informacin correspondiente, cruzando la tabla de productos con la de subcategoras.

  • 14

    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.

  • 15

    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.

    MS SOBRE LAS SECCIONES. PROFUNDIZACIN Las secciones como un todo tambin tienen un conjunto de propiedades que podemos configurar para mejorar la apariencia y funcionalidad de nuestros informes. Para ello, es necesario utilizar el Asistente de seccin, disponible en el men de Crystal Reports en Report | Asistente de seccin. El Asistente de

  • 16

    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

  • 17

    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.

    SELECCIN Y ORDENACIN DE GRUPOS A diferencia de la seleccin de registros, que incluye o excluye del informe registros individuales en base a una condicin, la seleccin de grupos permite establecer qu grupos enteros deben o no ser incluidos en el informe. En trminos de SQL, si la formula de seleccin de registros corresponde a la clusula WHERE de una sentencia SELECT, entonces la frmula de seleccin de grupo corresponde a la clusula HAVING. El Asistente de seleccin determina que una frmula de seleccin es de grupo si el campo de Crystal Reports que utilizamos en la condicin es un campo normal de la base de datos o un resumen. En este ltimo caso, est claro que se trata de una condicin de seleccin de grupo. Por ejemplo, supongamos que nos interesan nicamente las categoras con ms de 50 productos. En el Asistente de seleccin, pulsamos Nuevo para agregar una nueva condicin; en el dilogo de seleccin de campo que aparece, elegimos el recuento de productos por nombre de categoras, y en los siguientes desplegables introducimos es mayor que y el valor 50. Al pulsar el botn Mostrar frmula, veremos la frmula Crystal correspondiente a la condicin especificada. Por otra parte, una ojeada a la Vista previa nos convencer de que la seleccin funciona. Nota avanzada: Por lo general (al menos en informes de tipo listado), el motor de Crystal Reports ejecuta la agrupacin y la seleccin de grupos en la mquina cliente. Existe una opcin de configuracin, Realizar agrupamiento en el servidor (Report | Opciones del informe del men), mediante la cual se indica al motor que utilice clusulas GROUP BY y HAVING cuando sea posible. Pero cuando es necesario traer tambin los registros individuales para utilizarlos en el informe, el motor no hace uso de esa posibilidad. En cuanto a la ordenacin de grupos, por defecto los grupos aparecen en el informe en el orden determinado por el tipo de datos al que pertenece el campo por el que se agrupa. En nuestro ejemplo, las categoras y subcategoras se presentarn en orden alfabtico, dado que hemos agrupado por los nombres, que son campos de cadena de caracteres. Frecuentemente, lo que se desea no es eso, sino presentar los grupos en orden ascendente o descendente del valor de un resumen incorporado al informe. Para eso, Crystal Reports ofrece un Asistente de ordenacin de grupos (botn en la barra de herramientas Principal, u opcin Report | Asistente de ordenacin de grupos en el men). Supongamos por ejemplo que deseamos presentar las categoras no en orden alfabtico, sino en orden descendente de la cantidad de productos diferentes pertenecientes a cada categora. Lanzamos el Asistente de ordenacin de grupos, y veremos que nos presenta dos pestaas, dado que el informe

  • 18

    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

  • 19

    predeterminados y pulse Aceptar para cerrar el asistente. Ver cmo aparece en el informe un grfico de subcategoras para cada una de las categoras.

    EXPORTACIN A OTROS FORMATOS. WORD, EXCEL, HTML, PDF Crystal Reports nos permite exportar los resultados de la ejecucin de un informe a diferentes formatos. Ciertos formatos (Microsoft Word, Adobe Acrobat, HTML) se utilizan mayormente con vistas a poner el informe como tal a disposicin de terceros; en otros casos (Microsoft Excel, Microsoft ODBC), el objetivo es capturar los resultados numricos que el informe contiene para realizar ciertas transformaciones posteriores sobre ellos utilizando otras aplicaciones. Si pulsa el botn de Exportar informe de la barra de herramientas del visor, le aparecer un dilogo en el que podr elegir el formato de exportacin y el destino (en la versin integrada en Visual Studio, nicamente un fichero en disco). Un segundo dilogo especfico para el formato de exportacin elegido aparecer a continuacin para permitirnos configurar el resultado. Y esto dar paso a un tercer cuadro de dilogo en el que podremos elegir la ruta y el nombre del fichero a crear. En los temas del curso dedicados a la programacin veremos cmo exportar informes desde nuestras aplicaciones.

    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

  • 20

    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.

    SINTAXIS DEL LENGUAJE DE FRMULAS CRYSTAL Y VISUAL BASIC Una frmula se compone a partir de diferentes elementos bsicos, como son: Constantes: 12 (entero), 0.07 (nmero decimal), Total (cadena de caracteres), True (lgica), #12/5/2006# (de fecha/hora). Identificadores, que pueden representar: Nombres de campos, con la sintaxis {NombreTabla.NombreCampo}. Por ejemplo, para representar al campo Sexo de una tabla llamada Clientes, utilizaramos {Clientes.Sexo}. Otras frmulas, con la sintaxis {@NombreFormula}. Por ejemplo, si al definir la frmula B necesitamos utilizar otra frmula A, la escribiramos as {@A}. Totales acumulados, con la sintaxis {#NombreTotal}. Parmetros del informe, con la sintaxis {?NombreParametro}. Los parmetros juegan un papel esencial en el desarrollo de informes genricos que puedan utilizarse en mltiples situaciones diferentes sin necesidad de modificaciones. A ellos les dedicaremos el Tema 5. Operadores: +, - (aritmticos), (de comparacin), Not, And, Or (lgicos), y otros. Funciones predefinidas: Crystal ofrece un amplio espectro de funciones de uso general incorporadas de antemano al producto, de modo que el programador no tenga que reinventar la rueda cada vez que quiera ejecutar una tarea ms o menos trivial. Por ejemplo, si el campo Nombre de la tabla Clientes

  • 21

    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.

    APLICACIONES DE LAS FRMULAS En esta seccin estudiaremos los fundamentos de las frmulas de Crystal Reports y presentaremos sus principales aplicaciones, que son: Campos calculados Formato condicional Seleccin de registros y grupos Grupos a medida Totales acumulados condicionales

    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

  • 22

    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.

  • 23

    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.

    SELECCIN DE REGISTROS Y GRUPOS Otra aplicacin sumamente til de las frmulas son los grupos personalizados o a medida. De manera predeterminada, los grupos de Crystal Reports estn compuestos por registros que tienen un mismo valor en el campo seleccionado. Sin embargo, frecuentemente se quieren agrupar los registros de forma que la pertenencia a un mismo grupo venga dictada por otra condicin que no es la estricta igualdad de los campos. Esto es lo que hacen posible los grupos a medida de Crystal Reports. Suponga que deseamos agrupar los registros del listado de pedidos en tres categoras: los de menos de 25 Euros, los que estn entre 25 y 100, y los de ms de 100 Euros. Debemos utilizar el botn Insertar grupo de la barra de herramientas Insertar (o seleccionar la opcin correspondiente del men). Como campo para agrupar, seleccionamos SalesOrderHeader.TotalDue y como criterio de agrupacin en orden especfico. Aparecer una nueva pestaa, en la que podremos crear nuestros grupos personalizados, indicando para cada uno un nombre, y la condicin (frmula) de pertenencia de los registros a los grupos. En nuestro caso, llamemos a los grupos PEQUEOS, MEDIANOS y GRANDES, y asociemos a cada grupo las condiciones correspondientes. Al pulsar Aceptar podremos comprobar que el grupo ha sido creado, y la vista previa nos convencer de que la agrupacin se realiza correctamente.

    TOTALES ACUMULADOS CON CONDICIONES En el tema anterior estudiamos los totales acumulados, pero no profundizamos en la posibilidad de asociarles frmulas para indicar cundo se desea evaluarlas y cundo reiniciarlas a cero. Esta es una posibilidad que conviene tener en cuenta para cuando sea necesaria. Por ejemplo, suponga que queremos hacer que el total acumulado del listado de pedidos se reinicie cada vez que se produzca un cambio de fecha. Previamente ordenamos el listado por el campo OrderDate, utilizando el Asistente de ordenacin. En este veremos que ya hay un criterio establecido, el del grupo (recuerde la mxima para agrupar, hay que ordenar), pero podremos establecer la fecha como criterio de ordenacin secundario dentro de cada grupo. Ahora seleccionemos nuestro total acumulado, pulsemos el botn derecho del ratn sobre l y seleccionemos Editar total acumulado. En la zona Restablecer (inferior derecha) marquemos la opcin

  • 24

    Use una frmula y pulse el botn de frmula correspondiente. Introduzca la frmula: formula = PreviousValue({SalesOrderHeader.OrderDate}) {SalesOrderHeader.OrderDate} La funcin predefinida PreviousValue nos da el valor del campo indicado en el registro anterior. Es muy til para detectar situaciones de cambios de grupo y otras situaciones similares, frecuentemente en combinacin con otras funciones como OnFirstRecord (que devuelve True si estamos situados en el primer registro).

    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.

    DEFINICIN Y USO DE PARMETROS Para definir un parmetro, se debe pulsar con el botn derecho del ratn sobre el nodo Campos de parmetro del Explorador de campos y seleccionar la opcin Nuevo. En el dilogo que aparece, debemos introducir los siguientes datos: Nombre del parmetro. Llamemos al parmetro FechaInicio. Para referirse luego al parmetro desde frmulas, etc. se utilizar la sintaxis {?FechaInicio}. Texto de la solicitud. Antes de ejecutar un informe con parmetros, Crystal Reports preguntar los valores a asignar a los parmetros. Aqu se debe introducir el texto que aparecer en el dilogo de pregunta, en este caso Fecha de inicio. Tipo de datos. El tipo de datos del parmetro, en este caso Fecha. Valores predeterminados. Aqu podemos especificar para el parmetro uno o ms valores por defecto, que se mostrarn en el cuadro de dilogo de solicitud de parmetros para que el usuario no tenga que teclearlos. Opciones. Opciones avanzadas relacionadas con la utilizacin de mltiples valores. Esa es una de las dos facetas de la utilizacin de un parmetro. La segunda es su utilizacin, y para ello podemos hacer con el parmetro todo lo que podemos hacer con cualquier otro campo: arrastrarlo sobre el informe o utilizarlo en cualquier frmula. En nuestro ejemplo, la fecha de inicio forma parte de la frmula de seleccin de registros. Para hacer uso del parmetro, lanzamos el Asistente de seleccin y sustituimos la fecha actualmente en uso por la sintaxis de uso del parmetro {?FechaInicio}. Solo resta entonces mostrar la vista previa para cerciorarnos de que la definicin del parmetro ha sido aceptada: Crystal nos solicitar que indiquemos un valor para la fecha de inicio antes de mostrar el informe.

  • 25

    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.

    UTILIZACIN DE INFORMES EN APLICACIONES WINDOWS En este primer tema relacionado con la programacin de aplicaciones que utilicen informes se presentan los recursos fundamentales que hacen posible incorporar informes Crystal Reports en aplicaciones de escritorio.

  • 26

    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.

    INCORPORACIN DE UN INFORME A UNA APLICACIN Para este nuevo tema relacionado con la programacin .NET, comenzaremos una nueva aplicacin Windows Forms en la que incluiremos un informe Crystal sencillo, puesto que ya hemos cubierto los temas relacionados con el diseo de informes. Eso s, el informe incluir parmetros, ya que como hemos dicho los parmetros son uno de los recursos fundamentales que ofrece Crystal a los desarrolladores de aplicaciones. En Visual Studio 2005, cierre la solucin que tenga abierta y seleccione Archivo | Nuevo | Proyecto. Cuando aparezca el cuadro de dilogo Nuevo proyecto elija Visual Basic | Aplicacin de Crystal Reports, lo que nos ahorrar ciertos pasos que ya hemos visto en el tema 1. Llame al proyecto Ejemplo2 y pngalo en el directorio adecuado. Inmediatamente se presentar el Asistente de informes de Crystal, para que diseemos el (primer) informe que el proyecto contendr. Definiremos en este caso un listado de pedidos similar al que ya hemos hecho anteriormente: la tabla es Sales.SalesOrderHeader, y los campos que mostraremos son SalesOrderID, OrderDate y TotalDue. No incluiremos frmula de seleccin ni parmetros de momento; lo haremos ms adelante. Por ahora trabajaremos con un listado totalmente plano. Al finalizar el diseo del informe, se nos presenta el entorno integrado de Visual Studio con una aplicacin que en principio ya funciona, como podemos comprobar. Qu ha creado el asistente de proyectos Crystal para nosotros? Si mostramos la vista Diseo del formulario Form1, veremos que en ste contiene dos componentes: Un componente no visual (por lo tanto, situado en la banda inferior del diseador) llamado CrystalReport11. A qu clase pertenece este objeto? Para responder a esta pregunta, conviene pulsar el botn Mostrar todos los archivos en el Explorador de soluciones. Veremos que nuestro informe CrystalReport1.rpt tiene un archivo de VB dependiente, y si abrimos ese archivo, en la vista de Cdigo veremos que contiene la definicin de una clase llamada CrystalReport1 igual que el informe; se trata de una clase que representa al informe concreto (en el argot de Crystal, se dice que la clase implementa un informe tipado). El componente CrystalReport11 es de esa clase, y por lo tanto es un objeto que representa a un informe como se. En la siguiente seccin hablaremos con ms detalle sobre este objeto. Un componente visual que ocupa toda el rea de la ventana y tiene como funcin presentar un informe Crystal, llamado CrystalReportViewer1. La clase a la que pertenece es CrystalReportViewer (cuyo espacio de nombres es CrystalDecisions.Windows.Forms). Se trata ni ms ni menos que del visor de informes Crystal para Windows utilizaremos siempre objetos de esta clase para mostrar los informes en nuestras aplicaciones de escritorio. Observe en la Ventana de propiedades que la propiedad ReportSource del visor la apunta al componente CrystalReport11 (recordemos que al inicio del curso ya hemos visto algo similar). En principio, la construccin de estos objetos al crearse el formulario es suficiente para que veamos el informe al ejecutar la aplicacin.

    EL MODELO DE OBJETOS DE CRYSTAL REPORTS.NET El ejemplo anterior ya nos da una idea bastante completa de las libreras de clases para .NET de Crystal Reports. Por una parte, una librera ofrece clases que representan a un informe como un todo (ReportDocument) y a todos los objetos que componen un informe Crystal o participan en l. Estas clases de propsito general se concentran fundamentalmente en el ensamblado CrystalDecisions.CrystalReports.Engine.

  • 27

    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.

    INFORMES TIPADOS Y NO TIPADOS Como acabamos de ver, la clase que juega un papel predominante en el modelo de objetos de Crystal Reports es ReportDocument, que permite representar un informe. Ahora bien, esta clase representa a un informe genrico, sin ninguna caracterstica conocida de antemano. En Crystal a esta clase se la conoce bajo el nombre de informe no tipado. Podramos trabajar con nuestro listado de pedidos a travs de un objeto ReportDocument, pero perderamos cierta informacin especfica de nuestro informe concreto, y tendramos que referirnos a cualquier caracterstica del informe a travs de las propiedades y mtodos generales de ReportDocument. A diferencia de lo anterior, la clase CrystalReport1 generada por el asistente e incluida en nuestro proyecto (que hereda de ReportClass, que a su vez hereda de ReportDocument), representa un informe tipado una clase especializada a partir de ReportDocument que solo vale para nuestro informe concreto, pero que almacena informacin sobre l que nos facilitan la vida. En particular, los informes tipados contienen cdigo que se encarga automticamente de cargar el informe concreto, que se almacena dentro del ejecutable en forma de recurso. Observe en el cdigo fuente de CrystalReport1 la propiedad ResourceName. Como otro ejemplo, vea la definicin de la propiedad Section1 de CrystalReport1. Observe ahora cmo el uso de la clase tipada facilita el acceso a la primera seccin del informe: Dim doc As ReportDocument = CType(CrystalReport11, ReportDocument) ' estas dos lneas hacen lo mismo MessageBox.Show(CrystalReport11.Section1.Name) MessageBox.Show(doc.ReportDefinition.Sections(0).Name) Como habr comprendido, la primera lnea de cdigo declara una variable genrica de tipo ReportDocument y la inicializa para que apunte a nuestro informe tipado. En general, es recomendable trabajar con los informes tipados siempre que sea posible, y utilizar directamente la clase ReportDocument slo para trabajos de ndole genrica, por ejemplo cuando queremos que el mismo componente apunte a diferentes informes durante la ejecucin. De hecho, cuando se arrastra un ReportDocument del Cuadro de herramientas a un formulario, Visual Studio nos

  • 28

    pregunta si realmente deseamos un objeto no tipado o si preferimos crear una clase tipada asociada a alguno de los informes del proyecto.

    INFORMES INCRUSTADOS Y EXTERNOS Si selecciona un informe de Crystal Reports en el Explorador de soluciones, ver sus propiedades en la Ventana de propiedades. Debemos mencionar dos muy importantes, cuyo significado conviene conocer. La primera de ellas es Accin de generacin. Ver que su valor predeterminado es Recurso incrustado. Eso significa que cuando la aplicacin es compilada la definicin del informe es almacenada como un recurso dentro del ensamblado principal del proyecto (en nuestro caso, del ejecutable). Por lo tanto, no necesitaremos desplegar fsicamente el fichero .rpt junto con el ejecutable cuando instalemos la aplicacin a otros usuarios, lo cual es ms cmodo y ms seguro. Como inconveniente, si necesitamos hacer modificaciones a un informe incrustado, tendremos que recompilar la aplicacin y volver a desplegar el ejecutable. La otra opcin de esta propiedad que se utiliza con cierta frecuencia es Ninguna, para no incrustar el informe en el ensamblado. En ese caso, a la propiedad Copiar en el directorio de resultado se le asigna el valor Copiar siempre o Copiar si es posterior, con el objetivo de que el fichero .rpt sea copiado al mismo directorio que el ejecutable o librera final. Para un correcto funcionamiento de la aplicacin, el fichero .rpt siempre deber ir junto con el ejecutable. La ventaja de este enfoque es que se podra enviar una nueva versin del informe al usuario sin necesidad de redesplegar toda la aplicacin. Y el peligro est en que el informe podra ser borrado o alterado con o sin mala intencin. Para cargar la definicin de un informe externo a un objeto ReportDocument o una clase derivada (informe tipado) se utiliza el mtodo Load: ' carga cualquier informe externo en un ReportDocument no tipado ReportDocument1.Load("CrystalReport1.rpt") ReportDocument1.Refresh() CrystalReportViewer1.ReportSource = reportDocument1

    CONEXIN A LA BASE DE DATOS La clase ReportDocument (y por herencia, todos los informes tipados, que heredan de ella), ofrecen un mtodo SetDatabaseLogon que permite suministrar al motor de Crystal Reports la informacin de conexin necesaria para acceder a la base de datos donde estn los datos que necesita el informe. Este mtodo ofrece dos variantes fundamentales, que permiten indicar: a) Usuario y contrasea. El informe se ejecutar contra el servidor y base de datos definidos dentro del informe. b) Servidor, Base de datos, Usuario y contrasea. El informe se ejecutar contra el servidor y base de datos especificados. Esta variante es ms til en situaciones donde tenemos una base de datos de desarrollo y otra de produccin. Si en nuestro ejemplo necesitramos suministrar informacin de conexin para ejecutar el informe, deberamos desconectar el visor de informes de CrystalReport11 en tiempo de diseo y programar lo siguiente en el evento Load del formulario: CrystalReport11.SetDatabaseLogon(".\SQLExpress", "AdventureWorks", "sa", "kk") ' conexin del visor en tiempo de ejecucin CrystalReportViewer1.ReportSource = CrystalReport11

    PASO DE PARMETROS EN TIEMPO DE EJECUCIN

  • 29

    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.

    EXPORTACIN DE INFORMES MEDIANTE CDIGO Otra de las tcnicas comnmente requeridas por los desarrolladores es la posibilidad de exportar el informe a un formato de presentacin diferente, tradicionalmente Adobe PDF o Microsoft Word o Excel. Aqu de nuevo viene en nuestra ayuda la clase ReportDocument, que ofrece varios mtodos que nos facilitan la tarea. El mtodo Export() es el ms potente de la familia, y a la vez el mas complejo de utilizar. Permite especificar, adems del destino de la exportacin, otras caractersticas de la exportacin que son tiles sobre todo cuando se exporta a Excel. Adicionalmente, tenemos los mtodos ExportToDisk(), ExportToStream() y ExportToHttpResponse(), que simplifican la exportacin de informes a un fichero en disco, un flujo de salida cualquiera o un flujo HTTP como el generado por una aplicacin o servicio Web. Para exportar nuestro informe a un fichero en formato PDF, podremos escribir: ' exportar a PDF CrystalReport11.ExportToDisk( CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, _ "C:\PEDIDOS.PDF") El primer parmetro es de un tipo enumerado que determina el formato de exportacin.

    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)

  • 30

    Los parmetros de PrintToPrinter significan: a) la cantidad de copias, b) si se deben combinar o no las copias en caso de ser ms de una, c) pgina de inicio, d) pgina de fin. Las pginas de inicio y fin se deben poner a cero si se desea obtener copias completas.

    CONFIGURACIN DEL VISOR DE INFORMES El Visor de informes de Crystal Reports posee varias propiedades dignas de mencionar aqu. La primera, ReportSource, tiene que ver con el origen a partir del que el visor obtiene el informe a mostrar; las dems tienen relacin con la esttica de presentacin del informe. ReportSource: esta propiedad indica al visor de dnde debe obtener el informe a mostrar. Es una propiedad de tipo Object, porque se le puede asignar diferentes valores: Una cadena de caracteres que representa el nombre del fichero que contiene el informe. Esta variante es la ms simple y primitiva de todas; existe desde la primera versin de la librera. Utilizando esta opcin es posible saltarse completamente el modelo de objetos de Crystal. Un objeto de la clase ReportDocument (informe no tipado) o derivada de ella (informe tipado). Esta variante es la que estamos presentando aqu. A continuacin, tenemos tres propiedades booleanas que determinan si ciertas zonas del visor deben aparecer o no: DisplayGroupTree si se debe mostrar o no el rbol de grupos (en caso de que el informe tenga grupos). DisplayStatusBar si se debe mostrar o no la barra de estado. DisplayToolbar si se debe mostrar o no la barra de herramientas. Por ltimo, tenemos varias propiedades booleanas que determinan qu botones de la barra de herramientas deben aparecer o no: ShowCloseButton mostrar o no el botn de Cerrar. ShowExportButton mostrar o no el botn de Exportar. ShowGotoPageButton mostrar o no el botn de Ir a pgina. ShowGroupTreeButton mostrar o no el botn de Mostrar rbol de grupos. ShowPageNavigateButtons mostrar o no los botones de navegacin por las pginas. ShowPrintButton mostrar o no el botn de Imprimir. ShowRefreshButton mostrar o no el botn de Actualizar. ShowTextSearchButton mostrar o no el botn de Buscar texto. ShowZoomButton mostrar o no el botn de Acercar/Alejar.

    INFORMES A PARTIR DE UN DATASET Los informes Crystal que hemos presentado hasta ahora han obtenido sus datos directamente de la base de datos en el momento necesario. Pero los informes de Crystal Reports pueden nutrirse de muchas otras diversas fuentes de informacin. En particular, un informe Crystal puede obtener sus datos de un DataSet (conjunto de datos) de ADO.NET, lo cual es muy conveniente porque las arquitecturas de mltiples capas de uso comn en la prctica actual favorecen la utilizacin de objetos de este tipo para la transmisin de informacin entre capas, y generalmente se los puede encontrar en la capa de presentacin de las aplicaciones, que es donde se muestran los informes. Si creamos un nuevo informe con el Asistente, veremos que en la lista de los posibles orgenes de datos a utilizar para un informe hay un nodo ADO.NET DataSets dentro del cual se muestran todos las clases derivadas de DataSet (los llamados conjuntos de datos tipados) disponibles en el proyecto. Como los conjuntos de datos tipados contienen metadatos que describen su estructura, el Diseador de Crystal es capaz de acceder a ella para permitirnos seleccionar las tablas, campos, etc. con los que queremos trabajar.

  • 31

    A la hora de presentar el informe en tiempo de ejecucin, es necesario utilizar el mtodo SetDataSource () de la clase ReportDocument para conectar el informe con el objeto concreto que almacena el conjunto de datos. Por ejemplo, CrystalReport21.SetDataSource(AdventureWorksDataSet) CrystalReport21.Refresh() ' elimina datos guardados por el informe CrystalReport21.Show()

    DESPLIEGUE DE APLICACIONES WINDOWS QUE INCLUYAN INFORMES CRYSTAL 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.

    UTILIZACIN DE INFORMES EN APLICACIONES WEB

  • 32

    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.

    INCORPORACIN DE UN INFORME A UNA APLICACIN Para mostrar cmo incorporar un informe Crystal Reports a una aplicacin Web, comenzaremos un nuevo sitio Web ASP.NET ubicado en el sistema de archivos. Al pulsar Archivo | Nuevo | Sitio Web ver que existe una plantilla Sitio Web ASP.NET de Crystal Reports que nos hara an ms fcil la vida; aqu vamos a evitarlo para estudiar el mecanismo a utilizar en el caso general. Seleccione la plantilla genrica Sitio Web ASP.NET, y llame al directorio EjemploWeb (puede ubicarlo en la zona del disco que desee, una de las grandes ventajas de Visual Studio 2005 a la hora de crear aplicaciones Web). A continuacin, agregaremos al proyecto un nuevo informe Crystal, que llamaremos Paises.rpt y mostrar un listado sencillo de los pases/regiones almacenados en la tabla Person.CountryRegion de AdventureWorks. En el caso de las aplicaciones Web, es conveniente colocar todos los informes del proyecto dentro de una carpeta comn, que llamaremos informes. Una vez diseado el informe, podemos arrastrarlo hacia esa carpeta. Llega la hora de configurar la pgina Web actual, Default.aspx, para que muestre nuestro informe cuando ejecutemos la aplicacin. Para ello, veamos primero qu componentes debemos seleccionar del nodo Crystal Reports del Cuadro de herramientas en el caso de una aplicacin Web. En primer lugar, para mostrar un informe en una pgina ASPX necesitaremos un componente CrystalReportSource (origen de informe Crystal). Se trata de un componente que encapsula un objeto de la clase ReportDocument que hemos estudiado antes, dotndonos a la vez de propiedades adicionales que son de gran utilidad en el mundo de las aplicaciones Web. Vamos a arrastrar un componente CrystalReportSource sobre la vista de Diseo de la pgina ASPX. A continuacin pulsamos sobre el enlace a su utilidad de configuracin, y veremos que slo ofrece una opcin: Configurar el origen del informe, donde debemos indicar a qu informe del proyecto queremos asociarlo. Entre las propiedades que ofrece la clase CrystalReportSource, debemos destacar: EnableCaching (booleana) y CacheDuration (entero que representa un entero en segundos). Si EnableCaching es verdadera, el motor de CrystalReports cachear en la memoria del servidor el resultado de la ejecucin de un informe durante el intervalo indicado en CacheDuration, no teniendo que ejecutar el informe nuevamente si se recibe otra peticin del informe antes de que expire el intervalo. Esta posibilidad permite aumentar en gran medida la productividad de nuestros sitios Web. Report. Es una propiedad que integra varias caractersticas del informe, como el nombre del fichero de informe, los parmetros y orgenes de datos de los que se nutre. Se trata mayormente de informacin descriptiva; para el tratamiento programtico del informe recomendamos utilizar la propiedad ReportDocument.

  • 33

    ReportDocument. No se ve en la ventana de propiedades, porque es una propiedad de tiempo de ejecucin. Como su nombre indica, almacena una referencia al objeto ReportDocument que representa al informe tipado que ya hemos estudiado en las aplicaciones Windows. A este objeto podremos aplicarle todas las tcnicas que hemos estudiado anteriormente (conexin a la base de datos, aplicacin de parmetros, utilizacin de un DataSet como origen del informe).

    CONFIGURACIN DEL VISOR DE INFORMES HTML Una vez configurado el objeto CrystalReportSource, llega el momento de poner sobre la pgina ASPX el componente que permitir mostrar en el navegador el resultado de la ejecucin del informe. Para ello necesitaremos el componente CrystalReportViewer (nodo Crystal Reports del Cuadro de herramientas). Observe que aunque el nombre corto de esta clase es el mismo de la que se utiliza en las aplicaciones Windows, no se trata ni mucho menos de la misma clase; su nombre completo es CrystalDecisions.Web.CrystalReportViewer. La tarea del componente CrystalReportViewer es generar cdigo HTML + Javascript que pueda ser mostrado por un navegador estndar. Le recomendamos ejecutar la aplicacin Web y utilizar la opcin Ver | Cdigo fuente del navegador para cerciorarse de que la interfaz de usuario est hecha con HTML. La siguiente imagen muestra la barra de botones del visor Web; el significado de los botones es intuitivamente claro. Cuando arrastramos un componente CrystalReportViewer sobre una pgina ASPX, automticamente se lanza el asistente para su configuracin; lo primero que debemos indicar es a qu origen de informe queremos conectarlo (en nuestro caso, el origen recin creado). Esta conexin se establece a travs de la propiedad ReportSourceID del visor. El resto de las propiedades del visor tiene que ver con la visualizacin en s; a continuacin detallamos las propiedades ms importantes: ReportSourceID - esta propiedad conecta al visor con el objeto ReportSource que determina el informe a mostrar. SeparatePages indica si los registros del informe deben separarse en pginas, o si todos deben ir contiguos, como en una sola gran pgina. ClientTarget determina el cdigo que emitir el componente para enviar al navegador. Si sabemos que algunos usuarios utilizan navegadores antiguos o limitados, podemos asignar a esta propiedad el valor Downlevel; por el contrario, si sabemos que todos utilizan navegadores avanzados, el valor adecuado puede ser Uplevel; en general, lo mejor es mantener el valor Auto, donde el propio componente determina qu tipo de HTML generar en funcin del navegador que hace la llamada. PrintMode el mtodo que se utilizar para la impresin local de los informes: ActiveX o Pdf. Se recomienda utilizar este ltimo valor. Dos propiedades booleanas permiten indicar si queremos que el visor presente cuadros de dilogo emergentes para solicitar la informacin que pueda faltarle para la ejecucin del informe. Tericamente, nunca deberamos dejar que estos dilogos aparecieran, sino que deberamos suministrar los datos por programa (por ejemplo, en el evento Load de la pgina) utilizando los mtodos ya estudiados de la clase ReportDocument: EnableDatabaseLogonPrompt si debe solicitarse el usuario y contrasea de conexin en caso necesario. EnableParameterPrompt si deben solicitarse valores para los parmetros que carezcan de ellos. A continuacin, tenemos tres propiedades booleanas que determinan si ciertas zonas del visor deben aparecer o no: DisplayGroupTree si se debe mostrar o no el rbol de grupos (en caso de que el informe tenga grupos). DisplayPage si se debe mostrar o no la pgina del informe. DisplayToolbar si se debe mostrar o no la barra de herramientas.

  • 34

    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.

    VISUALIZACIN DIRECTA EN FORMATO PDF Si probamos las opciones de Exportar o Imprimir del visor de informes Web, veremos que presentan un cuadro de dilogo para que el usuario final seleccione el formato de exportacin o el rango de pginas, entre otras caractersticas. Frecuentemente quisiramos que la exportacin a PDF (un formato de amplia popularidad) se produjera de manera automtica y que en el navegador apareciera directamente el resultado. Esta tcnica nos permitira incluso obviar la utilizacin del visor. Aqu mostraremos cmo hacerlo. Sobre la pgina con la que estamos trabajando, colocaremos un botn y le asignaremos el ttulo PDF. Programe el evento Click del botn de la siguiente forma: Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

    ' nombre de fichero nico Dim nombre As String = "C:\temp\" & Session.SessionID & ".pdf" ' exportamos a PDF CrystalReportSource1.ReportDocument.ExportToDisk( _ CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, nombre) ' enviamos el fichero PDF al navegador Response.ClearHeaders() Response.ClearContent() Response.ContentType = "application/pdf" ' tipo MIME Response.WriteFile(nombre) ' contenido Response.Flush() Response.Close()

    End Sub Es esencial un nombre de fichero que sea nico para cada sesin, de modo que no existan interferencias entre varios posibles visitantes de la pgina.

    DESPLIEGUE DE APLICACIONES WEB QUE INCLUYAN INFORMES CRYSTAL El despliegue de aplicaciones Web que utilizan informes Crystal es realmente muy similar al despliegue de aplicaciones Windows, pero generalmente causan muchsimo menos dolores de cabeza, dado que las aplicaciones Web se desplieguen de forma centralizada en un servidor. En lugar de crear un nuevo Proyecto de instalacin, se debe utilizar un nuevo Proyecto de programa de instalacin Web. En general, es un tipo de proyecto muy similar al anterior, con modus operandi y resultados similares. En el caso de una aplicacin Web, para su correcto despliegue es necesario incluir en el proyecto todos los ficheros que forman parte de la carpeta de la aplicacin y sus subcarpetas,

  • 35

    incluyendo en nuestro caso los ficheros .rpt (que en las aplicaciones Web siempre se almacenan como ficheros externos).