帆软报表使用笔记

http://www.finereport.com/product/download   下载地址

帆软报表判断传入条件是否为空
${if(len(isUnused) == 0,"",“and ni.isUnused =’”+isUnused+"’")}
根据逗号分隔
(detailNo SEPARATOR ‘,’)


获取控件实际值
只重置一个控件的值时,我们可以在js事件中获取需要重置的控件,执行reset()方法,从而清空该控件的内容。
当我们需要重置全部控件时,可以通过form.name_widgets获取参数界面上所有的控件,然后遍历每个控件并重置,代码如下:

$.each(this.options.form.name_widgets,function(i,item){  

    if (item.options.type !=='label') {item.setValue();item.setText();} 

});;

重置单个控件内容的按钮
以上图中清空供应商按钮为例,说明如何重置单个控件内容。
在参数设计页面新建一个按钮控件,设定其名字为清空供应商,同时设置按钮点击事件,将供应商(supplierID)控件内容清空,具体的js如下:
var supplierID = this.options.form.getWidgetByName("supplierID");  //获取supplierID控件
supplierID.reset();  //将supplierID控件内容清空


如何获取控件的显示值
在填报属性里  选择公式  写以下公式 if(len($控件名) = 0, "", sql("数据库名称", "select AJJZ from 表名称 where URLADD='" + $控件名 + "'", 1, 1))
在数据集把实际值在匹配出来,然后拉倒报表页面,然后填报他

 ${if(len(startDate) == 0,"","AND to_date(io.start_date,'yyyy-mm-dd') >= to_date('"+startDate+"','yyyy-mm-dd')")}  
 注意to_date里参数为字符串,解析出的startDate需要单引号括起来
 select to_date(start_date,'YYYY-mm-dd') from irm_thresh_inout;  这里不需要加单引号

 
 
 参数为空时显示所有的数据
    1,通过sql  ${if(len(area) == 0,"","and 货主地区 = '" + area + "'")} 表示若参数area为空就不进行过滤,若不为空则货主地区等于参数值。
    2.通过报表参数
    点击模板>报表参数,添加两个报表参数,分别为area和province。过滤条件设置
   点击A2单元格,选择格子上方的过滤按钮,给A2单元格增加如下图所示的过滤条件:
   注:nofilter表示不过滤,if(len($area)==0,nofilter,$area)表示参数area为空,就不过滤,
   若不为空则以参数值进行过滤;if(len($province)==0,nofilter,$province)意义相同。
   
   
    
1.解决列名显示不全:模板-页面设置-自定义:长度和宽度设置超大
2.其他单元格以某一个单元格为左父格,在该单元格上设置行后分页属性
&D3%20=0
D3为该单元格,20为每页20行


[YEAR()-2,YEAR()-1,YEAR(),YEAR()+1,YEAR()+2]

分组和列表  分组按当前列分组

var Widget = this.options.form.getWidgetByName("市"); //在参数界面获取控件的方法,先获取表单,再通过控件名称来获取控件 
var value_1 =Widget.getValue(); //获取控件实际值 
var value_2 =Widget.getText(); //获取控件显示值 
alert('市:'+value_1+","+value_2);

查询结果为空时不显示报表内容
方法1:条件属性
非空字段为空,则该行的行高为0
添加条件属性:
len(A1)=0

重置年份
var Widget = this.options.form.getWidgetByName("调拨年度");
var date = new Date();
var year = date .getFullYear(); //获取完整的年份(4位)
Widget.setText(year);
Widget.setValue(year);

合并:alt+M
取消:alt+G

