为什么datatable汇总没有计入最近更新的行记录的值
本帖最后由 szjazz 于 2022-10-26 15:44 编辑定义一个指令,其脚本:
var dtDetail=this.data.datatable_detail.data;
var dtSub=this.data.datatable.data;
var dl=dtSub.length;
for(var j=0;j<dl;j++){
this.form.get("datatable").deleteLine(0);
}
for(var i=0;i<dtDetail.length;i++){
var itemLine=this.form.get("datatable_detail").getLine(i);
var ItemExp=itemLine.get("txtItemExpname").getData();
var ItemSum=parseFloat(itemLine.get("txtItemSum").getData());
var newItem=0;
var dtSub=this.data.datatable.data;
for(var j=0;j<dtSub.length;j++){
var subLine=this.form.get("datatable").getLine(j);
var SubExp=subLine.get("txtSubExpname").getData();
var subSum=parseFloat(subLine.get("txtSubSum").getData());
var totalSum=subSum+ItemSum;
if(ItemExp==SubExp){
subLine.get("txtSubSum").setData(totalSum.toFixed(2));
newItem=0;
break;
}else
{
if(j==dtSub.length-1)
newItem=1;
}
}
if(newItem==1 || dtSub.length==0){
this.form.get('datatable').addLine({"txtSubExpname":ItemExp,"txtSubSum":ItemSum.toFixed(2)});
}
}
需求:表单有两个datatable,一个是明细datatable_detail,另一个是汇总相同项datatable
举一实例:(手工填写汇总的情况下)
而如果是执行上方的脚本进行计算,其结果是:
行是按相同的项自动汇总合并了,但最下方的datatable的total数值与正确的数值却相差一个最后一行的值,
实例一:误差值是下方的圈起值291.53
另一实例:误差值是下方的方框三条记录
思路上我自己看不出错在哪儿,没有实时同步计算?
您描述一下您的过程,您这两张表,有关联吗?是通过脚本去set数据了对吧,您set后是当前的数据表格total没变,还是指另一个数据表格的total没变?您这二者之间的关联是如何做的,描述一下功能 论坛管理员 发表于 2022-10-26 16:34
您描述一下您的过程,您这两张表,有关联吗?是通过脚本去set数据了对吧,您set后是当前的数据表格total没 ...
同一表单下的两个datatable,一个用于填写各明细,一个用于分类汇总,汇总的datatable通过脚本来生成行记录并根据合并计算的结果赋值 szjazz 发表于 2022-10-26 18:55
同一表单下的两个datatable,一个用于填写各明细,一个用于分类汇总,汇总的datatable通过脚本来生成行记 ...
然后呢,现在的问题是什么?明细表变了,汇总表没变?汇总表您是通过setData去做的吧,没变的话就是您setData进去的数据不对 明细表怎么会变呢,需求是汇总明细表datatable_detail的数据到汇总表datatable里:
1、清除datatable所有的行记录(担心有手工填写),改成只读后不存在了,可以不用考虑
2、取明细表的第一行,与汇总表的所有行比较是否存在相同的汇总项目ItemExp==SubExp,已有行,则累加,若无,则修改是否新增行的特征值newItem=1
3、datatable内循环结束之后,还在外循环datatable_detail,此时判断特征值newItem,若为=1,则新增datatable的行记录,且赋值
4、循环2~3步 您没有描述清楚您的需求啊,管理员这边都不明白您过程到底啥样,哪个表变,哪个表不变,数据哪里来,通过什么方式去赋值
2、特征值是什么?累加是累加什么?
管理员这边实在是理解不了您的需求
总体来说,您汇总表需要通过明细表里的数据生成,所以管理员这边建议您使用setData的方式去给汇总表赋值,您说的total不对的情况,total也是通过您setData的方式塞进去的,数据不对就是您塞进去的不对
您可以表单设计时点击表单左上方小眼睛,showjson查看数据表格的数据格式,整个完整的数据塞进去就可以了 本帖最后由 szjazz 于 2022-10-27 16:51 编辑
哇,这还没描述清楚需求,将明细表datatable_detail的项目合并汇总同类项的数值到汇总表datatable里,哪怕没有贴上代码,也看懂中文了
就用以下两句将数据写到datatable,所以有塞啊:'(
subLine.get("txtSubSum").setData(totalSum.toFixed(2));
this.form.get("datatable").addLine({"txtSubExpname":ItemExp,"txtSubSum":ItemSum.toFixed(2)});
因为您清楚您的 业务,所以认为描述清楚了,管理员这边不清楚,茫茫然,所以理解不了
再,管理员跟您描述的不是同一个setData。。。。所以没有说到一个点上
我在您另一个帖子里说了setData了,我是指的整个数据表格赋值,而不是单行赋值,整个表格赋值可以连同total一起赋值
页:
[1]