Está en la página 1de 15

CrystalReports

DeWikipedia,laenciclopedialibre CrystalReportsesunaaplicacindeinteligenciaempresarialutilizadaparadisearygenerarinformesdesdeunaamplia gamasdefuentesdedatos(basesdedatos). Variasotrasaplicaciones,comoMicrosoftVisualStudio,incluyenunaversinOEMdeCrystalReportscomouna herramientadepropsitogeneraldelinformes/reportes.CrystalReportsseconvirtienelescritordeinformesestndar cuandoMicrosoftloliberconVisualBasic.

Contenido
CrystalReports........................................................................................................................................................................1 Creandoreportes/informes................................................................................................................................................2 Seccionesdediseo............................................................................................................................................................2 Grupos.................................................................................................................................................................................2 Campos................................................................................................................................................................................2 Camposdefrmula.............................................................................................................................................................3 Camposdetotales..............................................................................................................................................................3 EjemploPrctico#1:ImplementarCrystalReportsenunaaplicacinASP.NET................................................................4 ConexinalaBasedeDatos...........................................................................................................................................4 ConjuntodeDatosdelaAplicacinWeb........................................................................................................................4 ArchivodeReporte.........................................................................................................................................................6 FormularioWeb..............................................................................................................................................................7 EjemploPrctico#2:Aadirfiltrosalreporterealizadoenlaprcticaanterior................................................................9 ConjuntodedatosdelaAplicacinWeb........................................................................................................................9 ArchivodelReporte......................................................................................................................................................13 FormularioWeb............................................................................................................................................................13

Creandoreportes/informes
LosusuariosalinstalarCrystalReportsenunequipoyutilizarloparaseleccionarfilasycolumnasespecficasdeunatabla dedatoscompatibles,puedenorganizarlosdatosenelinformeenelformatoquenecesiten.Unavezqueeldiseoest completo,elinformesepuedeguardar/salvarcomounarchivoconextensinrpt.Sepuedeaccedernuevamenteal informereabriendoelmismo,ypoderrefrescarlosdatos.Silafuentedebasededatossehaactualizado,elinformese refrescarreflejandoestasactualizaciones.

Seccionesdediseo
CrystalReportsposee5seccionesdentrodelaplantilladediseo: Seccin Caracterstica Encabezadodelinforme(EI) Seccinusadaparaelttulodelinforme,obien,cualquierotrainformacinqueel usuariodeseequeaparezcaenesaparte.Porotrolado,puedeserusadaparainsertar grficosytablascruzadas,loscualesincluyendatosparatodoelinforme. Encabezadodepgina(EP) Seccinusadaparaagregarlainformacinquesedeseaqueaparezcaenlaparte superiordecadapgina.Puedensernombresdecaptulos,nombredeldocumento, etc.Sepuedesdesplegarttulosdecamposobreloscampos(columnas)mismosensu informe. Detalles(D) Seccinusadaparaelcuerpodelinformeyseimprimeunavezporregistro(fila).La mayorpartedelosdatosdelinformeapareceenestaseccin. Piedeinforme(PI) Seccinusadaparalainformacinquesedeseaqueaparezcaslounavezalfinaldel informe(porejemplo,totalesgenerales)yparalosgrficosylastablascruzadasque incluyendatosrelativosatodoelinforme. Piedepgina(PP) Seccinquecontieneelnmerodepginaycualquierotrainformacinquesedesea queaparezcaenlaparteinferiordelamisma.

Grupos
Siseaadeungrupo,resumenosubtotalalinforme,elprogramacreadosseccionesms: Caracterstica Seccinquecontieneelcampodenombredegrupo.Sepuedeusarparamostrar grficosotablascruzadasdedatosespecficosdelgrupo.Sloseimprimeunavezal principiodeungrupo. Piedegrupo Estaseccinincluyeelvalorderesumen,silohay,ysepuedeusarparainsertargrficos ytablascruzadas.Seimprimeslounavezalfinaldeungrupo. Losgrupossonunaespeciedefiltros,quepermitenordenarlosdatossegnelcriterioelegido,esdecir,segnelgrupo especficoelegido. Seccin Encabezadodegrupo

