Crystal Reports para Visual Studio
Crystal Reports para Visual Studio
Crystal Reports para Visual Studio
ADVERTENCIA LEGAL
Todos los derechos de esta obra estn reservados a Grupo EIDOS Consultora y Documentacin
Informtica, S.L.
El editor prohbe cualquier tipo de fijacin, reproduccin, transformacin, distribucin, ya sea mediante
venta y/o alquiler y/o prstamo y/o cualquier otra forma de cesin de uso, y/o comunicacin pblica de la
misma, total o parcialmente, por cualquier sistema o en cualquier soporte, ya sea por fotocopia, medio
mecnico o electrnico, incluido el tratamiento informtico de la misma, en cualquier lugar del universo.
El almacenamiento o archivo de esta obra en un ordenador diferente al inicial est expresamente
prohibido, as como cualquier otra forma de descarga (downloading), transmisin o puesta a disposicin
(an en sistema streaming).
La vulneracin de cualesquiera de estos derechos podr ser considerada como una actividad penal
tipificada en los artculos 270 y siguientes del Cdigo Penal.
La proteccin de esta obra se extiende al universo, de acuerdo con las leyes y convenios internacionales.
Esta obra est destinada exclusivamente para el uso particular del usuario, quedando expresamente
prohibido su uso profesional en empresas, centros docentes o cualquier otro, incluyendo a sus empleados
de cualquier tipo, colaboradores y/o alumnos.
Si Vd. desea autorizacin para el uso profesional, puede obtenerla enviando un e-mail
[email protected] o al fax (34) 91 7872301.
Si piensa o tiene alguna duda sobre la legalidad de la autorizacin de la obra, o que la misma ha llegado
hasta Vd. vulnerando lo anterior, le agradeceremos que nos lo comunique al e-mail
[email protected] o al fax (34) 91 7872301. Esta comunicacin ser absolutamente
confidencial.
Colabore contra el fraude. Si usted piensa que esta obra le ha sido de utilidad, pero no se han abonado los
derechos correspondientes, no podremos hacer ms obras como sta.
Luis Miguel Blanco, 2003
Grupo EIDOS Consultara y Documentacin Informtica, S.L., 2002
ISBN 84-88457-65-0
Coordinacin de la edicin
Antonio Quirs
([email protected])
ndice
NDICE .................................................................................................................................................. 5
ELABORACIN DE INFORMES CON CRYSTAL REPORTS PARA VISUAL STUDIO .NET
(VISUAL BASIC .NET)........................................................................................................................ 7
EL TRABAJO DE IMPRESIN DESDE WINDOWS .................................................................................... 7
CRYSTAL REPORTS PARA VISUAL STUDIO .NET ................................................................................ 7
ESPACIOS DE NOMBRES DE CRYSTAL REPORTS PARA VISUAL STUDIO .NET..................................... 8
CREACIN DE UN INFORME CON EL ASISTENTE DE CRYSTAL REPORTS .............................................. 9
EL DISEADOR DE INFORMES ............................................................................................................ 15
EL CONTROL CRYSTALREPORTVIEWER ............................................................................................ 16
LA CLASE DEL INFORME .................................................................................................................... 18
TIPOS DE INFORME............................................................................................................................. 20
Informe con establecimiento inflexible de tipos (Strong typed) .................................................... 20
Informe sin tipo (Un-Typed).......................................................................................................... 20
Informe sin tipo cargado desde el control CrystalReportViewer .............................................. 20
Informe sin tipo cargado desde el componente ReportDocument............................................. 21
CREACIN DE UN INFORME MANUAL A PARTIR DEL DISEADOR VACO ........................................... 23
Seleccionar y establecer la conexin con un origen de datos....................................................... 24
Agregar campos de la tabla al informe......................................................................................... 25
Manipular objetos en el diseador del informe ............................................................................ 25
Aplicar formato a los campos ....................................................................................................... 26
Completar el informe con controles adicionales........................................................................... 29
Fecha y hora del informe........................................................................................................... 30
Indicadores de pgina................................................................................................................ 31
Imagen ....................................................................................................................................... 31
INFORME CON DATOS ORDENADOS.................................................................................................... 32
SELECCIONAR LOS DATOS A MOSTRAR EN EL INFORME .................................................................... 34
CREACIN DE GRUPOS DE REGISTROS EN EL INFORME ...................................................................... 36
Incluir manualmente el grupo en el informe ................................................................................. 39
INFORME CON TABLAS VINCULADAS ................................................................................................. 39
Tablas vinculadas con el asistente ................................................................................................ 40
Tablas vinculadas manualmente ................................................................................................... 43
Obtencin de datos relacionados entre tablas vinculadas............................................................ 45
FRMULAS ......................................................................................................................................... 47
Suprimir valores duplicados ......................................................................................................... 49
MODIFICACIN DE LA FRMULA DE SELECCIN ............................................................................... 51
APLICAR FORMATO A UNA SECCIN .................................................................................................. 52
CREACIN DE TOTALES Y SUBTOTALES ............................................................................................ 54
Uso del asistente de informes para crear totales y subtotales ...................................................... 54
Creacin manual de un total general............................................................................................ 56
Creacin manual de un subtotal.................................................................................................... 57
INCLUSIN DE UN GRFICO ESTADSTICO EN EL INFORME ................................................................ 60
MANIPULACIN POR CDIGO DE LOS ELEMENTOS DEL INFORME ..................................................... 63
TTULO DEL INFORME ........................................................................................................................ 63
SELECCIN DE REGISTROS POR CDIGO ............................................................................................ 65
ORDENACIN DE REGISTROS POR CDIGO ........................................................................................ 67
ESTABLECER POR CDIGO EL GRUPO DE REGISTROS ......................................................................... 69
ENVIAR LOS DATOS DE CONEXIN AL INFORME POR CDIGO ........................................................... 71
MODIFICAR CAMPOS DE FRMULA Y TEXTO POR CDIGO ................................................................ 73
IMPRESIN DEL INFORME DESDE CDIGO.......................................................................................... 76
UTILIZAR UN PROCEDIMIENTO ALMACENADO PARA OBTENER LOS REGISTROS ............................... 77
PASO DE PARMETROS A UN INFORME .............................................................................................. 79
EMPLEAR UN DATASET EN EL INFORME PARA OBTENER LOS DATOS................................................ 81
CREAR UN INFORME A PARTIR DE UN ARCHIVO XML Y SU ESQUEMA CORRESPONDIENTE .............. 85
EXPORTAR UN INFORME A OTROS FORMATOS DE ARCHIVO .............................................................. 89
MANIPULACIN POR CDIGO DEL CONTROL CRYSTALREPORTVIEWER........................................... 93
CREACIN DE INFORMES EN ASP.NET ............................................................................................. 96
INFORMES GESTIONADOS EN MEMORIA CACH ................................................................................. 98
ACTUALIZACIN DE LA VERSIN DEL INFORME MANTENIDO EN CACH ........................................ 101
PUBLICACIN DE UN INFORME COMO UN WEB SERVICE ................................................................. 105
Grupo EIDOS
Se trata de un generador de informes que ha acompaado a Visual Basic desde hace varias versiones,
pero uno de sus principales inconvenientes (concretamente hasta Visual Studio 6, inclusive) radicaba
en el hecho de que deba utilizarse como producto separado del IDE de VB, puesto que a pesar de
incluirse en los CDs de instalacin de Visual Studio, no se instalaba por defecto, lo que obligaba al
programador a instalarlo y ejecutarlo de forma separada al IDE habitual de trabajo.
Esta falta de integracin de CR con el IDE de desarrollo de Microsoft se ha solucionado con la llegada
de la tecnologa .NET, ya que Crystal Decisions, el fabricante de CR ha desarrollado una nueva
versin de su generador de informes: Crystal Reports para Visual Studio .NET, que como su nombre
indica, se encuentra totalmente integrada con el entorno de desarrollo de VS.NET; prueba de ello
reside en el hecho de que CR se instala ahora junto con el resto de elementos del IDE de Visual
Studio, durante el proceso de instalacin del entorno de desarrollo de .NET Framework.
La ventaja ms inmediata pues que obtenemos de esta versin de CR, reside en que al funcionar de
forma integrada con VS.NET, el motor de informes del generador se coordina de manera ms eficiente
con el resto de clases de la plataforma. Todas las caractersticas de CR estn disponibles ahora a travs
de una serie de clases, organizadas en un conjunto de espacios de nombres, de los cuales, el principal
es CrystalDecisions. Esta integracin da como fruto una mejora en aquellos aspectos ya conocidos de
versiones anteriores de CR, facilitando el uso de informes en aplicaciones web a travs de su
visualizacin en Web Forms, destacando tambin como novedad, la posibilidad de publicar nuestros
informes como Web Services.
La compatibilidad hacia atrs tambin est contemplada, soportando los informes creados con
versiones anteriores de CR, e incluso con el DataReport de VB6.
A lo largo de los siguientes apartados, describiremos los principales puntos a tener en cuenta para la
elaboracin de informes sencillos, abordando tambin algunos aspectos avanzados, que proporcionen
al lector el punto de partida para la creacin de los listados para sus aplicaciones.
CrystalDecisions.ReportSource. Contiene los tipos que actan como capa de negocio entre
los visualizadores de informes para las interfaces Windows o Web y el motor de CR,
procesando las peticiones de estos visualizadores para obtener los datos a travs del motor y
mostrarlos.
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Grupo EIDOS
Esta accin crear un nuevo informe que ser guardado en un archivo con el mismo nombre que
hemos dado al informe, y la extensin .RPT.
Es posible que en este momento aparezca un asistente para registrarnos a travs de Internet, como
usuarios de Crystal Reports para Visual Studio .NET. Ver la Figura 2.
Esta operacin la podemos realizar en este momento o posponerla, aunque es recomendable efectuar el
registro, ya que es gratuito y una vez introducidos los cdigos que nos suministra el fabricante,
evitaremos que se muestre esta ventana de recordatorio cada vez que vamos a utilizar un informe del
proyecto. Ver la Figura 3.
10
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Tras pulsar el botn Aceptar de esta ventana se iniciar el asistente de Crystal Reports para la creacin
del informe. Para el presente ejemplo nos ocuparemos slo de los pasos principales de dicho asistente,
dejando el resto para otros informes que requieran de diferentes niveles de complejidad.
En el primer paso, correspondiente a la pestaa Datos, seleccionaremos el origen de datos que va a
utilizar el informe. Ver la Figura 5.
Debemos hacer clic en el nodo OLE DB (ADO) del panel izquierdo de la ventana, lo que nos llevar a
su vez a otro asistente para configurar la conexin a datos, en el que seleccionaremos el proveedor de
OLE DB, en nuestro caso el correspondiente a SQL Server, como muestra la Figura 6.
11
12
Grupo EIDOS
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Pulsando el botn Siguiente pasaremos a introducir los valores de conexin con el servidor de base de
datos, que sern los siguientes:
Servidor. localhost.
Volviendo a pulsar Siguiente, visualizaremos informacin adicional sobre la conexin. Ver la Figura
8.
Finalizaremos este asistente de conexin a la base de datos con lo que volveremos al asistente
principal, en el que iremos expandiendo la conexin localhost, recin creada, pasando por la base de
datos Northwind, hasta llegar a la tabla Employees, que ser la que utilicemos para el informe.
Pulsando el botn Insertar tabla, aadiremos dicha tabla al informe. Ver la Figura 9.
13
14
Grupo EIDOS
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
En el siguiente paso seleccionaremos los campos que va a mostrar el listado. Podemos seleccionar uno
a uno, o en este caso, y para simplificar, pulsaremos el botn Agregar todos, que aadir la totalidad
de campos de la tabla. Posteriormente quitaremos algunos, seleccionndolos del panel de campos
aadidos y pulsando el botn Quitar. Ver la Figura 10.
Con estos pasos habramos terminado de crear nuestro informe bsico, por lo que ahora, para finalizar
el asistente, pulsaremos el botn Finalizar de su ventana, pasando al diseador visual del informe.
El diseador de informes
Completados los pasos del asistente para crear el informe explicados en el apartado anterior,
obtendremos el nuevo informe en la ventana correspondiente al diseador del informe, que podemos
ver en la Figura 11.
Esta ventana nos permite el diseo visual del informe de una manera muy fcil y cmoda, con el
mismo estilo de trabajo que el usado con el diseador de formularios Windows.
Podemos comprobar que el asistente ha creado un conjunto de controles dentro del diseador en forma
de campos, que mostrarn los datos cuando sea ejecutado el informe.
15
Grupo EIDOS
Un informe consta de una serie de secciones, dentro de las cuales se organiza la informacin. Las
secciones bsicas que encontraremos habitualmente en todo informe sern las siguientes:
Encabezado del informe. Esta seccin se imprime una vez al comienzo de la ejecucin del
informe, siendo adecuada para insertar en ella informacin general como ttulo, autor,
imgenes, grficos, etc.
Encabezado de pgina. Esta seccin se imprime una vez por cada pgina del informe, y en
ella podemos situar los ttulos de las columnas de los campos de la tabla a imprimir, la fecha
del listado, etc.
Pie del informe. Se imprime una vez al final del informe, siendo una seccin propicia para
insertar un total general que muestre el resultado de la suma de columnas numricas.
Pie de pgina. Se imprime una vez por pgina, justamente despus de las lneas de detalle. Se
trata de una seccin muy adecuada para incluir nmeros de pgina, lneas separadoras, etc.
El contenido actual del informe tambin puede ser modificado, ya que lo que hemos obtenido con el
asistente ha sido un diseo basado en una gua predefinida por CR, y que no siempre coincidir con el
diseo que tenamos previsto realizar para nuestro listado.
Podemos aadir, modificar, quitar campos y otros controles del informe, aunque la confeccin manual
del mismo es una tarea que veremos prximamente, por lo que tambin ms adelante profundizaremos
en el uso de este diseador; el diseo actual por lo tanto ser adecuado para el presente ejemplo.
El control CrystalReportViewer
Llegados a este punto hemos finalizado el proceso de diseo del informe. Como habr comprobado el
lector, ha sido una tarea muy fcil, ya que el asistente ha realizado todo el trabajo por nosotros.
16
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Sin embargo ahora necesitamos que al ejecutar nuestra aplicacin, podamos imprimir el informe, o lo
que es mejor, disponer de la posibilidad de previsualizarlo antes de su impresin definitiva en papel.
Para este fin contamos con el control CrystalReportViewer, que como indica su nombre, se trata de un
visualizador de informes que nos permitir mostrar el listado en un formulario, para su comprobacin
por parte del usuario. La Figura 12 muestra el icono de este control en el Cuadro de herramientas del
IDE.
Al igual que hacemos con cualquier otro control Windows, insertaremos una copia de este control en
el formulario de nuestro proyecto, y le daremos el nombre crvInforme. Para que el informe se muestre
con un mayor tamao, asignaremos a la propiedad Dock de este control el valor Fill. Ver la Figura 13.
Por ltimo, mediante la propiedad ReportSource del control, asignaremos una cadena con la ruta y el
nombre del archivo correspondiente al informe que acabamos de crear, para llevar a cabo su
visualizacin. Esta tarea la podemos hacer a travs de la ventana de propiedades del control, utilizando
una caja de navegacin de directorios y archivos, o bien por cdigo. Para este ejemplo optaremos por
utilizar cdigo, y en el evento Load( ) del formulario, escribiremos la instruccin que cargar el
informe en el visualizador, como vemos en el Cdigo fuente 1.
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles
MyBase.Load
' cargar el informe en el visualizador
Me.crvInforme.ReportSource = "E:\PruebasVBNET\RepSencillo\rptPrueba.rpt"
End Sub
Cdigo fuente 1
17
Grupo EIDOS
18
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
CrystalDecisions.CrystalReports.Engine
CrystalDecisions.ReportSource
CrystalDecisions.Shared
System
System.ComponentModel
El hecho de que un informe sea internamente una clase, nos proporciona una gran flexibilidad, ya que
nos permite crear un objeto a partir de la misma, y manipular el informe a travs de sus propiedades y
mtodos.
Un ejemplo ilustrativo sera en el momento de cargar el informe en el formulario, ya que al control
CrystalReportViewer le podemos pasar en su propiedad ReportSource un objeto informe. Para ello,
vamos a modificar ligeramente el cdigo del evento Load( ) del formulario, adaptndolo a esta nueva
situacin. Ver el Cdigo fuente 3.
19
Grupo EIDOS
Mediante esta tcnica no es necesario preocuparse de la ruta y el archivo que contiene el informe,
simplemente hemos de instanciar un objeto de la clase de nuestro informe, y pasarlo al control
visualizador.
Tipos de informe
En funcin de cmo los informes sean manipulados desde un proyecto, podemos clasificarlos en las
siguientes categoras.
20
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
La clase ReportDocument representa un objeto informe, y dispone de los miembros para efectuar
todas las operaciones de manipulacin, de igual forma que si utilizramos directamente un objeto
instanciado de la clase del informe.
Una vez soltado el componente ReportDocument sobre una plantilla de formulario, el motor de
informes de CR busca en el proyecto la existencia de informes diseados, y nos muestra un cuadro de
dilogo en el que se solicita asociar el ReportDocument que estamos agregando al formulario con un
informe existente, eligindolo en una lista desplegable. En el caso de que no vayamos a asociar el
componente, como es nuestra situacin, seleccionaremos en la lista desplegable el valor
ReportDocument no escrito, como vemos en la Figura 17.
Tras este paso, quedar en el panel de elementos ocultos del diseador del formulario, una copia del
componente. La Figura 18 muestra un ReportDocument en el formulario al que le hemos dado el
nombre rdInforme.
21
Grupo EIDOS
Para terminar slo quedara escribir el cdigo mediante el cual, el componente ReportDocument de
nuestro formulario cargue, a travs de su mtodo Load( ) un archivo .RPT que contenga un informe y
que se encuentre en cualquier ruta del equipo. Ver el Cdigo fuente 5.
El lector pensar con toda probabilidad que esta tcnica es ms complicada para, a fin de cuentas,
obtener el mismo resultado. La ventaja de este modus operandi radica en que, a travs del componente
ReportDocument, obtenemos una mayor flexibilidad a la hora de manipular el contenido del informe
por cdigo.
22
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
De esta forma se presentar la plantilla del diseador de informes vaca. Ver la Figura 20.
23
Grupo EIDOS
24
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Grupo EIDOS
Report, modificando la propiedad GridSize a un valor menor del existente, por ejemplo 0,09. Ver la
Figura 23.
El resultado ser una trama de puntos mayor, y por consiguiente una mejor organizacin de los objetos
del informe. Ver Figura 24.
26
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
27
Grupo EIDOS
Como podemos comprobar, disponemos de una extensa lista de formatos predefinidos, aunque en el
caso de que no exista ninguno que se adapte a nuestras necesidades, pulsaremos el botn Personalizar,
que nos llevar a la ventana Estilos personalizados. Una vez en esta ventana, abriremos la lista
desplegable Orden, seleccionando el valor Fecha. Ver la Figura 28.
Seguidamente haremos clic en la pestaa Fecha, y construiremos nuestro propio formato, que
podremos ir comprobando dinmicamente mediante una fecha de muestra existente en la ventana, que
se va actualizando a cada cambio que realizamos. Los botones existentes al lado de cada campo de
esta ventana nos permiten crear una frmula para ese aspecto concreto del formato. La creacin de
frmulas ser tratada en un apartado posterior Ver la Figura 29.
28
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Con el nuevo formato para el campo de fecha, los valores se mostraran ahora como indica la Figura
30.
Figura 31. Cuadro de herramientas con controles especficos para Crystal Reports.
De este grupo de controles, situaremos en primer lugar un Objeto de texto en la seccin Encabezado de
informe, escribiendo en su interior una cadena que sirva como ttulo del listado. A continuacin,
haremos clic derecho sobre este objeto, y en la opcin Formato del men contextual, aumentaremos el
tamao de fuente.
Seguiremos con el control Objeto de cuadro, que nos permite dibujar objetos con esta forma en el
informe. En nuestro ejemplo dibujaremos un recuadro que encierre al ttulo del informe, y mediante la
propiedad LineThickness estableceremos un grueso mayor del que tiene por defecto este objeto.
La misma operacin realizaremos con el control Objeto de lnea, dibujndolo al final de esta seccin a
modo de lnea separadora. La Figura 32 muestra el resultado de la inclusin de estos controles en el
informe.
29
Grupo EIDOS
Figura 34. Campos especiales de fecha y hora del informe insertados en el diseador.
30
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
De esta forma, cada vez que se imprima una nueva pgina, se incluir la fecha y hora en que se ha
generado el listado.
Indicadores de pgina
A continuacin insertaremos en la seccin Pie de pgina un campo Pgina N de M, que nos servir
para mostrar el nmero de pgina actual del informe y el nmero total de pginas que lo componen.
Ver la Figura 35.
El mismo resultado habramos obtenido empleando por separado los campos Nmero de pgina y
Nmero total de pginas. Sin embargo esta tcnica resulta ms trabajosa, puesto que se tratan de dos
campos separados, y adems tendramos que haber aadido algn campo de texto para mejorar esta
informacin. Ver la Figura 36.
Imagen
Si queremos aadir un archivo que contenga una imagen, al estilo de un logotipo para el listado,
debemos hacer clic derecho sobre el informe y seleccionar la opcin del men contextual Insertar +
Imagen, que abrir un cuadro de dilogo para seleccionar el archivo a insertar en el diseador.
En nuestro ejemplo hemos situado una pequea imagen en la seccin de Encabezado de informe,
como muestra la Figura 37.
31
Grupo EIDOS
Tras incluir este ltimo elemento, ya slo queda aadir un control CrystalReportViewer con el nombre
crvInforme al formulario del proyecto, y escribir en su evento Load( ) el cdigo que realiza la carga
del informe en este control, para poder previsualizarlo en la ventana de la aplicacin. Ver el Cdigo
fuente 6.
32
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
En el asistente de creacin del informe seleccionaremos la tabla Customers como origen de los datos,
y aadiremos al listado los campos CustomerID, CompanyName, City y Country. Tras este paso
podemos finalizar el asistente de informes.
A continuacin haremos clic derecho en el diseador seleccionando del men contextual la opcin
Informe + Ordenar registros, que mostrar la ventana Direccin de ordenamiento de registros, en la
que seleccionaremos de su panel Campos disponibles, el campo Customers.Country, que
trasladaremos al panel Ordenar campos, en el que adems podemos establecer que el modo de
ordenacin sea ascendente o descendente. Finalmente pulsaremos Aceptar para completar esta fase de
creacin de orden. Ver la Figura 39.
Por simplicidad, en este ejemplo ordenamos los registros por un nico campo, pero como puede
comprobar el lector, podemos aadir varios campos de ordenacin al informe. Tambin es importante
tener en cuenta, que no es necesario que el campo(s) que forma parte del ordenamiento se incluya en
el diseador del informe.
Tan slo restara ahora aadir el control visualizador para el informe en el formulario, y escribir el
cdigo para cargar el informe en el control, como ya hemos visto en pasados ejemplos. La Figura 40
muestra el programa en ejecucin con el informe ordenado por el campo Country.
33
Grupo EIDOS
34
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Si desde el diseador necesitamos cambiar el criterio de seleccin debemos hacer clic derecho en el
informe y seleccionar del men contextual la opcin Informe + Asistente de seleccin, que abrir una
ventana con la seleccin actual, permitindonos modificarla. Ver Figura 43.
35
Grupo EIDOS
Figura 43. Ventana para el cambio del criterio de seleccin de registros del informe.
En este paso del asistente pulsaremos el botn Finalizar para generar el informe. Observe el lector que
este informe incluye una nueva seccin con su propio encabezado y pie, correspondiente al grupo por
36
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
el que se organizarn los registros. En el ttulo de esta seccin se incluye el nmero de grupo (#1 en
este ejemplo), ms el nombre del campo que se utiliza para crear la agrupacin. Por otra parte, dentro
de cada seccin de este grupo (encabezado y pie) se ha aadido el campo del nombre del grupo que se
acaba de crear. Ver Figura 45.
Los campos de grupo generados tambin estn disponibles en la ventana Explorador de campos, nodo
Campos de nombre de grupo, como vemos en la Figura 46.
Figura 46. Nodo Campos de nombre de grupo en el Explorador de campos del diseador de CR.
Debemos tener en cuenta que el resultado de este diseo es modificable, por lo que si la distribucin
de campos generada por el asistente no se adapta a nuestras necesidades, podemos cambiarlos
libremente. Para simplificar este ejemplo, y como ya sabemos modificar los campos contenidos en un
informe, dejaremos la distribucin tal y como la crea el asistente. Veamos en la Figura 47 el resultado
del informe en ejecucin, al ser visualizado en un formulario.
37
Grupo EIDOS
En los anteriores ejemplos, el lector seguramente se habr preguntado qu funcionalidad tena el panel
localizado a la izquierda del informe en el control CrystalReportViewer. Como puede comprobar en
este ejemplo, su utilidad se manifiesta en informes con registros agrupados, ya que de una manera muy
fcil y rpida nos permite desplazarnos a un grupo en concreto al hacer clic en su nombre dentro de
este panel. Pulsando el botn de la barra de herramientas Mostrar/ocultar rbol de grupos (tercero
comenzando por la derecha) dentro de este control, podremos ocultarlo dejando ms espacio para el
informe en el formulario.
Si necesitamos modificar el campo por el que se produce la agrupacin, debemos hacer clic derecho
sobre el campo del grupo desde la ventana Explorador de campos, eligiendo la opcin de men
contextual Asistente de Cambio de Grupo, que nos mostrar la ventana Cambiar grupo, con el campo
de agrupamiento actual. Pulsando el botn Opciones de esta ventana, aparecer a su vez la ventana
Cambiar opciones de grupo, en la que podremos cambiar el campo de agrupamiento, junto con
algunas opciones adicionales. Ver la Figura 48.
38
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
39
Grupo EIDOS
Debido a que en este proyecto vamos a crear dos informes, aadiremos al formulario del proyecto un
men con dos opciones, que tengan los nombres Asistente y Manual respectivamente, y que nos
permita cada una, cargar uno de los informes en el control CrystalReportViewer del formulario.
Como tablas de ejemplo de la base de datos Northwind, utilizaremos Orders y Order Details, que
corresponden a una tabla de facturas y lneas de factura respectivamente.
Observemos en este paso un detalle importante: al aadir ms de una tabla, el motor de generacin de
informes de CR busca la existencia de vnculos entre las tablas por campos comunes, y en caso
afirmativo, aade al asistente una pestaa adicional con el nombre Vnculos, que ser el paso al que
vayamos a continuacin. En dicho paso en principio no tenemos que tomar ninguna accin, ya que el
propio asistente ha creado automticamente el vnculo entre ambas tablas por el campo clave comn.
Si este no fuera el caso, podemos quitar el vnculo automtico y crear nosotros uno, o utilizar
cualquiera de los elementos de configuracin del vnculo que se muestran en la Figura 51.
40
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Seguiremos con la seleccin de campos de las dos tablas que mostraremos en el informe y que vemos
en la Figura 52.
Para terminar el asistente, en el paso Grupo seleccionaremos el campo OrderID de la tabla Orders,
como el campo por el que se agruparn los registros del informe. Ver la Figura 53.
41
Grupo EIDOS
Al pulsar Finalizar, el asistente producir el informe que vemos en la Figura 54, en el cual, adems de
los campos y grupos normales, se incluyen una serie de totales generales y subtotales por grupo
creados automticamente. La creacin de totales y subtotales ser comentada en un prximo apartado.
Para visualizar el informe, en el evento Click( ) de uno de los controles MenuItem del formulario
escribiremos las lneas del Cdigo fuente 7.
42
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
La generacin automtica de este informe tiene como inconveniente el hecho de que no sita los
campos jerrquicamente, es decir, en cada grupo sera ms recomendable que apareciera una lnea con
los datos del registro maestro de la tabla Orders, y a continuacin los registros dependientes de la tabla
Order Details situados con un cierto nivel de indentacin.
Este aspecto podemos solventarlo manipulando los campos del informe con posterioridad a su
generacin por el asistente, ubicndolos en los lugares que deseemos. No obstante vamos a hacer esta
labor manualmente a continuacin.
43
Grupo EIDOS
Para visualizar el informe, en el evento Click( ) del otro control MenuItem del formulario escribiremos
las lneas del Cdigo fuente 8.
Private Sub mnuManual_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuManual.Click
Dim oRptManual As New rptManual()
Me.crvInforme.ReportSource = oRptManual
End Sub
Cdigo fuente 8
44
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Grupo EIDOS
Figura 58. Diseador de informe con tablas vinculadas mostrando campos relacionados.
46
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Frmulas
Una frmula es un fragmento de cdigo que situamos en forma de control o campo dentro del informe,
y que es evaluada por el motor de Crystal Reports cuando el listado se ejecuta.
El nmero de veces que una frmula ser evaluada en un informe depende de la seccin del mismo en
el que sea situada. As pues, una frmula que se encuentre en la seccin Detalles ser ejecutada por
cada registro que se muestre en el informe, mientras que una ubicada en el pie del informe slo se
ejecutar en una ocasin.
Las frmulas son tiles, para situaciones en las que no exista un campo en la tabla que proporcione
determinada informacin, o bien el propio Crystal Reports no disponga de un objeto que lo suministre.
Como ejemplo prctico del uso de frmulas, crearemos un proyecto con el nombre RepFormulas (para
acceder al proyecto de este ejemplo hacer clic aqu), al que aadiremos un informe que deber
visualizar la tabla Order Details.
Esta tabla muestra la informacin de las lneas de detalle de cada factura emitida en la base de datos
Northwind. Entre otros datos, tenemos el precio unitario y la cantidad del producto vendida para una
lnea de factura; sin embargo, no disponemos del importe para cada lnea, que obtendramos al
multiplicar el precio por la cantidad.
Bien es cierto que este valor podemos obtenerlo creando una consulta con un campo calculado que nos
devuelva el dato, pero en este caso vamos a conseguirlo desde el informe, a travs de la creacin de
una frmula.
Para crear una frmula nos situaremos en el Explorador de campos, haciendo clic derecho en el nodo
Campos de frmula, y seleccionando la opcin Nuevo del men contextual.
Tras introducir el nombre de la frmula, en este caso Importe, se abrir la ventana Editor de frmulas,
en la que podemos distinguir varios elementos de trabajo: editor de cdigo, campos de la tabla,
funciones, etc. Ver la Figura 60.
47
Grupo EIDOS
Para escribir el cdigo de la frmula podemos emplear dos tipos de sintaxis: Crystal o Basic; en este
caso utilizaremos la primera, ya que es el tipo de sintaxis que propone por defecto este editor.
Consulte el lector, la documentacin correspondiente a Crystal Reports en Visual Studio .NET para
mayor informacin sobre las caractersticas de la sintaxis para frmulas.
El modo de seleccionar los diferentes elementos de esta ventana correspondientes a campos, funciones
y operadores, consiste en hacer doble clic en cualquiera de ellos, trasladndose de esta manera, al
editor de cdigo.
En primer lugar, seleccionaremos del apartado de campos del informe, el campo UnitPrice. A
continuacin, en el apartado Operadores, expandiremos el nodo Aritmtica, seleccionando el operador
Multiplicar. Finalmente aadiremos el campo Quantity, quedando la frmula como vemos en la Figura
61.
Terminaremos pulsando en la primera barra de herramientas de esta ventana, el botn para guardar la
frmula, que corresponde al tercero comenzando por la izquierda, de manera que nuestra frmula
quedar agregada al nodo Campos de frmula, de la ventana Explorador de campos.
Para utilizar la frmula en nuestro informe, haremos clic en ella y la arrastraremos hasta la seccin
Detalles, al igual que hacemos con un campo normal de la tabla.
Completaremos un poco ms este listado creando una nueva frmula con el nombre TipoPedido, que
en funcin del valor del campo Quantity, devuelva una cadena de caracteres indicando si el pedido de
producto para cada lnea es pequeo, mediano o grande. El Cdigo fuente 9 muestra el cdigo que
necesitaremos incluir para esta frmula.
select {Order_Details.Quantity}
case 1 To 40 :
"PEQUEO"
48
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
case 41 To 70 :
"MEDIANO"
case Is > 71 :
"GRANDE"
Cdigo fuente 9
El resultado final con el informe incluyendo ambas frmulas en los detalles del listado, se muestra en
la Figura 62.
49
50
Grupo EIDOS
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Tras aadir el cdigo para mostrar el informe en el evento Load( ) del formulario, podremos
comprobar que efectivamente, los registros de la tabla se encuentran en el intervalo indicado. Ver el
Cdigo fuente 10.
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles
MyBase.Load
Dim oRptPrueba As New rptPrueba()
Me.crvInforme.ReportSource = oRptPrueba
End Sub
Cdigo fuente 10
51
Grupo EIDOS
Esta accin abrir la ventana del editor de frmulas, en la que introduciremos el cambio de intervalo
como muestra la Figura 66.
Al volver a ejecutar el informe, comprobaremos que los registros en el listado estn entre el nuevo
rango. Ver la Figura 67.
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
A continuacin haremos clic derecho en el ttulo de la seccin Detalles, seleccionando la opcin Dar
formato a la seccin del men contextual, que abrir la ventana del asistente de la seccin. Ver la
Figura 68.
Despus haremos clic en la pestaa Color, y pulsaremos el botn de frmula, situado junto al
CheckBox Color de fondo. Al abrirse el editor de frmulas escribiremos el cdigo mostrado en la
Figura 69.
53
Grupo EIDOS
La operacin que realizamos a travs de esta frmula es la siguiente: cuando el campo Quantity del
registro a mostrar es mayor o igual que 100, cambiamos el color de fondo de la lnea a aguamarina, y
en caso contrario ponemos el color blanco (utilizamos las constantes de color crAqua y crWhite). La
Figura 70 muestra la ejecucin del informe con registros que cumplen la condicin para el cambio de
color.
Figura 70. Informe con registros cambiados de color a travs de la frmula de la seccin.
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
la operacin de resumen es una suma, pero es posible cambiarla en la lista desplegable Tipo de
resumen, por una operacin de promedio, recuento, etc. Ver la Figura 71.
Seguiremos con el asistente hasta el paso Seleccionar, en el que incluiremos un rango de valores para
el campo OrderID, de modo que el listado no genere un nmero elevado de pginas. En este punto
finalizaremos el asistente.
Para visualizar este informe en un control CrystalReportViewer del formulario del proyecto,
insertaremos un men al formulario, y le aadiremos una opcin con el nombre Asistente, de modo
que al seleccionarla el usuario, se muestre el listado de la Figura 72.
Podemos comprobar en la figura anterior que para cada grupo se realiza una suma independiente por el
campo UnitPrice slo de los registros del grupo. Finalmente se realiza una suma general de este
mismo campo, cuyo resultado se muestra tras el ltimo registro.
55
Grupo EIDOS
Como resultado se aadir en la seccin Pie del informe el nuevo campo correspondiente al total
creado. Ver Figura 74.
56
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Agregaremos al men del formulario una opcin con el nombre Manual Total general, en la que
escribiremos el cdigo que carga este informe en el control visualizador. La Figura 75 muestra el
informe en ejecucin.
57
Grupo EIDOS
Una vez que en el asistente hemos establecido cul ser la tabla a utilizar, finalizaremos el asistente
creando un informe en blanco, y aadiremos los mismos campos que en el informe anterior.
Seguidamente haremos clic derecho en el informe, seleccionando la opcin de men contextual
Insertar + Subtotal, que mostrar la ventana para realizar esta operacin, en la que seleccionaremos el
campo UnitPrice para crear el subtotal, y el campo CategoryID para realizar la agrupacin de
registros. Ver la Figura 76.
Al pulsar Aceptar se crear en el diseador del informe un nuevo grupo, cuyo pie incluir el campo de
subtotal, como vemos en la Figura 77.
Para poder usar este informe en ejecucin, aadiremos al men del formulario una opcin con el
nombre Manual Subtotal, que al ejecutarla mostrar el informe como vemos en la Figura 78.
58
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
59
Grupo EIDOS
60
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Pulsando en la pestaa Datos, en el paso actual del asistente, estableceremos la ubicacin del grfico
en el informe y el comportamiento a la hora de recolectar los datos para componer el grfico. En este
sentido, lo que haremos ser, que por cada empleado se sumarn las facturas que ha emitido,
componiendo una porcin del crculo. Ver la Figura 80.
Figura 80. Seleccin del modo de creacin del grfico segn sus datos.
En la pestaa Texto podemos escribir una cadena para el ttulo, subttulo y la nota al pie del grfico.
Por defecto, estos valores son automticos, de modo que para escribir nuestro propio texto tenemos
que desmarcar la casilla que necesitemos, como muestra la Figura 81.
61
Grupo EIDOS
Tras dar los anteriores pasos, ya habramos terminado de confeccionar el grfico y por ende, el
informe. Pulsaremos Finalizar en el asistente, generndose el informe, con la novedad en esta ocasin
de que el grfico que hemos creado se incluir en la seccin Encabezado del informe. Tenga en cuenta
el lector, que el grfico que se muestra en modo diseo es meramente una referencia de posicin y
tamao dentro del informe, y no proporciona valores reales, puesto que todava no ha realizado una
conexin al origen de datos para extraer la informacin, cosa que suceder al ejecutarlo. Ver Figura
82.
En cuanto a los campos del informe, realizaremos algunos cambios en su distribucin para mostrarlos
en un modo personalizado, con una organizacin distinta a la generada por el asistente. Ver Figura 83.
62
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
63
Grupo EIDOS
El ttulo quedar situado en el encabezado del informe como un objeto de campo ms, de forma que al
ejecutar el listado, se mostrar el texto que hemos escrito en el asistente. Ver la Figura 86.
Supongamos ahora, que en el formulario aadimos un control TextBox en el que el usuario escribir
un nuevo ttulo para el informe. Para cambiar por cdigo el ttulo del informe que hemos asignado en
el asistente del informe, importaremos en primer lugar en la cabecera del archivo de cdigo del
formulario el espacio de nombres CrystalDecisions.CrystalReports.Engine, correspondiente al motor
de informes de CR.
A continuacin aadiremos al formulario un Button, y en el cdigo de su evento Click, instanciaremos
un objeto de la clase del informe, en este ejemplo rptClientes.
Seguidamente tomaremos el objeto informe recin creado, y obtendremos de su propiedad
SummaryInfo, un objeto de dicho tipo, que contiene la informacin de resumen del informe.
64
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Al objeto SummaryInfo que acabamos de obtener, le asignaremos el nuevo ttulo del informe en su
propiedad ReportTitle, y por ltimo asignaremos el objeto informe al control visualizador para mostrar
el resultado. El cdigo correspondiente a estos pasos lo podemos ver en el Cdigo fuente 11.
Imports CrystalDecisions.CrystalReports.Engine
Public Class Form1
' . . . .
Private Sub btnInforme_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnInforme.Click
Dim oRptInforme As New rptClientes() ' instanciar el informe
Dim oSumInfo As SummaryInfo
oSumInfo = oRptInforme.SummaryInfo ' obtener el objeto resumen del informe
oSumInfo.ReportTitle = Me.txtTitulo.Text ' cambiar el ttulo
Me.crvInforme.ReportSource = oRptInforme ' asignar informe al control
visualizador
End Sub
' . . . .
End Class
Cdigo fuente 11
Grupo EIDOS
Para ello crearemos un nuevo proyecto con el nombre RepSelecCodigo (para acceder al proyecto de
este ejemplo hacer clic aqu), agregando un informe que inicialmente crearemos para que muestre
todos los registros de la tabla Suppliers.
A continuacin pasaremos al diseador del formulario, aadiendo un control CrystalReportViewer y
varios controles TextBox, Button y Label para poder establecer selecciones que muestren el informe
con un filtro sobre la tabla. El objetivo en este ejemplo es ejecutar el informe con dos filtros distintos:
seleccionando por el campo Country y por un intervalo del campo SupplierID. El diseo del informe
se muestra en la Figura 88.
Finalmente escribiremos el cdigo para los eventos Click de los botones del formulario. La clave en
este caso se encuentra en asignar a la propiedad RecordSelectionFormula del objeto informe, una
cadena con la frmula de seleccin de registros que utilizar el informe al ejecutarse. El Cdigo fuente
12 muestra el cdigo para estos botones.
66
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
End Sub
Cdigo fuente 12
A modo de muestra, en la Figura 89 podemos ver la ejecucin del informe tras seleccionar los
registros correspondientes a un determinado pas.
67
Grupo EIDOS
Lo que estamos haciendo en el anterior cdigo fuente es lo siguiente: obtenemos la definicin del
campo del informe en un objeto de tipo FieldDefinition, segn el nombre seleccionado en el
ComboBox.
Para conseguir el objeto FieldDefinition, tomamos el objeto informe y vamos recorriendo su propiedad
Database, dentro de esta, la coleccin Tables, y de las tablas elegimos una mediante la coleccin Item,
utilizando la posicin numrica.
Como slo hay una tabla, corresponde al primer elemento de la coleccin, es decir, el cero.
Continuamos con la coleccin Fields de la tabla elegida, y dentro de esta, mediante la coleccin Item,
pasamos el nombre de campo a obtener con el valor actual del ComboBox.
Una vez obtenido el objeto con la definicin de campo deberemos pasarlo al informe. Para ello,
tomaremos el informe, seleccionando su propiedad DataDefinition, que como su nombre indica,
contiene los miembros necesarios para establecer su definicin de datos, entre ellos tomaremos la
coleccin SortFields, que contiene los campos por los que se ordena el informe, como slo hay uno,
con la coleccin Item indicaremos la posicin cero, y finalmente a la propiedad Field le asignaremos
el objeto FieldDefinition obtenido antes. Para terminar, visualizaremos el informe en el formulario.
La Figura 90 muestra el diseo resultante de este formulario, con el informe ordenado por uno de los
campos seleccionables.
68
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
69
Grupo EIDOS
Si queremos como comnmente se dice rizar el rizo, debemos tener en cuenta que las caractersticas
de manipulacin por cdigo que estamos describiendo en estos apartados son combinables. Por
ejemplo, en este caso concreto que nos ocupa, si adems de mostrar el informe agrupado, queremos
que se muestre con un filtro, por ejemplo para los registros con un determinado valor en el campo
EmployeeID, vamos a aadir un TextBox adicional en el formulario, y en el cdigo del botn, tras la
seleccin del grupo, aadiramos el cdigo que muestra el Cdigo fuente 15.
70
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Veamos ahora en la Figura 92 el informe agrupado como antes por el campo ShipCountry pero filtrado
para un determinado cdigo de empleado.
71
Grupo EIDOS
Partiendo del caso anterior, crearemos un proyecto con el nombre RepConexCodigo (para acceder al
proyecto de este ejemplo hacer clic aqu), y en el evento Load( ) del formulario, tendremos que
codificar algunas lneas adicionales, que hagan uso de los objetos para conexin con informe:
ConnectionInfo, TableLogOnInfo, etc. El resultado lo podemos ver en el Cdigo fuente 16 con
explicaciones complementarias dentro del propio cdigo.
72
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
oTablaConexInfo = oTabla.LogOnInfo
' asignar el objeto con datos de conexin
' que hemos creado
oTablaConexInfo.ConnectionInfo = oConexInfo
' aplicar cambios de conexin a la tabla
oTabla.ApplyLogOnInfo(oTablaConexInfo)
Next
' visualizar informe en un control CrystalReportViewer
Me.crvInforme.ReportSource = oRptPrueba
End Sub
End Class
Cdigo fuente 16
Como se puede observar en el cdigo anterior, esta tcnica requiere que especifiquemos los datos de
conexin para cada una de las tablas que componen el informe y que se encuentran en la coleccin
Tables de la propiedad Database del objeto informe.
Seguidamente pasaremos al formulario, en el que aadiremos dos controles ComboBox, uno con el
nombre cboTipoImp, y que tenga en su lista los siguientes valores: IVA, ESPECIAL y ADUANAS. El
otro control tendr el nombre cboTipoTotal, y en su lista tendr los valores: NORMAL, DOBLE y
MITAD. Segn el valor que seleccionemos en estos controles crearemos la frmula que calcule el tipo
73
Grupo EIDOS
de impuesto a partir del campo UnitPrice, y por otro lado el total, combinando los campos UnitPrice y
Quantity. Tambin modificaremos el campo de texto que sirve como ttulo de columna para estas
frmulas en el informe.
Para ejecutar el informe, una vez realizadas las selecciones en las listas, aadiremos un control Button,
en el que escribiremos las lneas que se muestran en el Cdigo fuente 17.
Imports CrystalDecisions.CrystalReports.Engine
Public Class Form1
'....
Private Sub btnCrear_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnCrear.Click
Dim oRptPrueba As New rptPrueba()
Dim toImpuesto As TextObject
Dim toTotal As TextObject
' obtener uno de los objetos campo de texto del informe
' y cambiarle el texto que visualiza
toImpuesto = oRptPrueba.ReportDefinition.ReportObjects.Item("txtImpuesto")
toImpuesto.Text = Me.cboTipoImp.Text
' en funcin del tipo de impuesto seleccionado en el ComboBox
' asignar el valor a la frmula
Select Case Me.cboTipoImp.Text
Case "IVA"
oRptPrueba.DataDefinition.FormulaFields.Item("Impuesto").Text =
"{Order_Details.UnitPrice} * 0.16"
Case "ESPECIAL"
oRptPrueba.DataDefinition.FormulaFields.Item("Impuesto").Text =
"{Order_Details.UnitPrice} / 2"
Case "ADUANAS"
oRptPrueba.DataDefinition.FormulaFields.Item("Impuesto").Text =
"{Order_Details.UnitPrice} * 2"
End Select
' cambiar valor del otro campo de texto y frmula correspondiente
toTotal = oRptPrueba.ReportDefinition.ReportObjects.Item("txtTotalLin")
toTotal.Text = Me.cboTipoTotal.Text
Select Case Me.cboTipoTotal.Text
Case "NORMAL"
oRptPrueba.DataDefinition.FormulaFields.Item("TotalLin").Text =
"{Order_Details.UnitPrice} * {Order_Details.Quantity}"
Case "DOBLE"
oRptPrueba.DataDefinition.FormulaFields.Item("TotalLin").Text =
"({Order_Details.UnitPrice} * {Order_Details.Quantity}) * 2"
Case "MITAD"
oRptPrueba.DataDefinition.FormulaFields.Item("TotalLin").Text =
"({Order_Details.UnitPrice} * {Order_Details.Quantity}) / 2"
End Select
Me.crvInforme.ReportSource = oRptPrueba
End Sub
End Class
Cdigo fuente 17
74
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Como puede observar el lector por el anterior cdigo fuente, para obtener uno de los objetos campos
de texto del informe, hacemos uso de la propiedad ReportDefinition del objeto informe, que contiene
la coleccin ReportObjects, mediante la que manipulamos los objetos del informe, en este caso los
campos de texto.
Para manejar las frmulas tenemos que hacer uso de la propiedad DataDefinition del informe, y
utilizar su coleccin FormulaFields, accediendo de esta manera a los campos de frmula aadidos al
informe.
En la Figura 95 podemos ver el informe en ejecucin con las columnas correspondientes a las
frmulas y los ttulos asignados por cdigo.
Figura 95. Informe con frmulas y campos de texto modificados por cdigo.
Otra tcnica de manipulacin de las frmulas de un objeto informe, consiste en recorrer la coleccin
que contiene las definiciones de campos de las frmulas, que se encuentra en la clase
FormulaFieldDefinitions; cada elemento de esta coleccin contiene un objeto del tipo
FormulaFieldDefinition, de manera que dentro de un bucle, podemos manipular los miembros de este
objeto para cambiar el cdigo de algunas o todas las frmulas de un informe.
Como ejemplo de este punto, aadiremos un nuevo botn al informe, que al ser pulsado, recorra esta
coleccin y asigne a cada frmula del informe las instrucciones para efectuar un determinado clculo.
El cdigo de este botn lo vemos en el Cdigo fuente 18.
Imports CrystalDecisions.CrystalReports.Engine
Public Class Form1
'....
Private Sub btnRecorrer_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnRecorrer.Click
' declarar variables para guardar la lista de definiciones
' de campos de frmula
' y cada campo de definicin de frmula independiente
Dim oFormulaFDefiniciones As FormulaFieldDefinitions
Dim oFormulaDefCampo As FormulaFieldDefinition
' instanciar objeto informe
Dim oRptPrueba As New rptPrueba()
' obtener de la definicin de datos del objeto informe
' la coleccin de campos de frmula
oFormulaFDefiniciones = oRptPrueba.DataDefinition.FormulaFields
' recorrer la coleccin de campos de frmula
75
Grupo EIDOS
76
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Adicionalmente, es posible configurar los aspectos relacionados con la impresin del informe a travs
de su propiedad PrintOptions, que contiene un objeto de este mismo nombre, mediante el que
podremos seleccionar el tamao de papel, orientacin del mismo, impresora, etc.
El Cdigo fuente 20 muestra un ejemplo de configuracin e impresin de un objeto informe.
77
Grupo EIDOS
A continuacin hemos de verificar que en la configuracin del diseador de informes podemos utilizar
procedimientos almacenados, para lo que haremos clic derecho en el informe, y seleccionaremos
Diseador + Especificaciones predeterminadas en el men contextual.
El cuadro de dilogo que se muestra seguidamente, nos permite establecer valores genricos para
todos los informes creados con el diseador de CR. En nuestro caso concreto, haremos clic en la
pestaa Base de datos, y marcaremos la casilla Procedimientos almacenados, aceptando por ltimo
esta ventana.
El siguiente paso consistir en hacer nuevamente clic derecho en el diseador de informes,
seleccionando esta vez el men Base de datos + Establecer ubicacin. En la ventana Establecer
ubicacin (ver la Figura 97), desplegaremos el ComboBox Origen de datos actual, y seleccionaremos
la tabla Suppliers, que es la que hasta el momento usa el informe. A continuacin, desplegaremos los
nodos del panel Reemplazar con, hasta localizar el procedimiento almacenado que hemos creado. La
ruta de nodos que tendremos que ir expandiendo ser similar a la siguiente: OLE DB (ADO) +
localhost + Northwind + dbo + Procedimientos almacenados + ProveedPorPais. Por ltimo en este
paso, pulsaremos el botn Reemplazar, para actualizar en el informe el origen de datos, y cerraremos
esta ventana.
Figura 97. Estableciendo un procedimiento almacenado como origen de datos para el informe.
Tras dar estos pasos, volveremos a ejecutar el informe, comprobando ya, que los registros de la tabla
se muestran ordenados por el campo Country, fruto de la ejecucin del procedimiento almacenado.
78
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Tras establecer en este ejemplo, el procedimiento almacenado como nueva ubicacin para los datos,
dado que este procedimiento tiene un parmetro, el motor de CR crear automticamente un campo de
parmetro, que podemos ver en la ventana Explorador de campos, expandiendo el nodo
correspondiente a estos elementos del informe. Ver la Figura 98.
Si en el estado actual del informe, lo ejecutamos cargndolo en un control visualizador, dentro del
evento Load( ) del formulario, el motor de CR detectar que necesita un valor para pasarlo a su vez al
procedimiento almacenado y que le devuelva los registros correspondientes. Como actualmente no
pasamos dicho valor, ser Crystal Reports quien lo pedir a travs de la ventana de la Figura 99. En el
campo reservado para el valor lo introduciremos, y tras aceptar la ventana se mostrar el informe,
acorde con el parmetro enviado.
79
Grupo EIDOS
Evidentemente, esta no es la manera idnea de proceder en una situacin como la que nos
encontramos, ya que lo que nos interesa realmente, es poder pasar por cdigo los parmetros al
informe. Aspecto que describimos a continuacin.
Para permitir al usuario la introduccin del valor para el parmetro, aadiremos en el formulario un
TextBox para escribir dicho valor, y un Button para ejecutar el informe. En el cdigo del control
Button escribiremos la lgica a seguir para este proceso, que vemos en el Cdigo fuente 23, en el que
se han incluido los comentarios oportunos para las clases a utilizar.
80
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
' parmetros que estn en la coleccin (en este caso slo uno)
oRptPrueba.DataDefinition.ParameterFields("@NombrePais").ApplyCurrentValues(pvValor
esParametros)
Me.crvInforme.ReportSource = oRptPrueba
End Sub
End Class
Cdigo fuente 23
81
Grupo EIDOS
82
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Para establecer el origen de los datos para el informe, haremos clic derecho en su diseador,
seleccionando del men contextual la opcin Base de datos + Agregar base de datos. Esta accin
mostrar un cuadro de dilogo, en el que iremos expandiendo, desde el nodo Datos del proyecto, hasta
llegar al DataSet que hemos creado anteriormente. Seleccionaremos la tabla contenida en el DataSet, y
la aadiremos al informe, aceptando esta ventana. Ver la Figura 103.
Figura 103. Seleccin del DataSet como origen de datos para el informe.
83
Grupo EIDOS
El resultado ser la generacin de un nuevo objeto para el formulario, correspondiente al DataSet, con
el nombre DsNorthwind1, que tambin ser situado en el panel de elementos ocultos del formulario.
Ver la Figura 105.
Por ltimo, escribiremos en el evento Load( ) del formulario, el cdigo que crea una instancia del
informe, rellena el DataSet mediante el DataAdapter, y asigna el DataSet al objeto informe, para
finalmente, visualizarlo en un control CrystalReportViewer, insertado en el formulario del proyecto.
Ver Cdigo fuente 24.
84
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Grupo EIDOS
Al volver al asistente de informes, el DataSet habr sido reconocido por el entorno, pudiendo
seleccionar las tablas (en este caso slo una) que contiene, y agregarlas al informe, todo ello gracias a
la magia de XML. Ver la Figura 108.
86
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Para el resto de pasos del asistente de informes, las operaciones a realizar son bsicamente iguales que
cuando hemos creado un informe a partir de una base de datos tradicional. Por ejemplo, la Figura 109
muestra cmo la seleccin de campos, una vez reconocida la estructura del DataSet, es igual que para
una tabla normal.
87
Grupo EIDOS
Tras finalizar el asistente de informes se generar el diseo del mismo, con la distribucin de campos
indicada, que tiene como origen el typed DataSet creado. Ciertamente sorprendente, como vemos en la
Figura 110.
Figura 110. Diseo del informe creado a partir del DataSet manual.
A continuacin crearemos un archivo XML con el nombre dsViajes.XML, que basado en el esquema
antes creado, contenga los datos que sern posteriormente cargados en el informe, durante su
ejecucin. Para esta operacin podemos utilizar un editor de texto plano o uno especfico de XML; sin
ir ms lejos, el IDE de Visual Studio .NET permite la edicin de este tipo de informacin. El Cdigo
fuente 25 muestra unos datos de prueba, aunque el lector puede escribir los que prefiera, siempre y
cuando se atenga a la estructura del esquema.
88
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Como paso final de todo este proceso, aadiremos al formulario del proyecto un control visualizador
de informes, y en el evento Load( ) del formulario escribiremos las lneas del Cdigo fuente 26, que
realizarn la creacin de los objetos y la carga de datos en el informe.
El resultado, que no deja de asombrarnos, gracias a las maravillas de XML, lo podemos ver en la
Figura 111, en la que se muestra el informe con los datos obtenidos del archivo XML.
Formato
Aplicacin
Acrobat Reader
XLS
Excel
89
Grupo EIDOS
DOC
Documento Word
Word
RTF
Word, Wordpad
HTM
Navegadores
web:
Internet
Explorer, Navigator, etc.
Como ejemplo ilustrativo de esta cualidad del motor de informes de CR, vamos a crear un proyecto
con el nombre RepExportar (para acceder al proyecto de este ejemplo hacer clic aqu), que tenga un
informe que muestre los registros de la tabla Categories.
A continuacin vamos a disear el formulario del proyecto, incluyendo un ComboBox para
seleccionar el tipo de formato, que contenga en su propiedad-coleccin Items los siguientes valores:
PDF, Excel, Word, RTF y HTML; un TextBox para escribir el nombre del archivo al que vamos a
exportar el informe; y un Button para realizar el proceso de exportacin. El formulario quedara como
muestra la Figura 112.
El funcionamiento del formulario ser el siguiente: al comenzar la ejecucin, durante el evento Load( )
del formulario, y al igual que en otros ejemplos, se visualizar el informe en el control
CrystalReportViewer que contiene.
Posteriormente podremos elegir del ComboBox un tipo de formato de exportacin, y escribir en el
TextBox el nombre del archivo al que se volcar el informe. Al pulsar el botn del formulario,
deberemos escribir el cdigo mostrado en el Cdigo fuente 27, para realizar el proceso de traspaso del
listado a un archivo externo. El archivo generado ser depositado en el directorio \bin, el mismo en el
que es generado el ejecutable del proyecto.
Imports CrystalDecisions.Shared
Public Class Form1
90
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
'....
Private Sub btnExportar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnExportar.Click
' declarar:
' objeto informe
Dim oRptPrueba As rptPrueba
' objeto para contener ruta y nombre de archivo
' destino de la exportacin
Dim oArchivoDestino As DiskFileDestinationOptions
' objeto para contener informacin adicional
' al exportar a un archivo HTML
Dim oFormatoHTML As HTMLFormatOptions
' si no se especifica el formato y nombre de archivo, salir
If Me.cboFormatos.Text.Length = 0 Then
MessageBox.Show("Seleccionar un formato para exportar")
Exit Sub
End If
If Me.txtArchivo.Text.Length = 0 Then
MessageBox.Show("Escribir nombre de archivo para exportar")
Exit Sub
End If
' instanciar objetos
oArchivoDestino = New DiskFileDestinationOptions()
oRptPrueba = New rptPrueba()
' especificar que el destino de la exportacin ser un archivo en disco
oRptPrueba.ExportOptions.ExportDestinationType =
ExportDestinationType.DiskFile
' en funcin del formato elegido,
' asignar al informe el tipo de formato en el que deber
' exportar, y el nombre de archivo con la extensin adecuada
' al formato
Select Case Me.cboFormatos.Text
Case "PDF"
oRptPrueba.ExportOptions.ExportFormatType =
ExportFormatType.PortableDocFormat
oArchivoDestino.DiskFileName = Me.txtArchivo.Text & ".PDF"
Case "Excel"
oRptPrueba.ExportOptions.ExportFormatType = ExportFormatType.Excel
oArchivoDestino.DiskFileName = Me.txtArchivo.Text & ".XLS"
Case "Word"
oRptPrueba.ExportOptions.ExportFormatType =
ExportFormatType.WordForWindows
oArchivoDestino.DiskFileName = Me.txtArchivo.Text & ".DOC"
Case "RTF"
oRptPrueba.ExportOptions.ExportFormatType =
ExportFormatType.RichText
oArchivoDestino.DiskFileName = Me.txtArchivo.Text & ".RTF"
Case "HTML"
' en el caso de exportar a HTML, utilizar
' un objeto especfico con informacin de
' formato para HTML
oFormatoHTML = New HTMLFormatOptions()
oFormatoHTML.HTMLFileName = Me.txtArchivo.Text
' asignar el objeto con el formato HTML
' a las opciones de formato del objeto informe
oRptPrueba.ExportOptions.FormatOptions = oFormatoHTML
oRptPrueba.ExportOptions.ExportFormatType = ExportFormatType.HTML40
oArchivoDestino.DiskFileName = Me.txtArchivo.Text & ".HTM"
91
Grupo EIDOS
End Select
' asignar la informacin del archivo a exportar al objeto informe
oRptPrueba.ExportOptions.DestinationOptions = oArchivoDestino
' exportar el informe
oRptPrueba.Export()
MessageBox.Show("Informe exportado a " & Me.cboFormatos.Text)
End Sub
End Class
Cdigo fuente 27
Aunque se han incluido comentarios a lo largo del cdigo, podemos aadir las siguientes
explicaciones complementarias acerca de los objetos y miembros de los mismos que se utilizan en el
ejemplo:
Export( ). Mtodo del objeto informe que realiza la accin de exportar el mismo a un archivo
externo.
ExportOptions. Clase que nos permite pasar diversa informacin al informe para realizar la
exportacin. En este ejemplo, ExportOptions es a su vez una propiedad del objeto informe,
que contiene los siguientes miembros:
o
Finalizada la escritura del cdigo, una vez que ejecutemos el ejemplo, podremos generar
En la Figura 113 y Figura 114, se muestra el informe de este ejemplo, pero visualizado desde los
archivos a los que lo hemos exportado mediante nuestro proyecto.
92
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
93
Grupo EIDOS
a una pgina concreta del informe; exportar a formatos externos; mostrar/ocultar grupos; ajuste del
nivel de aumento o zoom; bsquedas de texto.
Todas estas acciones pueden llevarse a cabo tambin desde cdigo, manipulando las propiedades y
mtodos de este control. Como demostracin, vamos a crear un proyecto con el nombre
RepCRVCodigo (para acceder al proyecto de este ejemplo hacer clic aqu), en el que aadiremos un
informe que muestre la tabla Orders, con los registros agrupados por el campo ShipCountry.
El siguiente paso de este ejemplo consistir en disear el formulario del proyecto, dotndole del
aspecto que muestra la Figura 115, de manera que a travs de controles Windows, y cdigo asociado a
los mismos, podamos realizar las mismas tareas que proporciona la barra de herramientas del control
CrystalReportViewer.
Al asignar el informe al control visualizador durante la carga del formulario, ocultaremos la barra de
herramientas del visualizador mediante su propiedad DisplayToolbar, por lo que las operaciones que
hemos realizado habitualmente mediante los botones del control, las efectuaremos mediante los otros
controles que hemos insertado en el formulario, y cuyo cdigo se muestra al completo en el Cdigo
fuente 28, con los oportunos comentarios explicativos. Recomendamos al lector que ejecute el
proyecto para ir probando cada una de las caractersticas que han sido implementadas por cdigo.
94
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
End Sub
' botones con operaciones de navegacin por las pginas del informe
Private Sub btnSiguiente_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnSiguiente.Click
Me.crvInforme.ShowNextPage()
End Sub
Private Sub btnAnterior_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnAnterior.Click
Me.crvInforme.ShowPreviousPage()
End Sub
Private Sub btnPrimera_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnPrimera.Click
Me.crvInforme.ShowFirstPage()
End Sub
Private Sub btnUltima_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnUltima.Click
Me.crvInforme.ShowLastPage()
End Sub
Private Sub txtIrAPag_KeyPress(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles txtIrAPag.KeyPress
' al pulsar la tecla Intro...
If e.KeyChar = ControlChars.Cr Then
' nos situamos en una pgina del informe
If IsNumeric(Me.txtIrAPag.Text) Then
Me.crvInforme.ShowNthPage(Me.txtIrAPag.Text)
Else
MessageBox.Show("El valor debe ser numrico")
Me.txtIrAPag.Text = ""
End If
End If
End Sub
Private Sub btnImprimir_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnImprimir.Click
' enviar informe a la impresora,
' este mtodo muestra la caja de dilogo del sistema
' para seleccionar impresora e imprimir
Me.crvInforme.PrintReport()
End Sub
Private Sub btnExportar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnExportar.Click
' exportar informe a un archivo,
' este mtodo muestra una caja de dilogo para
' seleccionar el tipo de formato a exportar, y
' dar el nombre al archivo
Me.crvInforme.ExportReport()
End Sub
Private Sub chkGrupos_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles chkGrupos.CheckedChanged
' mostrar/ocultar panel de grupos del informe
Me.crvInforme.DisplayGroupTree = Me.chkGrupos.Checked
End Sub
Private Sub txtBuscar_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles txtBuscar.KeyPress
' buscar una cadena de texto en el informe
Me.crvInforme.SearchForText(Me.txtBuscar.Text)
End Sub
95
Grupo EIDOS
Como nota aclarativa respecto a la aplicacin de una frmula de seleccin de registros, hemos de
indicar que en el TextBox habilitado a tal efecto, tenemos que escribir la expresin de la frmula, tal y
como lo haramos en el cdigo fuente, a excepcin de las comillas delimitadoras de la cadena que
contiene la frmula. La Figura 116 muestra un ejemplo de este particular.
96
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Como puede comprobar el lector, las lneas a emplear son iguales que para un informe de una
aplicacin Windows.
En este caso es importante tener en cuenta que para cada modificacin que efectuemos, debemos
volver a generar el proyecto con la opcin de men del IDE Generar + Volver a generar
<NombreProyecto>, ya que en caso contrario, cuando ejecutemos la aplicacin en el navegador, las
modificaciones realizadas pudieran no ser reflejadas.
La Figura 118 muestra esta aplicacin en ejecucin, con el informe cargado en el formulario Web del
navegador.
97
Grupo EIDOS
Imports
Imports
Imports
Imports
Imports
CrystalDecisions.CrystalReports.Engine
CrystalDecisions.ReportSource
CrystalDecisions.Shared
System
System.ComponentModel
98
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
'....
End Class
Cdigo fuente 30
<System.Drawing.ToolboxBitmapAttribute(GetType(CrystalDecisions.Shared.ExportOption
s), "report.bmp")> _
Public Class CachedrptPrueba
Inherits Component
Implements ICachedReport
Public Sub New()
MyBase.New
End Sub
Public Overridable Property IsCacheable As [Boolean] Implements
CrystalDecisions.ReportSource.ICachedReport.IsCacheable
Get
Return true
End Get
Set
'
End Set
End Property
'....
End Class
Cdigo fuente 31
Cuando se crea un informe en cach desde una aplicacin ASP.NET, por ejemplo, esta clase
CachedrptPrueba acta tambin a su vez como clase envoltorio de la clase correspondiente al informe
strong typed rptPrueba.
Como ejemplo demostrativo del funcionamiento de informes en cach, vamos a crear una aplicacin
ASP.NET con el nombre RepCacheInforme (para acceder al proyecto de este ejemplo hacer clic aqu),
en la que incluiremos un informe con el nombre rptPrueba, que muestre la tabla Products, y en la
seccin de encabezado de pgina aadiremos desde el Explorador de campos, un campo Hora de los
datos, que se encuentra en el nodo Campos especiales.
Tras aadir un control CrystalReportViewer al formulario Web del proyecto, insertaremos desde el
Cuadro de herramientas, en la pestaa Componentes, un objeto ReportDocument, mostrndose el
cuadro de dilogo de la Figura 119.
En este caso, como al ejecutar el informe queremos que sea mantenido en cach, dejaremos marcado
el CheckBox Generar informe con tipos declarados en cach de esta ventana, y la aceptaremos.
99
Grupo EIDOS
Figura 119. Creacin de un objeto ReportDocument para un informe en cach en un formulario Web.
La anterior operacin, crear en el panel de elementos ocultos del formulario Web un nuevo objeto
ReportDocument con el nombre cachedrptPrueba1, que ser el encargado de manipular el informe en
ejecucin.
A continuacin escribiremos en el evento de carga del formulario Web el cdigo que toma el objeto
ReportDocument que contiene el informe y lo asigna al control visualizador. Ver el Cdigo fuente 32.
100
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
A continuacin es muy importante volver a generar el proyecto, para que cuando lo ejecutemos en el
navegador de Internet se utilice la versin con los ltimos cambios realizados. A partir de ahora, al
ejecutar esta aplicacin en el navegador, cada vez que recarguemos la pgina ASP.NET, o al
desplazarnos por las pginas del informe, el campo que muestra la hora de obtencin de los datos ser
actualizado, indicndonos que el motor de CR ha tenido que ir al servidor de datos y recargar el
informe con los registros que hubiera en ese momento en la tabla.
101
Grupo EIDOS
Cada vez que se carga el informe en la pgina ASP.NET, se realizan llamadas al mtodo
GetCustomizedCacheKey( ) contenido en esta clase, cuyo objetivo es devolver un valor o clave de tipo
cadena. Cuando dicha cadena cambia con respecto a la llamada anterior, el motor de CR asume que se
quiere volver a cargar el informe desde su origen, descartando el que hay en cach.
Dentro del mtodo GetCustomizedCacheKey( ), hay unas lneas comentadas, que ejecutan el mtodo
RequestContest.BuildCompleteCacheKey( ), que mediante un algoritmo, es el que se encarga de
generar la clave que se devuelve como indicador de que el informe en cach sea o no vlido. En
nuestro caso no sera necesario, ya que lo que vamos a hacer es que cada vez que sea llamado
GetCustomizedCacheKey( ), devolveremos de la hora actual, la parte correspondiente a los minutos,
de forma que cuando estos cambien, se descartar el informe que hay en cach y se volver a generar
uno nuevo, depositndolo en cach y sustituyendo al que haba previamente. Veamos los cambios que
hemos introducido en el Cdigo fuente 34.
<System.Drawing.ToolboxBitmapAttribute(GetType(CrystalDecisions.Shared.ExportOption
s), "report.bmp")> _
Public Class CachedrptPrueba
Inherits Component
Implements ICachedReport
'....
Public Overridable Function GetCustomizedCacheKey(ByVal request As
RequestContext) As [String] Implements
CrystalDecisions.ReportSource.ICachedReport.GetCustomizedCacheKey
Dim key As [String] = Nothing
'// The following is the code used to generate the default
'// cache key for caching report jobs in the ASP.NET Cache.
'// Feel free to modify this code to suit your needs.
'// Returning key == null causes the default cache key to
'// be generated.
'
'key = RequestContext.BuildCompleteCacheKey(
'
request,
'
null,
// sReportFilename
'
this.GetType(),
'
this.ShareDBLogonInfo );
' cada vez que este mtodo sea llamado
' obtendremos la hora actual, y devolveremos
' la parte correspondiente a los minutos;
' cuando los minutos cambien, se volver a generar
' el informe, sustituyendo el que haba hasta ese
' momento en cach
Dim HoraActual As New DateTime()
HoraActual = DateTime.Now
key = HoraActual.Minute
Return key
End Function
End Class
Cdigo fuente 34
102
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Me.crvInforme.ReportSource = Me.cachedrptPrueba1
End Sub
Cdigo fuente 35
Imports
Imports
Imports
Imports
Imports
CrystalDecisions.CrystalReports.Engine
CrystalDecisions.ReportSource
CrystalDecisions.Shared
System
System.ComponentModel
103
Grupo EIDOS
Return CachedReportConstants.DEFAULT_TIMEOUT
End Get
Set(ByVal Value As TimeSpan)
'
End Set
End Property
Public Overridable Function CreateReport() As ReportDocument Implements
CrystalDecisions.ReportSource.ICachedReport.CreateReport
Dim rpt As rptPrueba = New rptPrueba()
rpt.Site = Me.Site
Return rpt
End Function
Public Overridable Function GetCustomizedCacheKey(ByVal request As
RequestContext) As [String] Implements
CrystalDecisions.ReportSource.ICachedReport.GetCustomizedCacheKey
Dim key As [String] = Nothing
'// The following is the code used to generate the default
'// cache key for caching report jobs in the ASP.NET Cache.
'// Feel free to modify this code to suit your needs.
'// Returning key == null causes the default cache key to
'// be generated.
'
'key = RequestContext.BuildCompleteCacheKey(
'
request,
'
null,
// sReportFilename
'
this.GetType(),
'
this.ShareDBLogonInfo );
' cada vez que este mtodo sea llamado
' obtendremos la hora actual, y devolveremos
' la parte correspondiente a los minutos;
' cuando los minutos cambien, se volver a generar
' el informe, sustituyendo el que haba hasta ese
' momento en cach
Dim HoraActual As New DateTime()
HoraActual = DateTime.Now
key = HoraActual.Minute
Return key
End Function
End Class
Cdigo fuente 36
Esta clase, al no estar ligada a ningn diseador de informes, no se ver afectada por los cambios que
podamos hacer en nuestro informe.
Como ltimo toque para dejar nuestro ejemplo adecuadamente operativo, volveremos de nuevo al
evento de carga de la pgina ASP.NET e instanciaremos un objeto de esta clase que acabamos de
crear, y ser dicho objeto el que pasemos al control visualizador del informe, como muestra el Cdigo
fuente 37.
104
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
End Sub
Cdigo fuente 37
Una vez publicado el informe como un servicio Web, se aadir al proyecto un nuevo elemento con el
mismo nombre del informe, terminado en Service; en nuestro caso, en el Explorador de soluciones
aparecer este servicio Web con el nombre rptSuppliersService.asmx.
La tcnica de ejecucin del servicio Web es similar a la empleada para los informes ejecutados en
pginas ASP.NET, ya que se utiliza un sistema de cach para almacenar el informe en memoria
intermedia.
105
Grupo EIDOS
Si pasamos al Explorador de soluciones, en la vista de esta ventana que muestra todos los archivos,
observaremos como asociado al informe/servicio Web, hay un archivo de cdigo con el nombre
rptSuppliersService.asmx.vb. Editando este archivo, veremos que contiene dos clases:
rptSuppliersService, que hereda de ReportServiceBase, para proporcionar la funcionalidad de servicio
Web; y por otro lado encontramos, anidada a esta clase, otra clase con el nombre
CachedWebrptSuppliers, que implementa el interfaz ICachedReport, siendo su cometido el
mantenimiento en cach del informe, como vimos en el ejemplo anterior, pero ahora bajo el esquema
de funcionamiento de los servicios Web. El contenido de este archivo se muestra en el Cdigo fuente
38.
Imports
Imports
Imports
Imports
Imports
Imports
System
System.Web.Services
CrystalDecisions.Shared
CrystalDecisions.CrystalReports.Engine
CrystalDecisions.ReportSource
CrystalDecisions.Web.Services
106
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
En lo que atae al proyecto que contiene el informe publicado como Web Service, slo nos quedara
generar el proyecto y ya estara listo. Como habr podido comprobar el lector ha sido una tarea muy
sencilla.
Respecto a la parte cliente que haga uso del informe creado como Web Service, las tareas a realizar
seran tambin muy fciles. Vamos a crear un proyecto de tipo Windows, con el nombre
ClienteRepWS (para acceder al proyecto de este ejemplo hacer clic aqu).
Pasando al Explorador de soluciones y haciendo clic derecho en el elemento Referencias,
seleccionaremos la opcin del men contextual Agregar referencia web, que abrir la ventana de
bsqueda de servicios Web, en la que introduciremos la ruta de nuestro servicio, tal y como muestra la
Figura 122.
Figura 122. Utilidad para agregar referencia a un servicio Web en un proyecto cliente.
107
Grupo EIDOS
Al pulsar el botn Agregar referencia de esta ventana, se aadir la referencia al Web Service del
informe en nuestra aplicacin cliente, de forma que ya podremos utilizarlo desde este proyecto. La
Figura 123 muestra como quedara el Explorador de soluciones despus de esta operacin.
Figura 123. Explorador de soluciones conteniendo la referencia al servicio Web del informe.
Para invocar ahora al servicio Web podemos hacerlo de dos modos, que se muestran en el evento
Load( ) del formulario, en el Cdigo fuente 39.
La ejecucin de un informe publicado como un Web Service, no es impedimento para que durante el
transcurso del programa podamos interactuar con l. Por ejemplo, vamos a aadir algunos controles
adicionales al formulario que nos permitan, al pulsar un botn, asignar una frmula de seleccin de
registros al informe, y refrescar la vista que hasta ese momento tenemos en el formulario del informe.
El Cdigo fuente 40 muestra el cdigo del botn que ejecuta las acciones necesarias.
108
Grupo EIDOS
39. Elaboracin de informes con Crystal Reports para Visual Studio .NET
Con este ejemplo, el lector habr podido comprobar cmo mediante la tecnologa basada en servicios
Web, el campo de distribucin de nuestros informes se ampla de una manera que hasta hace poco era
impensable.
109
Grupo EIDOS
http://www.alhambra-eidos.com