• Domingo 17 de Noviembre de 2024, 18:28

Autor Tema:  Invalid Report Source  (Leído 2127 veces)

willyeruiz

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Invalid Report Source
« en: Jueves 17 de Junio de 2010, 01:12 »
0
Hola muchachos. Tengo una aplicacion de escritorio en .net 2005 y tengo que cargar unos reportes que ya habian sido creados con Crystal Reports 8.5. La cuestion es que cuando corro el programa y carga un informe todo esta bien hasta que carga la forma que contiene el informe (FormPrint.Show()). Sale un letrero que dice: "Invalid Report Source". Ya revise el path del reporte y esta correcto. Corri el programa paso a paso y todo parece estar perfecto. Alguno sabe que pasa?? hay que agregar de alguna forma especial los reportes a proyecto??
Asi empieza es la cosa:

Private Sub CmdAceptar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles CmdAceptar.Click
        objCrystalReport.conectar()
        'Se cargan parametros
        Dim parametrosReporte As New Hashtable
        parametrosReporte.Add("@xPrmTipPrd", tipoProducto)
        parametrosReporte.Add("@xSucCod", IIf(fld_col_suc.Text = String.Empty, 0, fld_col_suc.Text))
        parametrosReporte.Add("@xPorSuc", xPorSucursal.Checked)
        parametrosReporte.Add("@xClnCod", fld_col_cod_cli.Text)
        parametrosReporte.Add("@xPorPresta", xPorPresta.Checked)
        parametrosReporte.Add("@xCodBco", fld_col_cod_bco_cor.Text)
        parametrosReporte.Add("@xPorBco", xPorBco.Checked)
        parametrosReporte.Add("@xTipOpe", IIf(fld_col_tip_ope.Text = String.Empty, 0, fld_col_tip_ope.Text))
        parametrosReporte.Add("@xPorLC", xPorLC.Checked)
        parametrosReporte.Add("@SUC_CEN", IIf(SUC_CEN.Text = String.Empty, 0, SUC_CEN.Text))
        parametrosReporte.Add("@xPorUR", xPorUR.Checked)
        parametrosReporte.Add("@xFecIniC", xFecIniC.Value.ToString("dd/MM/yyyy"))
        parametrosReporte.Add("@xPorNatJur", xPorTipoInterm.Checked)
        parametrosReporte.Add("@fld_cln_nat_jur", IIf(COD_TIPBCO.Text = String.Empty, 0, COD_TIPBCO.Text))
        parametrosReporte.Add("@xPorSector", xPorSec.Checked)
        parametrosReporte.Add("@xCodSector", IIf(COD_SEC.Text = String.Empty, 0, COD_SEC.Text))
        parametrosReporte.Add("@xPorSubSector", xPorSubSec.Checked)
        parametrosReporte.Add("@xCodSubSector", IIf(COD_PRGINV.Text = String.Empty, 0, COD_PRGINV.Text))
            objCrystalReport.printrpt("cafi011.rpt", parametrosReporte)
    End Sub
'-----------------------------------
Public Overloads Shared Sub printrpt(ByVal nombrereporte As String, ByVal par As Hashtable)
        Dim forma As New frmprint
        Dim pathReport As String = ConfigurationManager.AppSettings("PathReports").ToString()

        With forma.CrystalReportViewer1
            Dim servidor As String = ConfigurationManager.AppSettings("Servidor").ToString()
            rpt.Load(pathReport & nombrereporte, OpenReportMethod.OpenReportByDefault)
            rpt.Refresh()
            If par.Count > 0 Then
                .ParameterFieldInfo = genPar(par)
            End If

            SetCRLogOnInfo(rpt, servidor, VariablesEntornos.Main_UserName, VariablesEntornos.Main_pass)

            'Configurar aquí cualquier opción de exportación
            Dim opt As New ExportOptions
            opt = rpt.ExportOptions
            'Configurar aquí cualquier opción de impresión
            Dim prn As PrintOptions
            prn = rpt.PrintOptions
            .ReportSource = rpt
            'Visualizar el reporte en una ventana nueva
            forma.Text = custTitle
            forma.Show()
        End With
    End Sub
'------------------------------------------------------------
Private Shared Function genPar(ByVal arrParams As Hashtable) As ParameterFields
        Dim parametros As New ParameterFields
        Dim oEnumerador As IDictionaryEnumerator
        oEnumerador = arrParams.GetEnumerator

        While oEnumerador.MoveNext
            Dim parametro As New ParameterField
            Dim dVal As New ParameterDiscreteValue
            parametro.Name = oEnumerador.Key.ToString()
            dVal.Value = oEnumerador.Value
            parametro.CurrentValues.Add(dVal)
            parametros.Add(parametro)
        End While
        Return (parametros)
    End Function
'-----------------------------------------------------------------
Private Shared Sub SetCRLogOnInfo(ByRef mainInRD As ReportDocument, ByVal dataSource As String, ByVal userId As String, ByVal pwd As String)
        'do the main reports database
        Dim logonInfo As TableLogOnInfo = Nothing
        Dim basedatos As String = ConfigurationManager.AppSettings("BaseDatos").ToString()
        For Each table As CrystalDecisions.CrystalReports.Engine.Table In mainInRD.Database.Tables
            logonInfo = table.LogOnInfo
            logonInfo.ConnectionInfo.ServerName = dataSource
            logonInfo.ConnectionInfo.DatabaseName = basedatos
            logonInfo.ConnectionInfo.UserID = userId
            logonInfo.ConnectionInfo.Password = pwd
            table.ApplyLogOnInfo(logonInfo)
            table.Location = logonInfo.ConnectionInfo.DatabaseName & ".dbo." & table.Location.Substring(table.Location.LastIndexOf(".") + 1)
            table.TestConnectivity()
        Next

        Try
            If Not mainInRD.IsSubreport And Not mainInRD.Subreports Is Nothing And mainInRD.Subreports.Count > 0 Then
                For Each rd As ReportDocument In mainInRD.Subreports
                    SetCRLogOnInfo(rd, dataSource, userId, pwd)
                Next
            End If
        Catch ex As Exception
        End Try
    End Sub