Está en la página 1de 44

Lo que debo saber sobre Crystal Reports y VB .

NET
Contenido Introduccin Creando un reporte desde cero Crystal y Windows Applications Crystal y Web Applications Crystal y Web Services Funcionalidades del CrystalReportView en tiempo de ejecucin Conclusin Introduccin Crystal Reports es el generador de reporte por excelencia de Visual asic desde versiones anteriores a !"#$! #sta no es la primera ve% &ue se distribuye una versin de este generador de reporte junto a una versin de Visual Studio' en la versin ( de Visual asic se inclu)a una versin de Crystal Reports* aun&ue no tan integrada como la versin !"#$! Cristal es un producto creado en su esencia orientado al usuario +inal' es decir &ue un ejecutivo pueda crear sus propios in+ormes sin necesidad de asistencia de un desarrollador! #n este articulo pretendo cubrir los aspectos b,sicos de Crystal Report y explicar los puntos &ue necesite cual&uier desarrollador -este art)culo estar, orientado a desarrolladores o aspirantes a desarrollador. para iniciarse en el desarrollo de reportes con Crystal y V !"#$! Crystal Report no es la /nica 0erramienta para generar reportes &ue se puede utili%ar con Visual Studio !"#$' existen otras entre las &ue podemos mencionar1

Active Reports de 2ata 2ynamics S34 Reporting Services 5icroso+t 6++ices Automation* entre otros!

Al igual &ue desde el ambiente de desarrollo de Visual Studio* tambi7n podemos crear nuestros reportes desde el ambiente de desarrollo de Crystal Reports y luego ejecutarlo desde nuestro proyecto V !"#$! 4os Reportes desarrollados bajo el ambiente de Crystal Reports pueden ser compilados a !#8# para poder ser ejecutados stand-alone! #ntre las caracter)sticas principales &ue debemos conocer en Crystal Reports para poder crear una buena solucin de reportes est,n los fields* &ue son los componentes &ue nos permiten mostrar in+ormacin sobre el ambiente de desarrollo* y se clasi+ican en1

Formula Fields1 Son campos cuyo valor puede ser obtenido de +rmulas de c,lculo y9o operaciones sobre otros campos!

Summary Fields1 Son campos &ue se utili%an para acumular y9o promediar valores seg/n las operaciones &ue se deseen' entre las operaciones &ue soportan los Summary Fields est,n1 Count* Sum* Avg* discount* etc! Parameters Fields1 Son campos &ue se utili%an para enviarles valores al reporte desde una aplicacin o entrada del usuario! SQL Expresin Fields1 Son campos &ue se utili%an para ejecutar +unciones propias del motor de base de datos &ue se est7 utili%ando! Group Name Fields1 Son campos &ue se utili%an para agrupar la salida del reporte! Running Total Fields1 Son similares a los Summary Fields* pero estos pueden ser condicionados! Special Fields1 Son un conjunto de campos preestablecidos &ue se utili%an en los reportes* tales como1 n/mero de p,gina* total de p,ginas* +ec0a de impresin* etc!

Crystal tambi7n posee su propio conjunto de sentencias y +unciones para producir in+ormacin -o sea su propio lenguaje de +unciones. y tambi7n comparte las sentencias de V :! Creando un reporte desde cero Creamos un nuevo proyecto en Visual Studio !"#$' seleccionamos ;File < New < Pro ect=' seleccionamos ;!indows "pplication= y lo nombramos ;Crystal!in"pp# -Ver Figura >.1

Fi$ura %! Volver al texto! 4os componentes necesarios para manejar los reportes de Crystal son los siguientes1

CrystalReportViewer& #ste componente es la inter+a% &ue utili%a la aplicacin para desplegar los reportes' se coloca sobre un Windows o Web Form! #ste est,

locali%ado en el toolbox en el tab de Windows Forms -o Web Forms* si es un proyecto web.! Report'ocu(ent& #ste componente es utili%ado para comunicarnos con el arc0ivo !R?$ generado por Crystal Reports' mediante este componente podemos modi+icar algunas caracter)sticas del reporte en tiempo de ejecucin!

@na ve% creado el proyecto agregamos un nuevo )tem1 en el men/ Pro ect) seleccionamos "dd New Ite( * -Ver Figura A.1

Fi$ura +! Volver al texto!

Seleccionamos la plantilla de Crystal Reports* luego se abre la ventana ;Crystal Reports ,allery= -Ver Figura B.1

Fi$ura -! Volver al texto! #n la parte superior tenemos B opciones1


Using the Report xpert1 #sta opcin es una especie de Wi!ard &ue nos gu)a paso a paso durante la creacin del reporte! As a "lan# Report$ #sta opcin despliega la inter+a% de desarrollo de reportes en blanco para &ue creemos nuestro reporte sin asistencia -7sta es la parte para expertos.! From as xisting Report1 #sta opcin nos permite crear un reporte a partir de otro ya existente' al seleccionar esta opcin nos pide la locali%acin del arc0ivo !R?$ &ue &ueremos utili%ar* y crea una copia de este reporte!

#n la parte media tenemos A cuadros* el de la i%&uierda nos presenta los di+erentes tipos de reportes &ue podemos crear -esta opcin solo estar, disponible si seleccionamos la primera opcin de la parte superior -Using the Report xpert.' a continuacin describo cada uno de ellos1

Standard$ #ste se utili%a para crear reportes tipos listas* m,ster9detalle y9o cual&uier otro reporte com/n' 7sta es la opcin m,s utili%ada! From %etter$ #sta plantilla se utili%a para crear reportes tipo cartas donde tienes un documento con un texto est,tico y en algunas partes del documento &ue deben ser extra)das de la base de datos* un estilo de &ail &erge -para los &ue 0an manejado 5icroso+t Word* Word Star o alg/n procesador de palabra.! Form$ esta plantilla se utili%a para in+ormes tipo +ormulario! Cross-'ab$ #ste es un estilo de reporte con valores cru%ados! Subreport$ Son similares a un reporte normal con la excepcin de &ue 7stos se incrustan dentro de los reportes con la +inalidad de complementar o agregar in+ormacin' son muy utili%ados! &ail %abel$ #ste se utili%a para generar eti&uetas para cartas! (rill (own$ #ste es un estilo de reporte tambi7n muy utili%ado' es similar a un

