CrystalReportViewer, VB.NET y Reportes en Blanco
Publicado por Juan Pérez (4 intervenciones) el 13/08/2008 16:45:40
Buenas a todos,
Despues de mucho leer por el foro no he encontrado la solución a mi problema, o problemas.
El tema es que yo tengo unos reportes realizados con Crystal Report 8.0, antiguamente utilizaba VB 6.0 y las APIS de Crystal y todo funcionaba de maravilla.
Ahora al pasar a VB.NET he tenido que utilizar el CrystalReportViewer ya que las APIS parecen no funcionar.
Tengo una base de datos llamada "REPORTES.MDB" donde se almacenan los datos desencriptado ( en la base de datos original se guardan encriptados ) entonces antes lo que hacia era llenar esa base de datos con los datos que necesitaba mediante filtros, cargar el reporte con esos datos, visualizarlo y despues borrar los datos de "REPORTES.MDB", por supuesto mientras se cargaba los datos en el reporte no procedia a la siguiente operación y por lo tanto cuando los datos se borraban el reporte ya tenia esos datos.
Ahora con el CrystalReportViewer parece ser que cuando se cargan esos datos si que pasa a la siguiente instrucción y borra los datos y ya aparece en blanco...
He "solucionado" el problema para salir del paso evitando que borre los datos y solo los borra al principio para poner los nuevos, el proceso parece que funciona, pero solo la primera vez, si automaticamente vuelvo a lanzar el reporte con los mismos datos, ya me aparece en blanco, es decir, la primera vez todo correcto y las sucesivas en blanco, siempre que los datos sean los mismos.
La pregunta es como puedo hacer para que carge todos los datos en el reporte y despues visualizarlo.
El código que utilizo es el siguiente:
Dim MiRep As CrystalDecisions.CrystalReports.Engine.ReportDocument = Nothing
Dim DSCon As DataSourceConnections
Dim Item As CrystalDecisions.Shared.IConnectionInfo
Dim RutaFich As String
Dim TipoFich As ExportFormatType
Dim OpcionesImp As PrintOptions
MiRep = New ReportDocument
MiRep.FileName = Reporte
'Se obtienen las conexiones del reporte y se asignan las nuevas bases de datos
DSCon = MiRep.DataSourceConnections
For Each Item In DSCon
If UCase(Right(Item.ServerName, 13)) = "CONFIGURACION.MDB" Then
Item.SetConnection(CONF.Name, "", False)
ElseIf UCase(Right(Item.ServerName, 12)) = "REPORTES.MDB" Then
Item.SetConnection(REP.Name, "", False)
End If
Next
MiRep.ReportOptions.EnableSaveDataWithReport = True
'Se carga el reporte
MiRep.Load(Reporte,CrystalDecisions.Shared.OpenReportMethod.OpenReportByDefault)
'Se verifica la base de datos
MiRep.VerifyDatabase()
'Comienza la salida del reporte según el modo
Select Case Modo
Case ModoCrystal.Impresora
OpcionesImp = Nothing
Resp = ObtenPreferenciasImpresion(OpcionesImp)
If Resp = 0 Then
MiRep.PrintToPrinter(1, False, 1, -1)
End If
Case ModoCrystal.Pantalla
'Se carga el formulario donde se visualizará el reporte
Dim Frm As New F_Crystal
MiRep.Refresh()
Frm.AbrirReporte(MiRep)
MiRep.ReportOptions.EnableSaveDataWithReport = True
MiRep.Close()
MiRep = Nothing
Case ModoCrystal.Archivo
RutaFich = ""
Resp = ObtenNombreFichero(RutaFich, TipoFich)
If Resp = 0 Then
MiRep.ExportToDisk(TipoFich, RutaFich)
End If
End Select
PD: La ventana donde esta el CrystalReportViewer se abre de forma modal ,por lo tanto hasta que no se cierre no pasa a las instrucciones:
MiRep.ReportOptions.EnableSaveDataWithReport = True
MiRep.Close()
MiRep = Nothing
En principio pensé que podia ser porque cerraba en reporte, pero de forma modal sigue ocurriendo el mismo error
Saludos.
Despues de mucho leer por el foro no he encontrado la solución a mi problema, o problemas.
El tema es que yo tengo unos reportes realizados con Crystal Report 8.0, antiguamente utilizaba VB 6.0 y las APIS de Crystal y todo funcionaba de maravilla.
Ahora al pasar a VB.NET he tenido que utilizar el CrystalReportViewer ya que las APIS parecen no funcionar.
Tengo una base de datos llamada "REPORTES.MDB" donde se almacenan los datos desencriptado ( en la base de datos original se guardan encriptados ) entonces antes lo que hacia era llenar esa base de datos con los datos que necesitaba mediante filtros, cargar el reporte con esos datos, visualizarlo y despues borrar los datos de "REPORTES.MDB", por supuesto mientras se cargaba los datos en el reporte no procedia a la siguiente operación y por lo tanto cuando los datos se borraban el reporte ya tenia esos datos.
Ahora con el CrystalReportViewer parece ser que cuando se cargan esos datos si que pasa a la siguiente instrucción y borra los datos y ya aparece en blanco...
He "solucionado" el problema para salir del paso evitando que borre los datos y solo los borra al principio para poner los nuevos, el proceso parece que funciona, pero solo la primera vez, si automaticamente vuelvo a lanzar el reporte con los mismos datos, ya me aparece en blanco, es decir, la primera vez todo correcto y las sucesivas en blanco, siempre que los datos sean los mismos.
La pregunta es como puedo hacer para que carge todos los datos en el reporte y despues visualizarlo.
El código que utilizo es el siguiente:
Dim MiRep As CrystalDecisions.CrystalReports.Engine.ReportDocument = Nothing
Dim DSCon As DataSourceConnections
Dim Item As CrystalDecisions.Shared.IConnectionInfo
Dim RutaFich As String
Dim TipoFich As ExportFormatType
Dim OpcionesImp As PrintOptions
MiRep = New ReportDocument
MiRep.FileName = Reporte
'Se obtienen las conexiones del reporte y se asignan las nuevas bases de datos
DSCon = MiRep.DataSourceConnections
For Each Item In DSCon
If UCase(Right(Item.ServerName, 13)) = "CONFIGURACION.MDB" Then
Item.SetConnection(CONF.Name, "", False)
ElseIf UCase(Right(Item.ServerName, 12)) = "REPORTES.MDB" Then
Item.SetConnection(REP.Name, "", False)
End If
Next
MiRep.ReportOptions.EnableSaveDataWithReport = True
'Se carga el reporte
MiRep.Load(Reporte,CrystalDecisions.Shared.OpenReportMethod.OpenReportByDefault)
'Se verifica la base de datos
MiRep.VerifyDatabase()
'Comienza la salida del reporte según el modo
Select Case Modo
Case ModoCrystal.Impresora
OpcionesImp = Nothing
Resp = ObtenPreferenciasImpresion(OpcionesImp)
If Resp = 0 Then
MiRep.PrintToPrinter(1, False, 1, -1)
End If
Case ModoCrystal.Pantalla
'Se carga el formulario donde se visualizará el reporte
Dim Frm As New F_Crystal
MiRep.Refresh()
Frm.AbrirReporte(MiRep)
MiRep.ReportOptions.EnableSaveDataWithReport = True
MiRep.Close()
MiRep = Nothing
Case ModoCrystal.Archivo
RutaFich = ""
Resp = ObtenNombreFichero(RutaFich, TipoFich)
If Resp = 0 Then
MiRep.ExportToDisk(TipoFich, RutaFich)
End If
End Select
PD: La ventana donde esta el CrystalReportViewer se abre de forma modal ,por lo tanto hasta que no se cierre no pasa a las instrucciones:
MiRep.ReportOptions.EnableSaveDataWithReport = True
MiRep.Close()
MiRep = Nothing
En principio pensé que podia ser porque cerraba en reporte, pero de forma modal sigue ocurriendo el mismo error
Saludos.
Valora esta pregunta


0