Crystal 报告:共享变量在页面而不是组后重置

Crystal Reports: Shared variable resets after page instead of group

这适用于 Crystal Reports 2013 支持包 1

我有一个适合我的共享变量。特别是,它在我的报告只有一页长时有效,但如果报告超过一页长并且我不知道为什么,它会自行重置。最终结果是它只显示它所在页面的数据,而不是它所在的分组的数据,这是预期的行为。

这是我的:

在一个名为 InitTicketList 的公式中,它是 "declared" 这样的:

WhilePrintingRecords;
Global StringVar TicketList := "";

此公式字段在 Group Header #2a 的报告中。

公式 UpdateTicketList 声明如下:

WhilePrintingRecords;
Global StringVar TicketList;
StringVar item := Split({Command.TicketNumber}, ".")[UBound (Split({Command.TicketNumber}, "."))];
if InStrRev(TicketList, item) <= 0 then
    TicketList := TicketList +item + "; ";

我认为这里的逻辑是正确的,原因有二: 我已经用数据测试过它并且它有效。它所做的是将格式为 xxx.xxxxxxxxxxxxxxxxx 的数字的第二部分的一个实例附加到 TicketList 中。这个想法是显示所有这些部分的列表,每个部分只显示一次。另外,这份报告只要一页就可以完美呈现。

UpdateTicketListDetails e 的报告中。

最后,ShowTicketList 看起来像这样:

WhilePrintingRecords;
Global StringVar TicketList;

它在 Group Footer #2b 的报告中。

还有一个ClearTicketList公式,也在Group Footer #2b中。它看起来像这样:

WhilePrintingRecords;
Global StringVar TicketList :="";

但是,我已将 ClearTicketList 作为实验删除,报告行为仍然相同。

我正在寻找可以向我解释这种行为的人或事。我不知道我对 Crystal 报告的三阶段报告引擎的理解是否足以解释这一点。不幸的是,我维护的 Crystal 报告不是我写的,而且我的 Crystal-Fu 不是很深。

我的目标是让这个公式适用于任意页数和分组数的报告。

更新:

虽然看起来全局变量在每一页后都会重置,但这并不是全部。细节部分被隐藏了,让人很难看清发生了什么。它实际上是在每个在 {Command.TicketNumber} 中具有空白值的详细记录之后重置的,而这恰好与新页面重合。当然,这有点偏离 UpdateTicketList 公式。我修改为:

WhilePrintingRecords;
Global StringVar TicketList;
StringVar item := Split({Command.TicketNumber}, ".")[UBound (Split({Command.TicketNumber}, "."))];
if InStrRev(TicketList, item) <= 0 then
    TicketList := TicketList +item + "; "
else 
    TicketList := TicketList

现在它真的每页只重置一次。

在重置变量的所有公式中,必须进行充分的检查,以确保重置仅发生在第一条记录上,而不是发生在每一页上,例如:

If OnFirstRecord Then Global StringVar TicketList := "";

可能用于不同检查的其他功能例如:
GroupNumber
Next
Previous
RecordNumber