公式中的Crystal Report错误此字段名称未知

时间:2014-12-09 11:28:28

标签: asp.net-mvc crystal-reports window-server

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

Exceptoion

  

此字段名称未知。   文件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(例外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
  • Window Server 2012 R2
  • Visual Studio 2013

我尝试通过

修复错误
  • 重新安装crystal report runtime 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;
}

concat字符串公式

  

{RPTH040_Test.test} +“测试功能”

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

更新

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

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

它仍然不起作用。有谁知道这个?

2 个答案:

答案 0 :(得分:1)

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

希望它会对某人有所帮助。

答案 1 :(得分:0)

我从SCN得到了主要结果。

  

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

     

普山

更多细节 - &gt; Windows server 2012 R2 SetDataSource doesn't work | SCN