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的实 ...
随机推荐
- 玩转Node.js单元测试
代码部署之前,进行一定的单元测试是十分必要的,这样能够有效并且持续保证代码质量.而实践表明,高质量的单元测试还可以帮助我们完善自己的代码.这篇博客将通过一些简单的测试案例,介绍几款Node.js测试模 ...
- 实现Unity编辑器模式下的旋转
最近在做一个模型展示的项目,我的想法是根据滑动屏幕的x方向差值和Y方向的差值,来根据世界坐标下的X轴和Y轴进行旋转,但是实习时候总是有一些卡顿.在观察unity编辑器下的旋转之后,发现编辑器下的旋转非 ...
- SQL AlawaysOn 之一:安装域控制器
一.准备阶段 1. 计算机名称命名 2.IP地址修改.DNS修改 IP地址和DNS不一定要和图上的一致,只要固定就行了 二.安装阶段 1.服务器管理器,仪表盘,点击“添加角色和功能” 2.添加角色和 ...
- HTML中的table布局
<table width="100" height="50" border="1" bgcolor="blue"& ...
- js正则表达式详解及示例讲解
所谓正则表达式,简单来说就是一种规则,一种计算机能读懂的规则.js中的正则表达式语法是Perl5(一种很早的编程语言)的正则语法的子集.本文将在基础知识的基础上添加示例帮助快速理解正则表达式. 学习正 ...
- NumPy入门及基础
1.1 NumPy 数组对象 NumPy中的ndarray是一个多维数组对象,该对象由两部分组成: 实际的数据; 描述这些数据的元数据. 大部分的数组操作仅仅修改元数据部分,而不改变底层的实际 ...
- 按条件生成j随机json包:randomjson
前端开发中,在做前后端分离的时候,经常需要手写json数据,有2个问题特别揪心: 1,数据是写死的,不能按一定的条件随机生成长度不一,内容不一的数据 2,写数组的时候,如果有很多条,需要一条一条地写, ...
- MySQL学习笔记(四)—存储过程
一.概述 存储过程是数据库定义的一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程可以避免开发人员重复的编写相同的SQL语句,而且存储过程是在MySq ...
- SVN:重命名文件之后不允许提交
提交文件所属的目录,这样可以提交成功.
- java 基础知识一 初识java
java 基础知识一初识java 1.java语言的特点 (1)简洁有效(2)可移植性(3)面向对象(4)解释型(5)适合分布式计算 2.java的源文件扩展名为.java 编译后的扩展名为.cla ...