报表中心

硕正报表功能 入口在系统菜单下

功能预览

  • 左侧树型:展示可配菜单
  • 上方表格:菜单下报表模型记录
  • 下方预览:报表模板预览设置
  • 按钮区块:
    • 样式设计:打开样式设计画面
    • 数据源:设置数据源
    • 复制:复制当前选中模板记录
    • 功能:导出模板 导入模板

简单示例

1.选中左侧树型菜单 如用户菜单 点击 模板配置表的新增按钮 新增模型记录

2.填写记录数据

  • 报表名称:自定义报表名称 中英文不限
  • 菜单名称:默认带出的菜单信息
  • 启用:启不启用当前模板
  • 打印预览:支不支持打印预览
  • 标准模板:默认是标准模板
  • 来源模板:复制的模板自动带出
  • 数据源类型:可选默认 From
    • 默认:数据源自定义配置
    • From:从画面上获取数据源
  • 打印控制:是否启用打印控制 控制一般包括能否打印
  • 显示控制:是否启用显示控制 显示控制一般包括是否可选该模板进行打印
  • 备注:备注信息

3.输入完记录信息后 保存该记录 如果数据源是Form的则不需要 配置数据源 如果 数据源类型是默认的 则 点击数据源按钮 进入配置数据源界面

数据源画面包括 数据源列表数据 输入参数 输出参数

先新增 一条数据源数据 类型可选 HQL SQL 和自定义 数据源名称 自定义 内容通过编辑语句 来填写

如 选择SQL 之后 点 编辑语句

4.返回 报表中心 点击 样式设计 按钮 打开 样式设计界面 进行样式设计

5.样式设计完成之后 如果 数据源是 Form 类型的报表 可以在 工具栏【报表】下 打印预览

如果 数据源是 默认类型的报表 可以 新建按钮 然后用代码打印

     public CommandResult buttonOK_Button(CommandArg arg) {
         CommandResult result = new CommandResult();
         PrintReportArg printReportArg = new PrintReportArg(Form_SysUser.class);
         printReportArg.addBatch();
         result.printReport(printReportArg); 
         return result;
     }

详细操作

基本操作(以报销单为例)

目标:

img

1.配置相应画面,建立测试数据:

img

2.新建报表

进入报表中心,从左侧树形目录中选中需要配置报表的画面,点击新增。在开发环境下,我们可以得到一个标准模板

img

3.配置数据源

点击右侧数据源按钮 添加报销单、报销单明细两个数据源

img

默认SQL类型,点击右侧编辑语句按钮,配置内容如下:

img

注意事项:

(1)字段需要设置别名,在后面的样式设计中,我们需要通过别名引入数据

(2)查询参数目前不支持使用匿名参数,要指定参数名称

(3)保存SQL前因执行SQL检查

img

引入数据源的方式有三种(SQL 语句、HQL语句、自定义)

(1) SQL和HQL:通过查询语句获取数据库中相应数据;语句的输入参数和输出字段在下表可见。

(2) 自定义:适用于处理比较复杂的数据。

自定义数据源:

img

img

4.样式设计

img

点击右侧样式设计按钮,进入样式设计界面

建议:及时保存,关闭当前页面,或者切换窗口,都会导致,操作更新失效。

img

img

箭头指向的工具是 数据源 ,数据源的相关属性都在这里配置

框线

系统默认A-F列,1到11行,选择行列右键新增(开始设计时,可以多增几列,便于操作)

img

img

新增的工具 边框 ,选中单元格区域,点击工具,可快速添加框线或移除( 边框属于 新增功能,旧版本并未提供)

注意到报销单的框线为绿色:选中需要设置框线的单元格,点击工具栏上的 工具箱

可对单元格区域进行详细设置

img

img

修改框线颜色为绿色,但是这里只能设置上边框和左边框,不能设置右边框和下边框

所以我们还要设置最后一行的下一行以及最后一列的下一列

合并单元格、填充内容、调整列宽

选中需要合并的区域,点击 单元合并 ,再点击,即可解除合并

img

填充内容,并设置字体样式

设置列宽,行高(可批量设置)

img

