《水晶报表自动补空行,补格线思路》 【转】
寫在文章之前
在2005年4月的 《水晶報(bào)表自動(dòng)補(bǔ)空行,補(bǔ)格線思路》一文中的最后,我有這么一句話
本文寫得比較倉促,心里感覺不塌實(shí)
可能有不少不足之處,歡迎大家進(jìn)行討論
時(shí)隔近3年后,這個(gè)不踏實(shí)終于體現(xiàn)出來(其實(shí)之前可能已經(jīng)有人提出來了,只是有相當(dāng)長的時(shí)間我沒有去關(guān)注。。。)
在Richard lee的留言中
http://www.cnblogs.com/babyt/archive/2008/01/27/138214.html#1054868
提到
我最近碰到財(cái)務(wù)的憑證報(bào)表問題
你的那個(gè)模板好用,可是每組的條數(shù)小于每張憑證的最大行數(shù)
假如一組的記錄數(shù)大于每張憑證的最大行數(shù),該如何處理?
我實(shí)際做了一下,我之前提供的方法對確實(shí)無法解決這種情況
而造成這種情況的原因,是我之前的文章中構(gòu)造的數(shù)據(jù)不完備造成的
因?yàn)閿?shù)據(jù)沒有涵蓋所有的情況
我是以5為分隔單位,但是我實(shí)質(zhì)上全部構(gòu)造了每組數(shù)據(jù)都小于5,但是對大于5,等于5的數(shù)據(jù)卻沒有構(gòu)造
這也再次驗(yàn)證了測試不充分的害處
在本文中,我使用了與之前的方法不同的另外一種方法,相比之前的方式來說,更容易理解些
原來是靠多個(gè)詳細(xì)資料節(jié)來實(shí)現(xiàn)的補(bǔ)充空格,現(xiàn)在,我們用組頁腳的方式來補(bǔ)充,相比來說,這樣是更合理的
本文,務(wù)必配合《水晶報(bào)表自動(dòng)補(bǔ)空行,補(bǔ)格線思路》一文使用,雖然那個(gè)方案可以說是不對的
之前我在原來的基礎(chǔ)上構(gòu)造了數(shù)據(jù),現(xiàn)在A組數(shù)據(jù)有8條數(shù)據(jù),B是10條,C,D均少于5條,E剛好5條
1、首先我們畫出模板,假設(shè)你也是顯示5行,那么,就用一個(gè)詳細(xì)資料節(jié),然后,將組頁腳拆分成4個(gè)
本例中,因?yàn)槭褂昧艘粋€(gè)固定的頁腳顯示合計(jì),所以是拆分成5個(gè)的,最后一個(gè)節(jié)固定顯示
這里使用了一個(gè)運(yùn)行時(shí)總計(jì)字段 ,用以跟蹤每條記錄在組中的序號,組變更時(shí),記錄重新編號,用途在后面的說明。
為了直觀些,我把這個(gè)字段拖到了界面上,實(shí)際操作時(shí),你可以將這個(gè)字段抑制顯示掉
模板中的紅字是為了顯示得更直觀加上去的,實(shí)際使用時(shí)刪除掉即可。
思路是這樣的,如果一組數(shù)據(jù),除以5剩余的部分,肯定是1、2、3、4,分別處理這幾種情況
當(dāng)剩余4條的時(shí)候,顯示組頁腳a,3的時(shí)候顯示b,2的時(shí)候顯示c,1的時(shí)候顯示d,補(bǔ)滿。
對于剛好5條的情況,在后面說明
特別注意:畫線的問題。如果你不注意此接,你會(huì)注意到,你的線可能會(huì)亂七八糟
請注意!在出現(xiàn)分組的情況,或者需要根據(jù)需要進(jìn)行運(yùn)行時(shí)抑制顯示控制時(shí),務(wù)必將豎線,控制在一個(gè)節(jié)內(nèi),不可跨接。
注意豎線的節(jié)點(diǎn)只能出現(xiàn)在自己所在節(jié)的兩個(gè)邊界內(nèi),不可出現(xiàn)在邊界外!
本文中的例子我偷了點(diǎn)懶,因?yàn)槲抑朗裁磿r(shí)候會(huì)出問題什么時(shí)候不會(huì),如果你不確定,請依照以上規(guī)則
2、分頁控制
本例子有兩種分頁控制,一種是組分頁,一種是一組數(shù)據(jù)大于5條時(shí),每5條的分頁
組分頁可以在組頁眉和組頁腳上設(shè)置,本文中組頁腳承擔(dān)了另外的補(bǔ)空格任務(wù),所以分頁在組頁眉上
增加一個(gè)公式
即每一個(gè)分組都換頁
然后在詳細(xì)資料節(jié)上設(shè)置公式,使每5條分一頁
//此處需要注意
//因?yàn)槲覀冊诜纸M上已經(jīng)加了一個(gè)分頁了,這里是組內(nèi)的輔助分頁
//
//如果記錄是5的倍數(shù),則是分頁時(shí)機(jī),但是要另外注意
if {#RTotal0} mod 5 =0 then
??? //如果此時(shí)是組內(nèi)的最后一條記錄,則此處不進(jìn)行分頁,因?yàn)闀?huì)有一個(gè)組分頁替換該
?if? Count ({材料采購明細(xì).材料名稱}, {材料采購明細(xì).品牌}) ={#RTotal0} then
??? false
?else
??? true
else
??? false
Count ({材料采購明細(xì).材料名稱}, {材料采購明細(xì).品牌})? 表示按組品牌分組后每組的記錄個(gè)數(shù)
{#RTotal0}?? 表示當(dāng)前的記錄需要
用以跟蹤每組的最后一條記錄,用以處理如果剛好是5的倍數(shù)的時(shí)候,出現(xiàn)詳細(xì)資料節(jié)與組出現(xiàn)重復(fù)分頁的情況
3、設(shè)置補(bǔ)充行顯示,以組頁腳a為例子,當(dāng)之前顯示4條,需要補(bǔ)充1個(gè)空行時(shí),此節(jié)顯示
//組的最后一條記錄
if Count ({材料采購明細(xì).材料名稱}, {材料采購明細(xì).品牌}) mod 5>0 and Count ({材料采購明細(xì).材料名稱}, {材料采購明細(xì).品牌}) mod 5<=4 then
??? false
else
??? true
其余各節(jié)依此類推
請?jiān)诖颂幭螺d示例模板及數(shù)據(jù)庫文件,將目錄解壓到E盤即可完整使用,CR9
http://files.cnblogs.com/babyt/20080128Crystal1.rar
本文從試驗(yàn)到最后成文花了我近兩個(gè)小時(shí)的時(shí)間,不過對我來說也是個(gè)教訓(xùn)了,
另外,幾年前的不踏實(shí),也希望就此解決之
-EOF-
20070127
轉(zhuǎn)載于:https://www.cnblogs.com/kingjiong/archive/2009/01/15/1376216.html
總結(jié)
以上是生活随笔為你收集整理的《水晶报表自动补空行,补格线思路》 【转】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 游戏玩家行为基本模式的初探小汇
- 下一篇: ADO.NET事物