1

当我调用 ExportToDisk() 时。在某些机器上做得很好。但在某些机器上抛出异常。

异常

此字段名称未知。 文件 C:\Windows\TEMP\RPTH010_Report01 {C0D0E863-1741-4917-A455-B23347EA4FD6}.rpt 中的错误:公式 <填单日期> 中的错误。'numberVar RocDateNumber := {RPTH010_Report01.D01_APLDATE};' 此字段名称未知
此字段名称未知。文件 C:\Windows\TEMP\RPTH010_Report01 {C0D0E863-1741-4917-A455-B23347EA4FD6}.rpt 中的错误:公式 <填单日期> 中的错误。'numberVar RocDateNumber := {RPTH010_Report01.D01_APLDATE};' 此字段名称未知

堆栈跟踪

CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e) CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext) CrystalDecisions.CrystalReports.Engine.FormatEngine.ExportToStream(ExportRequestContext reqContext) CrystalDecisions.CrystalReports.Engine.FormatEngine.Export(ExportRequestContext reqContext) CrystalDecisions。 CrystalReports.Engine.ReportDocument.ExportToDisk(ExportFormatType formatType, String fileName) JcsWebSolution.Report.CRDocument.SaveToDisk() mOffice.Models.Report.ASSET.RPTH010_Report01.PrintReport() mOffice.Models.Report.ReportBase.PrintProcess()

我的系统

  • CrystalDecisions.CrystalReports.Engine.dll,v10.5.3700.0
  • CrystalDecisions.Shared.dll,v10.5.3700.0
  • 窗口服务器 2012 R2
  • 视觉工作室 2013

我尝试通过以下方式修复错误

  • 重新安装水晶报表运行时 SP12。
  • 检查字体是否在系统中。

我尝试打印没有公式的报告,它可以很好地导出。我添加了它刚刚破坏的 concat 字符串公式。

我的代码

public class result
{
  public string { get; set;}
}

public bool DoExport()
{
  List<result> test = new List<result>();
  test.Add(new result { test = "123" });

  DataTable input = ListToDataTable(test);

  input.TableName = "test";
  m_RptDataSet.Tables.Add(input);

  ReportDocument m_ReportDocument = new ReportDocument();

  m_ReportDocument.Load(HttpContext.Current.Server.MapPath("~/RPT/test.rpt"));
  m_ReportDocument.SetDataSource(input);
  m_ReportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, "test.pdf");

  m_ReportDocument.Close();
  m_ReportDocument.Dispose();

  m_ReportDocument = null;
}

public  DataTable ListToDataTable<T>(List<T> list)        
{
  PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T));

  DataTable dt = new DataTable();

  object[] values;

  for (int i = 0; i < props.Count; i++)            
  {            
    PropertyDescriptor prop = props[i];
    dt.Columns.Add(prop.Name, prop.PropertyType);            
  }

  foreach (T item in list)
  {
    values = new object[props.Count];
    for (int i = 0; i < values.Length; i++)
    {
      values[i] = props[i].GetValue(item);
    }

    dt.Rows.Add(values);
  }

  return dt;
}

连接字符串公式

{RPTH040_Test.test} + "测试函数"

但在其他机器上就好了。有没有人有同样的问题?

更新

我测试了一份新报告,其中有 3 条没有公式的记录。我发现报告可以导出,但不显示记录。所以我想主要原因是 SetDataSource() 在我的机器上不起作用(windows 2012 R2)。我尝试将代码添加到 Web.config。

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

它仍然无法正常工作。有人知道吗?

4

2 回答 2

1

在对相应的存储过程进行了一系列更改后,我在 Crystal Report 中遇到了同样的错误,最后我发现我在公式中使用了一个从我的 sp 中删除的字段(早些时候,当我创建公式和然后从 SP 中删除),所以我不时用适当的更新字段更新我的公式,然后它就消失了。

希望它会帮助某人。

于 2015-12-28T10:50:57.183 回答
0

我从 SCN 得到了主要结果。

CR 10.5(VS 2008 的 CR)与 Win 2012 不兼容/测试支持。它也与 VS 2013 不兼容。将 CR 升级到 VS 2013(13.0)的 CR。

布山

更多详细信息-> Windows server 2012 R2 SetDataSource 不起作用 | SCN

于 2014-12-27T07:12:42.433 回答