爬坑历程。
由于这批报表是一个行业标准,必须按照模板来。其他报表通过帆软已经实现了。如果这个不能实现,所有都得推倒重来。
1.直接用分栏报表。整体的表头和表尾格式都乱套了。补充空白行也不行。不知道是不是一个bug。
2.分栏用子报表来实现。然后表头和表尾放在主报表。显示格式也调整好了。但是子报表是一张图片。不符合要求,只好当作一个备选方案,被淘汰的几率很大。。。
以上两种方式都不行,最后决定用原生的方式再尝试一把。主要解决方案思路如下:SQL是针对MYSQL数据库的
1. 用SQL生成左列的数据源。然后生成一个索引字段为page页码“-”行序列。SQL如下:
- SELECT
- xuhao+1 xuhao, CONCAT(xuhao DIV 44, '-', MOD(xuhao, 22)) page_row_key, -- 这个就是当前页的行数关键字
- HYDROTEST_PKG_NO, LINE_NO
- FROM
- (SELECT (@i := @i + 1) AS xuhao, HYDROTEST_PKG_NO, LINE_NO FROM
- (SELECT
- phtp.HYDROTEST_PKG_NO,
- phtpd.LINE_NO
- FROM pro_hydro_test_pkg phtp
- LEFT JOIN pro_hydro_test_pkg_dtl phtpd
- ON phtp.PRO_PROJECT_INFO_ID = phtpd.PRO_PROJECT_INFO_ID
- AND phtp.PLANT_UNIT = phtpd.PLANT_UNIT
- AND phtp.HYDROTEST_PKG_NO = phtpd.PRO_HYDRO_TEST_PKG_NO
- WHERE phtp.STATUS = 'submitted'
- AND phtpd.LINE_NO IS NOT NULL
- ORDER BY phtp.HYDROTEST_PKG_NO,
- phtpd.LINE_NO) pkgLine ,
- (SELECT @i := -1) t ) pageRet
- WHERE MOD(xuhao, 44) DIV 22 = 0 --一页显示44条,一列显示22条,所以这个条件就是把所有左列的数据筛选出来。
复制代码 2. 用SQL生成右列的数据源。然后生成一个索引字段为page页码“-”行序列。
- SELECT
- xuhao+1 xuhao, CONCAT(xuhao DIV 44, '-', MOD(xuhao, 22)) page_row_key, -- 这个就是当前页的行数关键字
- HYDROTEST_PKG_NO, LINE_NO
- FROM
- (SELECT (@i := @i + 1) AS xuhao, HYDROTEST_PKG_NO, LINE_NO FROM
- (SELECT
- phtp.HYDROTEST_PKG_NO,
- phtpd.LINE_NO
- FROM pro_hydro_test_pkg phtp
- LEFT JOIN pro_hydro_test_pkg_dtl phtpd
- ON phtp.PRO_PROJECT_INFO_ID = phtpd.PRO_PROJECT_INFO_ID
- AND phtp.PLANT_UNIT = phtpd.PLANT_UNIT
- AND phtp.HYDROTEST_PKG_NO = phtpd.PRO_HYDRO_TEST_PKG_NO
- WHERE phtp.STATUS = 'submitted'
- AND phtpd.LINE_NO IS NOT NULL
- ORDER BY phtp.HYDROTEST_PKG_NO,
- phtpd.LINE_NO) pkgLine ,
- (SELECT @i := -1) t ) pageRet
- WHERE MOD(xuhao, 44) DIV 22 = 1 --一页显示44条,一列显示22条,所以这个条件就是把所有右列的数据筛选出来。
复制代码 3.用左列的索引字段去过滤生成的
4. 添加“以下空白”及补充空白行
由于用SEQ去判断添加右侧的第一个空白行为“以下空白”,所以在第五步添加了一个补充空白行的数据源
5.补充空白行的数据源
- SELECT xuhao, spaceChar FROM (select 1 id, '' xuhao, '以下空白' spaceChar union
- select 2 id, '' xuhao, '' spaceChar union
- select 3 id, '' xuhao, '' spaceChar union
- select 4 id, '' xuhao, '' spaceChar union
- select 5 id, '' xuhao, '' spaceChar union
- select 6 id, '' xuhao, '' spaceChar union
- select 7 id, '' xuhao, '' spaceChar union
- select 8 id, '' xuhao, '' spaceChar union
- select 9 id, '' xuhao, '' spaceChar union
- select 10 id, '' xuhao, '' spaceChar union
- select 11 id, '' xuhao, '' spaceChar union
- select 12 id, '' xuhao, '' spaceChar union
- select 13 id, '' xuhao, '' spaceChar union
- select 14 id, '' xuhao, '' spaceChar union
- select 15 id, '' xuhao, '' spaceChar union
- select 16 id, '' xuhao, '' spaceChar union
- select 17 id, '' xuhao, '' spaceChar union
- select 18 id, '' xuhao, '' spaceChar union
- select 19 id, '' xuhao, '' spaceChar union
- select 20 id, '' xuhao, '' spaceChar union
- select 21 id, '' xuhao, '' spaceChar) spacetbl
- where id<=${idnum} and 22!=${idnum}
复制代码 6. 补充空白行
由于内部数据集不支持SQL,模板也没必要上传了。整体思路就是这样。
希望抛砖引玉,大家对这种报表有别的解决方案,欢迎大家踊跃留言。
编辑于 2020-11-16 08:55
编辑于 2020-11-16 08:56
|