img

完成效果

img

插入文本框 绘制标题

文本框行为与单元格行为基本一致,区别是文本框可以自由移动,遮盖,更加灵活。

img

5.引入数据源

通过SQL语句已经能够获取到相应的数据,同时也完成了报表的界面设计。现在我们需要执行这个SQL语句,并把数据放到报表中。

所以在打印报表的按钮方法里,传入SQL语句需要的参数,并执行打印或预览。

img

关闭重启Tomcat,点击打印按钮,选择样式列表,即可进行打印预览

img

img

回到样式设计界面

右侧工具箱,点击“数据源”选项卡,即可看到数据源的列结构:

img

数据源的结构树分为“表”和“单个数据”, 可以用鼠标直接将其下级内容直接拖拽至报表中。

标题行 headrow( ) :

将 “表” 的 “标题行” 拖到报表的某个单元格,该单元格将会自动生成一个计算公式如 "=headrow('ds1')", 表示从该单元格开始,将数据源的标题从左向右填充。

数据行 datarow( ) :

将 “表” 的 “数据行” 拖到报表的某个单元格,该单元格将会自动生成一个计算公式如"=datarow('ds1')", 表示以该单元格作为左上角,将数据源填充至报表。

由于数据源的总行数是不确定的,所以报表将动态插入新的临时行。

从左向右的填充规则为:逐个单元格顺序填充,但遇到如下情况,将跨过这些单元格:

1.单元格是被组合的、不是主单元格;

2.单元格内有其它计算函数;

单个数据 data( ):

将 “单个数据” 下的的某个字段拖入报表的某个单元格(或文本框), 该单元格(或文本框)将自动生成一个计算公式如 "=data('ds1', 1, 'price')",

表示仅从数据源取得单个数据,填充到本单元格(或文本框), 这个函数的参数用于指定数据源的行号和列名。

使用效果:

img

img

6.数据处理

通过打印按钮,可以看到dataRow() 和 headRow() 使用效果, 但这并不完全符合我们的需求。我们需要对金额进行拆分,并填充到相应的单元格中。

现在,有两种实现思路,一种是,在传入数据时,就对数据进行相应的处理,通过SQL语句或者HQL语句(比较难实现),或者使用自义定的数据源,分装处理好。这种方式并不推荐。应为数据在传入前只关注数据本身,而不应当关注展示效果。一旦需求发生变化,难以做出及时的调整。

第二种:

报表提供了许多可使用的 计算公式,可直接拖动到单元格或文本框

img

img

img

效果如下图:

img

7.打印设置

在完成内容的绘制之后,我们需要对报表的打印进行设置

(1) 点击右下角分页显示,调整列宽,使内容在一页显示

img

img

(2)点击工具栏上打印设置工具

img

页面Tab页:

这里我们需要配置打印的一些基本参数,如纸张大小,份数,打印机等

img

可以使用斑马打印机驱动,完成自定义纸张大小

img

img

(表格的框线颜色还是黑色,这是因为配置了 "表格线以黑色打印"的原因)

img

页边距Tab页:

img

数据源Tab页:

在之前的打印效果中,使用了dataRow()方法,由于数据源的总行数是不确定的,所以报表将动态插入新的临时行

当前传入了6条记录,所以报表动态插入了5个新的临时行,这显然与实际效果不符合,一个报销单固定4行数据,我们想要的效果是:超出四行之后,使用下一个表单。

我们可以使用 数据源Tab 页中的 每页打印行数类设置,默认为0,不做控制。这里我们修改为4,并且勾上末页须以空行补足 (别忘了左上角的保存)

img

再来看一下打印效果:

可以看到,第四条记录后,相当于插入了一个分页符,分成了两页。

img

img

分页(1)Tab页:

目前效果,只是在每四行数据插入了一个分页符,还需要固定标题和表位

可以在分页(1)中设置

img

使用效果:

img

img

img

Tip:

分页还有各种打印方式,这里我们选用的是允许分页。

这里提到了几个自动缩放,强制分页的功能,分页可以在这里设置

img

上述演示效果中,使用了A4纸,一张单据只占A4纸的一小部分,可配置需要一张纸打印多页

