水晶报告公式错误

时间:2014-04-16 20:23:34

标签: c# excel crystal-reports formula

所以我的报告中有一个字段计算字段。公式应基于某些值返回DateTime值。

以下是公式

DateTime (DateValue(
if abs(DayOfWeek({vw_prfma_proforma.Dock_Date}) - {vw_prfma_proforma.p_dock_no}) < 4 then
(
if DayOfWeek({vw_prfma_proforma.Dock_Date}) > {vw_prfma_proforma.p_dock_no} then
 dateadd("d",-(DayOfWeek({vw_prfma_proforma.Dock_Date})-{vw_prfma_proforma.p_dock_no}),{vw_prfma_proforma.Dock_Date})
else if DayOfWeek({vw_prfma_proforma.Dock_Date}) < {vw_prfma_proforma.p_dock_no} then
dateadd("d",{vw_prfma_proforma.p_dock_no}-DayOfWeek({vw_prfma_proforma.Dock_Date}),{vw_prfma_proforma.Dock_Date})
else
dateadd("d",0,{vw_prfma_proforma.Dock_Date})
)
else
(
if DayOfWeek({vw_prfma_proforma.Dock_Date}) > {vw_prfma_proforma.p_dock_no} then
dateadd("d",7 , dateadd("d",-(DayOfWeek({vw_prfma_proforma.Dock_Date})-{vw_prfma_proforma.p_dock_no}),{vw_prfma_proforma.Dock_Date}))
else if DayOfWeek({vw_prfma_proforma.Dock_Date}) < {vw_prfma_proforma.p_dock_no} then
dateadd("d",-7,dateadd("d",{vw_prfma_proforma.p_dock_no}-DayOfWeek({vw_prfma_proforma.Dock_Date}),{vw_prfma_proforma.Dock_Date}))
else
dateadd("d",0,{vw_prfma_proforma.Dock_Date})
)

)
,Time(
cdbl(
left(
replace(Space( 5-Length (replace(cstr({vw_prfma_proforma.p_dtoleranc}),".00",""))) 
+ cstr(replace(cstr({vw_prfma_proforma.p_dtoleranc}),".00",""))," ","0")
,3))
,
cdbl(
right(
replace(Space( 5-Length (replace(cstr({vw_prfma_proforma.p_dtoleranc}),".00","")))
+ cstr(replace(cstr({vw_prfma_proforma.p_dtoleranc}),".00",""))," ","0") 
,2))
,0
))

我面临的问题是,它在预览模式下加载,提供所需的数据。但是,当在浏览器中加载时,它会出现以下错误

  

公式出错。 &#39; DateTime(DateValue(&#39;此字段名称为   不知道。

我不知道该怎么做。我在打印时验证了DB,它给了我这个。如果没有验证命令,则所有值都将返回零。请帮忙。

1 个答案:

答案 0 :(得分:0)

我找到了解决办法。在我加载表的代码和后面的页面代码中的连接信息(即托管Crystal Viewer控件)中,我为每个被引用的表添加了一个附加字段。见下面的代码。

private void SetDBLogonToTables(CrystalDecisions.Shared.ConnectionInfo connectionInfo, CrystalDecisions.CrystalReports.Engine.ReportDocument reportDocument)
{
    CrystalDecisions.CrystalReports.Engine.Tables tables = reportDocument.Database.Tables;

    foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
    {
        CrystalDecisions.Shared.TableLogOnInfo tableLogonInfo = table.LogOnInfo;

        tableLogonInfo.ConnectionInfo = connectionInfo;
        table.ApplyLogOnInfo(tableLogonInfo);

           //Following, did the trick! 
            try
            {
                string strLocation = connectionInfo.DatabaseName + ".dbo." + table.Location.Substring(table.Location.LastIndexOf(".") + 1);

                table.Location = strLocation;
            }
            catch (Exception ex)
            {//Catch 
            }
    }
}