Crystal Reports 使用一種三重傳遞的報表處理方式來產生報表。所謂傳遞是指每次 Crystal Reports 讀取與操控資料時使用的程序。依據報表的複雜度,Crystal Reports 可能會對資料進行一次、兩次或三次的傳遞。這項功能讓您能進行複雜的報表與公式操控。
當預覽一份報表時,最先驗算的元素是常數公式。常數公式是指在整個報表中有一個常數值的公式。它們並不會因資料錄而改變。例如:100* 30 就是一個常數公式。常數公式在列印產生程序開始時驗算,同時以後也不再驗算。這個程序即所謂的 BeforeReadingRecords。如果您打算在 [細目] 區段中放置一個常數公式欄位 (例如:100* 30),則每個資料錄顯示的結果將會是 3000。
當 BeforeReadingRecords 程序開始之後,Crystal Reports 便會開始讀取資料庫資料錄。在資料錄讀取程式中,執行下列的功能:
在第二重前置傳遞當中,Crystal Reports 將報表中的群組加以排序,以建立前 N 項/後 N 項或階層群組。在這個程序中並不讀取資料錄,Crystal Reports 只尋找第一重傳遞當中的群組執行個體,並適當地取出前 N 項,或依據指定的階層群組設定將群組排序。
Crystal Reports 在第二重傳遞中透過資料來格式化頁面。這些頁面視需要而格式化。也就是說,除非使用者要求,或是第三重傳遞中要求計算總頁數,否則 Crystal Reports 將不會格式化頁面。
在頁面格式化的過程中,Crystal Reports 執行下列的功能:
這些公式包含了小計或摘要資訊的參考,也被稱為 PrintTime 公式。這段驗算時間即稱為 WhilePrintingRecords。
包含累加值及/或 PrintTime 公式的交叉表、圖表和地圖,以及以交叉表為基礎的圖表,都會在第二重傳遞中產生。
注意 如果報表中有群組選擇公式,小計、總計與摘要可能會不正確。這是因為總計與摘要在第一重傳遞中算出,但是在第二重傳遞中,群組選擇公式又篩選了一次資料。因此在包含群組選擇公式的報表中,可以用累加值欄位來取代總計資料的摘要。
在第三重,也就是最後一次傳遞中,決定頁面的總數。這應用於使用總頁數計數或第 N 頁/共 M 頁等特殊變數欄位的報表。