m,ster9detalle* slo &ue el detalle se presenta oculto y el usuario puede 0acer doble clic sobre el m,ster y se despliega el detalle' a 7ste tambi7n se le llama reporte interactivo! Seleccionamos ;Standard=* damos clic sobre C./C! 4uego se despliega la ventana de acceso a datos* presentando di+erentes carpetas con di+erentes tipos de +uentes de datos entre las &ue podemos citar -Ver Figura (.1

Fi$ura 0! Volver al texto! )ro*ect (ata$ en esta carpeta se despliegan las di+erentes conexiones &ue se encuentren activas en el proyecto actual' despliega A sub carpetas* la primera es ;A(+,- ' (ataSets=* donde se despliegan las di+erentes estructuras de los (ataSet &ue se encuentren en el proyecto' y la segunda despliega los di+erentes objetos connection &ue se encuentren activos!

+% (" .A(+/$ #sta carpeta se utili%a para crear una conexin a una +uente de datos a trav7s de 64# 2 * Al 0acer clic en esta ventana se despliega una ventana con una lista de todos los proveedores de acceso a datos instalados en tu m,&uina para &ue se seleccione el adecuado y sea con+igurado -de 7ste 0ablaremos m,s adelante* ya &ue es el &ue estaremos utili%ando.! +("C$ #sta carpeta se utili%a para crear una conexin a una +uente de datos a trav7s de 62 C* este se utili%a cuando no contamos con un proveedor de acceso a datos de tipo 64#2 ! (atabase file$ #sta carpeta se utili%a para especi+icar proveedores de acceso a

datos &ue son almacenados como arc0ivos -D!52 * D!2 F* D!84S* etc!.* al seleccionar esta opcin se abrir, la ventana para &ue seleccionemos el arc0ivo y seg/n el tipo se desplegar, el cuadro de di,logo correspondiente para su con+iguracin! Favorito0 1istory$ #stas carpetas se utili%an de la siguiente +orma1 la primera para almacenar las conexiones m,s utili%adas por nosotros* y la segunda guarda autom,ticamente un 0istrico de las +uentes de datos &ue 0emos utili%ado! &ore (ata Source$ #sta carpeta se utili%a para acceder datos en +ormato 854* #8C#4!

2amos clic sobre la carpeta 64# 2 -A26.* se despliega la ventana de proveedores de acceso a datos por 64#2 &ue tengamos instalados en nuestra m,&uina -estos proveedores se instalan autom,ticamente cuando instalamos las base de datos* 52AC x!x y algunos ya los trae Windows agregados. -Ver Figura E.1

Fi$ura 1! Volver al texto!

Seleccionamos 5icroso+t Fet (!G 64# 2 ?rovider y damos clic sobre el botn CNextC* luego se abre la ventana de con+iguracin del proveedor &ue seleccionamos' esta ventana

puede variar seg/n el 64#2 (river &ue 0ayamos seleccionado -Ver Figura :.1

Fi$ura 2! Volver al texto! 2amos clic sobre el pe&ueHo botn &ue est, a la derec0a del primer 'ext"ox* se abre la ventana de di,logo "brir3 buscamos la base de datos Nort4!ind.(db -esta base de datos viene con 5icroso+t 6++ice.! 2amos clic en el botn 5Finish5 y se despliega bajo la carpeta 64# 2 -A26. de la ventana de acceso a datos* una conexin indicando la ruta de la base de datos y A grupos1 ;'ables= y ;2iews=' en el grupo 'ables est,n todas la tablas &ue contiene esta base de datos' y en el grupo 2iews* las vistas &ue est,n contenidas en la base de datos! 2e a&u) seleccionamos las tablas &ue utili%aremos para extraer la in+ormacin &ue se presentar, en el reporte' damos clic en el signo m,s -I. &ue tiene el grupo a la i%&uierda y buscamos la tabla ;Categories=' damos clic sobre esta tabla y luego sobre el botn ;Insert Ta le= y la tabla se despliega en el cuadro de la derec0a' esto nos indica &ue esta tabla estar, incluida en nuestro reporte' luego buscamos la tabla ;)roducts= y damos clic en el botn CInsert Ta leC otra ve%* luego damos clic en 3NextC!

A0ora se desplegar, la ventana de relacin entre tablas' a&u) las tablas &ue seleccionamos en el punto anterior son representadas por pe&ueHos cuadros con los nombres de los

campos dentro' tambi7n se desplegar, una l)nea delgada entre las tablas* indicando la relacin &ue existe entre ellas' esta relacin la establece Cristal Reports autom,ticamente tomando como par,metro el nombre de los campos -Ver Figura J.1

Fi$ura 6! Volver al texto! A&u) podemos cambiar las relaciones' si &uisi7ramos agregar nuevas relaciones -tan slo debemos arrastrar el campo &ue &ueramos relacionar desde una tabla 0asta la otra y soltarla sobre el campo de la segunda tabla &ue ser, relacionado.* cambiar el tipo de relacin -4nner0 +uter0 %eft +uter0 Right +uter.* pero en este caso* no 0acemos cambios! 2amos clic sobre el botn CNextC!

4uego se despliega la ventana de seleccin de campos1 a&u) seleccionamos los campos &ue &ueramos &ue se desplieguen en nuestro reporte' en el cuadro i%&uierdo est,n las

tablas desde donde podemos seleccionar los campos* y en el cuadro derec0o los campos &ue ya seleccionamos -Ver Figura K.1

Fi$ura 7! Volver al texto! A0ora* damos doble clic sobre el campo Cate$oryNa(e de la tabla Cateo$ries' 7ste se despliega en el recuadro de la derec0a' 0acemos lo mismo para los campos ;ProductNa(e) 8nitPrice) 8nitsIn9toc:= de la tabla Products!

A0ora vamos a necesitar un campo &ue nos presente el precio del total en almac7n de cada producto' para eso agregamos un Campo Formula -Formula Fields.1 damos clic sobre el botn 5For(ula5* nos desplegar, un pe&ueHo cuadro pidi7ndonos el nombre del

campo +rmula' escribimos TotalPrice3 damos clic en el botn C./C* y se desplegar, la ventana de edicin de +rmulas -Ver Figura L.1

Fi$ura ;! Volver al texto! #sta presenta B cuadros de i%&uierda a derec0a1 el primero nos muestra los campos de nuestro reporte &ue ya seleccionamos anteriormente* tambi7n nos muestra la conexin &ue creamos y las tablas &ue seleccionamos' el segundo cuadro nos muestra una lista de todas +unciones &ue Cristal Reports soporta agrupadas por el tipo de datos sobre el &ue act/an' y el tercero nos muestra una lista de los operadores aritm7ticos* lgicos* de conversin* etc!* agrupados tambi7n por el tipo de datos sobre el &ue act/an! "uestro campo +rmula slo consistir, en multiplicar el campo 8nitPrice por el campo 8nitsIn9toc:' damos doble clic sobre el campo @nit?rice en el primer cuadro* 7ste se agrega al cuadro in+erior' luego colocamos el cursor al +inal del campo y digitamos un asterisco -o sea* el signo de multiplicar para las computadoras.' luego damos doble clic sobre el campo @nitsInStocM en el primer cuadro y listo* damos clic en el botn C9al<arC* y luego clic en el botn CCerrarC de la ventana -a la derec0a en la parte superior.* retornaremos a la ventana anterior! "uestro campo +rmula se despliega en el cuadro de la i%&uierda junto con los dem,s campos del reporte' damos clic sobre el cuadro de la derec0a sobre el campo ;Products.8nitsIn9toc:= y luego damos doble clic sobre nuestro campo +ormula ;=TotalPrice= y 7ste se despliega en la ventana de la derec0a debajo del campo @nitsInStocM!

2amos clic en el botn CNextC!

A0ora se despliega la ventana de grupos* a&u) podemos especi+icar por cu,les campos &ueremos &ue se agrupe nuestra in+ormacin' por cada campo &ue seleccionemos a&u) se crear, un grupo en nuestro reporte' damos doble clic sobre el campo ;Cate$ories.Cate$oryNa(e= -Ver Figura >G.1

Fi$ura %>! Volver al texto! 2amos clic en el botn CNextC!

A0ora se despliega la ventana de totales' a&u) indicamos los campos &ue deseemos

totali%ar! ?odremos especi+icar totales por cada uno de los grupos &ue 0ayamos especi+icados en la ventana anterior -como en nuestro ejemplo slo seleccionamos un campo* ;Categories!Category"ame=* podremos especi+icar totales para este grupo. -Ver Figura >>.1

Fi$ura %%! Volver al texto! Autom,ticamente* Cristal Reports agrega los campos num7ricos en el cuadro de la derec0a para totali%ar' en nuestro ejemplo no tiene caso totali%ar el precio y las @nidades en Almac7n* pero s) el $otal -nuestro campo +rmula $otal?rice.* as) &ue damos clic sobre los campos del cuadro de la derec0a &ue no deseamos totali%ar y damos clic sobre el botn ;Remo!e=! 2ebajo del cuadro de la derec0a 0ay un Combobox &ue dice ;Summary 'ype=1 el Summary 'ype es la operacin matem,tica &ue &ueremos aplicar sobre este campo -en este caso sum para sumar todos sus valores.! #l chec#box &ue dice ;)ercentage of= se utili%a para especi+icar &ue el total se presentar, como un porcentaje de alg/n otro total y el chec#box al +inal ;Add 5rand 'otals= se utili%a para indicarle &ue adem,s de los totales por grupo &ueremos un Nran $otal &ue sume todos los totales de los grupos! 2amos clic en el botn CNextC!

A&u) se despliega la ventana .rden* donde podemos especi+icar el orden en &ue se presentar,n los grupos' dejamos todo como est, en esta pantalla! 2amos clic en el botn CNextC! A&u) se despliega la ventana de gr,+icos estad)sticos' a&u) podemos seleccionar el tipo de gr,+ico estad)stico &ue &ueramos presentar en nuestro reporte! #n la parte i%&uierda est,n los di+erentes tipos de gr,+icos* y en la derec0a los estilos de gr,+icos por cada tipo' estos gr,+icos se con+iguran autom,ticamente tomando los valores de los reportes* pero si se desea se pueden con+igurar manualmente' solo 0ay &ue desmarcar el chec#box &ue dice ;automatically set chart options= -Ver Figura >A.1

Fi$ura %+! Volver al texto! A&u) seleccionamos el tipo Pastel -pie. y a la derec0a seleccionamos el estilo -'! 2amos clic en el botn CNextC! A0ora se despliega la ventana de seleccin de datos1 a&u) podemos especi+icar un criterio de seleccin de datos +ijo para &ue nuestro reporte slo presente la in+ormacin resultante de este +iltro!

2amos clic en el botn CNextC! O por /ltimo* para terminar con el diseHo de nuestro reporte* la ventana de seleccin estilo1 a&u) se despliega una lista con los di+erentes estilos de reportes &ue Crystal provee -Ver Figura >B.1

Fi$ura %-! Volver al texto! #n la parte i%&uierda se despliega la lista de los estilos de reportes disponibles* y en la parte de la derec0a se presenta una vista preliminar del estilo &ue se seleccione' tambi7n podemos especi+icar el T?tulo de Reporte en la parte superior! Como t)tulo digitamos ;Listado de Productos por Cate$or?as= y luego seleccionamos el estilo xecutive* %eading "rea# y damos clic en el botn CFinishC! 4isto1 nuestro reporte ya est, diseHado! Visual Studio no cuenta con una 0erramienta para poder visuali%ar los reportes en )review &ode* por eso para ver nuestro reporte corriendo necesitamos crear una aplicacin &ue lo ejecute -7sta es la parte +,cil.! 4uego de diseHar el reporte* 7ste se presenta en el ambiente de diseHo de reporte donde podemos mover los campos y relocali%arlos a nuestro antojo!