Campos
Muchosdelosdatosquesepuedeninsertarenelinformesoncamposdebasededatosseleccionada.stosmostrarn losdatostalcomoestnalmacenadosenlabasededatos.Parainsertarcampossedebeseguirelsiguiente procedimiento: Iralabarradeherramientasestndar,clicsobreExploradordecampos. ApareceelcuadrodedilogoExploradordecampos. ExpandirlacarpetaCamposdebasededatos,paravertodaslastablasseleccionadasenlasbasesdedatos. Expandirlastablasdeformaindividualparavertodosloscamposquecontienen. Hacerclicsobreelcampoquesequiereinsertarenelinforme. HacerclicsobreelbotnExaminarpararevisarlosvaloresdelcamposeleccionado.

HacerclicenInsertareninformeparacolocarloenelinforme,obien,hacerclicyarrastrarhastaunlugar deseado,preferentementeenlaseccin"Detalles".

Camposdefrmula
Sisequierendesplegardatosquesonvalorescalculados,tendrquecrearuncampodefrmulayponerloenel informe,similarmentealoanterior(arrastrarhastaellugardeseado,oinsertarlo). Secuentaconunamplioespectrodefrmulasdisponiblesparalacreacindestas.Lascualespuedenserprogramadas ocreadassegnellenguajeCrystal,integradoalprograma,obien,utilizandolasintaxisdeBasic(VisualBasic). Ejemplos: Campos o {cliente.Nombredelcliente},{proveedor.Nombredelproveedor} Texto o "Entrecomillas","separadosporcomas" Operadores o +(sumar),/(dividir),x(negativo) Funciones(lasfuncionesrealizanclculostalescomopromedio,sumayconteo.Lafuncionesdisponiblesse listanconsusargumentosyseorganizansegnsuuso). o Round(x),Trim(x) Estructurasdecontrol o "If"y"Select",ciclos"For" Valoresdecampodegrupo(Porejemplo,sepuedenusarvaloresdecampodegrupoparabuscarelporcentaje deltotalgeneralaportadoporcadagrupo). o Average(campo,Cpocond),Sum(campo,Cpocond,"condicin") Mezclademuchosparmetros: o If({cliente.NOMBREDELCLIENTE}[1to2]="Ab")Then"TRUE" Else"FALSE" o If({cliente.NOMBREDELCLIENTE})[1to2]="Ab"andToText({cliente.IDDELCLIENTE})[1]="6"or ({cliente.NOMBREDELCLIENTE})[1to2]="Ba"andToText({cliente.IDDELCLIENTE})[1]="5"Then "elegido"Else"noelegido"

Camposdetotales
Iralexploradordecampos,yhacerclicderechosobreRunningTotalFields.ElegirNuevo.Delladoizquierdose encuentranloscamposdisponibles,elegirunoycambiarleelnombre.Escogereltipodeacumulado(suma,promedio, mximo,mnimo,etc.)

EjemploPrctico#1:ImplementarCrystalReportsenunaaplicacinASP.NET
Elejemploprcticoqueselistaacontinuacin,utilizalabasededatosCONTABILIDAD,proporcionadaenelmismo paquetedearchivos.DichabasededatosdebeinstalarseenunservidorSQLSERVERoSQLSERVEREXPRESS. ConexinalaBasedeDatos EsprecisocrearlaconexinalabasededatosCONTABILIDAD,paraquepodamostrabajarconelladesdeelproyecto. Paracrearstaconexin,sedebenrealizarlossiguientespasos: 1. AbrirlafichaExploradordeServidores.Encasodenoestarvisible,presionarCtrl+Alt+S. 2. HacerclicderechoenConexionesdeDatosyelegirAgregarconexin 3. Escribir.\sqlexpressenelcampoNombredelservidorycontabilidadenelcampoSeleccioneoescribael nombredelabasededatos

