cristal-report

Anuncio
Lo que debo saber sobre Crystal Reports
y VB .NET
Contenido
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
se 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 artículo 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 cuyo valor puede ser obtenido de fórmulas 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 soportan
los Summary Fields están: 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 esté 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.
Special Fields: Son un conjunto de campos preestablecidos que se utilizan en los
reportes, tales como: número de página, total de páginas, 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.
Creando un reporte desde cero
Creamos un nuevo proyecto en Visual Studio .NET; seleccionamos “File \ New \
Project”; seleccionamos “Windows Application” y lo nombramos “CrystalWinApp”
(Ver Figura 1):
Figura 1. Volver al texto.
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; se coloca sobre un Windows o Web Form. Este está
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 … (Ver Figura 2):
Figura 2. Volver al texto.
Seleccionamos la plantilla de Crystal Reports, luego se abre la ventana “Crystal Reports
Gallery” (Ver Figura 3):
Figura 3. Volver al texto.
En la parte superior tenemos 3 opciones:



Using the Report Expert: Esta opción es una especie de Wizard que nos guía paso
a paso durante la creación del reporte.
As a Blank Report: Esta opción despliega la interfaz de desarrollo de reportes en
blanco para que creemos nuestro reporte sin asistencia (ésta es la parte para
expertos).
From as Existing Report: Esta opción nos permite crear un reporte a partir de otro
ya existente; al seleccionar esta opción nos pide la localización del archivo .RPT
que queremos utilizar, y crea 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 describo
cada uno de ellos:







Standard: Este se utiliza para crear reportes tipos listas, máster/detalle y/o
cualquier otro reporte común; ésta es la opción más utilizada.
From Letter: Esta plantilla 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: esta plantilla 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 éstos se
incrustan dentro de los reportes con la finalidad de complementar o agregar
información; 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
máster/detalle, sólo que el detalle se presenta oculto y el usuario puede hacer
doble clic sobre el máster y se despliega el detalle; a éste también se le llama
reporte interactivo.
Seleccionamos “Standard”, damos clic sobre "OK".
Luego se despliega la ventana de acceso a datos, presentando diferentes carpetas con
diferentes tipos de fuentes de datos entre las que podemos citar (Ver Figura 4):
Figura 4. Volver al texto.
Project Data: en esta carpeta se despliegan las diferentes conexiones que se encuentren
activas en el proyecto actual; despliega 2 sub carpetas, la primera es “ADO.NET
DataSets”, donde se despliegan las diferentes estructuras de los DataSet que se
encuentren en el proyecto; y la segunda despliega los diferentes objetos connection que
se encuentren activos.



