瀏覽代碼

分组合计边界条件问题

TonyKang 5 年之前
父節點
當前提交
2e20d7a655
共有 1 個文件被更改,包括 11 次插入8 次删除
  1. 11 8
      app/reports/rpt_component/jpc_flow_tab.js

+ 11 - 8
app/reports/rpt_component/jpc_flow_tab.js

@@ -26,6 +26,7 @@ JpcFlowTabSrv.prototype.createNew = function() {
         let preAmt = 0;
         let insertedGrpAmt = 0;
         let grp_lines = 0;
+        let hasPrePageGrp = false;
         const followMode = (isFollow) ? JV.TYPE_FOLLOW_MODE : -1;
         let nextPageAutoHeightRecAmt = 0;
         if (grpSequenceInfo && grpPageInfo) {
@@ -67,11 +68,16 @@ JpcFlowTabSrv.prototype.createNew = function() {
             let couldBreak = false;
             for (let i = 0; i < grp_lines; i++) {
                 if (vIdx.length >= maxRecPerPage) {
-                    for (let j = i; j < grp_lines; j++) {
-                        grpPageInfo[JV.PROP_PRE_ADD_GRP_REC_INFO].push(j);
+                    if (grp_lines === 1) {
+                        hasPrePageGrp = true; // 在此情况下,说明最后一条记录应该是group,但是不够正常空间,那么就硬塞这1条数据!
+                        vIdx.push([followMode, JV.DISPLAY_VAL_TYPE_GROUP, grpPageInfo[JV.PROP_SEG_GRP_IDX], i]);
+                    } else {
+                        for (let j = i; j < grp_lines; j++) {
+                            grpPageInfo[JV.PROP_PRE_ADD_GRP_REC_INFO].push(j);
+                        }
+                        // 准备要跳出去了
+                        hasFullGrp = false;
                     }
-                    // 准备要跳出去了
-                    hasFullGrp = false;
                     break;
                 } else {
                     vIdx.push([followMode, JV.DISPLAY_VAL_TYPE_GROUP, grpPageInfo[JV.PROP_SEG_GRP_IDX], i]);
@@ -108,7 +114,7 @@ JpcFlowTabSrv.prototype.createNew = function() {
         for (let vi = 0; (vi + insertedGrpAmt * grp_lines) < maxRecPerPage - preAmt; vi++) {
             if (grpSequenceInfo && grpPageInfo) {
                 if ((startRecIdx + vi) === grpSequenceInfo[grpPageInfo[JV.PROP_SEG_GRP_IDX]]) {
-                    // 表示这里要插入grouping信息
+                    // 表示这里要插入grouping信息!
                     let couldBreak = false;
                     // 1. 首先push正常的记录(要考虑自动行高调整的分支)
                     if (segAutoHeightInfo && segAutoHeightInfo.length > 0) {
@@ -693,9 +699,6 @@ JpcFlowTabSrv.prototype.createNew = function() {
                             // 备注: 理论上自动行高是没有上限的,有可能正常一页的数据可以拓展到3页及以上,在此极端情况下,必须做一些限制判断,否则会出现缺页情况。
                             // 2018-08-04 其实之前的判断逻辑完全是自找麻烦,而且还不够正确。其实只需要判断已经处理了多少行纪录(所有的都算,包括空白行),
                             // 与总的seg纪录数想比较,就很容易得到结果,而且能处理极端边界的情况。
-                            // console.log('pageIdx: ' + pageIdx);
-                            // console.log('pageStatus: ');
-                            // console.log(pageStatus);
                             pageStatus[JV.STATUS_SEGMENT_END] = true;
                             pageStatus[JV.STATUS_REPORT_END] = true;
                             private_resetBandArea();