一、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值时显示为空










