加快FineReport報表控制項設計的幾個心得體會

文 | 軟妹 2015-02-22 20:00:35

報表控制項設計心得

如果你用報表控制項報表的任務,那麼你最開始要做的除了先熟悉下工具再讓他們把需求確定之外,那就是要聯繫售前。然後根據你具體的報表效果,他們會給你最專業的指導,這樣就不用你自己摸索著做了一個又一個版本,然後再被淘汰掉,可以節約很多時間和精力。

用報表控制項的方法其實挺簡單的,按設計器幫助文檔里的介紹,按順序看,並且按步驟實際操作,幫助文檔都看一便並都操作了,就可以說開發優化部署都沒問題了。

一、從遠程伺服器大批量取數進行表樣設計時,最好按「列順序」取一個「空的SQL語句」,這樣可提高設計速度。否則每次設計時模板均要從遠程讀取數據,速度相當慢!!

二、找一個富文本編輯軟體(如NOTEPAD+)編輯SQL語句,這樣會很好地檢查語法。有時候帶參數較多檢查語法複雜時,結合FineReport中生成的日誌,再找一個第三方資料庫訪問軟體(如PL/SQL)進行數據檢索,可以很快定位語法錯誤。

三、想用報表控制項實現的表樣較為複雜,搞不清楚某些單位格的上下左右父格時,將整個模板的父格均設為「無」,再根據需要擴展的單位格重新定位其上下左右父格,結合第一條往下做,最終可以得到較為滿意的表樣。

四、管理員密碼忘記了怎麼辦?不急,刪除 web-inf/resource/privilege.xml,然後重啟設計器,就可以重新設置

五、模板報錯,超出行高或列寬?向下者向左合并單元格!

六、返回月份的第一天和最後一天?

上個月第一天:format(MONTHDELTA(today(),-1),”yyyyMM01″)

上個月最後一天:eval(“format(MONTHDELTA(today(),-1),”yyyyMM”+DAYSOFMONTH(MONTHDELTA(today(),-1))+””)”)

當月:format(today(),”yyyyMM01″)

第一天:eval(“format(today(),”yyyyMM”+DAYSOFMONTH(today())+””)”)

七、自動擴展出月份或者年份?使用range()函數,配合字元串拼接,如:range(12)+”月”

八、自動添加序號,seq()函數,左父格設置為後面的單元格

九、使用單元格數據作為圖表數據時,分類軸、系列名與系列可能不是由一個單元格擴展出來,而是由多個單元格組成,此時定義圖表數據規則如下:如果數據來自於一片連續的單元格如A1~A3:則定義時使用公式=A1:A3,用冒號隔開。如果數據來自於不連續的多個單元格如A1、A3、A5:則定義時使用公式=[A1,A3,A5]用逗號隔開,並且需要加上[]號。

十.在製作模板時,如何將報表控制項中的值傳遞到超鏈接網頁呢?

在項目中以frame方法把F1.CPT放到項目的頁面中,對F1.CPT做網路報表超鏈接F2.CPT,然後在F2.cpt頁面中,做個超鏈接的網頁,超鏈接的URL裡面輸入地址,並在下面輸入要傳遞的參數名和參數值,然後在網頁中通過request.getParameter(“超級鏈接中的參數名”)獲取參數就可以直接使用了。

十一.一個模板的2個sheet之間的取值和校驗?

在某個單元格里直接輸入=sheetname!cellname 來實現跨sheet取值,eg:=sheet2!A2 就是sheet2表單的A2單元格的值,校驗同樣原理。

十二.下拉框的選值發生變化

在下拉框里設置好數據源,顯示值和實際值,但在選中某個值之後卻發現選中的值變為了實際值了,在這裡需要在這個單元格的樣式里重新把數據源再設置一遍就可以了。

十三.超鏈接傳值,如何動態的傳別的對應單元格(一一對應的單元格)的值

