当前位置:首页  >  表格软件专题  > 

加快FineReport报表控件设计的几个心得体会

作者:finereport

浏览:6,881

发布时间:2023.7.31

报表控件设计心得

如果你用报表控件报表的任务,那么你最开始要做的除了先熟悉下工具再让他们把需求确定之外,那就是要联系售前。然后根据你具体的报表效果,他们会给你最专业的指导,这样就不用你自己摸索着做了一个又一个版本,然后再被淘汰掉,可以节约很多时间和精力。

用报表控件的方法其实挺简单的,按设计器帮助文档里的介绍,按顺序看,并且按步骤实际操作,帮助文档都看一便并都操作了,就可以说开发优化部署都没问题了。

一、从远程服务器大批量取数进行表样设计时,最好按“列顺序”取一个“空的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行就分页。

报表工具产品更多介绍:www.finereport.com


在线客服

电话咨询

技术问题

投诉入口