Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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. 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.
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;
C#
protected void Page_Init(object sender, EventArgs e) { }
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).
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
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(); } }
VisualC#
protected void btnFiltro_Click(object sender, EventArgs e) { FiltrarDatos(); }
3. Finalmente,ubicarlasiguienteinstruccin,enelmtodoFiltrarDatos():
taCheques.Fill(dtCheques)
ysustituirlapor:
taCheques.LlenarxBeneficiario(dtCheques, txtBeneficiario.Text)