2019-1-17水晶報表技巧總結【2】
第一條:水晶報表分組分頁且每頁最多顯示N條記錄
要求:1、詳細節最多5條記錄(不能超過5條);
2、無論前一組是否滿5條記錄,每個新組都要另起一頁
3、可以顯示組內分頁的情況,即:顯示一個組被分為幾頁並且當前是第幾頁
我們知道每頁最多顯示N條的控制方法,打開節專家,在詳細節後面新建頁公式編輯:
RecordNumber mod N = 0
RecordNumber即記錄數,無論分組與否,是自動隨記錄遞增的,所以在這裏,我們不能用RecordNumber,而應該是在每個新組前要重置這個RecordNumber,用這個重置的RecordNumber來取模控制每頁最多顯示5條記錄,於是我們很自然就想到了運行總計字段,由它來幫我們重置RecordNumber,
這樣我們應該就很明朗了,接下來讓我們一起去設計模板:
報表按ID分組就不用再提及了吧?(右擊報表空白處->插入->組)
首先新建一>運行總計字段匯總字段:XXX(最好選擇的字段和分組字段不同)
匯總類型:計數
求值:對於每個記錄
重置:組更改時
設計好後把,字段放到【詳細資料】中,根據需要可以抑制顯示。
點擊節專家,【詳細資料】-->【在後面也新建頁】勾上-->設置公式:
字段是剛剛建立的【運行總計字段】 {#RTotal0} mod 10=0
針對需求2,與需求1同理,只不過此時我們是在#組尾(組頁腳)節在後面頁新建頁的公式編輯:
Not OnLastRecord
OnLastRecord意指最後一條記錄,Not OnLastRecord自然是非最後一條記錄,在這裏就是指非最後一條記錄時就在後面頁新建頁,最後一條記錄時就不用再新建頁了。若不用該公式控制的話,報表的最後一頁總是空白頁(沒有詳細節數據)
需求3:組內分頁及顯示頁碼
新建一個【公式字段】公式設置如下:
記錄的組記錄總數:count(一個報表參數,分組參數);前者最好是運行總計的字段。如果有匯總,請在count最後+1,因為多一行數據。!!!
方式一:註意組內數據條數和當前組內序號
//每個組的總記錄數 NumberVar groupRecordCount := Count ({DataTable3.Type}, {DataTable3.ID}); //每個組的總頁數 NumberVar groupPageCount := groupRecordCount / 5; If Int(groupPageCount) <> groupPageCount Then ( groupPageCount := Int(groupPageCount) + 1 ); //重置後的RecordNumber NumberVar groupRecordNumber := {#RTotal0}; //組內當前頁 NumberVar groupPageNumber := groupRecordNumber / 5; If Int(groupPageNumber) <> groupPageNumber Then ( groupPageNumber := Int(groupPageNumber) + 1 ); //最終報表界面顯示 ‘第‘ + ToText(groupPageNumber, 0) + ‘頁 / 共‘ + ToText(groupPageCount, 0) + ‘頁‘ //說明:Int函數是取整函數,如Int(1.2)=1; Int(1.9)=1 //寫好後將該公式字段拖放到#組頭(組頁眉)節即可
方式二:註意組內數據條數和當前組內序號
numbervar x1; numbervar x2; numbervar p1; numbervar p2; //x1是每個組的數據條數 x1:=count({OUT_1_DATASET.code1},{OUT_1_DATASET.Warehouse_position}); //得到總頁碼 if(x1%10=0)then p1:=x1/10 else p1:=INT(x1/10)+1; //得到當前行組內序號。其實就是換頁第一條的序號 x2:={#RTotal0}; //用序號除以每頁的條數5,得到當前頁碼 if(x2%10=0)then p2:=x2/10 else p2:=INT(x2/10)+1; //組合 ‘第‘+totext(p2,0)+‘頁/共‘+totext(p1,0)+‘頁‘
第二條:一個獲取記錄的標記和頁腳的顯示
在IDE左側的“字段資源管理器”裏的“公式字段”點擊右鍵“新建”,新 建一個字段“Group”,編輯賦值: whilereadingrecords; true; 這裏是TRUE,獲取的就是“真”,否則獲取的就是“假”
控制子報表每頁顯示數目,假設為10行每頁,只是做一下說明,不要設置公式 註意設置的行數最好基本上能打印到頁面的底部 拆分一個詳細資料節出來,把頁腳內容寫上,抑制顯示,設置公式為 recordnumber mod 10<>0 在這個節上進行分頁控制,“在後面頁先建頁面”勾上,設置公式為 recordnumber mod 10=0 這樣的話每頁最下面會顯示該節模擬頁腳 最後一頁如果不滿10行的話,因為你設置了報表頁腳,也可以模擬成一個頁腳了 為了防止最後有一頁剛好顯示10行導致出現雙重頁腳 還需要進一步改進一下抑制顯示的公式 If onlastrecord then true else if recordnumber mod 10<>0 then true else false 最後頁不足,用空行填充: (Basic語法) 新增一個空白詳細資料行,格式化此節,在抑制顯示(無深化)打勾 公式中輸入: if not onlastrecord then FORMULA = TRUE else if (RecordNumber mod 5 <= 1) then ‘第一個 FORMULA = TRUE else FORMULA = FALSE end if end if
2019-1-17水晶報表技巧總結【2】