回到数据源Tab页 设置

img

img

8.小计

通过右边的这个例子我们发现,这里的合计数据在'分页'之后并不正确。合计这里的表达式为 =Sum(H6:@H6)

@+单元格 表示 表示数据源填充区内、总行数不确定时的动态单元名。所以这里的 "sum" 汇总的是当前数据源的金额总和。

但是,我们已经进行了分页。合计人民币 需要当前页面中的4条记录

img

这里就需要用小计的功能:

img

img

小计还有 分类汇总小计 和 区块汇总小计,分别在后续的 "分类汇总"和"区块汇总" 模块中做具体介绍

分类汇总

\简单排序**

以下是以各部门的员工的工资单为例:

img

目前展示的数据是分散的,可以借助数据的排序功能,做一个简单排序

img

img

以下是效果:

img

借助自定义排序功能,可以做个简单分类,但并不能对每个分类的数据进行一些分析统计

数据分类汇总

img

勾上垂直合并同类项,配置效果如下:

img

配置汇总行:

img

\配置效果:**

img

配置汇总行的小计项:

img

\使用效果:**

img

这里可以看到,虽然分类汇总这里提供了很多配置,但是,还不是很灵活,只能做一些简单的应用场景。下一章 "区块" 的介绍区块的分类汇总表,将有更为灵活的应用

img

区块

区块的理解

上面的几个例子,都使用了dataRow(),自动填充数据,一条数据占一行。

有的应用场景,一条数据 ,我们希望可以把它的字段,放到不同的行。

可以的做法( data('ds1',1,'字段') 的局限)

固定条数的传入数据,使用 data('ds1',1,'字段') 、data('ds1',2,'字段')、data('ds1',n,'字段')

这就导致了,传入数据时不够灵活,一但需求变更,后台也可能要做出调整。

针对这种场景,引入了区块的功能,下面以工资条为例:

img

datarowNumer() 表示数据源中的行号

同一行中,应该有包含dataRow( )函数的单元格

img

使用效果:

img

区块的分类汇总

区块除了可以存放一条数据,还可以存放一类数据

上一章 "分类汇总" 提到了使用不够灵活的一个局限,只能通过配置的方式来决定样式,并不能直接进行设计

结合使用区块可实现此目标。

目标效果:

img

操作步骤:

1.设为区块

img

2.配置分类

img

表达式可填的值:

@rows 行数

@Text 分类项内容

img

表达式可填的值:

@sum 合计
@average 平均值
@max 最大值
@min 最小值
@first 首行内容
@last 首行内容
@rows 行数
@Text 统计项

宏可以和列名组合 ,比如 "金额@average"

3.设为明细行

区块里面必须要有一行只有明细项的函数,作为动态可插入行

img

交叉表(数据透视)

\数据透视**”能够将筛选、排序和分类汇总等操作依次完成,并生成汇总表格

还是以工资单为例:

工资单记录都是平面的,现在要对这些数据按筛选项进行透视分析

img

例如,统计每个部门的性别组成、工资分布

\目标效果:**

img

操作步骤

1.添加数据行

img

2.配置交叉表

img

img

计算公式

Supcan官网提供:http://supcan.cn/doc/dev/pub02.htm

Gongqi自定义计算公式

singleParmValue 用于获取单例表指定字段值
参数一 entityName 单例表名称
参数二 fileName 获取的字段名称
返回值 String
示例 =singleParmValue('CompanyParameters','CompanyName')

条码

img

img

表达式和掩码

表的表达式分二种:关系表达式格式掩码。  

所谓“关系表达式”就是如前所述的单元格与单元格之间的计算关系、列与列之间的计算关系、小计/合计运算逻辑;而“格式掩码”则是单元格用于描述自身显示的特殊的表达式。

报表的表达式在单元格内直接输入,举例如下:

img

格式掩码和关系表达式相比,没有什么大的差别,它还可以包含"textColor="的文字颜色分句。

img

使用效果如下:

img

掩码在 工具箱 -> 单元属性 ->显示格式 处进行配置

img

results matching ""

    No results matching ""