第一个明细表数据汇总到第二个明细表
2025年2月20日大约 2 分钟脚本实例企业版独立版移动版
将第一个明细表的值选择后填入主表字段并查询将结果填入第二个明细表
需求:是对WebApp页面中第一个明细表进行分组合计,然后将结果填入第二个明细表。默认的方式请使用表间公式实现。这里介绍通过JavaScript的实现方法。
分析:有两个关键点,一个是对第一个明细表中分组字段值相同的数据进行求和,第二个是去除重复。可以使用reduce()方法实现。
reduce()
reduce()方法用于对数组进行累积操作,它可以用来求和、求积、统计元素出现次数、数组去重等。通过提供一个回调函数和可选的初始值,reduce会对数组的每个元素执行回调,将结果汇总为单个返回值。需要注意的是,如果数组为空且未提供初始值,reduce会抛出错误;提供初始值则从索引0开始计算。reduce()方法可以搞定的东西特别多,就是循环遍历能做的,reduce都可以做,比如数组求和、数组求积、统计数组中元素出现的次数、数组去重等等。
实现方法
function summx() {
var datadetail = datatable['87c5c41e-70a8-47dd-b120-c0b2b284341f']
// var datadetail = datatable['ecee8cd1-e714-4cd5-8c67-0a171cedce08']
const groupedSum = datadetail.reduce((acc, item) => {
if (!acc[item.F_65581]) {
acc[item.F_65581] = { F_65582: item.F_65581,F_65583: 0, F_65584: 0,F_65585: 0 }; // 初始化分组对象
}
acc[item.F_65581].F_65584 += Number(item.F_65580); // 对当前分类的值进行累加
return acc;
}, {});
const resultArray = Object.values(groupedSum);
// console.log(resultArray);
//将数据载入第二个明细表
$('table[idx="ecee8cd1-e714-4cd5-8c67-0a171cedce08"]').datagrid('loadData', resultArray);
};
F_65581:第一个明细表中分组的字段。
F_65580:第一个明细表中求和的字段。
其他字段均为第二个明细表中要填入的字段。
明细表数组
datadetail
是WebApp明细表的数组,当只有一个明细表时可以直接使用。如果是多个明细表则需要通过表名的TID来指定,datatable['TID']
。