none
Crystal Report . Error al querer mostrar reporte mas de una vez RRS feed

  • Pregunta

  • la primera vez sale bien el reporte pero la segunda sale ese error

    "Excepción no controlada del tipo 'System.ArgumentException' en System.Drawing.dll

    Información adicional: El parámetro no es válido."

    • Cambiado Enrique M. Montejo jueves, 4 de enero de 2018 11:23 Pregunta relacionada con Crystal Reports.
    lunes, 1 de enero de 2018 0:50

Respuestas

  • Hola:

    Tendrías que indicar como llamas al informe y como lo cierras.

    A título de ejemplo, cada vez que usas un informe, lo tienes que destruir. 

    En el caso de que no sea así, el informe queda abierto y puede surgir cualquier problema en cuanto llames al mismo informe o a otro cualquiera.

    Para ello, utilizando la función para el controlador de errores "Try - Catch", puedes realizar la operación dentro del bloque Finally, ya que aunque haya un error, el informe se cerrará o se destruirá, evitando así que quede abierto en memoria, etc.

    Utiliza el ejemplo adjunto adatándolo a tus necesidades:

    Catch ex As Exception
                MsgBox(rm.GetString("ErrorCreacionInforme") & " " & rm.GetString("del") & " " & rm.GetString("AnalGruposPatrimoniales") & "." & vbCrLf & ex.Message, MsgBoxStyle.Critical, rm.GetString("ErrorBase"))
    
            Finally
                frmPreparandoInforme.Close()
                'Destruimos todo el informe
                frmPreparandoInforme.Dispose()
                CrReport.Dispose()
                AccesoDatosInformes.dsInformes.Dispose()
    
            End Try

    En esta instrucción destruyes los 2 elementos más importantes, el objeto cristal reports y su elemento dataset en caso de que lo utilices. Al estar situado en el boque "Finally", sabes que si se muestra el informe o da error, siempre pasa por dicho bloque.

    Un saludo.

    Gemma


    lunes, 1 de enero de 2018 7:48

Todas las respuestas

  • Hola:

    Tendrías que indicar como llamas al informe y como lo cierras.

    A título de ejemplo, cada vez que usas un informe, lo tienes que destruir. 

    En el caso de que no sea así, el informe queda abierto y puede surgir cualquier problema en cuanto llames al mismo informe o a otro cualquiera.

    Para ello, utilizando la función para el controlador de errores "Try - Catch", puedes realizar la operación dentro del bloque Finally, ya que aunque haya un error, el informe se cerrará o se destruirá, evitando así que quede abierto en memoria, etc.

    Utiliza el ejemplo adjunto adatándolo a tus necesidades:

    Catch ex As Exception
                MsgBox(rm.GetString("ErrorCreacionInforme") & " " & rm.GetString("del") & " " & rm.GetString("AnalGruposPatrimoniales") & "." & vbCrLf & ex.Message, MsgBoxStyle.Critical, rm.GetString("ErrorBase"))
    
            Finally
                frmPreparandoInforme.Close()
                'Destruimos todo el informe
                frmPreparandoInforme.Dispose()
                CrReport.Dispose()
                AccesoDatosInformes.dsInformes.Dispose()
    
            End Try

    En esta instrucción destruyes los 2 elementos más importantes, el objeto cristal reports y su elemento dataset en caso de que lo utilices. Al estar situado en el boque "Finally", sabes que si se muestra el informe o da error, siempre pasa por dicho bloque.

    Un saludo.

    Gemma


    lunes, 1 de enero de 2018 7:48
  • Gracias Gemma por responder, mira el procedimiento q realizo es el siguiente, tengo un solo form donde esta mi reporteador y todos mis documentos llaman a ese form con el RPT entonces dentro de ese form teno un select case para actue segun el documento q lo invoca, mas o menos asi:

    1°) presiono el boton de reporte de mi documento:

        Private Sub ButtonX1_Click(sender As Object, e As EventArgs) Handles ButtonX1.Click
            Dim ForM_ As New _log_Reporte_ODC(id_documento, tipo_documento)
            ForM_.ShowDialog()
        End Sub

    2°) el reporteador hace lo siguiente:

           

     Private Sub _log_Reporte_ODC_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Try
                Select Case otipo_doc
                    Case "EGR"
                        Me.Text = "Impresión de Documentos - [ " & otitulo & " ]"
                        Dim _ds_DocEGR4doc As DataSet = clsLogDocumentoCN.instancia.Reporte_EGR4doc(oid_bienser) '(52)
                        If _ds_DocEGR4doc.Tables.Count > 0 Then
                            If _ds_DocEGR4doc.Tables("dt_EGR4").Rows.Count > 0 Then
                                Dim rpt As New _cr_DocEGR4doc
                                rpt.SetDataSource(_ds_DocEGR4doc)
                                rpt.SetParameterValue("elaborado1", _MDIP_ERP.tssl_usuario.Text.ToUpper)
                                rpt.SetParameterValue("sub1", "Total Pago")
                                rpt.SetParameterValue("totsub1", "Total por Pagar")
                                'rpt.SetParameterValue("monto_letras", ofiltro_montol)
                                Me.CrystalReportViewer1.ReportSource = rpt
                            End If
                        End If                Case "GDS"
                        Me.Text = "Impresión de Documentos - [ " & otitulo & " ]"
                        Dim _crystalreportODC As DataSet = clsLogDocumentoCN.instancia.Reporte_GDI(oid_bienser) '(52)
                        If _crystalreportODC.Tables.Count > 0 Then
                            If _crystalreportODC.Tables("dt_ODC").Rows.Count > 0 Then
                                Dim rpt As New CrystalReportGDS
                                rpt.SetDataSource(_crystalreportODC)


                                Me.CrystalReportViewer1.ReportSource = rpt
                            End If
                        End If
                End Select

            Catch ex As Exception
                MessageBox.Show("Verificar si hay pagos para los parámetros seleccionado." & vbCr & vbCr & ex.Message, "Error al generar reporte", MessageBoxButtons.OK, MessageBoxIcon.Error)

    End Try

    Ahora, como casi todos los reportes q llamo tienen parametros la primera vez q los llamo carga todo bien pero digamos que lo vuelvo a llamar me presenta el error del asunto.


    bethoven

    viernes, 5 de enero de 2018 19:34