4. HacerclicenProbarconexin,paraverificarquefuncione,yluegohacerclicenAceptar. ConjuntodeDatosdelaAplicacinWeb EsrecomendableincluirunDataSetenelproyecto,demaneraquepuedaservirleaCrystalReportsparaobtenerlos datos.ParaagregarelDataSet,efectelospasosqueselistanacontinuacin: 1. AbrirlafichaExploradordeSoluciones.Encasodenoestarvisible,presionarCtrl+Alt+L. 2. Hacerclicderechoenlarazdelaaplicacin,yelegirAgregarnuevoelemento

3. ElegireltipodeobjetoDataSet,escribirelnombredelarchivoconextensinxsd,yelegirellenguaje,queDEBE coincidirconellenguajequefueelegidoparaelsitioweb.Depreferencia,utilizarparaelnombredelDataSet,el mismonombredelabasededatos.HacerclicenAceptar.

4. Debersalirelsiguientemensajesiguiente,quenosindicaqueelarchivodebeguardarsedentrodelacarpeta App_Code.HacerclicenS.

5. Nosdebequedarlasiguienteventana.

6. AhorasolorestaarrastrarlastablaschequesycuentasalDataSet,yquedarfinalmente,delasiguientemanera:

7. ParacadatablaquefuearrastradaalDataSet,segeneran2objetos,elprimeroesunDataTablequerepresenta laestructuradelatabla,yunTableAdapter,queseencargardeobtenerlosdatosdesdelabasededatosy llenarelDataTable.ElmtodopredeterminadoparaelloeselmtodoFill. 8. Guardarloscambios. ArchivodeReporte Incluirenelproyecto,unelementodetipoCrystalReport(extensinrpt),llamadorptCheques.rpt.Elegirusarel asistente. Datos(Data) Eselprimerpasodelasistente,ydebeelegirseelDataSetdelcualseobtendrlainformacin.Paraencontrarel DataSet,seguirlarutaProjectDataADO.NETDataSets,elegireldatasetcontabilidadyhacerclicenelbotn >>,paraaadirloalreporte.HacerclicenSiguiente. Relaciones(Links) Silastablasestnrelacionadasmediantellavesforneas,elasistentedetectarlasrelacionesexistentesentre lastablas.Paraverificarelenlace,hacerclicencualquieradeellosyluegohacerclicenLinkOptions.Una vezqueseverifiquelainformacin,hacerclicenSiguiente. Campos(Fields) Enestepasoseeligenloscamposquedebenmostrarseenelreporte.Unavezelegidos,hacerclicenSiguiente. Paraelejemplo,semuestranloscampos:cheques.beneficiario,cheques.importe,cuentas.cuenta Agrupamiento(Grouping) Puedeelegirseunoovarioscampos,paraagruparlainformacin.Unavezelegidos,hacerclicenSiguiente.Para elejemplo,seutilizaelCampodeInformecuentas.cuentaenordenascendente.

Acumulados(Summaries) Sideseamostrarsealgntotal(suma,promedio,etc.)dealgncampoenparticular,puedeelegirsedicho campo,yenlalistadesplegablequeapareceabajo,elegireltipodeoperacinqueseaplicaralcampo(suma, promedio,mnimo,mximo,etc.).UtilizarelcampoquearrojaelCrystalReportspordefecto(Sumade cheques.importe). EstilodelReporte Seeligeelestilodeentrelasplantillasexistentes,yluegosehaceclicenFinalizar.

Unavezfinalizadosestospasos,puedenagregarsemscamposalreporte.Guardarelarchivo. FormularioWeb Paraqueelreportepuedadesplegarseenmiaplicacinweb,esnecesariocontarconunobjetotipoWebForm.Pasos paradesplegarelreporte: 1. 2. 3. 4. AgregarunobjetodetipoWebForm(p.e.Default.aspx) AgregaruncontroldetipoCrystalReportVieweralWebForm Abrirelarchivocodebehind(p.e.Default.aspx.vb,Default.aspx.cs) IncluirlaslibrerasnecesariasparautilizarCrystalReports

VisualBasic
imports imports imports imports System.Data System.Data.SqlClient CrystalDecisions.CrystalReports CrystalDecisions.CrystalReports.Engine

C#
using using using using System.Data; System.Data.SqlClient; CrystalDecisions.CrystalReports; CrystalDecisions.CrystalReports.Engine;

