爬坑历程。
由于这批报表是一个行业标准,必须按照模板来。其他报表通过帆软已经实现了。如果这个不能实现,所有都得推倒重来。
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.用左列的索引字段去过滤生成的
137736
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. 补充空白行
137741
由于内部数据集不支持SQL,模板也没必要上传了。整体思路就是这样。
希望抛砖引玉,大家对这种报表有别的解决方案,欢迎大家踊跃留言。
编辑于 2020-11-16 08:55
编辑于 2020-11-16 08:56