Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
Seleccionamos la plantilla de Crystal Reports* luego se abre la ventana ;Crystal Reports ,allery= -Ver Figura B.1
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
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!
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
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
!!! 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!
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!
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
#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 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!
?,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; <
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!
)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 <imo 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 <imo 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; <
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); <
<
)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.