none
Reutilizar Rpt de Crystal Report en nuevo proyecto RRS feed

  • Pregunta

  • Se que esto es antiguo pero aun así no logro dar con la solución.

    Explico: He tenido que reestructurar un proyecto de envió de reportes por correo, proyecto visual estudio (winform x86, framework 4 y lenguaje vb.net)  que no fue hecho por mi. Para convertirlo en tarea de windows (tarea de windows ya que se necesita ejecutar constantemente).

    El proyecto antiguo contenía reportes en Crystal Report vb.net, reportes que se alimentaban de datos desde sql server con conexión ODBC. todos los reportes se conectaron al server de DB por medio de asistente de conexion, asi que las consultas no pasan por codigo.

    En un nuevo proyecto de visual estudio 2017 (windows service x64, framework 4.5  y lenguaje vb.net).

    Instale una nuevo driver de conexión ODBC para 64 bits, crei que ese era el problema, aun así no funciono

    Instale Crystal report para visual studio 2017 porque no lo tenia, para poder pasar los reportes y pudiera ser reconocido el formato.

    Reutilice los mismos reportes, ya que solo necesitaba cambiar el tipo de proyecto.

    Copie y pegue los reporte a un nuevo directorio dentro del nuevo proyecto. posterior a esto en el explorador de campos voy a verificar las conexiones (instancias creadas), al utilizar el asistente de verificación de conexión todo va bien se conecta y muestra los datos desde las tablas que se involucren.

    Genero la vista previa del informe y muestra todo ok.

    Pero mi problema esta que al momento de querer exportar el reporte a pdf me sale un error de conexión.

    Aquí pongo como ejemplo un código de un reporte:

     Function Retorna_Ruta_ArchivoEmitidos() As String

            Dim Fecha = devuelve_fecha2(buscaHoraServidor().AddDays(-1)).Replace("/", "_")
            Dim ruta_a = ConfigurationManager.AppSettings.Get("Ruta_Archivos_Enviados") + "\Documentos_Emitidos\DocumentosEmitidos " + Fecha + ".Pdf"

            If Not File.Exists(ruta_a) Then
                Dim report As New Rpt_DocumentosEmitidos
                Try
                    report.SetParameterValue("fecha", devuelve_fecha(buscaHoraServidor().AddDays(-1)))
                    report.SetDatabaseLogon(setLogon, setPass)
                Catch ex As CrystalReportsException
                    Return ""
                    Exit Function
                End Try

                Try
                    Dim CrExportOptions As ExportOptions
                    Dim CrDiskFileDestinationOptions As New DiskFileDestinationOptions()
                    Dim CrFormatTypeOptions As New PdfRtfWordFormatOptions()

                    CrDiskFileDestinationOptions.DiskFileName = ruta_a
                    CrExportOptions = report.ExportOptions
                    With CrExportOptions
                        .ExportDestinationType = ExportDestinationType.DiskFile
                        .ExportFormatType = ExportFormatType.PortableDocFormat
                        .DestinationOptions = CrDiskFileDestinationOptions
                        .FormatOptions = CrFormatTypeOptions
                    End With
                    report.Export()
                    report.Dispose()
                    Return ruta_a
                    Exit Function
                Catch ex As Exception
                    Return ""
                    Exit Function
                End Try
            End If
            Return ""

    El error ocurre alusar la funcion Exportar (report.Export())

    No se pudo abrir la conexión.
    temp_b700a379-1ba6-45cf-a1ab-c33e39f08422 11928_10100_{1567743D-C9E7-490A-8EC5-66AC825FA0A7}.rpt

    CrystalDecisions.ReportAppServer.DataSetConversion

    en CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e)
    en CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext)

    De ante mano agradezco si alguien me presta alguna ayuda.



    martes, 28 de abril de 2020 18:06

Todas las respuestas

  • Hola:
    Puedes usar Crystal Reports sin tener que abrir ninguna conexion.
    El proceso es el siguiente:
    1.- Crear 1 fichero de esquema (extension XML) con los campos que van a intervenir en el fichero RPT
    2.- Crear el fichero RPT y como origen de datos se pone el fichero de esquema creado en el punto 1.
    3.- Cargar el fichero RPT en un ReportDocument
    4.- Cargar el ReportDocument con un DataTable con los datos ya filtrados, asi el origen de los datos es indiferente, el unico requisito que tiene que cumplir el datatable es que tenga TODOS los campos que tuvo el fichero de esquema.
    5.- El ReportDocument sirve como fuente de datos para el CrystalReportViewer.

    P.D.
    Si pones una direccion de correo, te envio un ejemplo en formato PDF

    Un saludo desde Bilbo
    Carlos
    miércoles, 29 de abril de 2020 7:58
  • Gracias por tu ayuda, mi correo es marcos.mosorio@gmail.com
    jueves, 30 de abril de 2020 13:15
  • Hola:

    Ejemplo enviado

    Un saludo desde Bilbo

    Carlos

    jueves, 30 de abril de 2020 13:50