一、SQR:
SQR(Structured Query Reporter)是为从数据库管理系统生成报告而设计的一种编程语言。
1、SQR 语言程序结构:
!描述了报表的总体特征:
begin-setup
!For IBM LP4037 5E : PCL 4 emulation landscape, 12-Pitch Font , set 6 lines/inches 打印机(IBM LP4037 5E)的初始化
printer-init <27><69><27><38><108><49><79><27><38><107><52><83><27><38><108><54><68>
use scis_og ! 使用数据库数据
page-size 43 137 ! 设置 页面尺寸为43行*137列
end-setup
!报表主要程序:即报表的一个执行顺序
begin-report
!设置编码
encode '<27><69>' into $printer_reset
! let:设置变量
let #form_feed_line = 43
! do 执行方法/程序 get_parameters用户自定义名称
do get_parameters
! print 打印输出 (+2,1,10): 空两行,从第1列开始,长度为10
! center: 居中,fill:长度不足,补全
print '********** END OF REPORT **********' (+2) center
end-report
!执行方法/程序 get_parameters
begin-procedure get_parameters
! 以下方法内容,在执行的方法/程序中可有可以无根据具体情况而定
! 判断 或用 or 且用 and &printdata_already 自定义变量
if $printdata_already = 0 or $printdata_already = 1
! 编写判断体内容
else
! 编写判断体内容
end-if
! 循环
while #li_bb_cnt < 10
! 编写循环体的内容
end-while
!判断一个变量与一系列值中某个值是否相等,类似于Java的switch case语法
evaluate 参数
when = '值1'
!编写处理程序
break
when = '值2'
!编写处理程序
break
when-other
!编写处理程序
end-evaluate
!执行查询
begin-select
!该查询中可有定义参数或执行do,查询语句不需要添加select关键字
!先执行查询,在执行相关的let和do方法
!--------------------------------------------------------
! begin-select
! distinct a.case_type &tmp_case_type,
! let $l_case_type = &tmp_case_type
!
! do get_pat_demographic
!
! from caseInfo a
! where caseDate = $in_caseDate
! order by case_no
! end-select
!
end-select
end-procedure
!指定了在报表每一页的页眉
begin-heading
!编写相关内容
end-heading
、
!指定了在报表每一页的页脚
begin-footing
!编写相关内容
end-footing
!文档段落允许您编写自由格式的文本
! position 即: (1,1) 文档开始页上的位置。可以固定或相对于当前位置
begin-document position
!段落
.b
!编写相关文档内容
end-document
!编写执行SQL语句,
!该段落可以位于BEGIN-PROCEDURE、BEGIN-SETUP或BEGIN-PROGRAM中
begin-sql
!编写具体的SQL语句
end-sql
部分语法:
函数名称 说明 示例
isnull 是否为空。 isnull(parameter)
print 打印输出(具体用法看程序结构内容) print '-' ( , 1, 15 ) fill
let 赋值 let parameter = 1
do 执行方法程序 do get_pat_demographic
move 移除 move &hosp_cde to $hospital_cde
|| 字符串拼接 let parameter = ‘test_’|| parameter
! 注释 !编写相关内容
!将日期函数转换为字符串,格式:dd/mm/yy
!具体日期格式对照: https://www.cnblogs.com/shuilangyizu/p/6677390.html
2、SQR语句于报表对应示例
在报表中的显示输出以 print 关键字
打印标题信息:
执行报表内容查询,并将查询的结果放到变量中
打印查询结果出来的变量信息
打印报表统计结果:
打印报表的最后结束内容:
二、JasperReport:
是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,或者XML格式。该库完全由Java写成,可以用于在各种Java应用程序,包括J2EE,Web应用程序中生成动态内容。
Eclipse安装JasperReport插件:https://blog.csdn.net/QIANG_HAO/article/details/103940377/
JasperReport简易入门教程:
https://blog.csdn.net/dullchap/article/details/51799070
JasperReport入门教程:
https://www.cnblogs.com/xyyz120/category/1695447.html
1、JasperRepor开发步骤
第一步:新建JasperReport
选择空白的A4页面进行创建报表的模板
使用无数据的空表信息创建
报表的保存路径为:cms-cms-obscis-ip-war\src\main\webapp\obscis\inpatient\reports\jasper\ogReport 文件夹下
报表的统一命名为:原SQR报表的名称,若可以合成同一份的则使用SQR报表的名称去除医院的简称,如下:
原SQR的报表为 og6001kwh.sqr、og6001pmh.sqr 若可以合成同一份则命名为:og6001.jrxml 若不能合并的则还是使用og6001kwh.jrxml
创建后可以看到如下的界面(附各模块生成的模板解析说明)
第二步:填充栏位
根据报表,拉取相关组件到可视化报表内容中,根据相关的显示要求放置在对应的栏位中
注意事项:
Detail是打印Field字段的区域,一个报表可以有多个Detail,在Detail上右键可以通过Add Detail Band来增加新的Detail区
Detail会把传递进来的list的数据,循环打印出来,有多条就会打印多行,一页打印不下就会从下一页继续打印
如果通过Detail来打印表格,Detail的高度最好和要打印的Field高度一样,这样每行就不会有缝隙,打印出来和表格一样的效果
如果存在多个detail,他们是交替打印
固定内容的lable文件用
相关内容的修改则在属性区域进行修改,在该区域配置具体的内容
而样式则在Advanced中进行修改
动态显示的文本内容用
相关内容的修改则在属性区域进行修改,在该区域配置具体的内容
动态文本的内容有参数、验证值、其他等的可以点击
来具体配置:
获取系统当前时间:new SimpleDateFormat(“dd/MM/yyyy”, Locale.US).format(new java.util.Date())
新参数方法配置:
在参数属性设置中可有修改新建的参数名称和类型
Variables内置变量
Variable 名称 说明
PAGE_NUMBER 它包含当前页的页。
COLUMN_NUMBER 它包含当前的列数。
REPORT_COUNT 当前的记录数目
PAGE_COUNT 当前的页号
COLUMN_COUNT 当前的列号
MASTER_CURRENT_PAGE 主报表当前页
MASTER_TOTAL_PAGES 主报表页数
第三步:配置JavaBean
配置JavaBean作为数据源的开发方式如下:
(1)需要先创建一个JavaBean
(2)创建一个Collection of JavaBeans
(3)配置DataSet,点击如下按钮:
选择我们报表所需要的JavaBean,引入到我们的JasperReport报表中
第四步:预览(可跳过)
preview -> 填写配置的参数 -> 运行
第五步:在Java程序代码中调用报表
报表中分为两部分一部分为参数(parameter),一部分为数据显示的明细列表(Detail)
参数prameter是一张报表中全局的属性,可以在报表的任何地方显示,而Detail部分我们使用List来传值,同时在报表的Fields中配置相关的字段信息。
Java代码的调用方式如下图:
2、OBSCIS JasperRepor开发步骤
第一步:制作JasperReport模板
(1)根据原SQR生成的报表样式图表,制作相应报表的JasperReport模板
(2)报表的保存路径为:cms-cms-obscis-ip-war\src\main\webapp\obscis\inpatient\reports\jasper\ogReport 文件夹下
(3)报表的统一命名为:原SQR报表的名称,若可以合成同一份的则使用SQR报表的名称去除医院的简称,如下:
原SQR的报表为 og6001kwh.sqr、og6001pmh.sqr 若可以合成同一份则命名为:og6001.jrxml 若不能合并的则还是使用og6001kwh.jrxml
第二步:SQR 改写为JAVA实现
(1)将SQR报表中的SQL语句迁移至Java的DAO层进行实现
(2)将SQR报表中的SP(存储过程)转换为Java代码实现
(3)将SQR报表中的逻辑处理转换为Java代码实现
3、JasperRepor使用技巧
报表虚线设置
字段为空设置不显示
使用表达式设置相关列为null值时显示为空