1. 程式人生 > >2019-1-17水晶報表技巧總結【2】

2019-1-17水晶報表技巧總結【2】

ron har int函數 false ide 改進 資料 公式 資源管理器

第一條:水晶報表分組分頁且每頁最多顯示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】