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++ 堆栈中打开的主要内容,如果未能解决你的问题,请参考以下文章