Crystal Reports y VB.NET Introducción Creando un Reporte desde Cero Crystal y Windows Applications Crystal y Web Applications Crystal y Web Services Funcionalidades del CrystalReportView en tiempo de ejecución Conclusión Introducción Crystal Reports es el generador de reporte por excelencia de Visual Basic desde versiones anteriores a.net. Esta no es la primera vez que se distribuye una versión de este generador de reporte junto a una versión de Visual Studio, en la versión 4 de visual Basic incluía una versión de Crystal Reports aunque no tan integrada como la versión.net, Cristal es un producto creado en su esencia orientado al usuario final, es decir, que un ejecutivo pueda crear sus propios informes sin necesidad de asistencia de un desarrollador. En este articulo pretendo cubrir los aspectos básicos de crystal report y explicar los puntos que necesite cualquier desarrollador (este articulo estará orientado a desarrolladores o aspirantes a desarrollador) para iniciarse en el desarrollo de reportes con crystal y vb.net. Crystal Report no es la única herramienta para generar reportes que se puede utilizar con Visual Studio.NET existen otras entre las que podemos mencionar: Active Reports de Data Dynamics SQL Reporting Services. Microsoft Offices Automation, entre otros. Al igual que desde el ambiente de desarrollo de Visual Studio, también podemos crear nuestros reportes desde el ambiente de desarrollo de Crystal Reports y luego ejecutarlo desde nuestro proyecto VB.NET, Los Reportes desarrollados bajo el ambiente de Crystal Reports pueden ser compilados a.exe para poder ser ejecutados Stand-Alone. Entre las características principales que debemos conocer en Crystal Reports para poder crear una buena solución de reportes están los fields que son los componentes que nos permiten mostrar información sobre el ambiente de desarrollo y se clasifican en: 1
Formula Fields: Son campos que su valor pueden ser obtenidos de formulas de cálculo y/o operaciones sobre otros campos. Summary Fields: Son campos que se utilizan para acumular y/o promediar valores según las operaciones que se deseen, entre las operaciones que soporta el summary fields estan Count, Sum, Avg, discount, etc.. Parameters Fields: Son campos que se utilizan para enviarles valores al reporte desde una aplicación o entrada del usuario. SQL Expresión Fields: Son campos que se utilizan para ejecutar funciones propias del motor de base de datos que se este utilizando. Group Name Fields: Son campos que se utilizan para agrupar la salida del reporte. Running Total Fields: Son similares a los Summary Fields pero estos pueden ser condicionados. Especial Fields: Son un conjunto de campos preestablecidos que se utilizan en los reporte como son, No. De Página, Total de página, Fecha de Impresión, Etc. Crystal también posee su propio conjunto de sentencias y funciones para producir información (o sea su propio lenguaje de funciones) y también comparte las sentencias de VB 6 (los cambios en algunas sentencias en el lenguaje.net como son While no son soportados por crystal, estas deben utilizarse con la sintaxis que se utiliza en VB 6), Creando un Reporte desde Cero Creamos un nuevo Proyecto en Visual Studio.NET, Seleccionamos File\New\Proyect, Seleccionamos Windows Application y lo Nombraremos CrystalWinApp 2
Los componentes necesarios para manejar los reportes de Crystal son los siguientes: CrystalReportViewer: Este componente es la interfaz que utiliza la aplicación para desplegar los reportes, este componente se coloca sobre un Windows o Web forms. Este esta localizado en el Toolbox en el tab de Windows Forms (o Web Forms si es un proyecto web). ReportDocument: Este componente es utilizado para comunicarnos con el Archivo.Rpt generado por Crystal Reports, mediante este componente podemos modificar algunas características del reporte en tiempo de ejecución. Una vez creado el proyecto agregamos un nuevo ítem, en el menú Project, seleccionamos Add New Item 3
Seleccionamos el témplate de Crystal Reports, luego se abrirá la ventana Crystal Reports Gallery En la parte superior tenemos 3 opciones: Using The Report Expert: Esta opción es una especie de Wizard que nos guiará paso por paso durante la creación del reporte. As a Blank Report: Esta opción desplegará la interfaz de desarrollo de reportes en blanco para que creemos nuestro reporte sin asistencia (esta es la parte para expertos). From as Existing Report: Esta opción nos permitirá crear un reporte a partir de otro ya existente, al seleccionar esta opción nos pedirá la localización del archivo.rpt que queremos utilizar y creará una copia de este reporte. En la parte media tenemos 2 cuadros, el de la izquierda nos presenta los diferentes tipos de reportes que podemos crear (esta opción solo estará disponible si seleccionamos la primera opción de la parte superior (Using The Report Expert)), a continuación le describo cada uno de ellos: Standard: Este se utilizar para crear reportes tipos listas, Master/Detalle y/o cualquier otro reporte común, esta es la opción mas utilizada. 4
From Letter: Este templete se utiliza para crear reportes tipo cartas donde tienes un documento con un texto estático y en algunas partes del documento que deben ser extraídas de la base de datos, un estilo de Mail Merge (para los que han manejado Microsoft Word,Word Star o algún procesador de palabra). Form: Este témplate se utiliza para informes tipo Formulario. Cross-Tab: Este es un estilo de reporte con valores cruzados. Subreport: Son similares a un reporte normal con la excepción de que estos se incrustan dentro de los reportes con la finalidad de complementar o agregar información, estos son muy utilizados. Mail Label: Este se utiliza para generar etiquetas para cartas. Drill Down: Este es un estilo de reporte también muy utilizado es similar a un master/detalle solo que el detalle se presenta oculto y el usuario puede hacer doble clic sobre el master y se despliega el detalle, este también se le llama reporte interactivo. Seleccionamos Standard damos clic en OK. Luego se desplegará la ventana de Acceso a datos presentando diferentes fólder con diferentes tipos de fuentes de datos entre las que podemos citar: Project Data: en este fólder se desplegaran las diferentes conexiones que se encuentren activas en el proyecto actual, desplegará 2 subfolder, el primero es ADO.NET DataSets donde se despliegan las diferentes estructuras de los DataSets que se encuentren en el proyecto y el 5
segundo desplegará los diferentes objetos connection que se encuentren activos. OLE DB (ADO): Este fólder se utiliza para crear una conexión a una fuente de datos a través OLE DB, Al hacer clic en esta ventana se despliega una ventana con una lista de todos los proveedores de acceso a datos instalados en su maquina para que se seleccione el adecuado y sea configurado (de este hablaremos mas adelante ya que es el que estaremos utilizando). ODBC: Este fólder se utiliza para crear una conexión a una fuente de datos a través de ODBC, este se utiliza cuando no contamos con un proveedor de acceso a datos de tipo OLEDB. Database file: Este fólder se utiliza para especificar proveedores de acceso a datos que son almacenados como archivos (*.mdb, *.dbf, *.xls, etc), al seleccionar esta opción se abrirá la ventana para que seleccionemos el archivo y según el tipo se desplegar el cuadro de dialogo correspondiente para su configuración. Favorito, History: Estos fólder se utilizan el primero para almacenar las conexiones mas utilizas por nosotros y el segundo guarda automáticamente un histórico de las fuentes de datos que hemos utilizados. More Data Source: Este fólder se utiliza para acceder datos en formato XML, EXCEL. Damos clic sobre el fólder OLE DB (ADO)se desplegará la ventana de Proveedores de acceso a datos por OLEDB que tengamos instalados en nuestra maquina (estos proveedores instalan automáticamente cuando instalamos las base de datos, MDAC x.x y algunos ya los trae Windows agregados). 6
Seleccionamos Microsoft Jet 4.0 OLE DB Provider y damos clic sobre el botón Next, luego se abrirá la ventana de configuración del Proveedor que selecciónanos, esta ventana puede variar según el OLEDB Driver que hayamos seleccionado. Damos clic sobre el pequeño botón que está a la derecha del primer TextBox, se abrirá la ventana de Dialogo Abrir buscamos la base de datos NorthWind.mdb (esta base de datos viene con Microsoft Offices y el código de este articulo incluye una copia). Damos clic en el botón Finish y desplegará bajo el fólder OLE DB (ADO) de la ventana de Acceso a datos una conexión indicando la ruta de la base de datos y 2 grupos Tables y Views, en el grupo Tables están todas la tablas que contiene esta base de datos y en el grupo Views las vistas que están contenidas en la base de datos, de aquí seleccionaremos las tablas que utilizaremos para extraer la información que se presentará en el reporte, damos clic en el signo de mas(+) que tiene el grupo a la izquierda y buscamos la tabla Categories, damos clic sobre esta tabla y luego clic sobre el botón Insert Table y la tabla se desplegará en el cuadro de la derecha, esto nos indica que esta tabla estará incluida en nuestro reporte, luego buscamos la tabla Products y damos clic en el botón Insert Table otra vez, luego damos clic en Next. Ahora se desplegara la ventana de relación entre tablas, aquí las tablas que seleccionamos en el punto anterior son representadas por pequeños cuadros con los nombres de los campos dentro, también se desplegara una línea delgada entre las tablas indicando la relación que existe entre ellas, esta relación las establece Cristal Reports automáticamente tomando como parámetro el Nombre de los campos. 7
Aquí podemos cambiar las relaciones si quisiéramos, agregar nuevas relaciones (tan solo debemos arrastrar el campo que queramos relacionar desde una tabla hasta la otra y soltarla sobre el campo de la segunda tabla que será relacionado), cambiar el tipo de relación (Inner, Outer, Left Outer, Right Outer), no haremos cambios. Damos Clic en el botón Next. Luego se desplegará la ventana de selección de campos, aquí seleccionaremos los campos que queramos que se desplieguen en nuestro reporte, en el cuadro izquierdo están las tablas desde donde podemos seleccionar los campos y en el cuadro derecho los campos que ya seleccionamos. 8
Ahora, damos doble clic sobre el campo CategoryName de la tabla Cateogries, este se desplegará en el recuadro de la derecha, hacemos lo mismo para los campos ProductName, UnitPrice, UnitsInStock de la tabla Products. Ahora vamos a necesitar un campo que nos presente el precio del total en almacén de cada producto, para eso agregaremos un Campo Formula (Formula Fields), damos clic sobre el botón Formula, nos desplegará un pequeño cuadro pidiéndonos el nombre del campo formula, Digite TotalPrice, damos clic en el botón OK, y se desplegara la ventana de edición de formulas: 9
Esta presenta 3 cuadros de izquierda a derecha el primero nos muestra los campos de nuestro reporte que ya seleccionamos anteriormente, también nos muestra la conexión que creamos y las tablas que seleccionamos, en el segundo cuadro nos muestra una lista de todas funciones que Cristal Reports soporta agrupadas por el tipo de datos sobre el que actúan, y el tercero nos muestra una lista de los operadores Aritméticos, Lógicos, de Conversión, etc. Agrupados también por el tipo de datos sobre el que actúan, nuestro campo formula solo consistirá de multiplicar el campo UnitPrice por el campo UnitsInStock, damos doble clic sobre el campo UnitPrice en el primer cuadro, este se agregara al cuadro inferior, luego colocamos el cursor al final del campo y digitamos un asterisco (o sea, el signo de multiplicar para las computadoras),luego damos doble clic sobre el campo UnitsInStock en el primer cuadro y listo, damos clic en el botón salvar y luego clic en el botón cerrar de la ventana (a la derecha en la parte superior), retornaremos a la ventana anterior, nuestro campo formula se desplegará en el cuadro de la izquierda junto con los demás campos del reporte, damos clic sobre el cuadro de la derecha sobre el campo Products.UnitsInStock y luego damos doble clic sobre nuestro campo formula @TotalPrice y este se desplegará en la ventana de la derecha debajo del campo UnitsInStock. Damos clic en el botón Next. Ahora se despliega la ventana de grupos, aquí podemos especificar por cuales campos queremos que se agrupe nuestra información, por cada campo que seleccionemos aquí se creara un grupo en nuestro reporte, damos doble clic sobre el campo Categories.CategoryName. 10
Damos Clic en el botón Next. Ahora se despliega la ventana de Totales, aquí indicamos los campos que deseemos Totalizar, Podremos especificar totales por cada uno de los grupos que hayamos especificados en la ventana anterior (como nuestro ejemplo solo seleccionamos un campo Categories.CategoryName podremos especificar totales para este grupo). Automáticamente Cristal Reports te agrega los campos Numéricos en el cuadro de la derecha para totalizar, en nuestro ejemplo no tiene caso totalizar el precio y la las Unidades en Almacén, pero si el Total (nuestro campo formula TotalPrice), asi que damos clic sobre los campos del cuadro de la derecha que no deseamos totalizar y damos clic sobre el botón Remove. Debajo del cuadro de la derecha hay un Combobox que dice Summary Type,el Summary Type es la operación matemática que queremos aplicar sobre este campo (en este caso sum para sumar todos sus valores). El check box que dice Percentage of se utilize para especificar que el total se presentará como un porcentaje de algun otro total y el Check box al final Add Grand Totals se utiliza para indicarle que además de los totales por grupo queremos un Gran Total que sume todos los totales de los grupos. Damos clic en el botón Next. 11
Aquí se despliega la ventana orden, aquí podemos especificar el orden en que se presentaran los grupos, dejaremos todo como esta en esta pantalla. Damos Clic en el botón Next. Aquí se despliega la ventana de Gráficos estadísticos, aquí podemos seleccionar el tipo de gráficos estadístico que queramos presentar en nuestro reporte, en la parte izquierda están los diferentes tipos de gráficos y en la derecha los estilos de gráficos por cada tipo, estos gráficos se configuran automáticamente tomando los valores de los reportes, pero si se desea se pueden configurar manual mente solo hay que desmarcar el check box que dice Automatically set chart options Aquí seleccionamos el tipo Pastel (Pie) y a la derecha seleccionamos el estilo 3D. Damos clic en botón Next. Ahora se despliega la ventana de Selección de data, aquí podemos especificar un criterio de selección de datos fijos para que nuestro reporte solo presente la información resultante de este filtro. Damos clic en el botón Next. 12
Y por Último para terminar con el diseño de nuestro reporte la ventana de selección estilo, aquí se desplegará una lista con los diferentes estilos de reportes que Cristal Provee. En la parte izquierda se despliega la lista de los estilos de reportes disponibles y en la parte de la derecha se presenta un preview de estilo que se seleccione, también podemos especificar el Titulo de Reporte en la parte superior, Como titulo digitaremos Listado de Productos por categorías y luego seleccionamos el estilo Executive, Leading Break y damos clic en el botón Finish. Listo nuestro reporte ya está diseñado, Visual Studio no cuenta con una herramienta para poder visualizar los reportes en Preview Mode, por eso para ver nuestro reporte corriendo necesitamos crear una aplicación que lo ejecute (esta es la parte fácil). Luego de diseñar el reporte este se presentara en el ambiente de diseño de reporte donde podemos mover los campos y relocalizarlos a nuestro antojo. 13
CRYSTAL Y WINDOWS APPLICATIONS Ahora les mostraré como abrir el reporte ya diseñado en una aplicación windows. Abrimos la Forma Form1 que se creó al momento de crear nuestro proyecto para el reporte, luego arrastramos del ToolBox el componente CrystalReportViewer y lo dejamos caer sobre la forma. Luego asignamos la propiedad Dock del control CrystalReportViewera Fill y el control se ajustará al size de la forma, luego seleccionaremos la propiedad ReportSource del control y damos clic en la opción Browse, esto nos permitirá seleccionar el archivo.rpt que se desplegará en la pantalla Seleccionamos el archivo CrystalReport1.vb que esta en el fólder donde estamos creando nuestro proyecto. Y listo, ya podemos ejecutar nuestro reporte. 14