Está en la página 1de 28

el Guille, la Web del Visual Basic,

C#, .NET y más...


Lo Nuevo - .NET - ADO.NET - ASP.NET - Cómo... - Colabora -
VB6 - API - Bases - HTML - Links

Crystal Reports y
VB.NET
Lo que debo saber sobre Crystal y
VB.NET
Fecha: 21/Sep/2004
Autor: Enriquillo Mañón Ramírez
(enriquillo_manon@hotmail.com)

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.

Ficheros con el código de ejemplo:


ElMoreno_CrystalWinApp.zip - 23 KB
ElMoreno_CrystalWebApp.zip - 32 KB