Crystal y !indows "pplications A0ora les mostrar7 cmo abrir el reporte ya diseHado en una aplicacin Windows! Abrimos la +orma ;For(%= &ue se cre al momento de crear nuestro proyecto para el reporte' luego arrastramos del 'ool"ox el componente ;CrystalReportViewer= y lo dejamos caer sobre el +ormulario -Ver Figura >(.1

Fi$ura %0! Volver al texto! 4uego asignamos la propiedad ;(oc#= del control CrystalReport2iewer a ;Fill= -Ver Figura >E.1

Fi$ura %1! Volver al texto!

!!! O el control se ajusta al tamaHo del +ormulario' luego seleccionamos la propiedad ;ReportSource= del control y damos clic en la opcin ;"rowse 6=' esto nos permite seleccionar el arc0ivo !R?$ &ue se despliega en la pantalla -Ver Figura >:.1

Fi$ura %2! Volver al texto! Seleccionamos el arc0ivo CrystalReport%.<b &ue est, en el carpeta donde estamos creando nuestro proyecto* y listo1 ya podemos ejecutar nuestro reporte! Crystal y !eb "pplication ?rimero creamos un proyecto nuevo* esta ve% ;"9P .NET !eb "pplication=* y lo nombramos CrystalR!eb"pp' esta ve% nuestro +ormulario o p,gina web es ;!ebFor(%.asp@=' damos clic derec0o sobre el proyecto CrystalR!eb"pp y seleccionamos ;Set as Startup Pro"ect=' luego damos clic derec0o sobre la p,gina WebForm>!aspx y seleccionamos ;Set as Start page=! #n el 'oolbox en la pestaHa ;#e Forms= arrastramos el control CrystalReportViewer y lo soltamos en la p,gina' esta ve% se ver, di+erente ya &ue en proyectos web este control no tiene Inter+a% de diseHo -Ver Figura >J.1

Fi$ura %6! Volver al texto! @na ve% creado el proyecto agregamos un nuevo )tem' en el men/ Pro"ect* seleccionamos $dd Ne% Item & -Ver Figura >K.1

Fi$ura %7! Volver al texto! Seleccionamos la plantilla de Crystal Report* luego se abre la ventana ;'rystal Report Gallery= -Ver Figura >L.1

Fi$ura %;! Volver al texto! A0ora seleccionamos la opcin ;From an Existing Report=' esto crea una copia del reporte &ue ya creamos en la seccin anterior para este proyecto! Se desplegar, la ventana de di,logo "brir y seleccionamos el reporte &ue creamos ;CrystalReport%.rpt= -Ver Figura AG.1

Fi$ura +>! Volver al texto! 4uego damos clic derec0o sobre la p,gina y seleccionamos ;(ie% 'ode=* expandimos la regin C#e Form )esigner Generated 'odeC y en el m7todo Pa$eAInit despu7s de la llamada a InitialiBeCo(ponent agregamos el siguiente cdigo1 Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) andles !yBase.Init "#O$E%E&' ()is met)*d call is re+uired by t)e ,eb -*rm $esigner "$* n*t m*di.y it using t)e c*de edit*r. Initiali/e#*m0*nent() $im #r1e0 As &e2 #rystal1e0*rt3 #rystal1e0*rtVie2er3.1e0*rtS*urce 4 #r1e0 #rystal1e0*rtVie2er3.$ataBind() End Sub A&u) estamos instanciando el reporte &ue creamos* CrystalReport>* ya &ue Crystal tambi7n crea una clase con el mismo nombre del reporte para &ue podamos instanciarla y manipularla! ?or ello* le estamos diciendo al control CrystalReportView> &ue tome como +uente la instancia de nuestro reporte* y +inalmente le indicamos &ue se ejecute el reporte! 4isto* ya podemos ejecutar nuestro reporte! Crystal y !eb 9er<ices @nos de los conceptos introducidos con el nacimiento de la tecnolog)a !"#$ es el de Web Services -Servicios en la Web.* los reportes creados en Crystal tambi7n pueden ser publicados y consumidos como Web services! ?ara los &ue no conocen el concepto de Web Services* esto se re+iere a proveer alguna +uncionalidad a trav7s de la web para &ue pueda ser utili%ada por otra aplicacin! #l cl,sico ejemplo es el de la tarjeta de cr7dito1 cuando 0acemos compras por Internet y pagamos con tarjeta de cr7dito* el sitio desde donde estamos reali%ando la transaccin necesita validar nuestra tarjeta de cr7dito para determinar si es v,lida y claro* si tiene +ondos disponibles para la transaccin! 4as instituciones bancarias propietarias de la tarjeta podr)an publicar Web Services* el sitio slo debe acceder al Web Service* enviarle los datos de nuestra tarjeta y el banco a trav7s del mismo* nos devolver, la in+ormacin &ue necesitamos* todo esto se 0ace a trav7s de Web Services* compartiendo la in+ormacin en +orma 854 - xtensible &ar#et %anguage.! #sto nos +acilita las cosas ya &ue* no importa en &u7 lenguaje y9o plata+orma est7n diseHadas nuestras aplicaciones* si se accede la web y se maneja 854 -&ue casi todos los lenguajes ya manejan este lenguaje. puede 0acer uso de este servicio! ?ara esta prueba tomaremos el proyecto &ue creamos anteriormente* el Web Application! Abrimos el proyecto CrystalR!eb"pp) damos clic derec0o sobre el arc0ivo del reporte

en el 9olution E@plorer* ;CrystalReport>!rpt=* y seleccionamos ;Pu lish as #e Ser!ice=! 4uego damos clic derec0o sobre el arc0ivo ;WebForm>!aspx= en el Solution #xplorer* y seleccionamos ;(ie% 'ode=! 5odi+icamos el m7todo ;Pa$eAInit=1 Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) andles !yBase.Init "#O$E%E&' ()is met)*d call is re+uired by t)e ,eb -*rm $esigner "$* n*t m*di.y it using t)e c*de edit*r. Initiali/e#*m0*nent() $im #r1e0 As &e2 #rystal1e0*rt3 #rystal1e0*rtVie2er3.1e0*rtS*urce 4 5)tt0'66l*cal)*st6#rystal1,ebA006#rystal1e0*rt3Service.asm75 #rystal1e0*rtVie2er3.$ataBind() End Sub 4isto* podemos ejecutar nuevamente nuestro proyecto y el reporte se ejecutar, igual! Funcionalidades del CrystalReportView en tie(po de e ecucin 4a inter+a% de ejecucin &ue nos brindan Crystal y Visual Studio* es bastante amigable en cuanto a +unciones para el usuario +inal' entre las +uncionalidades m,s destacadas podemos mencionar1 InterCaB !indows Ver Figura A>1

Fi$ura +%! Volver al texto! #sta es la barra de +uncionamiento de la inter+a% de ejecucin de los reportes en ambiente Windows1 a&u) se pueden visuali%ar >A botones &ue de i%&uierda a derec0a* de acuerdo a su utili%acin* son los siguientes1 4os ( primeros son para moverse entre p,ginas del reporte* el EP botn se utili%a para ir a una p,gina a partir del n/mero de la misma! Cuando se 0ace clic en este botn se despliega el dialogo ;Goto Page= para especi+icar el n/mero de la p,gina &ue se desea desplegar -Ver Figura AA.1

Fi$ura ++! Volver al texto! #l :P botn se utili%a para cerrar la inter+a% de ejecucin del programa* tambi7n se puede cerrar la ventana por el botn est,ndar de las ventanas de Windows! #l JP botn se utili%a para enviar el reporte a la impresora' cuando se presiona este botn se despliega el cuadro de di,logo ;Imprimir= est,ndar de las aplicaciones Windows! #l KP botn se utili%a para re+rescar la in+ormacin &ue se est, desplegando! #l LP botn se utili%a para exportar el reporte a cual&uier otro +ormato' entre los +ormatos a los &ue se puede exportar un reporte se encuentran1 #xcel* Word* ?2F* Q$54* etc! Al 0acer clic en este botn se despliega una ventana similar a la ventana de di,logo CAbrirC est,ndar de Windows* donde especi+icaremos el nombre del arc0ivo a crear y el +ormato al cual deseamos exportar! #l >GP botn se utili%a para ocultar o mostrar le ventana de grupos &ue se encuentra a la i%&uierda* donde se despliegan los nombres de los grupos por los cuales est, agrupado el reporte' 0aciendo clic sobre cual&uiera de estos nombres el focus se colocar, sobre 7l en el reporte -Ver Figura AB.1

Fi$ura +-! Volver al texto! #l >>P botn se utili%a para ampliar o reducir la vista del reporte! #l >AP botn se utili%a para locali%ar cual&uier texto en el reporte' al 0acer clic sobre 7ste se despliega el cuadro de di,logo donde digitaremos la palabra a locali%ar' si es locali%ada* el focus se coloca sobre la primera ve% &ue apare%ca -Ver Figura A(.1

Fi$ura +0! Volver al texto! 4a inter+a% web tambi7n cuenta con todas estas +uncionalidades! Conclusin Crystal Reports es una 0erramienta para diseHo de reportes creada muc0o antes del nacimiento de la tecnolog)a !"#$' gracias a 7sta una de las partes m,s tediosas e importantes del diseHo de aplicaciones* &ue es el diseHo de reportes* se nos 0ace m,s sencilla! Crystal Reports puede ser utili%ado con di+erentes bases de datos entre las &ue podemos mencionar1 5S Access* S34 Server* 6racle* In+ormix* etc!' podemos diseHar reportes tanto desde el mismo ambiente de desarrollo de Visual Studio !"#$ como desde el ambiente de diseHo de Crystal Reports' los reportes creados desde el ambiente de diseHo de Crystal pueden ser compilados a !#8# para poder ser ejecutados* sin necesidad de crear un programa o inter+a% para ello!