5. ElCrystalReport,cuandoseutilizaparaASP.NET,solofuncionacorrectamentealincluirloenelmtodoINITdel formularioWeb,porloquedebeescribirseelcdigosiguiente: VisualBasic


Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init End Sub

C#
protected void Page_Init(object sender, EventArgs e) { }

6. ParapoderdesplegarcorrectamentelainformacinenelCrystalReportViewer,esnecesariocontarconlos siguientesobjetos: a. UnobjetoDataTable,porcadaunadelastablasutilizadaseneldiseadordereportes b. EncasodehabermsdeunDataTable,aadirunobjetoDataSet c. UnobjetoTableAdapter,parallenarcadaunodelosDataTables d. UnobjetoReportDocument,enelculseharreferenciaalarutafsicadelarchivodereporte,ascomo alainformacinquesedesplegarenelmismo.

7. EscribirelsiguientecdigoenelmtodoInit: VisualBasic
'Un objeto TableAdapter para llenar para cada tabla 'utilizada en el reporte Dim taCheques As New contabilidadTableAdapters.chequesTableAdapter() Dim taCuentas As New contabilidadTableAdapters.cuentasTableAdapter() ' Es preciso enviar las tablas como un solo objeto, ' por lo que se define un DataSet, y dos objetos DataTable Dim ds1 As New DataSet Dim dtCheques As New contabilidad.chequesDataTable Dim dtCuentas As New contabilidad.cuentasDataTable ' Lleno las tablas taCheques.Fill(dtCheques) taCuentas.Fill(dtCuentas) ' Agrego las tablas al DataSet ds1.Tables.Add(CType(dtCheques, DataTable)) ds1.Tables.Add(CType(dtCuentas, DataTable)) ' Un objeto ReportDocument, con la ruta fsica al ' archivo de reporte, y el DataSet conteniendo la ' informacin a desplegar Dim rpt As New ReportDocument() rpt.Load(Server.MapPath("rptCheques.rpt")) rpt.SetDataSource(ds1) ' Indicar al viewer que utilice el ReportDocument CrystalReportViewer1.ReportSource = rpt

VisualC#
// Un objeto TableAdapter para llenar para cada tabla //utilizada en el reporte contabilidadTableAdapters.chequesTableAdapter taCheques; taCheques = new contabilidadTableAdapters.chequesTableAdapter(); contabilidadTableAdapters.cuentasTableAdapter taCuentas; taCuentas = new contabilidadTableAdapters.cuentasTableAdapter(); // Es preciso enviar las tablas como un solo objeto, // por lo que se define un DataSet, y dos objetos DataTable DataSet ds1 = new DataSet(); contabilidad.chequesDataTable dtCheques; dtCheques = new contabilidad.chequesDataTable(); contabilidad.cuentasDataTable dtCuentas; dtCuentas = new contabilidad.cuentasDataTable(); // Lleno las tablas taCheques.Fill(dtCheques); taCuentas.Fill(dtCuentas); // Agrego las tablas al DataSet ds1.Tables.Add((DataTable)dtCheques); ds1.Tables.Add((DataTable)dtCuentas); // Un objeto ReportDocument, con la ruta fsica al // archivo de reporte, y el DataSet conteniendo la // informacin a desplegar ReportDocument rpt = new ReportDocument(); rpt.Load(Server.MapPath("rptCheques.rpt")); rpt.SetDataSource(ds1); // Indicar al viewer que utilice el ReportDocument CrystalReportViewer1.ReportSource = rpt;

8. Ejecutarelprograma,yobservarelreporte.Findelejemplo.

EjemploPrctico#2:Aadirfiltrosalreporterealizadoenlaprcticaanterior
Sedeseaqueelreportepuedafiltrarlainformacindelreporte,deacuerdoalbeneficiariodelcheque,contenidoenla tablaCHEQUES. ConjuntodedatosdelaAplicacinWeb EsnecesarioagregarunaconsultaalTableAdapterdelatablaCheques,demaneraquenospermitafiltrarporelnombre delbeneficiario. 1. ElDataSetdebelucirdelasiguientemanera:

2. HacerclicderechochequesTableAdapter,paraseleccionarelobjeto,yluegohacerclicderechoyelegirlaopcin Agregarconsulta.ElegirlaopcinUsarinstruccionesSQLyhacerclicenSiguiente>

3. Enlapantallasiguiente,seleccionarSELECTquedevuelvefilasyhacerclicenSiguiente>

4. Elpasosiguiente,nospermiteescribirlaconsultaSQLparaobtenerlosdatos.Recordemosquenecesitamos filtrardeacuerdoalbeneficiariodelcheque(unacadena).Laconsultapordefectoquemostrarelasistentees: SELECTidcheque,beneficiario,importe,idcuentaFROMdbo.cheques Sinembargo,necesitamosagregarelfiltroparaelbeneficiario,porloquequedaradelasiguientemanera: SELECTidcheque,beneficiario,importe,idcuentaFROMdbo.cheques WHEREbeneficiario=@beneficiario Laconsultaanteriorfuncionaraperfectamente,deserbeneficiariounvalornumrico,obiensimandaracomo parmetroelnombrecompletodelbeneficiario,sinembargo,escomnponerenelcampodebsquedasolo partedelnombre,porloquenuestraconsultadebeestarpreparadaparaello.Detalforma,ajustamos: SELECTidcheque,beneficiario,importe,idcuentaFROMdbo.cheques WHEREbeneficiarioLIKE%+@beneficiario+% Elsmbolodeporcentajealprincipioyalfinalindicauncomodn.Ahora,lonicoquerestaesconsiderarlas maysculasylasminsculas,porloquefinalmente,laconsultaquedaradelasiguientemanera: SELECTidcheque,beneficiario,importe,idcuentaFROMcheques WHERE(UPPER(beneficiario)LIKE'%'+UPPER(@beneficiario)+'%') UPPEResunafuncindelTransactSQLqueconviertelacadenaamaysculas.

5. Escribimoslaltimaconsultaenlacajadetexto,yhacemosclicenGeneradordeConsultas(Deexistiralgn errorenlaconsulta,alhacerclicenstebotninmediatamenteVisualStudionosalertardelmismo)

6. ElGeneradordeConsultasmepermiteconstruirconsultas,perotambinverificarsucorrectofuncionamiento. Esparaestoltimoqueentramos,asquehayquehacerclicenelbotndeEjecutarconsulta.

7. Inmediatamente,sersolicitadoelvalordelparmetro,loescribimosyhacemosclicenAceptar(Eliminarla palabraNULLparaunaconsultageneral).

8. VerificamoslosdatosenlaparteinferiordelaventanadelGeneradordeConsultas,yhacemosclicenAceptar. 9. LoanteriornosregresaalaventanadondeescribimosnuestraconsultaSQL.Simplementehacemosclicen Siguiente. 10. Finalmente,senospreguntaelnombrequetendrlaconsultarecingenerada.EnelcampoNombrede mtodo,escribimosLlenarxBeneficiarioyhacemosclicenSiguiente.

11. Sitodoescorrecto,debesalirlasiguientepantalla:

12. HacerclicenFinalizar. 13. Parahacercualquiermodificacindelaconsulta,simplementehacerclicderechosobreelnombredelaconsulta (LlenarxBeneficiario)yelegirlaopcinConfigurar,eneldiseadordelDataSet. ArchivodelReporte Elarchivorptnorequiereningncambio. FormularioWeb AgregarlossiguientescontrolesalformulariowebquecontieneelCrystalReportViewer: 1. Etiqueta.AtributosText:Beneficiario: 2. CajadeTexto.AtributosID:txtBeneficiario 3. Botn.AtributosID:btnFiltro,Text:Filtrar Pasosaseguir: 1. CrearunmtodollamadoFiltrarReporte(),enelculseencontrartodoelcdigocapturadoenelejemplo anterior.Deberquedardelasiguientemanera: VisualBasic
Imports Imports Imports Imports System.Data System.Data.SqlClient CrystalDecisions.CrystalReports CrystalDecisions.CrystalReports.Engine

