JRC 引擎处理的文档无法在 C++ 堆栈中打开

Posted

技术标签:

【中文标题】JRC 引擎处理的文档无法在 C++ 堆栈中打开【英文标题】:A document processed by the JRC engine cannot be opened in the C++ stack 【发布时间】:2012-06-05 17:27:47 【问题描述】:

我在vs2010中用.net4.0创建了一个水晶报表。当我发布网站时,它会抛出错误“无法在 C++ 堆栈中打开由 JRC 引擎处理的文档”。我在服务器上发布了该网站,并尝试从客户端访问它,我确实在 app_code 中保留了 .rpt 文件,但再次遇到相同的错误。所以我创建了一个文件夹 wwwroot 并在该文件夹中保存了 asp_client 和 website 文件夹,并提供了 wwwroot 的物理路径。一切正常,除了水晶报告。 在.cs文件中代码如下:

    ReportDocument rptDoc = new ReportDocument();
    DataSetForCrystalReport ds = new DataSetForCrystalReport();
    DataSetForCrystalReport dsHeader = new DataSetForCrystalReport();
    DataTable dt = new DataTable();
    DataTable dtHeader = new DataTable();
    dt.TableName = "dtBill";
    string ReceiptNo = Request.QueryString["ReceiptNo"];
    dt = getAllOrders(ReceiptNo).Tables[0];
    dtHeader = TblcompanysettingsService.GetOrganizationDetails();
    ds.Tables[1].Merge(dt);
    ds.Tables[2].Merge(dtHeader);
    rptDoc.Load(Server.MapPath("crBill.rpt"));
    rptDoc.SetDataSource(ds);
    CrystalReportViewer1.ReportSource = rptDoc;

错误的堆栈跟踪:

[COMException (0x80041811): Unsupported Operation. A document processed by the JRC engine cannot be opened in the C++ stack.]
   CrystalDecisions.ReportAppServer.ClientDoc.ReportClientDocumentClass.Open(Object& DocumentPath, Int32 Options) +0
   CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.Open(Object& DocumentPath, Int32 Options) +147
   CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened() +422

[CrystalReportsException: Load report failed.]
   CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened() +549
   CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename, OpenReportMethod openMethod, Int16 parentJob) +1613
   CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename) +189
   GenerateBill.Page_Load(Object sender, EventArgs e) in e:\ShareFolder\Movie\wwwroot\Website\GenerateBill.aspx.cs:33
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25
   System.Web.UI.Control.LoadRecursive() +71
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3064

【问题讨论】:

所以***.com/questions/4294762/… 没有帮助? 不。我尝试了该问题中所回答的所有事情。 确保水晶报告文件在您的代码中@specified 位置可用..或者可能是代码中写入的路径不正确 【参考方案1】:

检查 .rpt 文件的路径!错误描述与其真正原因无关。它只是找不到您的 .rpt 文件!

在我的情况下,路径必须是位于 Reports 子文件夹中的 .rpt 文件:

Server.MapPath("~/Reports/InvoiceRegular.rpt");

为我工作。

【讨论】:

如果您的路径正确,请检查 IIS 池帐户是否具有文件的读取权限。 我正在生成一个稍后提供的报告,并发现设置 FileName 属性会使报告引擎尝试写入文件系统(从而崩溃)而不是返回一个字节数组。跨度> 【参考方案2】:

这对我有用

    右键单击 Rpt 文件。 选择属性

    改变

    一个。将操作构建为“内容”

    b.复制到输出目录为“不复制”

    c。为自定义工具和自定义工具命名空间留空

【讨论】:

构建动作作为“内容”帮助了我 正确!为我工作:)【参考方案3】:

只需执行这些步骤

(1) 右键单击​​“.rpt”文件选择“Properties

1.a) 将操作构建为“内容

1.b) 以“始终复制”形式复制到输出目录

(2)检查 .rpt 文件的路径 Server.MapPath("你的路径");

例如:Server.MapPath("~/Reports/MyReport.rpt");

注意:如果带有报表查看器的 rpt 和 aspx 页面都在同一个文件夹中,则无需提供完整路径,您可以在 Server.MapPath 中仅提供 filename.rpt 。

【讨论】:

【参考方案4】:

我不知道这是否对其他人有帮助,但我遇到了这个问题,结果证明这是一个如此简单的解决方案,可以解决如此愚蠢的举动。我打错了 .rpt 文件的文件名...文件名中的两个单词之间有一个空格(我通常不会因为这个原因而这样做)但是当我在代码中包含该名称时,我已经离开了空格出去。更正了文件名,问题消失了。

【讨论】:

您能简化一下这个答案吗?阅读“它是否有帮助”或“简单解决一个愚蠢的举动”是浪费时间。【参考方案5】:

找到解决办法, 我首先使用带有自己的水晶报告的 Visual Studio 2005,然后我使用从 SAP 下载的单独水晶报告升级到 VS2010。我从 SAP 研究发现:

由于每个版本的 Crystal Reports 都有其自己的特定运行时,必须正确部署,因此部署的运行时必须与项目中引用的 Visual Studio .NET 的 Crystal Reports 程序集一致。

所以我卸载了以前的版本并且只使用了一个版本并且它有效。 :) 感谢 ta.speot.is 的关心。这从来都不是编码问题。

【讨论】:

【参考方案6】:

只需将 .rpt 文件(crystl 报告模板)从本地计算机复制到特定服务器/计算机的文件夹,我确信您可以运行解决问题 CrystalDecisions.Shared.CrystalReportsException:加载报告失败。

对我来说,它运行良好,服务器端没有错误。我的应用程序能够根据代码存储 pdf 文件以共享路径。

【讨论】:

【参考方案7】:

我发现了另一种情况,在这些情况下会出现这个相当无益的错误。

如果您按 F5 键在 Visual Studio 中运行/调试您的 Web 应用程序但仍然在 Crystal Reports (2011) 中打开报表,您将收到错误消息。

今天让我发疯了大约一个小时!

【讨论】:

【参考方案8】:

为我工作: 从本地机器复制 .rpt 文件覆盖主机上的 .rpt 文件,然后它就可以正常工作了。

【讨论】:

【参考方案9】:

这只是发生在我身上,经过数小时的头痛后,我发现这是一个文件权限问题。由于某种原因,当从我们的 CR 开发服务器复制到共享的自定义 .rpt 目录时,文件的权限都被提升了,我不得不将几个用户组的权限添加回文件。

【讨论】:

【参考方案10】:

从 (C:\inetpub\wwwroot) 复制并粘贴文件夹 (aspnet_client) 到网站文件夹并确保 .rpt 文件位于同一文件夹中

【讨论】:

【参考方案11】:

确保文件路径正确,如提到的@serop。我还注意到报告文件夹不会在哪里发布。所以不得不手动发布报表文件夹。

【讨论】:

【参考方案12】:

我在使用 ASP.NET 时遇到了同样的问题。请检查您的报告路径。那将是错误的路径。

【讨论】:

【参考方案13】:

请检查您的 .rpt 文件是否存在。如果没有,请从本地复制到托管文件夹,它将开始工作。

【讨论】:

以上是关于JRC 引擎处理的文档无法在 C++ 堆栈中打开的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中处理或避免堆栈溢出

在 C++ 中增加堆栈大小

来自未处理异常的 C++ 堆栈跟踪?

无法通过引用 C++ 传递值

如何使用 fstream::open() 检查 C++ 中是不是存在文件

简单的无锁堆栈c ++ 11