1
« en: Jueves 17 de Junio de 2010, 01:12 »
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