C# 将值存储在crystal report c上#

C# 将值存储在crystal report c上#,c#,crystal-reports,C#,Crystal Reports,我面临水晶报告的问题 我已经生成了一个自定义公式来计算总出勤时间。 公式代码为: if({Atendances.Status} = "OUT") then DateDiff("h",Previous({Atendances.Time}),{Atendances.Time}); 我得到的结果是什么 1/5/2015 ___________________________ Time || Status 1/5/2015 11:06:00AM || IN 1/5

我面临水晶报告的问题

我已经生成了一个自定义公式来计算总出勤时间。 公式代码为:

if({Atendances.Status} = "OUT") then
DateDiff("h",Previous({Atendances.Time}),{Atendances.Time});
我得到的结果是什么

1/5/2015 ___________________________

Time                 || Status 
1/5/2015  11:06:00AM || IN
1/5/2015   3:06:00PM || OUT
1/5/2015   4:06:00PM || IN
1/5/2015   7:06:00PM || OUT

Total Hours :  3.00
数字3.00是公式的结果,它应该是7.00小时 问题是结果值没有求和或存储

我试图定义变量,但结果将是0.0


有什么建议吗

您的公式会在每次新记录出现时重置,因此唯一保留的值是最后一个

您需要创建一个变量,然后将其递增 这将创建一个变量:

Shared NumberVar TotalTime; 
然后,您需要将其放入公式中,并将其放入报表标题中,以便它在开始时声明它

现在,您需要的是您当前拥有的公式,您需要引用该变量并使用它。你是这样做的:

Shared NumberVar TotalTime; // this refers to the variable
TotalTime:= TotalTime + 1 // this increment whatever value of it by 1
因此,如果在变量引用之后添加if语句,那么需要做的就是计算变量的时间和增量。最后,以报表页脚中的值为例,创建另一个公式:

Shared NumberVar TotalTime; // this refers to the variable
TotalTime; // this simply return the value as a normal formula

我确信我遗漏了一些东西,但在我看来,使用水晶中已有的摘要会更容易。 确保您的记录是按时间升序排序的,而时间升序可能已经是这样了。 您的报告似乎是按日期字段分组的?或者甚至可以先让服务员来? 因此,创建一个公式

if {Atendances.Status} = "OUT" 
then DateDiff("h",Previous({Atendances.Time}),{Atendances.Time}) 
else 0

将其放入“详细信息”部分,并创建一个摘要,以将页脚1或2分组,或将其放到任何需要的位置。然后从“详细信息”部分删除它。

确定,但组页脚仍为0.0,我已在组页眉上创建:[total\u time\u variable],代码为:Shared NumberVar TotalTime,在组体[total_time_calc]上,代码为:NumberVar TotalTime;如果({atendaces.Status}=“OUT”),则TotalTime:=TotalTime+DateDiff(“h”,前一个({atendaces.Time}),{atendaces.Time}),并在组尾[total_Time_result]上,代码为:NumberVar TotalTime;总时间,我得到的结果是组页脚上的0.0?谢谢你的支持对不起,我犯了个错误,它们必须声明为一路共享。我从未使用过datediff,但它的结果是日期类型,我们需要使用
DateVar
而不是使用group,您还需要另一个公式。您需要打开并删除组标题,将total time的值设置为0,以便重置,因为该变量存在于报告的长度中。so
sharednumberavartotaltime;TotalTime:=0
并且显示它的公式放在组页脚中,它也可以完美地工作。