none
Problema con el paso de parámetros a subreportes RRS feed

  • Pregunta

  • Buenas!!

    El problema es el siguiente: tengo un reporte con Crystal Report 10.2 en VS2005, el cual posee 5 subreportes, en donde cada uno de los cuales está conectado a un SP Oracle. Tanto el reporte principal como los subreportes poseen parámetros, los cuales son los equivalentes a los de entrada en cada SP que se invoca. Le estoy estableciendo la conexión y los parámetros a través del siguiente código:

     

    Estableciendo parámetros a un reporte con subreportes:

    Sub armarReporte()

            'rescatar los parámetros de la sesión para pasarlos a los subreportes

            intMes = CInt(Session.Item("intMes"))

            intAnio = CInt(Session.Item("intAnio"))

            intTipo = CInt(Session.Item("intTipo"))

            strNombre = CStr(Session.Item("strNombre"))

     

            'leer user y password (keys del web.config) para la BD a conectarse

            Dim strDBUser As String = ConfigurationManager.AppSettings.Get("DBUser").ToString

            Dim strDBPassword As String = ConfigurationManager.AppSettings.Get("DBPassword").ToString

     

            'crear instancia de reporte

            Dim documentoReporte As New ReportDocument

     

            'establecer ruta del .rpt a la instancia

            Dim strRutaReporte As String

            strRutaReporte = Me.Server.MapPath("Rpt\Reporte1.rpt")

            documentoReporte.Load(strRutaReporte, OpenReportMethod.OpenReportByTempCopy)

     

            'establecer conexión del reporte a la BD

            documentoReporte.SetDatabaseLogon(strDBUser, strDBPassword)

     

            With documentoReporte

                'establecer parámetros al reporte (principal)

                .SetParameterValue("PNMES", intMes)

                .SetParameterValue("PNANIO", intAnio)

                .SetParameterValue("PVNOMBRE", strNombre)

     

                'establecer los parámetros a los subreportes

                '1

                .SetParameterValue("PNMES", intMes, "Subreporte1")

                .SetParameterValue("PNANIO", intAnio, "Subreporte1")

                .SetParameterValue("PNTIPO", intTipo, "Subreporte1")

                '2

                .SetParameterValue("PNMES", intMes, "Subreporte2")

                .SetParameterValue("PNANIO", intAnio, "Subreporte2")

                '3

                .

                .

                .

            End With

           

            'establecer fuente al objeto CrystalReportViewer

            Me.crvVisor.ReportSource = documentoReporte

            crvVisor.RefreshReport()

            crvVisor.DataBind()

     

        End Sub

     

     

    Lo bueno es que no arroja excepciones, pero lo malo es que al mostrar la página .aspx que contiene al objeto CrystalReportViewer, no se muestra el reporte correctamente, sino que una página en la cual se solicitan todos los parámetros del reporte (principal y subreportes). Qué estoy haciendo mal o me falta hacer?? cómo puedo arreglar esto?? Cualquier ayuda se agradecerá!!

    martes, 15 de julio de 2008 16:00

Respuestas

  • Problema resuelto!!!

     

    Al código anterior, en la línea donde se establece la conexión, reemplacen la misma por las siguientes:

     

    Código faltante:

    'establecer conexión con BD al reporte principal

            For Each connection In documentoReporte.DataSourceConnections

                Select Case connection.ServerName

                    Case strDBName

                        connection.SetLogon(strDBUser, strDBPassword)

                End Select

            Next

     

            'establecer conexión a los subreportes

            Dim subreport As ReportDocument

            For Each subreport In documentoReporte.Subreports

                For Each connection In subreport.DataSourceConnections

                    Select Case connection.ServerName

                        Case strDBName

                            connection.SetLogon(strDBUser, strDBPassword)

                    End Select

                Next

            Next

     

     

    ...en donde strDBName es el nombre de su Base de Datos.

     

    Procuren también dejar la propiedad ReportSourceID en blanco si es que van a alimentar el CrystalRerportViewer a través de código y no utilizando un CrystalReportSource, como en mi caso. Además, hay que eliminar la línea "crvVisor.RefreshReport()", siempre y cuando la propiedad ReuseParameterValuesOnRefresh del CrystalReportViewer esté en "False", pues se recomienda dejarla en "True". Les dejo el código a aquellos que hayan tenido un problema similar a este.

     

    Salu2!!!

    jueves, 17 de julio de 2008 20:07

Todas las respuestas

  • Problema resuelto!!!

     

    Al código anterior, en la línea donde se establece la conexión, reemplacen la misma por las siguientes:

     

    Código faltante:

    'establecer conexión con BD al reporte principal

            For Each connection In documentoReporte.DataSourceConnections

                Select Case connection.ServerName

                    Case strDBName

                        connection.SetLogon(strDBUser, strDBPassword)

                End Select

            Next

     

            'establecer conexión a los subreportes

            Dim subreport As ReportDocument

            For Each subreport In documentoReporte.Subreports

                For Each connection In subreport.DataSourceConnections

                    Select Case connection.ServerName

                        Case strDBName

                            connection.SetLogon(strDBUser, strDBPassword)

                    End Select

                Next

            Next

     

     

    ...en donde strDBName es el nombre de su Base de Datos.

     

    Procuren también dejar la propiedad ReportSourceID en blanco si es que van a alimentar el CrystalRerportViewer a través de código y no utilizando un CrystalReportSource, como en mi caso. Además, hay que eliminar la línea "crvVisor.RefreshReport()", siempre y cuando la propiedad ReuseParameterValuesOnRefresh del CrystalReportViewer esté en "False", pues se recomienda dejarla en "True". Les dejo el código a aquellos que hayan tenido un problema similar a este.

     

    Salu2!!!

    jueves, 17 de julio de 2008 20:07
  • hola q tal
    creo q llegue un poquito tarde al tema, quiero hacerle una pregunta a Carlos Acaíno:

    en el codigo q pones en tu for each se lee una variable "connection" mi pregunta es ¿como la declaro, me refiero a q tipo ?recien empiezo a programar disculpa mi ignorancia... espero tu respuesta.... se agredecera mucho :)
    viernes, 3 de julio de 2009 16:18