Reportes en .NET con Crystal Reports


Visual Studio !"#$ incluye Crystal Reports como un mecanismo Co+icialC de creacin de reportes! Crystal Reports es un producto muy desarrollado y complejo para la creacin de reportes* y cuenta con una in+inidad de opciones! #n este art)culo* nos vamos a concentrar en crear reportes relativamente sencillos* pero mostrando los detalles espec)+icos de la versin !"#$* tanto en aplicaciones WinForms como en aplicaciones WebForms -AS?!"#$.! #ste art)culo considera &ue usted ya posee alguna +amiliaridad con Visual Studio !"#$ y tambi7n con A26!"#$!

Crear un reporte
Independientemente de cmo se 0ar, la presentacin* el reporte se de+ine en un arc0ivo C!R?$C* &ue +orma parte de su proyecto! #se arc0ivo especi+ica el modo en &ue se 0ar, la presentacin del reporte* pero no incluye los datos propiamente dic0os! 4os datos se de+inir,n en el tiempo de ejecucin! Crystal Reports se basa en un concepto muy com/n de la de+inicin de reportes1 los reportes se componen de CseccionesC* y cada seccin es un espacio 0ori%ontal en la p,gina! #xisten diversos tipos de secciones* por ejemplo1

#ncabe%ado del reporte* aparece en la primera p,gina! #ncabe%ado de p,gina* aparece en la parte superior de todas las p,ginas! 2etalle1 lo m,s importante! #n el tiempo de ejecucin* se genera una de estas secciones para cada l)nea -registro. en la base de datos! ?ie de p,gina* aparece en la parte in+erior de todas las p,ginas! ?ie de reporte* aparece al +inal del reporte!

