首页 > 解决方案 > 插入摘要不显示公式字段

问题描述

我正在尝试获取从日期范围计算的总天数。唯一的条件是如果上一个结束日期等于运行记录开始日期,我不需要再次计算那一天。我已经写了下面的函数,但我在插入摘要和运行总计字段中都看不到它。

在互联网上检查了解决方案的数量后,似乎总数仅适用于数字字段,而不适用于常量或其他变量类型。考虑到到目前为止我看到的所有解决方案,我编写了以下函数,但没有成功。

whileprintingrecords;
Global numbervar value :=0;
Datevar prevdate := Previous({MainReport_24172.ENDDATE});
if {MainReport_24172.ENDDATE}= DateValue (9990,12 ,31 ) then
   value := value + CurrentDate - {MainReport_24172.BEGINDATE}+1
else if prevdate = {MainReport_24172.BEGINDATE} then
    value := value + {MainReport_24172.ENDDATE} - {MainReport_24172.BEGINDATE}
else
   value := value + {MainReport_24172.ENDDATE} - {MainReport_24172.BEGINDATE} + 1

01.09.2019 02.09.2019 2 02.09.2019 04.09.2019 2 04.09.2019 04.09.2019 0

它应该打印总天数 - 4

标签: crystal-reportscrystal-reports-xi

解决方案


创建一个公式来启动全局变量。将公式放在报表标题中。压制它。

Global numbervar value :=0;
Global DateTimevar prevdate := DateValue (9990,12 ,31 );

然后创建另一个公式。这是原始公式的略微更改版本:

//do not set a value here! it just means the vars are being reused
Global numbervar value;
Global DateTimevar prevdate;

if {MainReport_24172.ENDDATE}= DateValue (9990,12 ,31 ) then
   value := value + DATEDIFF("d", {MainReport_24172.BEGINDATE}, CurrentDate)+1 //assuming BEGINDATE always <= CurrentDate
else if prevdate = {MainReport_24172.BEGINDATE} then
    value := value + DATEDIFF("d", {MainReport_24172.BEGINDATE}, {MainReport_24172.ENDDATE})
else
   value := value + DATEDIFF("d", {MainReport_24172.BEGINDATE}, {MainReport_24172.ENDDATE}) + 1;
prevdate := {MainReport_24172.ENDDATE}; //for the next iteration
value;

这样,如果您将第二个公式放在报表页脚中,它将打印总天数。

如果您需要按某些标准进行分组,我相信您将不得不在组标题中重置全局变量。所以,第一个公式会去那里。第二个公式将在组页脚中。


推荐阅读