Prechádzať zdrojové kódy

小数位数控制(离散指标)

TonyKang 7 rokov pred
rodič
commit
8a9eb2d92e

+ 23 - 6
modules/reports/rpt_component/helper/jpc_helper_discrete.js

@@ -3,9 +3,10 @@ let JE = require('../jpc_rte');
 let JpcTextHelper = require('./jpc_helper_text');
 let JpcCommonOutputHelper = require('./jpc_helper_common_output');
 let JpcAreaHelper = require('./jpc_helper_area');
+let JpcFieldHelper = require('./jpc_helper_field');
 
 let JpcDiscreteHelper = {
-    outputDiscreteInfo: function (discreteArray, bands, dataObj, unitFactor, pageStatus, segIdx, multiCols, multiColIdx, $CURRENT_RPT) {
+    outputDiscreteInfo: function (discreteArray, bands, dataObj, unitFactor, pageStatus, segIdx, multiCols, multiColIdx, $CURRENT_RPT, customizeCfg) {
         let rst = [];
         if (discreteArray && dataObj) {
             for (let i = 0; i < discreteArray.length; i++) {
@@ -20,13 +21,15 @@ let JpcDiscreteHelper = {
                         }
                     }
                     if (discreteArray[i][JV.PROP_DISCRETE_FIELDS]) {
+                        let flexiblePrecisionRefObj = null, flexibleRefField = null;
                         for (let j = 0; j < discreteArray[i][JV.PROP_DISCRETE_FIELDS].length; j++) {
                             let df = discreteArray[i][JV.PROP_DISCRETE_FIELDS][j];
                             let value = "";
                             if (df[JV.PROP_FIELD_ID]) {
-                                let field = JE.F(df[JV.PROP_FIELD_ID], $CURRENT_RPT);
-                                if (field.DataSeq !== JV.BLANK_FIELD_INDEX) {
-                                    let data = dataObj[field.DataNodeName][field.DataSeq];
+                                // let map_data_field = JE.F(df[JV.PROP_FIELD_ID], $CURRENT_RPT);
+                                let map_data_field = JE.F(df[JV.PROP_FIELD_ID], $CURRENT_RPT);
+                                if (map_data_field.DataSeq !== JV.BLANK_FIELD_INDEX) {
+                                    let data = dataObj[map_data_field.DataNodeName][map_data_field.DataSeq];
                                     if (data && data.length > 0) {
                                         if (data.length > segIdx) {
                                             value = data[segIdx];
@@ -35,10 +38,24 @@ let JpcDiscreteHelper = {
                                         }
                                     }
                                 } else {
-                                    if (field[JV.PROP_AD_HOC_DATA] && field[JV.PROP_AD_HOC_DATA].length > 0) {
-                                        value = field[JV.PROP_AD_HOC_DATA][0]
+                                    if (map_data_field[JV.PROP_AD_HOC_DATA] && map_data_field[JV.PROP_AD_HOC_DATA].length > 0) {
+                                        value = map_data_field[JV.PROP_AD_HOC_DATA][0]
                                     } else value = "";
                                 }
+                                if (map_data_field && map_data_field[JV.PROP_PRECISION] && map_data_field.flexiblePrecisionRefObj) {
+                                    let pre_ref_data = null;
+                                    if (flexiblePrecisionRefObj === null) {
+                                        flexiblePrecisionRefObj = {};
+                                        flexibleRefField = JE.F(map_data_field[JV.PROP_PRECISION][JV.PROP_FLEXIBLE_REF_FILED_ID], $CURRENT_RPT);
+                                        pre_ref_data = dataObj[map_data_field.DataNodeName][flexibleRefField.DataSeq]; //这里的引用指标必须得存在,哪怕不显示,也要存放在指标集合中!
+                                        for (let decimalObj of map_data_field.flexiblePrecisionRefObj) {
+                                            flexiblePrecisionRefObj["refUnit_" + decimalObj.unit] = decimalObj.decimal;
+                                        }
+                                    }
+                                    JpcFieldHelper.resetFlexibleFormat(df, pre_ref_data, flexiblePrecisionRefObj, segIdx, customizeCfg);
+                                } else {
+                                    JpcFieldHelper.resetFormat(df, map_data_field, customizeCfg);
+                                }
                             } else if (df[JV.PROP_PARAM_ID]) {
                                 let param = JE.P(df[JV.PROP_PARAM_ID], $CURRENT_RPT);
                                 value = param[JV.PROP_DFT_VALUE];

+ 3 - 3
modules/reports/rpt_component/helper/jpc_helper_field.js

@@ -26,10 +26,10 @@ let JpcFieldHelper = {
             }
         }
     },
-    resetFlexibleFormat: function (tab_field, ref_field, flexiblePrecisionRefObj, valueIdx, customizeCfg) {
+    resetFlexibleFormat: function (tab_field, ref_field_data, flexiblePrecisionRefObj, valueIdx, customizeCfg) {
         let precisionAmt = 2;
-        if (ref_field && flexiblePrecisionRefObj && valueIdx >= 0) {
-            precisionAmt = flexiblePrecisionRefObj["refUnit_" + ref_field[valueIdx]];
+        if (ref_field_data && flexiblePrecisionRefObj && valueIdx >= 0) {
+            precisionAmt = flexiblePrecisionRefObj["refUnit_" + ref_field_data[valueIdx]];
             if (precisionAmt === null || precisionAmt === undefined) precisionAmt = flexiblePrecisionRefObj["refUnit_其他未列单位"];
         }
         let formatStrs = ["#."], ffStr = (customizeCfg && customizeCfg.fillZero)?"0":"#";

+ 5 - 4
modules/reports/rpt_component/jpc_bill_tab.js

@@ -60,7 +60,7 @@ JpcBillTabSrv.prototype.createNew = function(){
         //2.1 output content
         tabRstLst.push(me.outputContent(rptTpl, dataObj, page, bands, unitFactor, controls, pageStatus, $CURRENT_RPT, customizeCfg));
         //2.2 output discrete
-        tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, pageStatus, page - 1, 1, 0, $CURRENT_RPT));
+        tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, pageStatus, page - 1, 1, 0, $CURRENT_RPT, customizeCfg));
         for (let i = 0; i < tabRstLst.length; i++) {
             rst = rst.concat(tabRstLst[i]);
             tabRstLst[i] = null;
@@ -110,7 +110,7 @@ JpcBillTabSrv.prototype.createNew = function(){
                 } else if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]) {
                     data_details = dataObj[JV.DATA_MASTER_DATA];
                 }
-                let flexiblePrecisionRefObj = null, flexibleRefField = null;
+                let flexiblePrecisionRefObj = null, flexibleRefField = null, precision_ref_data = null;
                 for (let i = 0; i < tab_fields.length; i++) {
                     let tab_field = tab_fields[i];
                     let data_field = null, map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
@@ -125,11 +125,12 @@ JpcBillTabSrv.prototype.createNew = function(){
                         if (flexiblePrecisionRefObj === null) {
                             flexiblePrecisionRefObj = {};
                             flexibleRefField = JE.F(map_data_field[JV.PROP_PRECISION][JV.PROP_FLEXIBLE_REF_FILED_ID], $CURRENT_RPT);
+                            precision_ref_data = dataObj[map_data_field.DataNodeName][flexibleRefField.DataSeq];
                             for (let decimalObj of map_data_field.flexiblePrecisionRefObj) {
                                 flexiblePrecisionRefObj["refUnit_" + decimalObj.unit] = decimalObj.decimal;
                             }
                         }
-                        JpcFieldHelper.resetFlexibleFormat(tab_field, flexibleRefField, flexiblePrecisionRefObj, page - 1, customizeCfg);
+                        JpcFieldHelper.resetFlexibleFormat(tab_field, precision_ref_data, flexiblePrecisionRefObj, page - 1, customizeCfg);
                     } else {
                         if (page === 1) JpcFieldHelper.resetFormat(tab_field, map_data_field, customizeCfg);
                     }
@@ -149,7 +150,7 @@ JpcBillTabSrv.prototype.createNew = function(){
                     }
                 }
                 if (tab[JV.NODE_DISCRETE_INFO]) {
-                    rst = rst.concat(JpcDiscreteHelper.outputDiscreteInfo(tab[JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, pageStatus, page - 1, 1, 0));
+                    rst = rst.concat(JpcDiscreteHelper.outputDiscreteInfo(tab[JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, pageStatus, page - 1, 1, 0, customizeCfg));
                 }
             }
         }

+ 11 - 8
modules/reports/rpt_component/jpc_cross_tab.js

@@ -356,7 +356,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
             tabRstLst.push(me.outputTabExt(rptTpl, dataObj, page, bands, unitFactor, controls));
             tabRstLst.push(me.outputSumTabExt(rptTpl, dataObj, page, bands, unitFactor, segIdx, controls));
             //2.5 Discrete
-            tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_CROSS_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, 1, 0, $CURRENT_RPT));
+            tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_CROSS_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, 1, 0, $CURRENT_RPT, customizeCfg));
             //*/
         } else {
             let segIdx = JpcCommonHelper.getSegIdxByPageIdx(page, me.page_seg_map);
@@ -376,7 +376,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
             tabRstLst.push(me.outputTabExt(rptTpl, dataObj, page, bands, unitFactor, controls));
             tabRstLst.push(me.outputSumTabExt(rptTpl, dataObj, page, bands, unitFactor, segIdx, controls));
             //2.5 Discrete
-            tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_CROSS_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, 1, 0, $CURRENT_RPT));
+            tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_CROSS_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, 1, 0, $CURRENT_RPT, customizeCfg));
         }
         for (let i = 0; i < tabRstLst.length; i++) {
             rst = rst.concat(tabRstLst[i]);
@@ -395,7 +395,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
                 let data_details = dataObj[JV.DATA_DETAIL_DATA];
                 let valuesIdx = me.dispValueIdxLst_Row[page - 1];
                 let serialsIdx = me.dispSerialIdxLst_Row[page - 1];
-                let flexiblePrecisionRefObj = null, flexibleRefField = null;
+                let flexiblePrecisionRefObj = null, flexibleRefField = null, precision_ref_data = null;
                 for (let i = 0; i < me.row_fields_idx.length; i++) {
                     let tab_field = tab_fields[i];
                     let data_field = data_details[me.row_fields_idx[i]];
@@ -407,11 +407,12 @@ JpcCrossTabSrv.prototype.createNew = function(){
                                 if (flexiblePrecisionRefObj === null) {
                                     flexiblePrecisionRefObj = {};
                                     flexibleRefField = JE.F(map_data_field[JV.PROP_PRECISION][JV.PROP_FLEXIBLE_REF_FILED_ID], $CURRENT_RPT);
+                                    precision_ref_data = dataObj[map_data_field.DataNodeName][flexibleRefField.DataSeq];
                                     for (let decimalObj of map_data_field.flexiblePrecisionRefObj) {
                                         flexiblePrecisionRefObj["refUnit_" + decimalObj.unit] = decimalObj.decimal;
                                     }
                                 }
-                                JpcFieldHelper.resetFlexibleFormat(tab_field, flexibleRefField, flexiblePrecisionRefObj, valuesIdx[rowIdx], customizeCfg);
+                                JpcFieldHelper.resetFlexibleFormat(tab_field, precision_ref_data, flexiblePrecisionRefObj, valuesIdx[rowIdx], customizeCfg);
                             } else {
                                 if (rowIdx === 0) JpcFieldHelper.resetFormat(tab_field, map_data_field, customizeCfg);
                             }
@@ -433,7 +434,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
                 let tab_fields = tab[JV.TAB_CROSS_FIELDS];
                 let data_details = dataObj[JV.DATA_DETAIL_DATA];
                 let valuesIdx = me.dispValueIdxLst_Col[page - 1];
-                let flexiblePrecisionRefObj = null, flexibleRefField = null;
+                let flexiblePrecisionRefObj = null, flexibleRefField = null, precision_ref_data = null;
                 for (let i = 0; i < me.col_fields_idx.length; i++) {
                     let tab_field = tab_fields[i];
                     let data_field = data_details[me.col_fields_idx[i]];
@@ -445,11 +446,12 @@ JpcCrossTabSrv.prototype.createNew = function(){
                                 if (flexiblePrecisionRefObj === null) {
                                     flexiblePrecisionRefObj = {};
                                     flexibleRefField = JE.F(map_data_field[JV.PROP_PRECISION][JV.PROP_FLEXIBLE_REF_FILED_ID], $CURRENT_RPT);
+                                    precision_ref_data = dataObj[map_data_field.DataNodeName][flexibleRefField.DataSeq];
                                     for (let decimalObj of map_data_field.flexiblePrecisionRefObj) {
                                         flexiblePrecisionRefObj["refUnit_" + decimalObj.unit] = decimalObj.decimal;
                                     }
                                 }
-                                JpcFieldHelper.resetFlexibleFormat(tab_field, flexibleRefField, flexiblePrecisionRefObj, valuesIdx[colIdx], customizeCfg);
+                                JpcFieldHelper.resetFlexibleFormat(tab_field, precision_ref_data, flexiblePrecisionRefObj, valuesIdx[colIdx], customizeCfg);
                             } else {
                                 if (colIdx === 0) JpcFieldHelper.resetFormat(tab_field, map_data_field, customizeCfg);
                             }
@@ -483,7 +485,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
                 let tab_fields = tab[JV.TAB_CROSS_FIELDS];
                 let data_details = dataObj[JV.DATA_DETAIL_DATA];
                 let contentValuesIdx = me.dispValueIdxLst_Content[page - 1];
-                let flexiblePrecisionRefObj = null, flexibleRefField = null;
+                let flexiblePrecisionRefObj = null, flexibleRefField = null, precision_ref_data = null;
                 for (let i = 0; i < tab_fields.length; i++) {
                     let tab_field = tab_fields[i];
                     let data_field = data_details[me.content_fields_idx[i]];
@@ -497,11 +499,12 @@ JpcCrossTabSrv.prototype.createNew = function(){
                                     if (flexiblePrecisionRefObj === null) {
                                         flexiblePrecisionRefObj = {};
                                         flexibleRefField = JE.F(map_data_field[JV.PROP_PRECISION][JV.PROP_FLEXIBLE_REF_FILED_ID], $CURRENT_RPT);
+                                        precision_ref_data = dataObj[map_data_field.DataNodeName][flexibleRefField.DataSeq];
                                         for (let decimalObj of map_data_field.flexiblePrecisionRefObj) {
                                             flexiblePrecisionRefObj["refUnit_" + decimalObj.unit] = decimalObj.decimal;
                                         }
                                     }
-                                    JpcFieldHelper.resetFlexibleFormat(tab_field, flexibleRefField, flexiblePrecisionRefObj, contentValuesIdx[rowIdx][colIdx], customizeCfg);
+                                    JpcFieldHelper.resetFlexibleFormat(tab_field, precision_ref_data, flexiblePrecisionRefObj, contentValuesIdx[rowIdx][colIdx], customizeCfg);
                                 } else {
                                     if (colIdx === 0) JpcFieldHelper.resetFormat(tab_field, map_data_field, customizeCfg);
                                 }

+ 6 - 5
modules/reports/rpt_component/jpc_flow_tab.js

@@ -670,7 +670,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
             tabRstLst.push(me.outputPageSum(rptTpl, dataObj, page, segIdx, bands, unitFactor, controls));
             // 2.5 Group
             // 2.6 Discrete
-            tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[FLOW_NODE_STR][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, 1, 0, $CURRENT_RPT));
+            tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[FLOW_NODE_STR][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, 1, 0, $CURRENT_RPT, customizeCfg));
             //3. reset merge band position
             if (bands[JV.BAND_PROP_MERGE_BAND] && adHocMergePos) {
                 let mergedBand = bands[JV.BAND_PROP_MERGE_BAND];
@@ -705,7 +705,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
                 // 2.5 Group
                 // 2.6 Discrete
                 if (pi === 0) {
-                    tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[FLOW_NODE_STR][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[actualPage - 1], segIdx, 1, pi, $CURRENT_RPT));
+                    tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[FLOW_NODE_STR][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[actualPage - 1], segIdx, 1, pi, $CURRENT_RPT, customizeCfg));
                 }
             }
         }