OLE DB (ADO): Esta carpeta se utiliza para crear una conexión a una fuente de
datos a través de 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 tu máquina
para que se seleccione el adecuado y sea configurado (de éste hablaremos más
adelante, ya que es el que estaremos utilizando).
ODBC: Esta carpeta 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: Esta carpeta 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 diálogo correspondiente para su
configuración.
Favorito, History: Estas carpetas se utilizan de la siguiente forma: la primera para
almacenar las conexiones más utilizadas por nosotros, y la segunda guarda
automáticamente un histórico de las fuentes de datos que hemos utilizado.
More Data Source: Esta carpeta se utiliza para acceder datos en formato XML,
EXCEL.
Damos clic sobre la carpeta OLE DB (ADO), se despliega la ventana de proveedores de
acceso a datos por OLEDB que tengamos instalados en nuestra máquina (estos
proveedores se instalan automáticamente cuando instalamos las base de datos, MDAC
x.x y algunos ya los trae Windows agregados) (Ver Figura 5):
Figura 5. Volver al texto.
Seleccionamos Microsoft Jet 4.0 OLE DB Provider y damos clic sobre el botón "Next",
luego se abre la ventana de configuración del proveedor que seleccionamos; esta ventana
puede variar según el OLEDB Driver que hayamos seleccionado (Ver Figura 6):
Figura 6. Volver al texto.
Damos clic sobre el pequeño botón que está a la derecha del primer TextBox, se abre la
ventana de diálogo Abrir; buscamos la base de datos NorthWind.mdb (esta base de
datos viene con Microsoft Office).
Damos clic en el botón "Finish" y se despliega bajo la carpeta 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í seleccionamos las tablas que utilizaremos para extraer la información que se
presentará en el reporte; damos clic en el signo más (+) que tiene el grupo a la izquierda y
buscamos la tabla “Categories”; damos clic sobre esta tabla y luego sobre el botón
“Insert Table” y la tabla se despliega 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 desplegará 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 desplegará una línea delgada entre las tablas, indicando la
relación que existe entre ellas; esta relación la establece Cristal Reports automáticamente
tomando como parámetro el nombre de los campos (Ver Figura 7):
Figura 7. Volver al texto.
Aquí podemos cambiar las relaciones; si quisiéramos agregar nuevas relaciones (tan sólo
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), pero en este caso, no hacemos cambios.
Damos clic sobre el botón "Next".
Luego se despliega la ventana de selección de campos: aquí seleccionamos 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 (Ver Figura 8):
Figura 8. Volver al texto.
Ahora, damos doble clic sobre el campo CategoryName de la tabla Cateogries; éste se
despliega 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 agregamos un Campo Formula (Formula Fields): damos clic
sobre el botón "Formula", nos desplegará un pequeño cuadro pidiéndonos el nombre del
campo fórmula; escribimos TotalPrice; damos clic en el botón "OK", y se desplegará la
ventana de edición de fórmulas (Ver Figura 9):
Figura 9. Volver al texto.
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; 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 fórmula sólo consistirá en multiplicar el campo UnitPrice por el campo
UnitsInStock; damos doble clic sobre el campo UnitPrice en el primer cuadro, éste se
agrega 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 fórmula se despliega 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 éste se despliega 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 cuáles campos
queremos que se agrupe nuestra información; por cada campo que seleccionemos aquí se
creará un grupo en nuestro reporte; damos doble clic sobre el campo
“Categories.CategoryName” (Ver Figura 10):
Figura 10. Volver al texto.
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 en nuestro ejemplo sólo seleccionamos un
campo, “Categories.CategoryName”, podremos especificar totales para este grupo) (Ver
Figura 11):
Figura 11. Volver al texto.
Automáticamente, Cristal Reports agrega los campos numéricos en el cuadro de la
derecha para totalizar; en nuestro ejemplo no tiene caso totalizar el precio y las Unidades
en Almacén, pero sí el Total (nuestro campo fórmula TotalPrice), así 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 checkbox que dice “Percentage of” se utiliza para especificar que el total se presentará
como un porcentaje de algún otro total y el checkbox 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, donde podemos especificar el orden en que se
presentarán los grupos; dejamos todo como está 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áfico 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 manualmente; solo hay que desmarcar el checkbox que dice
“automatically set chart options” (Ver Figura 12):
Figura 12. Volver al texto.
Aquí seleccionamos el tipo Pastel (pie) y a la derecha seleccionamos el estilo 3D.
Damos clic en el botón "Next".
Ahora se despliega la ventana de selección de datos: aquí podemos especificar un criterio
de selección de datos fijo para que nuestro reporte sólo 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 despliega una lista con los diferentes estilos de reportes que Crystal provee
(Ver Figura 13):
Figura 13. Volver al texto.
En la parte izquierda se despliega la lista de los estilos de reportes disponibles, y en la
parte de la derecha se presenta una vista preliminar del estilo que se seleccione; también
podemos especificar el Título de Reporte en la parte superior.
Como título digitamos “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 (ésta es la parte fácil).
Luego de diseñar el reporte, éste se presenta 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é cómo 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 el formulario (Ver Figura 14):
Figura 14. Volver al texto.
Luego asignamos la propiedad “Dock” del control CrystalReportViewer a “Fill” (Ver
Figura 15):
Figura 15. Volver al texto.
... Y el control se ajusta al tamaño del formulario; luego seleccionamos la propiedad
“ReportSource” del control y damos clic en la opción “Browse …”; esto nos permite
seleccionar el archivo .RPT que se despliega en la pantalla (Ver Figura 16):
Figura 16. Volver al texto.
Seleccionamos el archivo CrystalReport1.vb que está en el carpeta 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 Interfaz de diseño (Ver Figura 17):
Figura 17. Volver al texto.
Una vez creado el proyecto agregamos un nuevo ítem; en el menú Project, seleccionamos
Add New Item … (Ver Figura 18):
Figura 18. Volver al texto.
Seleccionamos la plantilla de Crystal Report, luego se abre la ventana “Crystal Report
Gallery” (Ver Figura 19):
Figura 19. Volver al texto.
Ahora seleccionamos la opción “From an Existing Report”; esto crea una copia del
reporte que ya creamos en la sección anterior para este proyecto. Se desplegará la ventana
de diálogo Abrir y seleccionamos el reporte que creamos “CrystalReport1.rpt” (Ver
Figura 20):
Figura 20. Volver al texto.
Luego damos clic derecho sobre la página y seleccionamos “View Code”, expandimos la
región "Web Form Designer Generated Code" y en el método 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 instanciarla y
manipularla. Por ello, le estamos diciendo al control CrystalReportView1 que tome como
fuente la instancia de nuestro reporte, y finalmente le indicamos que se 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 reportes creados en Crystal también pueden ser
publicados y consumidos como Web services.
Para los que no conocen el concepto de Web Services, esto se refiere a proveer alguna
funcionalidad a través de la web para que pueda ser utilizada por otra aplicación.
El clásico ejemplo es el de la tarjeta de crédito: cuando hacemos compras por Internet y
pagamos con tarjeta de crédito, el sitio desde donde estamos realizando la transacción
necesita validar nuestra tarjeta de crédito para determinar si es válida y claro, si tiene
fondos disponibles para la transacción. Las instituciones bancarias propietarias de la
tarjeta podrían publicar Web Services, el sitio sólo debe acceder al Web Service, enviarle
los datos de nuestra tarjeta y el banco a través del mismo, nos devolverá la información
que necesitamos, todo esto se hace a través de Web Services, compartiendo la
información en forma XML (Extensible Market Language).
Esto nos facilita las cosas ya que, no importa en qué lenguaje y/o plataforma estén
diseñadas nuestras aplicaciones, si se accede la web y se 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
Listo, podemos ejecutar nuevamente nuestro proyecto y el reporte se ejecutará igual.
Funcionalidades del CrystalReportView en tiempo de ejecución
La interfaz de ejecución que nos brindan Crystal y Visual Studio, es bastante amigable en
cuanto a funciones para el usuario final; entre las funcionalidades más destacadas
podemos mencionar:
Interfaz Windows
Ver Figura 21:
Figura 21. Volver al texto.
Esta es la barra de funcionamiento de la interfaz de ejecución de los reportes en ambiente
Windows: aquí se pueden visualizar 12 botones que de izquierda a derecha, de acuerdo a
su utilización, son los siguientes:
Los 4 primeros son para moverse entre páginas del reporte, el 5º botón se utiliza para ir a
una página a partir del número de la misma. Cuando se hace clic en este botón se
despliega el dialogo “Goto Page” para especificar el número de la página que se desea
desplegar (Ver Figura 22):
Figura 22. Volver al texto.
El 6º botón se utiliza para cerrar la interfaz de ejecución del programa, también se puede
cerrar la ventana por el botón estándar de las ventanas de Windows.
El 7º botón se utiliza para enviar el reporte a la impresora; cuando se presiona este botón
se despliega el cuadro de diálogo “Imprimir” estándar de las aplicaciones Windows.
El 8º botón se utiliza para refrescar la información que se está desplegando.
El 9º botón se utiliza para exportar el reporte a cualquier otro formato; entre los formatos
a los que se puede exportar un reporte se encuentran: Excel, Word, PDF, HTML, etc. Al
hacer clic en este botón se despliega una ventana similar a la ventana de diálogo "Abrir"
estándar de Windows, donde especificaremos el nombre del archivo a crear y el formato
al cual deseamos exportar.
El 10º 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 está agrupado el
reporte; haciendo clic sobre cualquiera de estos nombres el focus se colocará sobre él en
el reporte (Ver Figura 23):
Figura 23. Volver al texto.
El 11º botón se utiliza para ampliar o reducir la vista del reporte.
El 12º botón se utiliza para localizar cualquier texto en el reporte; al hacer clic sobre éste
se despliega el cuadro de diálogo donde digitaremos la palabra a localizar; si es
localizada, el focus se coloca sobre la primera vez que aparezca (Ver Figura 24):
Figura 24. Volver al texto.
La interfaz web también cuenta con todas estas funcionalidades.
Conclusión
Crystal Reports es una herramienta para diseño de reportes creada mucho antes del
nacimiento de la tecnología .NET; gracias a ésta una de las partes más tediosas e
importantes del diseño de aplicaciones, que es el diseño de reportes, se nos hace más
sencilla. Crystal Reports puede ser utilizado con diferentes bases de datos entre 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 ello.
Reportes en .NET con Crystal Reports
Visual Studio .NET incluye Crystal Reports como un mecanismo "oficial" de creación
de reportes. Crystal Reports es un producto muy desarrollado y complejo para la
creación de reportes, y cuenta con una infinidad de opciones. En este artículo, nos
vamos a concentrar en crear reportes relativamente sencillos, pero mostrando los
detalles específicos de la versión .NET, tanto en aplicaciones WinForms como en
aplicaciones WebForms (ASP.NET). Este artículo considera que usted ya posee alguna
familiaridad con Visual Studio .NET y también con ADO.NET.
Crear un reporte
Independientemente de cómo se hará la presentación, el reporte se define en un archivo
".RPT", que forma parte de su proyecto. Ese archivo especifica el modo en que se hará
la presentación del reporte, pero no incluye los datos propiamente dichos. Los datos se
definirán en el tiempo de ejecución.
Crystal Reports se basa en un concepto muy común de la definición de reportes: los
reportes se componen de "secciones", y cada sección es un espacio horizontal en la
página. Existen diversos tipos de secciones, por ejemplo:





