Crystal Reports Designer  

全局变量(Basic 语法)

全局变量使用相同的内存块在整个主报表中存储一个值。除子报表中的公式外,该值随后可用于所有声明此变量的公式。如下例所示声明全局变量:

Global y As String

由于全局变量在整个主报表中共享它们的值,因此不能在某个公式中使用某个类型声明全局变量后,再使用同一个名称在不同的公式中以不同的类型声明全局变量。

何时使用全局变量

全局变量通常用于执行复杂的计算,计算的公式结果取决于实际打印的报表的分组和页面布局。为此,需创建若干公式,将它们置于报表的不同节,并通过全局变量使这些不同的公式互相作用。

示例

Rem Formula C
Global x as Number
x = 10
formula = x
Rem Formula D
'call the function WhileReadingRecords
WhileReadingRecords
Global x as Number
x = x + 1
formula = x

如果将公式 C 置于“报表页眉”,然后将公式 D 置于“详细资料”节,则公式 C 先于公式 D 求值。公式 C 经过一次求值后,“详细资料”节每次出现记录时,便求值公式 D。公式 C 返回 10。对于第一条明细记录,公式 D 返回 11。这是因为 x 的值 10 在公式 C 中设置之后就被保留了。然后公式 D 将此值加 1,将 x 设置为 11 并返回 11。对于第二条明细记录,公式 D 将 1 加到此前保留的 x 值(其值为 11)上,返回 12。对于剩余的明细记录,将继续进行此过程。

调用 WhileReadingRecords 使得 Crystal Reports 在读取报表的每个记录时重新对公式 D 求值。否则,由于该公式不包含任何数据库字段,所以程序在从数据库读取记录之前,只对该公式进行一次求值。处理连续记录时,公式将返回值 11 而不是 11、12、13 等等。

如果语句 x = x + 1 由 x = x + {订单细节.数量} 替换,将产生基于 {订单细节.数量} 运行总计的效果,但是由于公式 C,起始值将是 10 而不是 0。在这种情况下,可以不必调用 WhileReadingRecords,因为它将因公式包含数据库字段而自动出现。

另请参见

变量作用域 | 局部变量 | 共享变量 | 报表节概述