Crystal reports Crystal Reports:共享变量在页面而不是组之后重置
这适用于Crystal Reports 2013支持包1 我有一个共同的变量,让我适合。特别是,当我的报告只有一页长时,它可以工作,但如果报告超过一页长,它会自动重置,我不知道为什么。最终结果是,它只显示其所在页面的数据,而不显示其所在分组的数据,这是预期的行为 以下是我所拥有的: 在名为Crystal reports Crystal Reports:共享变量在页面而不是组之后重置,crystal-reports,Crystal Reports,这适用于Crystal Reports 2013支持包1 我有一个共同的变量,让我适合。特别是,当我的报告只有一页长时,它可以工作,但如果报告超过一页长,它会自动重置,我不知道为什么。最终结果是,它只显示其所在页面的数据,而不显示其所在分组的数据,这是预期的行为 以下是我所拥有的: 在名为InitTicketList的公式中,“声明”如下: WhilePrintingRecords; Global StringVar TicketList := ""; WhilePrintingRecords
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ö然而,你的建议与我上面所做的结合起来,解决了这个问题!所以,如果你把它作为一个答案,我会接受它。谢谢!补充了一个答案。