Crystal Reports 使用三次传递建立报表方法来生成报表。传递是 Crystal Reports 每次读取和操作数据时所使用的过程。根据报表的复杂性,Crystal Reports 可将数据传递 1 次、2 次或 3 次。这种功能使得可以处理复杂的报表和公式。
预览报表时,被求值的第一批元素为“常量”公式。常量公式是含有整个报表的常量值的公式。它们对每个记录都是一样的。例如,100* 30 是常量公式。常量公式在打印生成过程开始时求值,以后不再求值。该过程称为“BeforeReadingRecords”。如果将常量公式字段(如 100*30)放入“详细资料”部分,则结果是对于每个记录均显示 3000。
在“BeforeReadingRecords”过程发生后,Crystal Reports 开始读取数据库记录。在记录读取过程中,将发生下列事项:
在第 2 次预传递过程中,Crystal Reports 将报表中的组按“最前 N 个/最后 N 个”或按“层次分组”排序。Crystal Reports 在该过程中不读取记录,而是只查看来自第 1 次传递的组实例,并取“最前 N 个”作为适当的顺序,或者根据指定的“层次分组”设置对组排序。
Crystal Reports 从数据到格式化页面开始进入第 2 次传递。根据要求格式化页面。这表示直到用户请求,或为满足第 3 次传递的总页数要求时,Crystal Reports 才格式化页面。
在页面格式化过程中,Crystal Reports 做下列工作:
这些是包含对小计或摘要信息的引用的公式,也称为“PrintTime”公式。该求值时间称为“WhilePrintingRecords”。
包含运行总计和/或 PrintTime 公式的交叉表、图表和地图以及基于交叉表的图表在第 2 次传递中生成。
注意 如果报表有组选定公式,小计、总计和摘要可能会不正确。之所以会出现这种情况,是因为总计和汇总在第 1 次传递期间计算,但组选定公式会在第 2 次传递中再次过滤数据。在包含组选定公式的报表中,可以用运行总计字段代替汇总来计算报表数据的总计。
在第 3 次、也是最后一次传递中决定总页数。这一步适用于使用总页数或“第 N 页,共 M 页”等特殊变量字段的报表。