Академический Документы
Профессиональный Документы
Культура Документы
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.
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:
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.
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.
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.
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 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).
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):
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.
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):
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):
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):
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.
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).
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):
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”.
Una vez creado el proyecto agregamos un nuevo ítem; en el menú Project, seleccionamos
Add New Item … (Ver Figura 18):
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:
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.
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”.
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
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 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):
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.
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.
Crear un reporte
En un principio, todos los reportes presentan estas cinco secciones. Otras secciones son
opcionales, como por ejemplo:
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
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:
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":
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.
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.
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;
}
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
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.
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.
public VisorDeInformes()
{
//
// Necesario para admitir el Diseñador de Windows Forms
//
InitializeComponent();
Informe informe = new Informe();
crystalReportViewer1.ReportSource = informe;
}
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;
}
Problemas conocidos: