FineReport使用总结
一、常用函数和变量
1. 日期
1.1 now() 当前时间
1.2 today() 今天
1.3 格式化显示,插入公式 =format($$$,”yyyy年MM月dd日 HH:mm”),$$$表示当前值
2. 金额显示
2.1 添加条件属性
2.2 新值
2.3 公式 format($$$,”¥#,##0.00″)
3. 内置变量
3.1 $$page_number 当前页
3.2 $$totalPage_number 总页数
4. 单元格使用SQL函数取值
4.1 插入公式
4.2 示例 SQL(“yaoguang”,”SELECT COUNT(1) FROM `freight_sono`
WHERE BILLS_ID IN (‘”+REPLACE($ids,”,”,”‘,'”)+”‘) AND CONT_ID =
’20GP'”,1,1)
连接名 + SQL + 行 + 列
二、实际场景
1. url传参
1)查询数据集的时候需要动态参数,从url传参
原地址 + &参数名= xxx
示例:
地址 –> xxxxxx&ordersn=0123456789
取值 –> ${ordersn} // 加引号是因为bills_id是字符串类型

2) 单元格获取参数值 $ordersn

公式中不仅可以获取参数的值,也可以引用单元格的值(图中B5)。以及运用公式计算
3) 查询数据集时一个参数包含多个值
参数 –> ids=012,345,678
SQL –> SELECT GOODS_NAME FROM `freight_bills` WHERE id IN (${replace(“‘”+ids+”‘”,”,”,”‘,'”)})

这里在编写数据集查询的时候用到了replace函数,将传过来的每个id加上引号,最终拼成规范的SQL语句。
不同于公式,在数据集查询中使用函数需要用 ${ } 括起来。
2. 一个单元格取数据集中多个字段。
在此单元格同一个行中,表单外的其它列分别取出多个字段值,然后在单元格中插入公式,引用这些字段对应单元格的值。
示例:显示电话号码 / 手机,如果没有电话号码,显示 手机
IF(LEN(M11)>0,M11+”/”+N11,N11) // M11 电话号码 N11 手机
公式中可以拼接字符串

若需要跟随某个单元格过滤或者扩展,这个时候M11 和 N11单元格的父格子也需要做设置,这里与联系电话一致。
此时并不需要单独显示M11 和 N11的数据,可以使用条件属性将列宽设置为0,隐藏该列。

3. 序号跟随列表递增。 &单元格序号

显示结果为

&C11,并设置左父格为联系人,门点跟随联系人条数递增。
4. 根据日期数据不同显示不同格式的时间。
需求:当用户选择装卸日期只指定具体到几月几号。显示 yyyy年MM月dd日
若指定时间具体到时分,显示 yyyy年MM月dd日 HH:mm
用条件属性的方式。
分别添加两个条件属性,在满足不同条件的时候显示不同的字符串(时间)。条件属性可以添加多个
单元格取数据集的日期字段

5. 不同数据集的数据关联显示。
从同一个数据集取出的数据通过直接设置父格子将数据关联起来展示。
但是从不同数据集取出的字段,设置了父格也不会进行数据过滤,而是所有数据跟随每个父格重复显示。
这个时候可以使用过滤将数据关联起来。


这里过滤条件为设置的左父格的来源数据集的字段(相当于JOIN表),这样就可以跟随不同内容的父格子进行过滤。
6. 数据汇总
如费用之类,某列数据有多条,需要统计。如求和,平均,最大最小值。将此单元格数据设置成汇总。

往往很多时候,不能直接查询数据集的时候对数据进行筛选(可以用where进行部分筛选),或者某些限定条件要从别的数据集获取(而不用JOIN的方式)
需要对数据进行不同的汇总。示例:
需求:分别求多个工作单的达驳费、代收款、港杂费(同种费用都可以有多个),根据不同工作单号分行展示。

1) 查询 –> SELECT * FROM `account_fee` WHERE bills_id IN
(${replace(“‘”+ids+”‘”,”,”,”‘,'”)}) // 查出所有工作单的所有费用
2)添加过滤条件

根据不同的费用类型,应收or应付,核算对象,过滤出不同的费用。
3) 数据设置汇总
4) 合计: =SUM(M8) // 对M8这个列扩展出来的所有值求和
7. 单元格数据直接通过SQL查询
需求:统计多个工作单的指定类型货柜的柜量合计。

公式 –> SQL(“yaoguang”,”SELECT COUNT(1) FROM
`freight_sono` WHERE BILLS_ID IN (‘”+REPLACE($ids,”,”,”‘,'”)+”‘) AND
CONT_ID = ’20GP'”,1,1) + “20GP”
展示结果:

8. 分类分组查询,新建额外数据集。
需求:分别统计每个工作单的柜量柜型信息。
即使货柜数据集中已经有所有货柜信息了,但是要分单,分柜型统计并按一定格式展示,
我认为还是直接写一条SQL简单。

1)新建一个模板数据集,查询出每个单ID,该单对应所有柜型及数量。
SELECT BILLS_ID,COUNT(1),CONT_ID FROM `freight_sono` WHERE BILLS_ID IN (${replace("'"+ids+"'",",","','")}) GROUP BY BILLS_ID,CONT_ID
2)使用数据集的字段填充。柜量x柜型 –> COUNT(1) +“x”+CONT_ID
3)设置过滤属性。根据不同工作单ID进行过滤。从父格子的数据集取过滤字段
FineReport使用总结的更多相关文章
- FineReport关于tomcat集群部署的方案
多台服务器集群后,配置权限.数据连接.模板.定时调度等,只能每台服务器一个个配置,不会自动同步到所有服务器. 针对上述情况,在FineReport中提供新集群部署插件,将xml配置文件.finedb/ ...
- 如何给FineReport设置自定义消息提醒工具
FineReport设计器有自动的消息推送功能,可设置报表定时推送和常规的日报周报推送.官方有自己的消息推送的接口,不过有些用户旺旺希望自己开发,符合自己需求的推送界面. 下面这个方案就从逻辑层面简单 ...
- FineReport:任意时刻只允许在一个客户端登陆账号的插件
在使用FineReport报表系统中,处于账户安全考虑,有些企业希望同一账号在任意时刻智能在统一客户端登录.那么当A用户在C1客户端登陆后,该账号又在另外一个C2客户端登陆,服务器如何取判断呢? 开发 ...
- 如何开发FineReport的自定义控件?
FineReport作为插件化开发的报表软件,有些特殊需求的功能需要自己开发,开发的插件包帆软官方有提提供,可以去帆软论坛上找,本文将主要介绍如何开发一个自定义控件,这里讲讲方法论. 第一步:实例化一 ...
- FineReport如何用JDBC连接阿里云ADS数据库
在使用FineReport连接阿里云的ADS(AnalyticDB)数据库,很多时候在测试连接时就失败了.此时,该如何连接ADS数据库呢? 我们只需要手动将连接ads数据库需要使用到的jar放置到%F ...
- 如何利用FineReport制作动态树报表
在对数据字段进行分类管理时,利用动态树折叠数据是一个很好的方法,也就是点击数据前面的加号才展开对应下面的数据,如下图.那这样的效果在制作报表时该如何实现呢? 下面以报表工具FineReport为例介绍 ...
- Web报表工具FineReport的JS开发之字符串
在报表开发过程中,有些需求可能无法通过现有的功能来实现,需要开发人员二次开发,以FineReport为例,可以使用网页脚本.API接口等进行深入的开发与控制. 考虑到JS脚本开发的使用较多,这里先先简 ...
- Web报表工具FineReport填报界面键盘操作
对于一张填报数据较多的报表,需要用户频繁地操作鼠标.而FineReport填报界面除去按钮类型的控件,其余可以完全使用键盘而不需要用鼠标操作,对于用户而言,这将极大的节省信息录入的时间. 这里我们对填 ...
- FineReport制作可动态展开的组织递归树报表
先看看效果: 报表软件:FineReport 1.分析-与正常查询的对比 如果不做这种树状结构展开的报表的话,正常的SQL应该是这样写的,以单据表为例,假设单据的机构为分公司,经营部 select 分 ...
- 如何利用报表工具FineReport实现报表列的动态展示
相信动态列的实现困扰了很多人,大数据量,多字段的加载将会非常耗时,数据又做不到真正的动态灵活.现有的方式都是通过变向的隐藏等方式来实现. 那该如何解决呢?这里分享帆软报表设计器FineReport的实 ...
随机推荐
- keepalived工作原理
keepalived是一个类似于Layer2,4,7交换机制的软件.是Linux集群管理中保证集群高可用的一个服务软件,其功能是用来防止单点故障. keepalived的工作原理: ...
- JSON对象转换成字符串【JSON2.JS】
下载地址 https://github.com/douglascrockford/JSON-js JSON.JS和JSON2.JS的区别 JSON.JS使用的方法名称不同,用的是toJSONStrin ...
- 2.sparkSQL--DataFrames与RDDs的相互转换
Spark SQL支持两种RDDs转换为DataFrames的方式 使用反射获取RDD内的Schema 当已知类的Schema的时候,使用这种基于反射的方法会让代码更加简洁而且效果也很好. 通 ...
- jquery拖拽插件 tableDnD
http://www.jb51.net/article/39481.htm http://www.poluoluo.com/jzxy/201307/232615.html
- Redis中的master-slave&sentinel
redis安装 解压完成后可以看到INSTALL和README.md文件,查看以获取更多有用信息. 在README文件中可以获取到软件的安装步骤.以下安装步骤基于此. #step1 进入文件夹,执行编 ...
- 函数调用过程&生成器解释
摘自马哥解答,感谢. 函数调用过程: 假设程序是单进程,单执行流,在某一时刻,能运行的程序流只能有一个.但函数调用会打开新的执行上下文,因此,为了确保main函数可以恢复现场,在main函数调用其它函 ...
- css实现超出部分用...代替
如果是一行的话 css为 white-space: nowrap: 保证文本内容不会自动换行,如果多余的内容会在水平方向撑破单元格. overflow: hidden: 隐藏超出单元格的部分. tex ...
- Python__slots__详解
摘要 当一个类需要创建大量实例时,可以通过__slots__声明实例所需要的属性, 例如,class Foo(object): __slots__ = ['foo'].这样做带来以下优点: 更快的属性 ...
- Mybatis基础学习(一)—初识MyBatis
一.MyBatis是什么? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google co ...
- EasyUi基础学习(一)—基本组件(上)
一.概述 jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开发者不需要编写复 ...