查看: 11588|回复: 7

为什么datatable汇总没有计入最近更新的行记录的值

升级   0.04%

149

主题

189

回帖

4

积分

注册会员

Rank: 2

积分
4
发表于 2022-10-26 15:38:51 | 显示全部楼层 |阅读模式
本帖最后由 szjazz 于 2022-10-26 15:44 编辑

定义一个指令,其脚本:

[JavaScript] 纯文本查看 复制代码
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


另一实例:误差值是下方的方框三条记录


思路上我自己看不出错在哪儿,没有实时同步计算?



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

升级   100%

139

主题

1万

回帖

4万

积分

超级版主

Rank: 8Rank: 8

积分
41458
发表于 2022-10-26 16:34:50 | 显示全部楼层
您描述一下您的过程,您这两张表,有关联吗?是通过脚本去set数据了对吧,您set后是当前的数据表格total没变,还是指另一个数据表格的total没变?您这二者之间的关联是如何做的,描述一下功能
回复

使用道具 举报

升级   0.04%

149

主题

189

回帖

4

积分

注册会员

Rank: 2

积分
4
发表于 2022-10-26 18:55:49 | 显示全部楼层
论坛管理员 发表于 2022-10-26 16:34
您描述一下您的过程,您这两张表,有关联吗?是通过脚本去set数据了对吧,您set后是当前的数据表格total没 ...

同一表单下的两个datatable,一个用于填写各明细,一个用于分类汇总,汇总的datatable通过脚本来生成行记录并根据合并计算的结果赋值
回复

使用道具 举报

升级   100%

139

主题

1万

回帖

4万

积分

超级版主

Rank: 8Rank: 8

积分
41458
发表于 2022-10-27 09:37:31 | 显示全部楼层
szjazz 发表于 2022-10-26 18:55
同一表单下的两个datatable,一个用于填写各明细,一个用于分类汇总,汇总的datatable通过脚本来生成行记 ...

然后呢,现在的问题是什么?明细表变了,汇总表没变?汇总表您是通过setData去做的吧,没变的话就是您setData进去的数据不对
回复

使用道具 举报

升级   0.04%

149

主题

189

回帖

4

积分

注册会员

Rank: 2

积分
4
发表于 2022-10-27 10:27:06 | 显示全部楼层
明细表怎么会变呢,需求是汇总明细表datatable_detail的数据到汇总表datatable里:
1、清除datatable所有的行记录(担心有手工填写),改成只读后不存在了,可以不用考虑
2、取明细表的第一行,与汇总表的所有行比较是否存在相同的汇总项目ItemExp==SubExp,已有行,则累加,若无,则修改是否新增行的特征值newItem=1
3、datatable内循环结束之后,还在外循环datatable_detail,此时判断特征值newItem,若为=1,则新增datatable的行记录,且赋值
4、循环2~3步
回复

使用道具 举报

升级   100%

139

主题

1万

回帖

4万

积分

超级版主

Rank: 8Rank: 8

积分
41458
发表于 2022-10-27 16:21:21 | 显示全部楼层
您没有描述清楚您的需求啊,管理员这边都不明白您过程到底啥样,哪个表变,哪个表不变,数据哪里来,通过什么方式去赋值
2、特征值是什么?累加是累加什么?

管理员这边实在是理解不了您的需求
总体来说,您汇总表需要通过明细表里的数据生成,所以管理员这边建议您使用setData的方式去给汇总表赋值,您说的total不对的情况,total也是通过您setData的方式塞进去的,数据不对就是您塞进去的不对
您可以表单设计时点击表单左上方小眼睛,showjson查看数据表格的数据格式,整个完整的数据塞进去就可以了
回复

使用道具 举报

升级   0.04%

149

主题

189

回帖

4

积分

注册会员

Rank: 2

积分
4
发表于 2022-10-27 16:47:27 | 显示全部楼层
本帖最后由 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)});

回复

使用道具 举报

升级   100%

139

主题

1万

回帖

4万

积分

超级版主

Rank: 8Rank: 8

积分
41458
发表于 2022-10-28 09:50:28 | 显示全部楼层
因为您清楚您的 业务,所以认为描述清楚了,管理员这边不清楚,茫茫然,所以理解不了
再,管理员跟您描述的不是同一个setData。。。。所以没有说到一个点上
我在您另一个帖子里说了setData了,我是指的整个数据表格赋值,而不是单行赋值,整个表格赋值可以连同total一起赋值
回复

使用道具 举报

发表回复

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

本版积分规则

联系客服 关注微信 下载APP 返回顶部 返回列表
viewthread