JEPaaS 社区

 找回密码
 立即注册
JECloud低代码平台-官网
查看: 2240|回复: 0

【报表系列】作出一个统计报表的大概思路

[复制链接]

75

主题

77

帖子

355

积分

中级会员

Rank: 3Rank: 3

积分
355
发表于 2021-9-6 14:39:58 | 显示全部楼层 |阅读模式
一、实现效果
如图1所示:

1.png
二、实现思路

三、具体操作
1、如图2,选择图报表引擎。
2.png
2、如图3所示,现在这里面添加一个数据源,从后端获取数据。
3.png
3、如图4,在这里添加报表,将数据源载入进来,然后画出报表的样子,单击数据源上的字段将数据源载入进表格即可。
4.png
四、相关代码(可选)
  1. /*必须按照如下格式返回数据,否则数据出错,params(过滤条件)可以省略*/
  2. function(params){
  3.     var pkValue = Ext.value(params.BFSY_ND,"");
  4.     var pkValueXm = Ext.value(params.SY_XMID);
  5.     var xmcode = Ext.value(params.XM_CODE);
  6.     var  whereSql = "";
  7.     if(JE.isEmpty(pkValueXm)){
  8.         whereSql = "";
  9.     }else{
  10.         whereSql = " and ( SY_XMID = '" + pkValueXm +"'  or  SY_XMID IN  ( SELECT BFSY_BASE_XM_ID FROM BFSY_BASE_XM WHERE SY_PARENT= '" + pkValueXm +"' )  )";
  11.     }
  12.     //debugger;
  13.     if(pkValue == ''){
  14.         /*var data = new Date();
  15.         var data = JE.DATE.formatDate(new Date())
  16.         pkValue = data.substring(0,4);*/
  17.         pkValue = ''
  18.     }
  19.     // //debugger
  20.     // //签约管理
  21.     // var qyglDatas = JE.ajax({url:"/je/report/select",params:{sql:"SELECT SUBSTRING(DDQY_QDRQ,1,4) nd,sum(DD_FINALPRICE) AS htje,sum(FK_YFJE) AS sfje  FROM BFSY_XS_DDQY where SUBSTRING(DDQY_QDRQ,1,4) = '"+pkValue + "'"}}).rows;
  22.     // //年度考核
  23.     // var ndkhDatas = JE.ajax({url:"/je/report/select",params:{sql:"SELECT * FROM BFSY_JH_NDKH where NDKH_YEAR = '"+pkValue+"'"}}).rows;
  24.     // //目标成本
  25.     // var mbcbDatas = JE.ajax({url:"/je/report/select",params:{sql:"SELECT sum(MBCB_MBCB) AS mbcbsjz FROM BFSY_CB_MBCB where MBCB_ND_CODE = '"+pkValue+ "'"}}).rows;
  26.     // //动态成本

  27.     //签约管理
  28.     var qyglDatas = JE.ajax({url:"/je/report/select",params:{sql:"SELECT SUBSTRING(DDQY_QDRQ,1,4) nd,sum(DD_FINALPRICE) AS htje,sum(FK_YFJE) AS sfje  FROM BFSY_XS_DDQY where SUBSTRING(DDQY_QDRQ,1,4) = '"+pkValue+ "' and DDQY_FKBS_CODE='QDZ' " + whereSql}}).rows;
  29.     //年度考核
  30.     var ndkhDatas = JE.ajax({url:"/je/report/select",params:{sql:"SELECT sum(NDKH_SALEHT_MB) as NDKH_SALEHT_MB,sum(NDKH_HK_MB) as NDKH_HK_MB,sum(NDKH_MANAGECOST_MB) as NDKH_MANAGECOST_MB,sum(NDKH_CWCOST_MB) as NDKH_CWCOST_MB, sum(NDKH_SALECOST_MB) as NDKH_SALECOST_MB   FROM BFSY_JH_NDKH where NDKH_YEAR = '"+pkValue+"'" + whereSql}}).rows;
  31.     //目标成本
  32.     var mbcbDatas = JE.ajax({url:"/je/report/select",params:{sql:"SELECT sum(MBCB_MBJDZCB) AS mbcbsjz,sum(MBCB_GHYL) AS GHYL FROM BFSY_CB_MBCB where MBCB_ND_CODE = '"+pkValue+"' AND KM_CODE='"+xmcode+"' AND MBCB_CBBB_CODE='TZ' " + whereSql}}).rows;
  33.     //动态成本
  34.     var hymxDatas = JE.ajax({url:"/je/report/select",params:{sql:"SELECT SUBSTRING(SY_CREATETIME,1,4) nd,sum(HYMX_CONTRACTANDCHANGE) AS htjbg,sum(HYMX_PREPAREDCONTRACT) AS dfshy,sum(HYMX_EXECUTECHANGE) AS ygbg  FROM BFSY_CB_HYMX where SUBSTRING(SY_CREATETIME,1,4) = '"+pkValue+ "'" + whereSql}}).rows;
  35.     var dtcbDatas = JE.ajax({url:"/je/report/select",params:{sql:"SELECT SUBSTRING(SY_CREATETIME,1,4) nd,sum(MBCB_MBJDZCB) AS mbjtz,sum(MBCB_JSCE) AS jsce  FROM BFSY_CB_MBCB where SUBSTRING(SY_CREATETIME,1,4) = '"+pkValue+ "'" + whereSql+" AND MBCB_CBBB_CODE = 'TZ' "}}).rows;

  36.     var results = new Array();
  37.     Ext.each(qyglDatas,function(qygl){
  38.         Ext.each(ndkhDatas,function(ndkh){
  39.             Ext.each(mbcbDatas,function(mbcb){
  40.                 Ext.each(hymxDatas,function(hymx){
  41.                     Ext.each(dtcbDatas,function(dtcb){
  42.                         var rate1 = 0;//合同金额差额比率
  43.                         var rate2 = 0;//回款差额比率
  44.                         var rate3 = 0;//目标成本差额比率
  45.                         var A = JE.toNum(ndkh.NDKH_SALEHT_MB);//销售合同额目标值--年度考核表
  46.                         var B = JE.toNum(ndkh.NDKH_HK_MB);//最终价格总和--签约表
  47.                         if(A>0){
  48.                             //合同金额差额比率=(销售合同额目标值-最终价格总和)/销售合同额目标值
  49.                             rate1 = ((B - A)/A*100).toFixed(2)
  50.                             //rate1 = (((JE.toNum(ndkh.NDKH_SALEHT_MB) - JE.toNum(qygl.htje))/JE.toNum(ndkh.NDKH_SALEHT_MB))*100).toFixed(2)
  51.                             //rate1 = (((JE.toNum(ndkh.NDKH_SALEHT_MB) - JE.toNum(qygl.htje))/JE.toNum(ndkh.NDKH_SALEHT_MB))*100).toFixed(2)
  52.                         }
  53.                         var C = JE.toNum(ndkh.NDKH_HK_MB);//回款额目标值--年度考核表
  54.                         var D = JE.toNum(qygl.sfje);//已付金额总和--签约表
  55.                         
  56.                         if(C > 0){
  57.                             rate2 = (((D - C)/C)*100).toFixed(2);
  58.                         }
  59.                         var E = JE.toNum(mbcb.mbcbsjz);//调整后目标成本--目标成本表
  60.                         var F = JE.toNum(mbcb.GHYL);//规划余量--目标成本表
  61.                         if(E.toFixed(2)>0){
  62.                             rate3 = (((F-E).toFixed(2) - (E.toFixed(2)) )/E).toFixed(2);
  63.                         }
  64.                         var G = JE.toNum(hymx.htjbg);//合同加变更总和--合约明细表
  65.                         var H = JE.toNum(hymx.dfshy);//待发生合约总和--合约明细表
  66.                         var I = JE.toNum(hymx.ygbg);//执行预估变更总和--合约明细表
  67.                         var J = JE.toNum(dtcb.jsce);//结算差额--目标成本表
  68.                         var K = JE.toNum(dtcb.mbjtz);//调整后目标成本--目标成本表
  69.                         if(K>0){
  70.                             var L = ((G+H+I+J-K)/K);
  71.                         }else{
  72.                             var L = 0;
  73.                         }
  74.                         debugger;
  75.                         results.push({
  76.                             "年度": pkValue,
  77.                             "合同金额目标值": amountOfConversion(A.toFixed(2)),//销售合同额目标值--年度考核表
  78.                             "回款额目标值": amountOfConversion(B.toFixed(2)),//最终价格总和--签约表
  79.                             "目标成本目标值": amountOfConversion(E.toFixed(2)),//调整后目标成本--目标成本表  
  80.                             "管理费用目标值": amountOfConversion(JE.toNum(ndkh.NDKH_MANAGECOST_MB).toFixed(2)),//管理费用目标值--年度考核表  
  81.                             "财务费用目标值": amountOfConversion(JE.toNum(ndkh.NDKH_CWCOST_MB).toFixed(2)),//财务费用目标值--年度考核表
  82.                             "销售费用目标值": amountOfConversion(JE.toNum(ndkh.NDKH_SALECOST_MB).toFixed(2)),//销售费用目标值--年度考核表

  83.                             "合同金额实际值": amountOfConversion(B.toFixed(2)),//最终价格总和--签约表
  84.                             "回款金额实际值": amountOfConversion(D.toFixed(2)),//已付金额总和--签约表
  85.                             "目标成本实际值": amountOfConversion((E-F).toFixed(2)),//调整后目标成本 - 规划余量
  86.                             "动态成本实际值": amountOfConversion((G+H+I+J).toFixed(2)),// 合同加变更总和+待发生合约总和+执行预估变更总和+结算差额
  87.                             //(合同加变更总和+待发生合约总和+执行预估变更总和+结算差额-调整后目标成本)/调整后目标成本
  88.                             "动态成本偏差率": L.toFixed(2),
  89.                             "管理费用实际值": "",
  90.                             "财务费用实际值": "",
  91.                             "销售费用实际值": "",
  92.                            
  93.                             "合同金额差额": amountOfConversion((A - B).toFixed(2)),    //合同金额差额 = 合同金额目标值 - 合同金额实际值
  94.                             "回款额差额": amountOfConversion((C - D).toFixed(2)),      //回款额差额 = 回款额目标值 - 回款额实际值
  95.                             "目标成本差额": amountOfConversion(((E-F).toFixed(2)) - (E.toFixed(2))),  //目标成本差额 = 目标成本目标值 - 目标成本实际值
  96.                             "合同金额差额比率": rate1+"%",
  97.                             "回款差额比率": rate2+"%",
  98.                             "目标成本差额比率": rate3+"%",
  99.                            
  100.                         })
  101.                     })
  102.                 })
  103.             })
  104.             
  105.         })
  106.     });
  107.     function amountOfConversion(value){
  108.         value = JE.toNum(value);
  109.         var newStr = "";
  110.         var str="";
  111.         var count = 0;
  112.         if(value>=0){
  113.             str=value+"";
  114.             // 当数字是整数
  115.             if (str.indexOf(".") == -1) {
  116.                 for (var i = str.length - 1; i >= 0; i--) {
  117.                     if (count % 3 == 0 && count != 0) {
  118.                         newStr = str.charAt(i) + "," + newStr;
  119.                     } else {
  120.                         newStr = str.charAt(i) + newStr;
  121.                     }
  122.                     count++;
  123.                 }
  124.                 str = newStr + ".00"; //自动补小数点后两位
  125.                 return str;
  126.             }
  127.             // 当数字带有小数
  128.             else {
  129.                 for (var i = str.indexOf(".") - 1; i >= 0; i--) {
  130.                     if (count % 3 == 0 && count != 0) {
  131.                         newStr = str.charAt(i) + "," + newStr;
  132.                     } else {
  133.                         newStr = str.charAt(i) + newStr; //逐个字符相接起来
  134.                     }
  135.                     count++;
  136.                 }
  137.                 str = newStr + (str + "00").substr((str + "00").indexOf("."), 3);
  138.                 return str;
  139.             }
  140.         }else{
  141.             value = Math.abs(value);
  142.             str=value+"";
  143.             // 当数字是整数
  144.             if (str.indexOf(".") == -1) {
  145.                 for (var i = str.length - 1; i >= 0; i--) {
  146.                     if (count % 3 == 0 && count != 0) {
  147.                         newStr = str.charAt(i) + "," + newStr;
  148.                     } else {
  149.                         newStr = str.charAt(i) + newStr;
  150.                     }
  151.                     count++;
  152.                 }
  153.                 str = newStr + ".00"; //自动补小数点后两位
  154.                 return "-"+str;
  155.             }
  156.             // 当数字带有小数
  157.             else {
  158.                 for (var i = str.indexOf(".") - 1; i >= 0; i--) {
  159.                     if (count % 3 == 0 && count != 0) {
  160.                         newStr = str.charAt(i) + "," + newStr;
  161.                     } else {
  162.                         newStr = str.charAt(i) + newStr; //逐个字符相接起来
  163.                     }
  164.                     count++;
  165.                 }
  166.                 str = newStr + (str + "00").substr((str + "00").indexOf("."), 3);
  167.                 return "-"+str;
  168.             }
  169.         }
  170.         
  171.     }
  172.     return {fields:["年度","合同金额目标值","回款额目标值","目标成本目标值","管理费用目标值","财务费用目标值","销售费用目标值","合同金额实际值","回款金额实际值","目标成本实际值","动态成本实际值","动态成本偏差率","管理费用实际值","财务费用实际值","销售费用实际值","合同金额差额","回款额差额","目标成本差额","合同金额差额比率","回款差额比率","目标成本差额比率"],data:results};
  173. }
复制代码

五、总结(可选)
这是报表的大概实现思路,具体的细节可以参考别的帖子。
六、关键字

统计报表,报表,数据源,图标

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|JEPaaS 低代码平台社区 ( 京ICP备18023569号 )

GMT+8, 2024-4-28 13:21 , Processed in 0.067467 second(s), 23 queries .

Powered by 北京凯特伟业科技有限公司

Copyright © 2001-2021, JEPaaS.COM

快速回复 返回顶部 返回列表