在超鏈接中,正常傳遞參數eg: PKID=’${PKID}’,然後在右邊的參數欄里添加參數PKID,其值選擇公式,協商你要傳遞的值的 單元格

十四.JS取值失敗

在用JS GetCellValue取值的時候會發現取值不對,或者為空。這有可能是因為你要取值的單元格是在某個擴展行的後面了,所以導致單元格的位置發生了變化,所以盡量要在擴展行的上面放置你JS要取的值。

十五.報表控制項的的埠:

FR自身有一個埠8075,但我們在使用的過程中一般都不會用8075作為FR的埠來使用,通常和TOMCAT之類的服務結合起來使用。

十六.數據混亂,不是一一對應的:

首先檢查資料庫看數據是不是一一對應的,如果沒錯,那可能是單元格的左父格設置問題,建議自己多做幾張實踐下就會明白左父格的含義。

十七. 日期轉換為中文日期[2012-03-20]–>[二〇一二日三月二十日]

設計器單元格:

A1:=FORMAT(TODAY(),”yyyy-MM-dd”)

A2:=REPLACE(NUMTO(YEAR(A1),true),”零”,”〇”)+”年”+NUMTO(MONTH(A1),false)+”月”+NUMTO(DAY(A1),false)+”日”

PS:使用中文日期,直接調用A2單元格即可,或者在A1單元格的公式形態里設置A2的公式。

十八、模擬GridView的一些功能可以去看下面的連接{:soso_e113:}

http://bbs.finereport.com/thread-14558-1-1.html

十九.批量導出報表:

http://localhost:8079/WebReport/ReportServer?reportlets=({reportlet:/FRTable501.cpt},

{reportlet:/FRTable601.cpt})&format=excel&__filename__=name 但該功能在導出13張報表的時候就會出錯。

二十.點擊頁面彈出子頁面,按鈕的點擊事件

FR.showIframeDialog({
url:”ReportServer?reportlet=SMES/NewAdd.cpt&op=write”,
title:”title”,
width:600,
height:600
})

二十一.子頁面刷新父頁面

在父頁面做個按鈕,ID為btnRefresh 點擊事件為:location.reload();

在子頁面的填報成功事件里寫:

var top = window.parent;

var reportPane = top.contentPane;

var btn = reportPane.curLGP.write.getWidgetByName(“btnRefresh”);

btn.fireEvent(“click”);

二十二. url中的參數

首先是op參數。文檔:http://www.finereporthelp.com/help/6/3/3.html

報表在默認情況下的預覽方式是分頁預覽,當op參數為write時為填報預覽,op=view是數據分析,op=form是表單模式

op=fs,數據決策系統

op=fr_platform,報表控制項平台管理

op=excel_submit,後台excel導入填報

op=auth_login,登錄的中間頁面,需要fr_username和fr_password參數

op=fr_adhoc&cmd=ac_init_analysispane&viewname=數據集名字,單獨打開BS設計器

其他的參數:

__bypagesize__ :控制是否分頁

__pi__ :是否顯示參數界面

__filename__ :控制導出文件名,沒有的話默認用模板名

二十三、單元格最好是合并的

另外大家在畫模板的時候,特別是對一些表格的製作方面,最好是每個單元格都是合并的單元格,這樣以備後來的修改方便。如果每個數據都僅佔用一個單元格,後期需要發生變化 就會給修改表格的樣式帶來麻煩。

二十四、每頁固定顯示行數設置

右擊A5單元格,選擇條件屬性,彈出條件屬性設置對話框,點擊左側添加按鈕,屬性欄裡面選擇分頁,下拉框裡面選擇行後分頁,公式條件類型裡面選擇公式,公式為&A5 % 5 = 0

A5 是代表A5單元格,然後% 是除號,後面的5,是代表行數,代表分頁到第5行就分頁。

Copyright©2019 Fanruan Software Co.,Ltd. All Rights Reserved. 帆軟軟體有限公司 | 蘇ICP備14031611號-8

返回頂部