Encabezado del reporte, aparece en la primera página.
Encabezado de página, aparece en la parte superior de todas las páginas.
Detalle: lo más importante. En el tiempo de ejecución, se genera una de estas
secciones para cada línea (registro) en la base de datos.
Pie de página, aparece en la parte inferior de todas las páginas.
Pie de reporte, aparece al final del reporte.
En un principio, todos los reportes presentan estas cinco secciones. Otras secciones son
opcionales, como por ejemplo:


Encabezado de grupo, aparece antes de un grupo.
Pie de grupo, aparece al final del grupo.
Se podrá omitir una o más secciones, en caso de que no sean necesarias.
Acceder a la base de datos
Antes de crear el reporte, hay que decidir cuál será el mecanismo utilizado para acceder
a la base de datos. Crystal Reports puede obtener datos de una infinidad de fuentes, pero
una buena cantidad de ellas, como DAO, ADO y OLE/DB, no está "administrada", o
sea, es código .NET "puro". En una aplicación .NET, probablemente sea deseable
realizar el acceso a través de ADO.NET. Para ello, lo más fácil es definir un Conjunto
de datos tipificado, aun antes de crear el reporte.
Crear un proyecto
Veamos cómo crear un reporte en un programa WinForms. Inicialmente, genere un
proyecto en C# de tipo "Windows Application".
Vamos a definir ahora el acceso a la base de datos. Como ejemplo, vamos a acceder a la
base de datos "Northwind", que se encuentra como ejemplo en SQL Server. Siga la
siguiente ruta:




Agregue un componente de tipo SqlDataAdapter.
Seleccione la conexión con la base Northwind.
Introduzca el comando SQL "select * from Products order by CategoryID,
ProductName"
Haga clic con el botón alterno del mouse sobre el componente DataAdapter,
seleccione "Create DataSet" y acepte el nombre sugerido ("DataSet1").
Ahora, agregaremos un reporte al proyecto. Haga clic en "Proyecto | Agregar elemento
nuevo" y seleccione "Crystal Report":
Acepte el nombre "CrystalReport1.rtp", al presionar Intro. Crystal Reports mostrará un
asistente. Marque "Usar el Experto en reportes" y "Estándar":
En este momento, cabe hacer algunos comentarios:


El asistente puede ayudarle a crear diversos tipos de reportes, pero vamos a
explorar solamente algunas posibilidades más sencillas. Puede probar después
con otros tipos de reportes;
Crystal Reports pedirá que realice el registro de su copia; mostramos el uso con
una copia ya registrada.
Presione "Aceptar" para pasar a la pantalla siguiente para la elección de la fuente de los
datos. Seleccione la tabla "Productos" a partir del Conjunto de datos creado y haga clic
en "Insertar tabla":
Haga clic en "Siguiente" y seleccione las columnas que aparecerán en el reporte:
Haga clic en "Siguiente" y defina un grupo haciendo clic en la columna "CategoryID" al
lado izquierdo, y después en "Agregar":
Las demás opciones no nos interesan en este reporte sencillo. Haga clic en "Finalizar",
para crear el reporte:
Observe lo siguiente:



El reporte tiene siete secciones; las cinco obligatorias y dos más relativas al
grupo.
La sección "Encabezado del reporte" tiene la propiedad Suprimir con el valor
verdadero, indicando que no aparecerá en el tiempo de ejecución.
Puede editar cuantas veces quiera el reporte creado, al agregar componentes o
modificar los que hayan sido colocados.
Las secciones contienen componentes que se pueden obtener en dos lugares:


Página "Crystal Reports" de la Caja de herramientas, si se trata de textos fijos,
líneas y cajas.
"Explorador de campos", en el caso de campos de la base de datos, fórmulas,
totales, grupos y otros datos específicos del reporte, como fecha, hora y
numeración de páginas.
Presentar el reporte
Una vez definido el reporte, hay que presentarlo al tiempo de ejecución. Para ello,
coloque un componente "CrystalReportViewer" en el formato y seleccione la propiedad
"Acoplar" para "Llenar". Sólo se necesita un componente "Visualizador", aun cuando se
hayan creado diversos reportes en archivos RPT separados.
Para producir el reporte, agregue un componente "Menú principal" y añada un elemento
de menú para producir el reporte. Añada el siguiente código al evento Clic del botón:
private void menuItem2_Click(object sender, System.EventArgs e)
{
// Ejecuta la consulta a la base dados
sqlDataAdapter1.Fill(dataSet11);
// Crea el reporte
CrystalReport1 Rel = new CrystalReport1();
// Asocia el conjunto de datos con el reporte
Rel.SetDataSource(dataSet11);
// Asocia el reporte con el Visualizador
crystalReportViewer1.ReportSource = Rel;
}
Una vez presentado, puede cambiar el tamaño en el botón "aumentar", ir a otra página o
hacer clic del lado izquierdo para solicitar la presentación de algún grupo en particular:
El usuario puede hacer clic en el botón con el icono de la impresora para imprimir el
reporte.
Presentar en el Web
Para utilizar el reporte en un proyecto Web, cree un nuevo proyecto de tipo "Aplicación
Web ASP.NET" y agregue un reporte exactamente como se mostró anteriormente.
Añada al formato un componente CrystalReportsViewer de la página "WebForms" de la
Caja de herramientas. Añada el siguiente código al evento Page_Load:
private void Page_Load(object sender, System.EventArgs e)
{
// Ejecuta la consulta a la base de datos
sqlDataAdapter1.Fill(dataSet11);
// Crea el reporte
CrystalReport1 Rel = new CrystalReport1();
// Asocia el conjunto de datos con el reporte
Rel.SetDataSource(dataSet11);
// Asocia el reporte con el Visualizador
CrystalReportViewer1.ReportSource = Rel;
}
La página Web mostrada es la siguiente:
Cabe señalar que la interfaz es similar a la del programa WinForms que se mostró
anteriormente, lo que permite cambiar de página, de valor de grupo y de valor de
aumento.
Conclusión
Crystal Reports permite crear y presentar fácilmente reportes tradicionales a partir de
bases de datos relacionales.
Ejemplo de creación de un informe
sencillo con Crystal Reports .NET 2003
Este ejemplo muestra como crear un sencillo informe de una aplicación Windows
con el Crystal Reports integrado en el Visual Studio .NET 2003 partiendo de una
base de datos de Access.
Este ejemplo no es muy técnico ni requiere conocimientos de bases de datos de
ningún tipo simplemente siguiendo los pasos se puede crear un informe muy
sencillo para nuestra aplicación Windows, para cosas mas complicadas esta igual no
sería la mejor solución.
Para crear informes con la versión integrada en el Visual Studio .NET
2003 hay que distinguir dos partes fundamentales por un lado el
propio informe o archivo .rpt y por otro lado el visor o componente
para visualizar informes incluido en .NET.
Comenzaremos por crear el informe, para ello en el explorador
de soluciones sobre el proyecto botón secundario -->Agregar -->
Agregar nuevo elemento …
Dentro del cuadro de diálogo que se nos abre escogemos
Elementos de proyecto local --> Utilidad --> Crystal Report y en el
nombre le pondremos el nombre que le queramos dar al informe, en
este caso simplemente le llamaremos “Informe.rpt”.
A continuación se nos abrirá el asistente para la creación de
informes, en el cual dejaremos la opción por defecto que es Mediante
el asistente de informes y dentro de estos el Estándar y le daremos a
Aceptar.
A continuación se nos abrirá el asistente para la creación de
informes estándar donde iremos seleccionando las distintas opciones
de nuestro informe. La primera opción que hemos de indicarle al
asistente es el origen de datos que pueden ser distintas opciones
desde una base de datos de sql Server, un archivo XML, un DataSet
del proyecto, etc. en nuestro caso utilizaremos una base de datos de
ACCESS para simplificar el ejemplo, escogemos entonces Archivos de
base de datos pulsando sobre el símbolo + a la izquierda de la
carpeta se nos abrirá el cuadro de diálogo para establecer
manualmente el archivo “.mdb”. Una vez seleccionado se nos
mostraran las tablas de nuestra base de datos, haciendo doble clic en
cada una de las tablas las agregamos al informe, no tienen por que
ser todas sino simplemente las que nos interesen. Una vez
seleccionadas las tablas pulsamos sobre Siguiente para continuar con
el asistente.
En la siguiente ventana nos muestra los vínculos o relaciones
que establece automáticamente entre las tablas, estos vínculos los
establece por el nombre, normalmente por lo cual si dos campos de
tablas distintas se llaman igual establecerá una relación entre ellas,
con lo cual aquí deberemos comprobar que las relaciones son las de
nuestra base de datos y si no es así modificarlas a mano o
simplemente borrar los vínculos que será lo que hagamos en este
caso para simplificar el ejemplo. Cuando le demos a borrar vínculos
nos saldrá una ventana de advertencia le daremos que si y a
continuación le damos a Siguiente y nos saldrá una nueva
advertencia a la cual le daremos Aceptar.
En la nueva ventana del asistente que se nos abre escogeremos
los campos de cada una de las tablas que queremos que sean
mostrados en nuestro informe.
Una vez llegados a este punto le daremos a Finalizar para
terminar nuestro informe. Podemos seguir con el asistente para
agrupar los datos por alguno de los campos, cambiar el estilo del
informe y otras opciones que para este ejemplo no nos interesan.
Una vez terminado el asistente nos aparecerá el informe en
vista de diseño, el cual podremos retocar, cambiando el tipo de letra,
tamaños, colocación de los campos etc. a nuestro gusto teniendo en
cuenta varias cosas: el encabezado del informe sale solamente al
principio del mismo, el encabezado de página sale al principio de cada
página al igual que el pie de página y finalmente el pie de informe
sale al final. Podemos añadir campos especiales como por ejemplo
fecha de impresión, hora de impresión etc. escogiéndolos dentro del
Explorador de Campos, si no tiene esta ventana la puede mostrar
escogiendo Ver --> Otras ventanas --> Esquema del documento.
Una vez arreglado a gusto tendremos listo el informe, que
presentará una apariencia similar al realizado para este ejemplo.
Tenemos así lista la primera de las dos partes necesarias para
generar informes en .NET. Ahora crearemos un formulario para
mostrar el informe realizado con lo cual al igual que anteriormente en
el explorador de soluciones sobre el proyecto botón secundario -->
Agregar --> Agregar Windows Form … le ponemos de nombre
“VisorDeInformes.cs” en este caso por que lo realizaremos sobre C#
pero podremos hacerlo sobre cualquiera de los lenguajes soportados
por la plataforma.
Una vez le demos a Abrir se nos abrirá el formulario en vista de
diseño, ajustamos el tamaño a gusto y a continuación en el cuadro de
herramientas, normalmente esta situado el último de los elementos,
pulsamos sobre CrystalReportsViewer y sin soltar arrastramos al
formulario.
Lo ajustamos al tamaño del formulario y lo tenemos listo para
trabajar con el.
Aquí seguir
Una vez llegados a este punto solamente nos falta la parte de
programación para que nuestro informe pueda ser visualizado.
Existen muchas maneras de hacer lo que vamos a hacer ahora,
asignar al visor el informe echo anteriormente y dentro de este
escoger los datos que queremos que salgan en el informe, en este
ejemplo lo haremos todo por código, pero ya digo que se podría
hacer de muchas otras maneras.
Para ello comenzaremos por el constructor del visor para ello
con el formulario VisorDeInformes abierto vamos a Ver --> Código o
bien en el Explorador de soluciones sobre el formulario botón
secundario Ver Código.
Una vez se nos habrá el código vamos al constructor que
presentará esta apariencia:
public VisorDeInformes()
{
//
// Necesario para admitir el Diseñador de Windows Forms
//
InitializeComponent();
//
// TODO: agregar código de constructor después de llamar a
InitializeComponent
//
}
En este punto aclararemos que aunque el informe este
realizado en vista de diseño, por detrás .NET crea una clase con el
mismo nombre dado al informe, la cual no podemos ver ni tocar, por
lo menos yo no sé, pero que si podemos utilizar. Con lo cual lo que
haremos ahora dentro del constructor declararemos e instanciaremos
un objeto de la mencionada clase y le asignaremos ese informe al
CrytalReportViewer como informe, quedando de la siguiente manera:
public VisorDeInformes()
{
//
// Necesario para admitir el Diseñador de Windows Forms
//
InitializeComponent();
Informe informe = new Informe();
crystalReportViewer1.ReportSource = informe;
}
Por último solamente nos falta seleccionar los datos que
queremos mostrar en el informe es decir asignarle una especie de
consulta select sql para filtrar los datos. Se hace mediante la
propiedad “SelectionFormula” del CrytalReportViewer donde
establecemos las condiciones que debe seguir el informe al ser
mostrado, por ejemplo en este caso queremos que nos enseñe los
datos especificados en el informe que tengan como paciente el
indicado y como número de consulta también el indicado. Aquí es
donde podemos pasarle parámetros a ese informe por ejemplo si
queremos pasarle el código del paciente o de la consulta se la
pasaremos como argumentos en el constructor, lo que se puede
hacer es pasarle como parámetro una cadena la cual realizamos
donde llamemos al VisorDeInformes para no depender del número de
parámetros que le queremos pasar. Lo que se debe de cumplir es que
el nombre del campo de la base de datos este entre corchetes.
Quedando finalmente el constructor como sigue:
public VisorDeInformes()
{
//
// Necesario para admitir el Diseñador de Windows Forms
//
InitializeComponent();
Informe informe = new Informe();
crystalReportViewer1.ReportSource = informe;
crystalReportViewer1.SelectionFormula =
"{paciente.p_codigo} =" + codigoPaciente +
" AND {consulta.c_codigo} =" + codigoConsulta;
}
Si lo hacemos con parámetros pasados como una cadena
quedaría de la siguiente forma:
public VisorDeInformes(string cadenaSelect)
{
//
// Necesario para admitir el Diseñador de Windows Forms
//
InitializeComponent();
Informe informe = new Informe();
crystalReportViewer1.ReportSource = informe;
crystalReportViewer1.SelectionFormula = cadenaSelect;
}
El valor de cadena podría ser por ejemplo:
cadenaSelect = "{paciente.p_codigo}=11 AND {consulta.c_codigo}=21";
Y ya tenemos listos tanto el informe como el visor lo único que
nos falta es mostrarlo para ello en donde queramos lo que debemos
hacer es declarar e instanciar un VisorDeInformes por ejemplo en
nuestra clase Principal en el evento Clic de un botón pondríamos:
private void BInforme_Click(object sender, System.EventArgs e)
{
try
{
VisorDeInformes visor = new VisorDeInformes);
visor.ShowDialog(this);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, “Excepcion”);
}
}
Probamos y si todo ha salido bien nos debería de aparecer el
visor con el informe y los datos seleccionados.
Problemas conocidos:
Si el path de la base de datos es muy grande, más de 255
caracteres se produce una excepción por buffer insuficiente.
En el momento en que se cambie de sitio la base de datos, en
este ejemplo el archivo de ACCESS, el informe no encontrara la
misma y lanzará una excepción.
Si se esta probando el proyecto en modo debug y pasamos a
modo release para terminar la aplicación habrá que tener en cuenta
este cambio en el path de la base de datos.
Descargar