http://www.cnblogs.com/babyt/archive/2005/05/26/163260.html
在我以前的一篇文章中,我錯誤的使用了運行時總計的形式來實現每頁的彙總
因爲當時比較粗心,沒有注意到使用該方式其實是實現了當前頁之前的所有頁面數據的彙總
後來也一直沒有找到合適的方法
最近在做一個應用的時候,突然意識到問題的所在
主要是我們太侷限於用一個公式來解決所有的問題。
其實我們可以使用多個公式配合來解決。
思路如下(Crystal語法):
1:用一個變量mySum來累計頁面數據 “訂單.訂單金額”
公式@CurrentSum,放在詳細資料節需要進行彙總的字段的位置
CurrencyVar mySum;
mySum:=mySum + {訂單.訂單金額};
如果不需要顯示,抑制顯示即可
2: 在每頁的頁腳獲取到這個變量的值(也就是該頁最後一個Sum值),當然這個時候後一個mySum是前面所有數據的和,
也就是仍然是我以前犯的錯誤症狀
@CurrentPageSum
CurrencyVar mySum;
3:關鍵所在,在每頁的頁眉或者頁腳的位置將我們的變量重置@ResetPageSum,保證在每頁的開始它都是從0開始累計的
CurrencyVar mySum := 0;
在這裏對兩個基本概念進行說明
WhilePrintingRecords:
這裏的Printing不是指打印機打印的時候,而是水晶報表在獲取完數據後將數據顯示在報表上的過程
該函數也可以強制不含數據庫字段和組字段的公式在打印記錄的同時而不是在讀取記錄之前進行處理。它還強制含有數據庫字段的公式在打印記錄而不是在讀取記錄的同時進行處理。
變量的作用域問題 :
在前一篇文章裏我對共享變量進行了說明,而此處則使用的是全局變量(Global)的特性
同一名稱的全局變量,在報表(一個報表,不含子報表)中使用同樣的內存空間,可以爲報表中所有的公式使用
默認情況下,可以省略Global關鍵字,所以在前面的公式中沒有出現這個關鍵字