全域變數在整個主報表中使用同一個記憶體區塊來儲存值。除了子報表中的公式以外,所有宣告變數的公式都可以使用這個值。請如下列範例一樣宣告全域變數:
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,這是因為公式 C 保留了 x 的值 10,公式 D 再將此值加上 1,使 x 成為 11,並傳回值 11。在第二筆詳細資料錄中,公式 D 會傳回 12,也就是將前一筆 x 的值 11 加上 1。這個程序會重複運用在後面的詳細資料錄中。
呼叫 WhileReadingRecords 的動作通知 Crystal Reports 在讀取報表中的每一筆資料錄時,重新驗算 Formula D。否則,因為該公式並未包含任何資料庫欄位,所以當程式從資料庫中讀取資料錄時,只會驗算該公式一次。因此,當公式處理後面的資料錄時,都會傳回 11,而不會依序傳回 11、12、13 等。
如果以 x = x + {Orders Detail.Quantity} 來取代陳述式 x = x + 1,表示您根據 {Orders Detail.Quantity} 來建立累加值,即使因公式 C 的關係,使得它從 10 開始累計而不是從 0 開始。在此例中,由於公式中含有資料庫欄位,您可以省略呼叫 WhileReadingRecords 的程序,因為它會自動發生。