为什么在水晶报告中使用beforereadingrecords/whilereadingrecords/whileprintingrecords?

tdj*_*jdj 2 sql t-sql database crystal-reports

我知道水晶报告在呈现报告时有3个阶段,并且根据阶段可能会读取静态数据或分组数据字段等,但是在这些阶段的任何阶段中编写公式是否有任何好处?如果我指定相位,最终结果应该始终相同?

Rya*_*yan 5

最终结果并不总是相同的,省略评估时间函数有时会导致错误的结果.例如,假设您有一个已分组的报表,并且您正在尝试使用变量计算这些组的简单小计.假设您正在重置组头中的变量并在页脚中显示它,同时通过详细信息部分更新它:

numbervar subtotal;
subtotal := subtotal + {table.numericvalue}
Run Code Online (Sandbox Code Playgroud)

Crystal将在读取记录时以及记录处于可预测,分组和排序顺序之前评估此公式.直到第二遍,whileprintingrecords通过,记录才被分组和排序.这就是为什么群体选择在这个过程中发生的原因.

这只是一个例子,但是有很多方法可以通过省略评估时间函数来破解报告,主要是使用变量(至少我能想到).以下是有关Crystal多次传递的详细信息:Crystal Reports Engine的多次传递报告过程