报表中心
1. 功能入口
硕正报表功能 入口在系统菜单下
2. 界面介绍
2.1 目录树
来源:当前数字域的所有菜单画面,对应GOT的Menus节点
说明:报表的模版所在的目录
2.2 报表列表
说明:菜单下报表模型记录
报表名称:报表的名称,要求唯一
菜单名称:报表所属的菜单
启用:为false时,该模板将不可用
打印预览:为true时,打印时,会先出现预览界面
标准模板:true表示,该模板是一个标准模板。通过新建创建的模板是一个标准模板,通过标准模板复制生成的不是标准模版。标准模板可以编辑数据源,非标准模板,只能调整样式,数据源和其来源模板一致
来源模板:用于标识非标准模板的来源模板。此模板的数据源和来源模板一致
数据源类型:
打印控制:为true时,可通过代码控制是否允许打印
@CommandArgOption(groups = "all(cr, sr)") public CommandResult buttonOK_Button(CommandArg arg) { CommandResult result = new CommandResult(); ReimbursementTable reimbursementTable = (ReimbursementTable) arg.getCurrentRecord(); PrintReportArg printReportArg = new PrintReportArg(Form_ReimbursementTable.class); if(reimbursementTable.getBillStatus() != BillStatus.Checked) { printReportArg.setPrintButtonEnable(false);//当单据没有确认时,控制不可以打印(打印控制位true时生效) } result.printReport(printReportArg); return result; }
- 显示控制:为true时,调用打印时,只显示与显示条件匹配的模板
- 显示条件:当显示控制为true时,调用打印时,可传入匹配值,与显示条件匹配,匹配通过的模版才会出现在可选列表里
@CommandArgOption(groups = "all(cr, sr)")
public CommandResult buttonOK_Button(CommandArg arg) {
CommandResult result = new CommandResult();
ReimbursementTable reimbursementTable = (ReimbursementTable) arg.getCurrentRecord();
PrintReportArg printReportArg = new PrintReportArg(Form_ReimbursementTable.class);
if(reimbursementTable.getBillStatus() != BillStatus.Checked) {
printReportArg.setPrintButtonEnable(false);
}
printReportArg.setDisplayValue("销售一部");//这里传入显示条件
result.printReport(printReportArg);
return result;
}
- 备注
2.3 按钮区块
- 样式设计:打开样式设计画面
- 数据源:设置数据源
- 复制:复制当前选中模板记录
- 功能:
2.4 报表模板预览
3. 样式设计
3.1工具条
从左至右
- 打开模板
- 保存
Sheet属性
复制
- 粘贴
- 撤回
- 查找/替换
- 打印
- 打印属性
- 打印预览
- 单元格合并
- 求和
- 计算器
- 重新计算
- 数据源设置
- 全屏
- 收缩工具栏
- 字体
- 字体大小
- 加粗
- 斜体
- 下划线
- 左对齐
- 居中
- 右对齐
- 单元格属性
- 单元格显示
- 添加文本框
- 添加图片
- 添加线条
- 添加统计图
- 添加数列表
- 格式刷
- 边框
3.1.1 打印属性
认定用这台打印机打印:当改选项被勾上时,调用打印时,会寻找当前设备是有相同名称的打印驱动,有则使用这个,没有则使用第一个驱动
页边距
分页
页码
- 数据源
3.1.2 数据源设置
- 自定义显示列:控制数据循环行的哪些列需要显示,以及列的显示顺序
- 自定义排序:数据的排序规则
- 数据分类汇总
3.1.3 单元格属性
主要:配置单元格的样式,缩进
显示格式
配置单元的格式
显示掩码
可以控制实际的显示效果而不改变实际的值,具体效果如下
图片和条形码
当数据类型为字符类型时,可选择以其它显示形式
图片:传入URL地址或者Base64大串
条形码:需要安装BarCode组件(使用客户端安装包时,默认安装),支持条码种类更多
二维码:显示字符的二维码
计算公式
类似Excel的计算函数,可以在单元格中输入,也可以直接输入。双击函数,可以查看方法的使用示例
使用数据源:配置单元格数据
数据源函数
数据源的结构树分为“表”和“单个数据”, 可以用鼠标直接将其下级内容直接拖拽至报表中。
- 标题行 headrow( ) :
将 “表” 的 “标题行” 拖到报表的某个单元格,该单元格将会自动生成一个计算公式如 "=headrow('ds1')", 表示从该单元格开始,将数据源的标题从左向右填充。
- *数据行 datarow( ) :*
将 “表” 的 “数据行” 拖到报表的某个单元格,该单元格将会自动生成一个计算公式如"=datarow('ds1')", 表示以该单元格作为左上角,将数据源填充至报表。
由于数据源的总行数是不确定的,所以报表将动态插入新的临时行。
从左向右的填充规则为:逐个单元格顺序填充,但遇到如下情况,将跨过这些单元格:
1.单元格是被组合的、不是主单元格;
2.单元格内有其它计算函数;
注:一个Sheet页中不能使用多个循环数据行
- 单个数据 data( ):
将 “单个数据” 下的的某个字段拖入报表的某个单元格(或文本框), 该单元格(或文本框)将自动生成一个计算公式如 "=data('ds1', 1, 'price')",
表示仅从数据源取得单个数据,填充到本单元格(或文本框), 这个函数的参数用于指定数据源的行号和列名。
4. 数据源
引入数据源的方式有三种(SQL 语句、HQL语句、自定义)
(1) SQL和HQL:通过查询语句获取数据库中相应数据;语句的输入参数和输出字段在下表可见。
(2) 自定义:适用于处理比较复杂的数据。
4.1 SQL和HQL类型
点击右侧编辑语句按钮,配置内容如下:
注意事项:
(1)字段需要设置别名,在后面的样式设计中,需要通过别名引入数据
(2)查询参数目前不支持使用匿名参数,要指定参数名称。
(3)保存SQL前应执行SQL检查。
4.2 自定义数据源
创建java类继承ReportDataSource方法
复写initColumns和loadData方法
其中initColumns用于配置显示列
loadData返回数据列
其中数据的key要与列名对应
4.3 输入参数
数据源支持传入参数
@CommandArgOption(groups = "all(cr, sr)")
public CommandResult buttonOK_Button(CommandArg arg) {
CommandResult result = new CommandResult();
ReimbursementTable reimbursementTable = (ReimbursementTable) arg.getCurrentRecord();
PrintReportArg printReportArg = new PrintReportArg(Form_ReimbursementTable.class);
if(reimbursementTable.getBillStatus() != BillStatus.Checked) {
printReportArg.setPrintButtonEnable(false);
}
/**
*报销单--模板的名称(如果不是标准模板,则传入来源模板的名称)
*ReimbursementId--传入的参数key
*reimbursementTable.getReimbursementId()--传入的参数值
*/
printReportArg.addQueryParameter("报销单", "ReimbursementId", reimbursementTable.getReimbursementId());
result.printReport(printReportArg);
return result;
}
HQL和SQL类型的可以通过‘:ReimbursementId’占位符使用传入的参数
自定义数据源可以通过
loadData方法参数中的Map
5.区块的使用
使用dataRow(),自动填充数据,一条数据只能放到一行。
但是存在场景,需要把一条数据的不同字段,放到不同的行。
如果是固定条数的数据,还可以使用 data('ds1',1,'字段') 、data('ds1',2,'字段')、data('ds1',n,'字段'),来固定某个单元格显示显示第1个数据源的第n条数据的某个字段。
当条数不固定时,更推荐使用区块
具体用法如下,以工资条为例:
1.在A列合并单元格 并拖入需要循环的数据源到合并单元格,设置改合并单元格的显示格式,数据源以区块方式填充 改为是
2.拖动单个数据到 区块内的单元格
使用效果