#n un principio* todos los reportes presentan estas cinco secciones! 6tras secciones son opcionales* como por ejemplo1

#ncabe%ado de grupo* aparece antes de un grupo! ?ie de grupo* aparece al +inal del grupo!

Se podr, omitir una o m,s secciones* en caso de &ue no sean necesarias!

Acceder a la base de datos


Antes de crear el reporte* 0ay &ue decidir cu,l ser, el mecanismo utili%ado para acceder a la base de datos! Crystal Reports puede obtener datos de una in+inidad de +uentes* pero una buena cantidad de ellas* como 2A6* A26 y 64#92 * no est, CadministradaC* o sea* es cdigo !"#$ CpuroC! #n una aplicacin !"#$* probablemente sea deseable reali%ar el acceso a trav7s de A26!"#$! ?ara ello* lo m,s +,cil es de+inir un Conjunto de datos tipi+icado* aun antes de crear el reporte!

Crear un proyecto
Veamos cmo crear un reporte en un programa WinForms! Inicialmente* genere un proyecto en CR de tipo CWindows ApplicationC! Vamos a de+inir a0ora el acceso a la base de datos! Como ejemplo* vamos a acceder a la base de datos C"ort0windC* &ue se encuentra como ejemplo en S34 Server! Siga la siguiente ruta1

Agregue un componente de tipo S&l2ataAdapter! Seleccione la conexin con la base "ort0wind! Introdu%ca el comando S34 Cselect D +rom ?roducts order by CategoryI2* ?roduct"ameC Qaga clic con el botn alterno del mouse sobre el componente 2ataAdapter* seleccione CCreate 2ataSetC y acepte el nombre sugerido -C2ataSet>C.!

A0ora* agregaremos un reporte al proyecto! Qaga clic en C?royecto S Agregar elemento nuevoC y seleccione CCrystal ReportC1

Acepte el nombre CCrystalReport>!rtpC* al presionar Intro! Crystal Reports mostrar, un asistente! 5ar&ue C@sar el #xperto en reportesC y C#st,ndarC1

#n este momento* cabe 0acer algunos comentarios1

#l asistente puede ayudarle a crear diversos tipos de reportes* pero vamos a explorar solamente algunas posibilidades m,s sencillas! ?uede probar despu7s con otros tipos de reportes' Crystal Reports pedir, &ue realice el registro de su copia' mostramos el uso con una copia ya registrada!

?resione CAceptarC para pasar a la pantalla siguiente para la eleccin de la +uente de los datos! Seleccione la tabla C?roductosC a partir del Conjunto de datos creado y 0aga clic en CInsertar tablaC1

Qaga clic en CSiguienteC y seleccione las columnas &ue aparecer,n en el reporte1

Qaga clic en CSiguienteC y de+ina un grupo 0aciendo clic en la columna CCategoryI2C al lado i%&uierdo* y despu7s en CAgregarC1

4as dem,s opciones no nos interesan en este reporte sencillo! Qaga clic en CFinali%arC* para crear el reporte1

6bserve lo siguiente1

#l reporte tiene siete secciones' las cinco obligatorias y dos m,s relativas al grupo! 4a seccin C#ncabe%ado del reporteC tiene la propiedad Suprimir con el valor verdadero* indicando &ue no aparecer, en el tiempo de ejecucin! ?uede editar cuantas veces &uiera el reporte creado* al agregar componentes o modi+icar los &ue 0ayan sido colocados!

4as secciones contienen componentes &ue se pueden obtener en dos lugares1


?,gina CCrystal ReportsC de la Caja de 0erramientas* si se trata de textos +ijos* l)neas y cajas! C#xplorador de camposC* en el caso de campos de la base de datos* +rmulas* totales* grupos y otros datos espec)+icos del reporte* como +ec0a* 0ora y numeracin de p,ginas!

Presentar el reporte
@na ve% de+inido el reporte* 0ay &ue presentarlo al tiempo de ejecucin! ?ara ello* colo&ue un componente CCrystalReportViewerC en el +ormato y seleccione la propiedad CAcoplarC para C4lenarC! Slo se necesita un componente CVisuali%adorC* aun cuando se 0ayan creado diversos reportes en arc0ivos R?$ separados! ?ara producir el reporte* agregue un componente C5en/ principalC y aHada un elemento de men/ para producir el reporte! AHada el siguiente cdigo al evento Clic del botn1
0rivate v*id menuItem8_#lic9(*bject sender, System.EventArgs e) : 66 Ejecuta la c*nsulta a la base dad*s s+l$ataAda0ter3.-ill(dataSet33); 66 #rea el re0*rte #rystal1e0*rt3 1el 4 ne2 #rystal1e0*rt3(); 66 As*cia el c*njunt* de dat*s c*n el re0*rte 1el.Set$ataS*urce(dataSet33); 66 As*cia el re0*rte c*n el Visuali/ad*r crystal1e0*rtVie2er3.1e0*rtS*urce 4 1el; <

@na ve% presentado* puede cambiar el tamaHo en el botn CaumentarC* ir a otra p,gina o 0acer clic del lado i%&uierdo para solicitar la presentacin de alg/n grupo en particular1

#l usuario puede 0acer clic en el botn con el icono de la impresora para imprimir el reporte!

Presentar en el Web
?ara utili%ar el reporte en un proyecto Web* cree un nuevo proyecto de tipo CAplicacin Web AS?!"#$C y agregue un reporte exactamente como se mostr anteriormente! AHada al +ormato un componente CrystalReportsViewer de la p,gina CWebFormsC de la Caja de 0erramientas! AHada el siguiente cdigo al evento ?ageT4oad1

