首先先來了解 Crystal Reports 處理報表模型 (詳情請參考 [msdn] 報表處理模型)

20110209_1.gif

 

Crystal Reports 會自動根據公式的內容決定執行時間,但 BeforeReadingRecords、WhileReadingRecords  WhilePrintingRecords 及 EvaluateAfter 函式可以自行指定公式執行的時機。(請注意:該名稱必須出現在公式的第一行!)

◎ BeforeReadingRecords

指定在讀取資料庫資料前計算

 

◎ WhileReadingRecords

指定在讀取資料庫資料時計算

 

◎ WhilePrintingRecords

指定在列印資料時計算

 

Crystal Report 的摘要只能針對整份報表或是群組,以下介紹如何使用上述函式來對每頁做出統計資料。

 

§ 每頁小計的範例:在每頁的頁尾顯示出該頁的統計結果資料,e.g. 每頁資料筆數統計、每頁資料加總統計......

1. 先建立三個公式欄位

 

20110210_1.JPG


1_ResetPage
:在每頁的 Page Header (頁首) 將小計變數重設為 0 。


WhilePrintingRecords;
Global currencyVar PageSum:= 0;



2_CalcPage
:在 Details (細目) 累加每筆資料的值。


WhilePrintingRecords;
Global currencyVar PageSum;
PageSum := PageSum + {客戶.業績};

 


3_ShowPage
:在每頁的 Page Footer (頁尾) 顯示當頁統計結果 。


WhilePrintingRecords;
Global currencyVar PageSum;
PageSum;

 

 

2. 將前述建立的三個公式放置到適當 Section (區段) 裡。(請參考上表顯示棕字)

3. 若除了第三項要於報表上顯示出來,其他兩項不想顯示出來的話,可於 Format Field (欄位格式設定) 選項中 Common (一般) 頁籤的 Suppress (抑制顯示) 屬性勾選設定隱藏之。

20110210_2.JPG

 

◎ EvaluateAfter

指定執行順序

 

§ 範例:

1. 先建立兩個公式欄位

 

20110210_3.JPG


Formula_A
(先建立)


Global StringVar str;
str:= str & " 這是 Formula_A";



Formula_B
 (後建立)


Global StringVar str;
str:= str & " 這是 Formula_B";

 

2. 把該兩公式放入報表中 (先放入 Formula_B 再放入 Formula_A)

 20110210_5.JPG

報表顯示結果為

 20110210_6.JPG

 

因為放在同一區段的公式,其預設會依照其建立的先後順序來執行,所以結果是先執行 Formula_A 後再執行 Formula_B

3. 更改 Formula_A (透過 EvaluateAfter 指定 Formula_A 要在 Formula_B 之後執行)

Formula_A


EvaluateAfter ({@Formula_B});

Global StringVar str;
str:= str & " 這是 Formula_A";


報表顯示結果為

20110210_7.JPG

創作者介紹
創作者 tsuozoe 的頭像
tsuozoe

隨便寫寫的新天地

tsuozoe 發表在 痞客邦 留言(0) 人氣()