因工作需要,自学了FineReport,该报表工具通过类Excel的设计器一键连接数据源,建立在SQL写好数据集的基础上,拖拽字段绑定单元格,就可以制作出各种炫酷、实用的报表。接下来就遇到的实际问题做一番总结。
一、简单报表设计
1、 建立数据集(SQL)
2、制表(同EXCEL)(拖拉需要的字段)、设置参数控件
二、复杂报表设计(注意:折叠树报表需要用数据分析预览)
(一)折叠树-双向折叠(横向和纵向)
A、纵向折叠需要设置左父格;条件属性——行高(len($$$) = 0)
横向折叠设置上父格;条件属性——列宽(len($$$) = 0)
双向折叠设置左、上父格
B、选中单元格-控件设置-按钮控件、树节点按钮
C、自定义展开树级数(默认展开一级)
根据需要展开固定的级数,操作如下:
操作:模版——模版web属性——数据分析设置,为该模版单独设置——写JS
$("#content-container").find("tr").has(".x-treenode-unexpand").each(function(){
if($(this).children().eq(5).text()==1){
$(this).find(".x-treenode-unexpand").trigger('click');}})##JS写在下图“加载结束”
——在需要展开的级数前,添加定位符——隐藏定位符
1、建立树数据集
2、制表(拖拉需要的字段)、设置参数控件
三、日期区间、周、月、季控件在一张表里
保证效果:控件里具体的周,显示该周具体的日期区间,报表里面的数显示的就是该周的数。 同理,控件里具体的月/季,显示该月/季具体的日期区间,报表里面的数显示的就是该月/季的数。但周、月、季三者控件之间是没有联系。
需要写JS:
(一)周按钮:鼠标放在按钮上,左击——右部分,事件——点击
var
kaishi= this.options.form.getWidgetByName("week").getValue();
if('${=WEEKDAY(DATE(year(),1,1))}'==0){
var
rq1="DATE(year(),1,1)+"+kaishi+"*7-13";
var
str1='format('+rq1+',"yyyyMMdd")'
var K1=FR.remoteEvaluate(str1);
var
rq2="DATE(year(),1,1)+"+kaishi+"*7-7";
var
str2='format('+rq2+',"yyyyMMdd")'
var K2=FR.remoteEvaluate(str2);
var state1=
this.options.form.getWidgetByName("starttime");
var state2=
this.options.form.getWidgetByName("endtime");
state1.setValue(K1);
state2.setValue(K2);
}else{
}
(二)月按钮:同周设置。鼠标放在按钮上,左击——右部分,事件——点击
var
kaishi= this.options.form.getWidgetByName("month").getValue();
var
rq1="date(year(today()),"+kaishi+",1)";
var
str1='format('+rq1+',"yyyyMMdd")'
var K1=FR.remoteEvaluate(str1);
var
rq2="DATEINMONTH(date(year(today()),"+kaishi+",1),-1)";
var
str2='format('+rq2+',"yyyyMMdd")'
var K2=FR.remoteEvaluate(str2);
var state1=
this.options.form.getWidgetByName("starttime");
var state2= this.options.form.getWidgetByName("endtime");
state1.setValue(K1);
state2.setValue(K2);
(三)季控件:鼠标放在按钮上,左击——右部分,事件——点击
var
season= this.options.form.getWidgetByName("season").getValue();
var
da = new Date();
var
year = da.getFullYear();
if(season=="1")
{
var
firstdate = year + '0101';
var
lastdate = year + '0331';
}
else
if(season=="2")
{
var
firstdate = year + '0401';
var
lastdate = year + '0630';
}
else
if(season=="3")
{
var
firstdate = year + '0701';
var
lastdate = year + '0930';
}
else
if(season=="4")
{
var
firstdate = year + '1001';
var
lastdate = year + '1231';
}
var K1=FR.remoteEvaluate(firstdate);
var K2=FR.remoteEvaluate(lastdate);
var state1=
this.options.form.getWidgetByName("starttime");
var state2= this.options.form.getWidgetByName("endtime");
state1.setValue(K1);
state2.setValue(K2);
四、格式问题:
1、 数据为0时,设置为空值。
操作:选中单元格,右击——条件属性——新值(公式)len($$$) = 0
2、 单元格文字缩进
操作:选中单元格——条件属性——缩进
3、 预览时报表居中、去掉工具栏
(1) 报表居中:(工具栏)模版——模版web属性——填报页面设置——为该模版单独设置
(2) 去掉工具栏:(工具栏)模版-模版web属性-填报页面设置-为该模版单独设置
4、左父格、上父格设置
5、预览时,不用点击“查询”,自动查询。鼠标放到参数控件板块
6、图形填色
图形属性-系列-配色(自定义)-边框(颜色设置为透明)