如何使用智能审批JSSDK实现明细行分组合计原创
金蝶云社区-Luke_duan
Luke_duan
0人赞赏了该文章 86次浏览 未经作者许可,禁止转载编辑于2024年04月16日 16:37:17

云之家的明细本身只有合计功能,没有分组合计功能。对于需要拆分上报,汇总计算或汇总控制的场景,或多行明细,领导审核时只关注按照某个类别汇总后的金额等场景时,就需要将明细进行分组求和。

注:能够实现相同效果的方法有很多,以下代码仅供参考。

1、首先需要再增加一个明细,明细内容是分组值和小计值。例如:下图示例中,我按照年度、费用项目将金额汇总。

image.png

2、在个性化开发中创建一个个性化卡片

image.png

3、先测试获取两个明细的内容,智能审批的数组是由控件ID和控件值组成的,例如:[{"Te_5":"销售费用"},...],Te_5是明细中,【费用项目(文本)】字段的ID

//获取并打印明细值
let items = cf.form.getFieldValue("Dd_0").widgetValue;
console.log(items);

或者从代码界面的左侧获取

image.png

4、编写正式代码

cf.ready(function(){
    //监听明细值的改变,明细中修改任意值,都会触发
    let success = cf.form.subscribeFieldValueChange(
    "Dd_0", function (valueObject) {
        //获取明细数组
        let data = valueObject.widgetValue
        //使用reduce函数,累计金额。acc初始值是一个空对象{},item是明细行
        let result = data.reduce((acc, item) => {
            //判断【费用项目(文本)】字段不为空
            if (item.Te_5 != ""){
                //将【预算年度】-【费用项目(文本)】连接起来作为key
                let key = `${item.Te_0}-${item.Te_5}`; 
                //判断acc中是否存在key
                if (!acc.hasOwnProperty(key)) {  
                    //如果不存在,添加一个对象 key:{年度预算明细行项目}。
                    //Te_1 预算年度;Te_6 费用项目;Mo_2 预算金额合计
                    acc[key] = {Te_1: item.Te_0, Te_6: item.Te_5, Mo_2: 0}; 
                }  
                //预算金额累加
                acc[key].Mo_2 += Number(item.Mo_1);
            }
            //返回对象
            return acc;  
        }, {});  
        // 将结果转换为数组,并且根据预算年度、费用项目排序
        var resultArray = Object.values(result).sort((a, b) => a.Te_1 - b.Te_1 || a.Te_6.localeCompare(b.Te_6));
        //赋值给年度预算明细
        success = cf.form.setFieldValue("Dd_1", resultArray)
    })
})


赞 0