none
Fallo al Exportar Crystal Report RRS feed

  • Pregunta

  • Hola a todos.

    Desde hace poco tiempo he empezado a crear informes con Crystal Report en mi aplicación.

    Inicialmente generaba los informes y los visualizaba a través de un objeto CrystalReportViewer, permitiendoles imprimir y exportar. Los usuarios lo que hacen habitualmente es imprimir, y esto estaba dando problemas, dependiendo del navegador. Con Chrome directamente expotaba, con Mozilla algunas veces no se imprimía el documento, con Explorer lo mismo... para evitar esto, decidí que la mejor opción era que al darle a generar el pdf, le salga al usuario la opción de abrir o descargar el report, habiendolo exportado previamente a pdf.

    El problema es que algunas veces, a algunos usuarios les está dando el siguiente error:

    CrystalDecisions.Shared.CrystalReportsException: No se ha podido cargar el informe. ---> System.Runtime.InteropServices.COMException: Operación no admitida. Un documento procesado por el motor JRC no se puede abrir en la pila C++.     at CrystalDecisions.ReportAppServer.ClientDoc.ReportClientDocumentClass.Open(Object& DocumentPath, Int32 Options)     at CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.Open(Object& DocumentPath, Int32 Options)     at CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened()     --- End of inner exception stack trace ---     at CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened()     at CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.get_ProductLocaleID()     at CrystalDecisions.ReportSource.CachedObjectReportSource.GetReport(RequestContext context, Boolean bAddToCacheWhenCreated)     at CrystalDecisions.Web.CrystalReportSource.get_ReportDocument()     at CrystalDecisions.Web.CrystalReportSource.DataBindDataSources()     at CrystalDecisions.Web.CrystalReportSource.DataBind()     at CrystalDecisions.Web.CrystalReportSource.OnLoad(EventArgs e)     at System.Web.UI.Control.LoadRecursive()     at System.Web.UI.Control.LoadRecursive()     at System.Web.UI.Control.LoadRecursive()     at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) <br> Exception of type 'System.Web.HttpUnhandledException' was thrown. <br>    at System.Web.UI.Page.HandleError(Exception e)     at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)     at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)     at System.Web.UI.Page.ProcessRequest()     at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)     at System.Web.UI.Page.ProcessRequest(HttpContext context)     at ASP.app_derivaciones_recursos_informes_visorinforme_aspx.ProcessRequest(HttpContext context) in c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\pasda\22ab1515\9c030506\App_Web_sc11vfvp.0.cs:line 0     at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()     at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

    Parece que es de forma aleatoria, a un usuario le puede estar fallando el informe para unos parámetros, y otro usuario lanza el informe con los mismos datos y si le funciona.  No se si el fallo podria estar en que todavía el informe no se ha generado y ya se esté intentando enviar. Os paso el código tanto del aspx como del cs:

    ASPX:

    <form id="form1" runat="server">

                <asp:Button ID="exportar" runat="server" Text="Exportar a PDF" Visible="false" onclick="exportar_Click"/>  
                <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="True" Height="1px" Width="1px" HasCrystalLogo="False" HasDrilldownTabs="False" HasDrillUpButton="False" HasGotoPageButton="False" HasPageNavigationButtons="False" HasToggleGroupTreeButton="False" HasToggleParameterPanelButton="False" HasZoomFactorList="False" ToolPanelView="None" DisplayStatusbar="False" EnableToolTips="False" HasSearchButton="False" ToolPanelWidth="" DisplayPage="False" HasExportButton="False" HasPrintButton="False" />
                <CR:CrystalReportSource ID="CRSMenores" runat="server">
                    <Report FileName="ConsInf_Menores.rpt">
                        <DataSources>
                            <CR:DataSourceRef DataSourceID="SqlDataSource1" TableName="pa_DEdevDatosCIMenores;1"/>
                        </DataSources>
                    </Report>
                </CR:CrystalReportSource>
                <CR:CrystalReportSource ID="CRSPareja" runat="server">
                    <Report FileName="ConsInf_Pareja.rpt">
                        <DataSources>
                            <CR:DataSourceRef DataSourceID="SqlDataSource1" TableName="pa_DEdevDatosCIPareja;1"/>
                        </DataSources>
                    </Report>
                </CR:CrystalReportSource>
                <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ appSettings:CadenaDeConexion %>" SelectCommandType="StoredProcedure"></asp:SqlDataSource>

             <script type="text/javascript">
                 __doPostBack('exportar', '');
            </script>
        </form>

    CS:

    protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    if (Request.QueryString["informe"].ToString() == "ci_menores")
                    {
                        SqlDataSource1.SelectCommand = "pa_DEdevDatosCIMenores";
                        SqlDataSource1.SelectParameters["idde"] = new System.Web.UI.WebControls.Parameter("idde", System.TypeCode.Int32, Request.QueryString["idde"]);
                        SqlDataSource1.SelectParameters["Centro"] = new System.Web.UI.WebControls.Parameter("Centro", System.TypeCode.String, Request.QueryString["Centro"]);
                        CrystalReportViewer1.ReportSourceID = "CRSMenores";
                    }
                    else if (Request.QueryString["informe"].ToString() == "ci_pareja")
                    {
                        SqlDataSource1.SelectCommand = "pa_DEdevDatosCIPareja";
                        SqlDataSource1.SelectParameters["idde"] = new System.Web.UI.WebControls.Parameter("idde", System.TypeCode.Int32, Request.QueryString["idde"]);
                        SqlDataSource1.SelectParameters["Centro"] = new System.Web.UI.WebControls.Parameter("Centro", System.TypeCode.String, Request.QueryString["Centro"]);
                        CrystalReportViewer1.ReportSourceID = "CRSPareja";
                    }
                }
            }

    protected void exportar_Click(object sender, EventArgs e)
            {
                if (Request.QueryString["informe"].ToString() == "ci_menores")
                    CRSMenores.ReportDocument.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, "ConsInfMenores");
                else
                    CRSPareja.ReportDocument.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, "ConsInfPareja");
            }

    Como véis, al entrar se genera el pdf, y cuando ya esta cargado, pulso el botón exportar automaticamente, para que se proceda a descargar el pdf.

    Espero vuestras sugerencias, si hay alguna forma mejor de hacerla estoy abierto a sugerencias

    • Cambiado Enrique M. Montejo domingo, 16 de noviembre de 2014 8:16 Pregunta relacionada con Crystal Reports.
    jueves, 13 de noviembre de 2014 9:16

Todas las respuestas

  • Hola,

    Tengo el mismo problema y de forma aleatoria.

    He probado a quitar el límite de reports (por si fuera sobrecarga) modificando la clave de registro correspondiente.

    También, tras el uso de cada uno de ellos hago un Dispose y un Close.

    Aún así sigue fallando cuando le da la gana.

    Has podido sulucionarlo?

    Un saludo

    miércoles, 8 de abril de 2015 6:27