Partial Class rCheques Inherits System.Web.UI.Page

Protected Sub FiltrarDatos() 'Un objeto TableAdapter para llenar para cada tabla 'utilizada en el reporte Dim taCheques As New contabilidadTableAdapters.chequesTableAdapter() Dim taCuentas As New contabilidadTableAdapters.cuentasTableAdapter() ' Es preciso enviar las tablas como un solo objeto, ' por lo que se define un DataSet, y dos objetos DataTable Dim ds1 As New DataSet Dim dtCheques As New contabilidad.chequesDataTable Dim dtCuentas As New contabilidad.cuentasDataTable ' Lleno las tablas taCheques.Fill(dtCheques) taCuentas.Fill(dtCuentas) ' Agrego las tablas al DataSet ds1.Tables.Add(CType(dtCheques, DataTable)) ds1.Tables.Add(CType(dtCuentas, DataTable)) ' Un objeto ReportDocument, con la ruta fsica al ' archivo de reporte, y el DataSet conteniendo la ' informacin a desplegar Dim rpt As New ReportDocument() rpt.Load(Server.MapPath("rptCheques.rpt")) rpt.SetDataSource(ds1) ' Indicar al viewer que utilice el ReportDocument CrystalReportViewer1.ReportSource = rpt End Sub Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init FiltrarDatos() End Sub End Class

VisualC#
using using using using using using using using using using System; System.Collections.Generic; System.Linq; System.Web; System.Web.UI; System.Web.UI.WebControls; System.Data; System.Data.SqlClient; CrystalDecisions.CrystalReports; CrystalDecisions.CrystalReports.Engine;

public partial class rCheques : System.Web.UI.Page { protected void FiltrarDatos() { // Un objeto TableAdapter para llenar para cada tabla //utilizada en el reporte contabilidadTableAdapters.chequesTableAdapter taCheques; taCheques = new contabilidadTableAdapters.chequesTableAdapter(); contabilidadTableAdapters.cuentasTableAdapter taCuentas; taCuentas = new contabilidadTableAdapters.cuentasTableAdapter(); // Es preciso enviar las tablas como un solo objeto, // por lo que se define un DataSet, y dos objetos DataTable DataSet ds1 = new DataSet(); contabilidad.chequesDataTable dtCheques; dtCheques = new contabilidad.chequesDataTable(); contabilidad.cuentasDataTable dtCuentas;

dtCuentas = new contabilidad.cuentasDataTable(); // Lleno las tablas taCheques.Fill(dtCheques); taCuentas.Fill(dtCuentas); // Agrego las tablas al DataSet ds1.Tables.Add((DataTable)dtCheques); ds1.Tables.Add((DataTable)dtCuentas); // Un objeto ReportDocument, con la ruta fsica al // archivo de reporte, y el DataSet conteniendo la // informacin a desplegar ReportDocument rpt = new ReportDocument(); rpt.Load(Server.MapPath("rptCheques.rpt")); rpt.SetDataSource(ds1); // Indicar al viewer que utilice el ReportDocument CrystalReportViewer1.ReportSource = rpt; } protected void Page_Init(object sender, EventArgs e) { FiltrarDatos(); } }

2. EnlavistadediseodelformularioWeb,hacerdobleclicsobreelbotnparacrearautomticamenteel controladordeeventoClick.InvocaralmtodoFiltrarDatos()dentrodelmanejadordeeventos: VisualBasic


Protected Sub btnFiltro_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnFiltro.Click FiltrarDatos() End Sub

VisualC#
protected void btnFiltro_Click(object sender, EventArgs e) { FiltrarDatos(); }

3. Finalmente,ubicarlasiguienteinstruccin,enelmtodoFiltrarDatos():
taCheques.Fill(dtCheques)

ysustituirlapor:
taCheques.LlenarxBeneficiario(dtCheques, txtBeneficiario.Text)

(Noolvidarel;siestsenC#) 4. Ejecutarelprograma,yobservarelreporte.Capturarelnombredealgnbeneficiarioyobservarel funcionamientodelfiltro. 5. Findelejemplo.

También podría gustarte