Crystal Reports y VB.NET
Lo que debo saber sobre Crystal y VB.NET 

Fecha: 21/Sep/2004
Autor: Enriquillo Mañón Ramírez ([email protected])

 


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:

 

            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”

 

 

 

 

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 …

 

 

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.

 

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

 

 

 

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.

 

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.

 

 

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:

 

 

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

 

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.

 

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.

 

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.

   


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.

 

Crystal y Web Application.

 

            Primero creamos un proyecto nuevo esta vez “ASP.NET Web Application” y lo nombramos CrystalRWebApp, esta vez nuestro formulario o Página Web es “WebForm1.aspx”, damos clic derecho sobre el proyecto CrystalRWebApp y seleccionamos “Set as Startup Project”, luego damos clic derecho sobre la página WebForm1.aspx y seleccionamos “Set as Start page”.

 

            En el Toolbox en la pestaña “Web Forms” arrastramos el control CrystalReportViewer y lo soltamos en la página, esta vez se verá diferente ya que en proyectos Web este control no tiene Interface de diseño.

 

 

 

Una vez creado el proyecto agregamos un nuevo item, en el menu Project, seleccionamos Add New Item …

 

 

Seleccionamos el témplate de Crystal Report, luego se abrirá la ventana “Crystal Report Gallery”

    

            Ahora seleccionamos la opción “From an Existing Report”, esto creará una copia del reporte que ya creamos en la sección anterior para este proyecto.

 

            Se desplegara la ventana de dialogo Abrir y seleccionamos el reporte que creamos “CrystalReport1.rpt”

 

 

            Luego damos clic derecho sobre la página y seleccionamos “View Code”, expandimos la región "Web Form Designer Generated Code" y en el metodo Page_Init después de la llamada a InitializeComponent agregamos el siguiente Código

 

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
 
        Dim CrRep As New CrystalReport1
        CrystalReportViewer1.ReportSource = CrRep
        CrystalReportViewer1.DataBind()
    End Sub

 

 

            Aquí estamos instanciando el Reporte que creamos CrystalReport1 ya que crystal también crea una clase con el mismo nombre del reporte para que podamos instanciar y manipular y le estamos diciendo al control CrystalReportView1 que tome como fuente la instancia de nuestro reporte, luego le decimos al control CrystalReportView1 que ejecute el reporte.

 

Listo, ya podemos ejecutar nuestro reporte.

 

Crystal y Web Services

           

            Unos de los conceptos introducidos con el nacimiento de la tecnología .NET es el de Web Services (Servicios en la Web), los reporte creados en crystal también pueden ser publicados y consumidos como Web services.

 

            Para los que no conocen el concepto Web Services esto se refiere proveer alguna funcionalidad a través de la Web para que esta pueda ser utilizada por otra aplicación, El clásico ejemplo de la tarjeta de crédito, cuando hacemos compras por Internet y pagamos con tarjeta de créditos el site desde donde estamos realizando la transacción necesita validar nuestra tarjeta de crédito para determinar si es valida y claro si tiene fondo disponible para la transacción, las instituciones bancarias propietarias de la tarjeta podrían publicar Web Services, el site solo debe acceder al Web services enviarle los datos de nuestra tarjeta y el banco a través del Web services nos devolverá la información que necesitamos, todo esto se hace a través del Web services compartiendo la información en forma XML (Extensible Market Language), esto nos facilita que no importa en que lenguaje y/o plataforma estén diseñadas nuestras aplicaciones si accede la Web y maneja XML (que casi todos los lenguajes ya manejan este lenguaje) puede hacer uso de este servicio.

 

            Para esta prueba tomaremos el proyecto que creamos anteriormente el Web Application.

 

            Abrimos el proyecto CrystalRWebApp, damos clic derecho sobre el archivo del reporte en el Solution Explorer “CrystalReport1.rpt” y seleccionamos “Publish as Web Service”

 

            Luego damos clic derecho sobre el archivo “WebForm1.aspx” en el solution Explorer y seleccionamos “View Code”.

 

            Modificamos el método “Page_Init”

                       

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
 
        Dim CrRep As New CrystalReport1
        CrystalReportViewer1.ReportSource = "http://localhost/CrystalRWebApp/CrystalReport1Service.asmx"
        CrystalReportViewer1.DataBind()
    End Sub

 

            Y listo, podemos ejecutar nuevamente nuestro proyecto y el reporte se ejecutara igual.

 

Funcionalidades del CrystalReportView en tiempo de ejecución

 

            La interface de ejecución que nos brinda crystal y visual studio es bastante amigable en cuanto a funciones para el usuario final, entre las funcionalidades las mas destacadas podemos mencionar.

 

-         Interfaz Windows

           

            Esta es la barra de funcionamiento de la interfaz de ejecución de los reporte en ambiente Windows, aquí se pueden visualizar 12 botones que de izquierda a derecha su utilización son las siguientes:

 

Los 4 primeros son para moverse entre página del reporte, el 5to botón se utiliza para ir a una página por el No. Cuando se hace clic en este botónse despliega el dialogo “Goto Page” para especificar el no. De la página que se desea desplegar.

 

 

El 6to. Botón se utiliza para cerrar la interfaz de ejecución del programa, también se puede cerrar el la ventana por el botón estándar de las ventanas de Windows.

 

El 7mo. Botón se utiliza para enviar el reporte a la impresora, cuando se presiona este botón se despliega el cuadro de dialogo “Imprimir” estándar de las aplicaciones Windows.

 

El 8vo botón se utiliza para refrescar la información que se esta desplegando.

 

El 9no botón se utiliza para exportar el reporte a cualquier otro formato, entre los formatos que se puede exportar un reporte se encuentra Forma Excel, Word, pdf, html, etc. Al hacer clic en este botón se desplegara una ventana similar a la ventana de dialogo Abrir estándar de Windows donde especificaremos el nombre del archivo a crear y el formato al cual deseamos exportar.

 

El 10mo botón se utiliza para ocultar o mostrar le ventana de grupos que se encuentra a la izquierda donde se despliegan los nombres de los grupos por los cuales esta agrupado el reporte, haciendo clic sobre cualquier de estos nombres el focus se colocara sobre el en el reporte.

 

El 11vo botón se utiliza para ampliar o reducir la vista del reporte.

 

El 12vo botón se utiliza para localizar cualquier texto en el reporte, al hacer clic sobre este se desplegara el cuadro de dialogo donde digitaremos la palabra a localizar si es localizada el focus se colocara sobre la primera que aparezca.

 

 

La Interfaz Web también cuenta con todas estas funcionalidades.

 

 

 

Conclusión

 

            Crystal Reports es una herramienta para diseño de reporte creada mucho antes del nacimiento de la tecnología .NET, gracias a esta uno de las partes mas tediosas e importante del diseño de aplicaciones se nos hace mas sencillo que es el diseño de reportes, Crystal Reports puede ser utilizado con diferentes base datos en las que podemos mencionar, MS Access, SQL Server, Oracle, Informix, etc., podemos diseñar reportes tanto desde el mismo ambiente de desarrollo de Visual Studio .NET como desde el ambiente de diseño de Crystal Reports, los reportes creados desde el ambiente de diseño de crystal pueden ser compilados a .EXE para poder ser ejecutados sin necesidad de crear un programa o interfaz para esto.

 


ir al índice

Ficheros con el código de ejemplo:
   
ElMoreno_CrystalWinApp.zip - 23 KB
   ElMoreno_CrystalWebApp.zip - 32 KB