@@ -758,7 +758,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
                     rowGrandTotal.push(0.0);
                 }
                 //normal content
-                let flexiblePrecisionRefObj = null, flexibleRefField = null;
+                let flexiblePrecisionRefObj = null, flexibleRefField = null, precision_ref_data = null;
                 for (let rowIdx = 0; rowIdx < contentValuesIdx.length; rowIdx++) {
                     for (let i = 0; i < tab_fields.length; i++) {
                         let tab_field = tab_fields[i];
@@ -775,11 +775,12 @@ JpcFlowTabSrv.prototype.createNew = function(){
                             if (flexiblePrecisionRefObj === null) {
                                 flexiblePrecisionRefObj = {};
                                 flexibleRefField = JE.F(map_data_field[JV.PROP_PRECISION][JV.PROP_FLEXIBLE_REF_FILED_ID], $CURRENT_RPT);
+                                precision_ref_data = dataObj[map_data_field.DataNodeName][flexibleRefField.DataSeq];
                                 for (let decimalObj of map_data_field.flexiblePrecisionRefObj) {
                                     flexiblePrecisionRefObj["refUnit_" + decimalObj.unit] = decimalObj.decimal;
                                 }
                             }
-                            JpcFieldHelper.resetFlexibleFormat(tab_field, flexibleRefField, flexiblePrecisionRefObj, contentValuesIdx[rowIdx][2], customizeCfg);
+                            JpcFieldHelper.resetFlexibleFormat(tab_field, precision_ref_data, flexiblePrecisionRefObj, contentValuesIdx[rowIdx][2], customizeCfg);
                         } else {
                             if (rowIdx === 0) JpcFieldHelper.resetFormat(tab_field, map_data_field, customizeCfg);
                         }
@@ -1001,7 +1002,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
             }
         }
         if (tab[JV.NODE_DISCRETE_INFO]) {
-            rst = rst.concat(JpcDiscreteHelper.outputDiscreteInfo(tab[JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, 1, 0));
+            rst = rst.concat(JpcDiscreteHelper.outputDiscreteInfo(tab[JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, 1, 0, null));
         }
         return rst;
     };

+ 2 - 2
test/unit/reports/test_rpt_test_template.js

@@ -27,8 +27,8 @@ let fsUtil = require("../../../public/fsUtil");
 
 let demoPrjId = - 1;
 // let demoRptId = 279;
-// let demoRptId = 275; //测试模板-流水式
-let demoRptId = 337; //19表
+let demoRptId = 275; //测试模板-流水式
+// let demoRptId = 337; //19表
 let pagesize = "A4";
 //288: 11-2表(新)
 //279: 04