2015年4月28日 星期二

Crystal Report repeat group header when change page

還是先嫌棄Crystal Report一下...真是很難用阿阿阿~
加上奇怪的中文翻譯~害我爬文爬很久,就是看不到像樣的鬼... 造成更多的誤解!!!!!

這次的需求其實也算合理,就是xls table式的排版,然後資料列太多,在下一頁上方顯示表頭。
一般情況應該很簡單,就是把表頭做在Crystal Report內的「頁首」就好~

BUT...人生就是有個BUT!
我的報表是有group分類的........天曉得group那時候換下個group...
搞不好人家剛好分段下面,下一頁又是漂亮的開始~所以基本上~這就會變成是動態的~
前一頁有完整結束,就不要重覆表頭,前一頁資料還沒完就show表頭...

查了很久,Crystal Report並沒有內建可以動態做到分頁順便幫你重複顯示表頭或區段的設定~所以...只好再度使用奇怪的手段一.一|||...

首先版面設計,要先做規劃,新增一區「頁首b」,並開立公式做狀態轉換
「頁首a」            原頁首
「頁首b」            重複表頭的樣式
「群組首#1」     群組資訊+表頭
「細目」              @group_flag
「群組尾#1」     @group_flag_end
「報表尾」


運用採用Status Diagram的概念, 定一個Shared的變數,當資料列在「細目」時,其flag=2,當在「群組尾」結束時回歸flag=1。(Crystal Report的數字 init是1...)
這樣當我在換頁時,就可以看flag,若為2就是還在畫細目中,要重覆表頭。1的話表示群組結束或開始,不須顯示表頭。

公式內容相當簡單如下:
@group_flag
Shared numberVar flag;
page := 2;
''
(最後一行要打上空字串'',才不會被看到,但在開發預覽可以不用打,方便看值的變化)

@group_flag_end
Shared numberVar flag;
page := 1;
''

最後在設計區,右鍵打開「區段專家」,選擇「頁首b」區段
右邊Tab「一般」,有個「抑制顯示(無截取細目)」<--頁首只有這個可以編輯,算了就加減用就是,項目的右邊有個「x-2」的圖示,點圖示後就可以用公式寫法來控制要顯示(false)跟隱藏(true)
注意這邊是結果要回傳true/false,跟一般寫回傳字串數字不同。
Shared numberVar flag;
if page > 1 then
false
else
true

這邊編寫完成後,應該會看到小圖示「x-2」會變色。(應該只是標明有額外撰寫公式判斷,但他變紅色一整個就像在說寫錯了一樣)。然後該項設定的checkbox(勾)是沒有作用的,所以不要勾起來(勾起來設計頁面會看不到區段內容,要再拉表單會造成困擾)

接著就可以測試「頁首b」是否有正常的運作了~建議可先寫簡單的幾個字~看動態有沒有正確出現再去拉對齊苦工。






沒有留言: