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

Crystal reports Crystal Reports:共享变量在页面而不是组之后重置,crystal-reports,Crystal Reports,这适用于Crystal Reports 2013支持包1 我有一个共同的变量,让我适合。特别是,当我的报告只有一页长时,它可以工作,但如果报告超过一页长,它会自动重置,我不知道为什么。最终结果是,它只显示其所在页面的数据,而不显示其所在分组的数据,这是预期的行为 以下是我所拥有的: 在名为InitTicketList的公式中,“声明”如下: WhilePrintingRecords; Global StringVar TicketList := ""; WhilePrintingRecords

这适用于Crystal Reports 2013支持包1

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

以下是我所拥有的:

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

WhilePrintingRecords;
Global StringVar TicketList := "";
WhilePrintingRecords;
Global StringVar TicketList;
StringVar item := Split({Command.TicketNumber}, ".")[UBound (Split({Command.TicketNumber}, "."))];
if InStrRev(TicketList, item) <= 0 then
    TicketList := TicketList +item + "; ";
WhilePrintingRecords;
Global StringVar TicketList;
WhilePrintingRecords;
Global StringVar TicketList :="";
If OnFirstRecord Then Global StringVar TicketList := "";
此公式字段位于报告的
组标题#2a

公式
UpdateTicketList
声明如下:

WhilePrintingRecords;
Global StringVar TicketList := "";
WhilePrintingRecords;
Global StringVar TicketList;
StringVar item := Split({Command.TicketNumber}, ".")[UBound (Split({Command.TicketNumber}, "."))];
if InStrRev(TicketList, item) <= 0 then
    TicketList := TicketList +item + "; ";
WhilePrintingRecords;
Global StringVar TicketList;
WhilePrintingRecords;
Global StringVar TicketList :="";
If OnFirstRecord Then Global StringVar TicketList := "";
它出现在
组页脚#2b
中的报告中

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

WhilePrintingRecords;
Global StringVar TicketList := "";
WhilePrintingRecords;
Global StringVar TicketList;
StringVar item := Split({Command.TicketNumber}, ".")[UBound (Split({Command.TicketNumber}, "."))];
if InStrRev(TicketList, item) <= 0 then
    TicketList := TicketList +item + "; ";
WhilePrintingRecords;
Global StringVar TicketList;
WhilePrintingRecords;
Global StringVar TicketList :="";
If OnFirstRecord Then Global StringVar TicketList := "";
然而,作为一个实验,我删除了
ClearTicketList
,报告行为仍然是一样的

我在找能向我解释这种行为的人或事。我不知道我是否对Crystal Report的3阶段报告引擎有足够的了解来解释这个问题。我很不幸,我没有写水晶报告,我的水晶赋也不是很深

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

更新:

虽然看起来似乎全局变量在每一页之后都会重置,但这并不是全部。“详细信息”部分被抑制,因此很难看到发生了什么。它实际上是在{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
打印记录时;
全球股票清单;
StringVar项:=Split({Command.TicketNumber},“.”)[UBound(Split({Command.TicketNumber},“.”));

如果在重置变量的所有公式中,InStrRev(TicketList,item)必须进行适当的检查,以确保重置仅发生在第一条记录上,而不是在每一页上,例如:

WhilePrintingRecords;
Global StringVar TicketList := "";
WhilePrintingRecords;
Global StringVar TicketList;
StringVar item := Split({Command.TicketNumber}, ".")[UBound (Split({Command.TicketNumber}, "."))];
if InStrRev(TicketList, item) <= 0 then
    TicketList := TicketList +item + "; ";
WhilePrintingRecords;
Global StringVar TicketList;
WhilePrintingRecords;
Global StringVar TicketList :="";
If OnFirstRecord Then Global StringVar TicketList := "";
其他可能用于不同检查的功能包括:
GroupNumber

下一步

以前的


RecordNumber

如果您在声明中输入:
如果是OnFirstRecord,那么全局StringVar TicketList:=”不幸的是,行为仍然是一样的。不过,我明白为什么这是一件值得尝试的好事情。我不明白的是,为什么全局变量似乎会在一个页面上重置。@Simo Kivistö然而,你的建议与我上面所做的结合起来,解决了这个问题!所以,如果你把它作为一个答案,我会接受它。谢谢!补充了一个答案。