逐层累计就是在分组报表中,每一组中分别将每层与上一层数据相加,得到这一层的累计结果
在 D3 单元格中,写入累计公式=D3[B3:-1] + C3:在一年内上一个月累计后的金额加当前月的金额,
其中D3[B3:-1]表示B3 扩展出来的上一格(上月)中 D3 的值。
sql里对参数的判断
 --decode(${if(unit=="2",2, 1)},2,round(recycle4/50,2),recycle4 )as recycle4, 
 decode(${if(len(unit)==0,1,unit)},1,round(sum(d.demand_weight)/500000,2),2,round(sum(ddemand_weight)/50,2),3,round(sum(d.demand_weight),2))as Weight, 
  "需求计划("+ if($unit=1,"万担",if($unit==2,"担","KG")) + ")"
 "采购量("+ if($unit=2,"万担","担") + ")"
 
 
 
 如何通过JS调用某段SQL语句 
  调用FineRepor的内置公式:FR.remoteEvaluate("具体公式"),返回值为:这个具体公式的结果。
  例如:var a = FR.remoteEvaluate("sum(1+2)");
  这时变量a的值就是3了。
    zhmc.setValue(FR.remoteEvaluate(“sql(\“JDBC1\”,\“select t.mc from 表名 t where t.编号=“ +参数+”\”,1,1)”));
  这里要注意的是,由于在SQL函数中,需要多次用到双引号("),所以大家要注意用反斜杠(\)进行转义:var sql = "SQL(\"FRDemo\",\"Select count(*) fromsales_basic\",1,1)"
  或者为了降低转义带来的复杂度,可以写成如下格式:
var sql="select count(*) from sales_basic"; 
varres=FR.remoteEvaluate('sql("FRDemo","'+sql+'",1,1)');

//公式里if的写法
C5 /if(len(B5) == 0,C5,B5)

---帆软在公式里调用数据集
 '复烤厂:' + value('main', 1,1)    1列1行
--公式里的sql查询
 SQL("TLIRM","select PARAM_VALUE from IRM_PARAM WHERE PARAM_NAME ='BUSINESS_YEAR' and DATA_STATE ='1'
",1,1)
 FORMAT(X5 / X6 * 100, "0.00")
 round(C17 / I18, 2)
 
 &__bypagesize__=false  不分页预览报表
 
 AVERAGE(R6{R6!=0},false) 帆软计算平均值去重0 和空值
 AVERAGE(number1,number2,…,countstring): 返回指定数据的平均值。Number1,number2…:用于计算平均值的参数; countString:文字、逻辑值是否参与计数。
 备注:    参数必须是数字,或是含有数字的名称,数组或引用。    如果数组或引用参数中含有文字,逻辑值,默认参与计数,countString为false则不参与计数;
 空单元格始终不参与计数,但是,单元格中的零值参与。示例:如果A1:A6被命名为“ages”,分别等于10,23,文字,29,33及25,
 则:AVERAGE(A1:A6)等于20。AVERAGE(A1:A6, false)等于24。AVERAGE(ages)等于20。如果还有一个年龄为27的,求所有年龄的平均值为: AVERAGE(A1:A6,27)等于21。
 
 帆软公式里判断是否包含某个字符串
 if(FIND("碎片(末)率",$products,0)>0,'碎片(末)率','')
 if(FIND(",",$$$,0) > 0,'全部部门',$$$)
 FIND(find_text,within_text,start_num):从指定的索引(start_num)处开始,返回第一次出现的指定子字符串(find_text)在此字符串(within_text)中的索引。
 
  tablename.select(#0)
说明:返回数据集 ds1 中的行号。

tablename.value(row,col/colname)
说明:获取数据集 ds1 中某行某列的值。
在单元格中输入=ds1.value(3,2),返回数据集 ds1 中第 3 行第 2 列的值。

在单元格中输入=ds1.value(3,"销售员"),返回数据集 ds1 中第 3 行销售员列的值。

注:报表的图表标题不支持 value 函数。
注:决策报表里的图表块不支持该函数。

公式=INDEXOFARRAY(split($col,","),1),将$col参数转换成数组,返回数组里的第一个的值,B1、C1、D1、E1分别返回第二、三、四、五个的值,

所以B1单元格使用公式=INDEXOFARRAY(split($col,","),2),以此类推……
if(INDEXOFARRAY(split($products,","),1)='碎末率','碎末率',if(INDEXOFARRAY(split($products,","),2)='碎末率','碎末率',if(INDEXOFARRAY(split($products,","),3)='碎末率','碎末率',if(INDEXOFARRAY(split($products,","),4)='碎末率','碎末率',if(INDEXOFARRAY(split($products,","),5)='碎末率','碎末率',if(INDEXOFARRAY(split($products,","),6)='碎末率','碎末率',if(INDEXOFARRAY(split($products,","),7)='碎末率','碎末率',if(INDEXOFARRAY(split($products,","),8)='碎末率','碎末率',if(INDEXOFARRAY(split($products,","),9)='碎末率','碎末率',if(INDEXOFARRAY(split($products,","),10)='碎末率','碎末率',if(INDEXOFARRAY(split($products,","),11)='碎末率','碎末率',''))))))))))
)

帆软公式里可以用nvl对单元格进行空值判断
函数用法复制链接


NVL 函数的使用方法:NVL(value1,value2,value3,...):在所有参数中返回第一个不是 null 的值。
if(nvl(E6,0) == 0,0,if(nvl(F6,0)==0,0,if(nvl(G6,0)==0,0,if(nvl(H6,0)==0,0,if(nvl(I6,0)==0,0,if(nvl(J6,0)==0,0,if(nvl(K6,0)==0,0,if(nvl(L6,0)==0,0,if(nvl(M6,0)==0,0,if(nvl(Q6,0)==0,0,AH6))))))))))
=NVL(E5,E6,E7,E8)
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值