0rivate v*id Page_=*ad(*bject sender, System.EventArgs e) : 66 Ejecuta la c*nsulta a la base de dat*s s+l$ataAda0ter3.-ill(dataSet33); 66 #rea el re0*rte #rystal1e0*rt3 1el 4 ne2 #rystal1e0*rt3(); 66 As*cia el c*njunt* de dat*s c*n el re0*rte 1el.Set$ataS*urce(dataSet33); 66 As*cia el re0*rte c*n el Visuali/ad*r #rystal1e0*rtVie2er3.1e0*rtS*urce 4 1el; <

4a p,gina Web mostrada es la siguiente1

Cabe seHalar &ue la inter+a% es similar a la del programa WinForms &ue se mostr anteriormente* lo &ue permite cambiar de p,gina* de valor de grupo y de valor de aumento!

Conclusin
Crystal Reports permite crear y presentar +,cilmente reportes tradicionales a partir de bases de datos relacionales!

Ejemplo de creacin de un informe sencillo con Crystal Reports .NET 2003


Este ejemplo muestra como crear un sencillo informe de una aplicacin Windows con el Crystal Reports integrado en el Visual Studio .NET 2 ! partiendo de una "ase de datos de #ccess. Este ejemplo no es muy t$cnico ni re%uiere conocimientos de "ases de datos de ning&n tipo simplemente siguiendo los pasos se puede crear un informe muy sencillo para nuestra aplicacin Windows' para cosas mas complicadas esta igual no ser(a la mejor solucin.

)ara crear informes con la *ersin integrada en el Visual Studio .NET 2 ! +ay %ue distinguir dos partes fundamentales por un lado el propio informe o arc+i*o .rpt y por otro lado el *isor o componente para *isuali,ar informes incluido en .NET. Comen,aremos por crear el informe' para ello en el e-plorador de soluciones so"re el proyecto "otn secundario ../#gregar ../ #gregar nue*o elemento 0

1entro del cuadro de di2logo %ue se nos a"re escogemos Elementos de proyecto local ../ 3tilidad ../ Crystal Report y en el nom"re le pondremos el nom"re %ue le %ueramos dar al informe' en este caso simplemente le llamaremos 45nforme.rpt6.

# continuacin se nos a"rir2 el asistente para la creacin de informes' en el cual dejaremos la opcin por defecto %ue es 7ediante el asistente de informes y dentro de estos el Est2ndar y le daremos a #ceptar.

# continuacin se nos a"rir2 el asistente para la creacin de informes est2ndar donde iremos seleccionando las distintas opciones de nuestro informe. 8a primera opcin %ue +emos de indicarle al asistente es el origen de datos %ue pueden ser distintas opciones desde una "ase de datos de s%l Ser*er' un arc+i*o 978' un 1ataSet del proyecto' etc. en nuestro caso utili,aremos una "ase de datos de #CCESS para simplificar el ejemplo' escogemos entonces #rc+i*os de "ase de datos pulsando so"re el s(m"olo : a la i,%uierda de la carpeta se nos a"rir2 el cuadro de di2logo para esta"lecer manualmente el arc+i*o 4.md"6. 3na *e, seleccionado se nos mostraran las ta"las de nuestra "ase de datos' +aciendo do"le clic en cada una de las ta"las las agregamos al informe' no tienen por %ue ser todas sino simplemente las %ue nos interesen. 3na *e, seleccionadas las ta"las pulsamos so"re Siguiente para continuar con el asistente.

En la siguiente *entana nos muestra los *(nculos o relaciones %ue esta"lece autom2ticamente entre las ta"las' estos *(nculos los esta"lece por el nom"re' normalmente por lo cual si dos campos de ta"las distintas se llaman igual esta"lecer2 una relacin entre ellas' con lo cual a%u( de"eremos compro"ar %ue las relaciones son las de nuestra "ase de datos y si no es as( modificarlas a mano o simplemente "orrar los *(nculos %ue ser2 lo %ue +agamos en este caso para simplificar el ejemplo. Cuando le demos a "orrar *(nculos nos saldr2 una *entana de ad*ertencia le daremos %ue si y a continuacin le damos a Siguiente y nos saldr2 una nue*a ad*ertencia a la cual le daremos #ceptar.

En la nue*a *entana del asistente %ue se nos a"re escogeremos los campos de cada una de las ta"las %ue %ueremos %ue sean mostrados en nuestro informe.

3na *e, llegados a este punto le daremos a ;inali,ar para terminar nuestro informe. )odemos seguir con el asistente para agrupar los datos por alguno de los campos' cam"iar el estilo del informe y otras opciones %ue para este ejemplo no nos interesan. 3na *e, terminado el asistente nos aparecer2 el informe en *ista de dise<o' el cual podremos retocar' cam"iando el tipo de letra' tama<os' colocacin de los campos etc. a nuestro gusto teniendo en cuenta *arias cosas= el enca"e,ado del informe sale solamente al principio del mismo' el enca"e,ado de p2gina sale al principio de cada p2gina al igual %ue el pie de p2gina y finalmente el pie de informe sale al final. )odemos a<adir campos especiales como por ejemplo fec+a de impresin' +ora de impresin etc. escogi$ndolos dentro del E-plorador de Campos' si no tiene esta *entana la puede mostrar escogiendo Ver ../ >tras *entanas ../ Es%uema del documento. 3na *e, arreglado a gusto tendremos listo el informe' %ue presentar2 una apariencia similar al reali,ado para este ejemplo.

