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

时间:2015-04-10 14:57:22

标签: crystal-reports

这适用于Crystal Reports 2013支持包1

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

这就是我所拥有的:

在一个名为InitTicketList的公式中,它被“声明”如下:

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中。我们的想法是显示所有这些部件的列表,只显示每个部件一次。此外,只要报告长达一页,此报告就可以正常运行。

UpdateTicketList位于Details e的报告中。

最后,ShowTicketList看起来像这样:

WhilePrintingRecords;
Global StringVar TicketList;

它位于Group Footer #2b的报告中。

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

WhilePrintingRecords;
Global StringVar TicketList :="";

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

我正在寻找可以向我解释这种行为的事情或某人。我不知道我是否理解Crystal Report的三阶段报告引擎是否足以证明这一点。我很遗憾,我保留了Crystal Reports,我没有写,而且我的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

现在每页只会重置一次。

1 个答案:

答案 0 :(得分:2)

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

If OnFirstRecord Then Global StringVar TicketList := "";

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