Tenemos as( lista la primera de las dos partes necesarias para generar informes en .NET. #+ora crearemos un formulario para mostrar el informe reali,ado con lo cual al igual %ue anteriormente en el e-plorador de soluciones so"re el proyecto "otn secundario ../ #gregar ../ #gregar Windows ;orm 0 le ponemos de nom"re 4Visor1e5nformes.cs6 en este caso por %ue lo reali,aremos so"re C? pero podremos +acerlo so"re cual%uiera de los lenguajes soportados por la plataforma.

3na *e, le demos a #"rir se nos a"rir2 el formulario en *ista de dise<o' ajustamos el tama<o a gusto y a continuacin en el cuadro de +erramientas' normalmente esta situado el &ltimo de los elementos' pulsamos so"re CrystalReportsViewer y sin soltar arrastramos al formulario.

8o ajustamos al tama<o del formulario y lo tenemos listo para tra"ajar con el.

#%u( seguir

3na *e, llegados a este punto solamente nos falta la parte de programacin para %ue nuestro informe pueda ser *isuali,ado. E-isten muc+as maneras de +acer lo %ue *amos a +acer a+ora' asignar al *isor el informe ec+o anteriormente y dentro de este escoger los datos %ue %ueremos %ue salgan en el informe' en este ejemplo lo +aremos todo por cdigo' pero ya digo %ue se podr(a +acer de muc+as otras maneras. )ara ello comen,aremos por el constructor del *isor para ello con el formulario Visor1e5nformes a"ierto *amos a Ver ../ Cdigo o "ien en el E-plorador de soluciones so"re el formulario "otn secundario Ver Cdigo. 3na *e, se nos +a"r2 el cdigo *amos al constructor %ue presentar2 esta apariencia=

0ublic Vis*r$eIn.*rmes() : 66 66 &ecesari* 0ara admitir el $ise>ad*r de ,ind*2s -*rms 66 Initiali/e#*m0*nent(); 66 66 (O$O' agregar c?dig* de c*nstruct*r des0u@s de llamar a Initiali/e#*m0*nent 66 <

En este punto aclararemos %ue aun%ue el informe este reali,ado en *ista de dise<o' por detr2s .NET crea una clase con el mismo nom"re dado al informe' la cual no podemos *er ni tocar' por lo menos yo no s$' pero %ue si podemos utili,ar. Con lo cual lo %ue +aremos a+ora dentro del constructor declararemos e instanciaremos un o"jeto de la mencionada clase y le asignaremos ese informe al CrytalReportViewer como informe' %uedando de la siguiente manera=
0ublic Vis*r$eIn.*rmes() : 66 66 &ecesari* 0ara admitir el $ise>ad*r de ,ind*2s -*rms 66 Initiali/e#*m0*nent(); In.*rme in.*rme 4 ne2 In.*rme(); crystal1e0*rtVie2er3.1e0*rtS*urce 4 in.*rme; <

)or &ltimo solamente nos falta seleccionar los datos %ue %ueremos mostrar en el informe es decir asignarle una especie de consulta select s%l para filtrar los datos. Se +ace mediante la propiedad 4Selection;ormula6 del CrytalReportViewer donde esta"lecemos las condiciones %ue de"e seguir el informe al ser mostrado' por ejemplo en este caso %ueremos %ue nos ense<e los datos especificados en el informe %ue tengan como paciente el indicado y como n&mero de consulta tam"i$n el indicado. #%u( es donde podemos pasarle par2metros a ese informe por ejemplo si %ueremos pasarle el cdigo del paciente o de la consulta se la pasaremos como argumentos en el constructor' lo %ue se puede +acer es pasarle como par2metro una cadena la cual reali,amos donde llamemos al Visor1e5nformes para no depender del n&mero de par2metros %ue le %ueremos pasar. 8o %ue se de"e de cumplir es %ue

el nom"re del campo de la "ase de datos este entre corc+etes. @uedando finalmente el constructor como sigue=
0ublic Vis*r$eIn.*rmes() : 66 66 &ecesari* 0ara admitir el $ise>ad*r de ,ind*2s -*rms 66 Initiali/e#*m0*nent(); In.*rme in.*rme 4 ne2 In.*rme(); crystal1e0*rtVie2er3.1e0*rtS*urce 4 in.*rme; crystal1e0*rtVie2er3.Selecti*n-*rmula 4 5:0aciente.0_c*dig*< 45 A c*dig*Paciente A 5 A&$ :c*nsulta.c_c*dig*< 45 A c*dig*#*nsulta; <

Si lo +acemos con par2metros pasados como una cadena %uedar(a de la siguiente forma=
: 0ublic Vis*r$eIn.*rmes(string cadenaSelect)

66 66 &ecesari* 0ara admitir el $ise>ad*r de ,ind*2s -*rms 66 Initiali/e#*m0*nent(); In.*rme in.*rme 4 ne2 In.*rme(); crystal1e0*rtVie2er3.1e0*rtS*urce 4 in.*rme; crystal1e0*rtVie2er3.Selecti*n-*rmula 4 cadenaSelect; <

El *alor de cadena podr(a ser por ejemplo=


cadenaSelect A BCpaciente.pDcodigoEAFF #N1 Cconsulta.cDcodigoEA2FBG

H ya tenemos listos tanto el informe como el *isor lo &nico %ue nos falta es mostrarlo para ello en donde %ueramos lo %ue de"emos +acer es declarar e instanciar un Visor1e5nformes por ejemplo en nuestra clase )rincipal en el e*ento Clic de un "otn pondr(amos=

0rivate v*id BIn.*rme_#lic9(*bject sender, System.EventArgs e) : try : Vis*r$eIn.*rmes vis*r 4 ne2 Vis*r$eIn.*rmes); vis*r.S)*2$ial*g(t)is); <

<

catc)(E7ce0ti*n e7) : !essageB*7.S)*2(e7.!essage, BE7ce0ci*nC); <

)ro"amos y si todo +a salido "ien nos de"er(a de aparecer el *isor con el informe y los datos seleccionados.

)ro"lemas conocidos= Si el pat+ de la "ase de datos es muy grande' m2s de 2II caracteres se produce una e-cepcin por "uffer insuficiente. En el momento en %ue se cam"ie de sitio la "ase de datos' en este ejemplo el arc+i*o de #CCESS' el informe no encontrara la misma y lan,ar2 una e-cepcin. Si se esta pro"ando el proyecto en modo de"ug y pasamos a modo release para terminar la aplicacin +a"r2 %ue tener en cuenta este cam"io en el pat+ de la "ase de datos.

También podría gustarte