计算行数量在总数量中的占比
客户要求每行录入重量, 得出该重量在总重量中的占比,然后再用这个占比值,去参与其它运算。
简化成公式: 行占比 = 行重量 / 总重量。占比之和 =100
分享下思路:
① 获取行重量 weight, 每次修改重量都需重新计算占比
② 汇总重量 total_weight
③ 行占比r ate = weight/ total_weight * 100
④ 因为有精度损失,每行直接求占比,它们的和可能不为100。 所以最后一行的占比做了变通: 100 - 前N-1 t行占比和
import clr clr.AddReference("Kingdee.BOS") clr.AddReference("Kingdee.BOS.Core") from Kingdee.BOS.Core import * from Kingdee.BOS import * ''' F_NB_Quantity 用量 F_NB_Rate 占比 F_NB_RawPrice 原料单价 ''' def DataChanged(e): #修改用量 if e.Key=="F_NBDF_Quantity" : # 获取单据体行数 cnt=this.View.Model.GetEntryRowCount("FEntity") sumValue=0 #用量汇总 for i in range(cnt): sumValue += this.View.Model.GetValue("F_NBDF_Quantity",i ) #this.View.ShowMessage('''行数{0},总数:{1}'''.format(cnt,sumValue)) rates=0 # 占比汇总 rates_l =0 #前N-1 行占比汇总 rows = [] for i in range(cnt) : qty=this.View.Model.GetValue("F_NBDF_Quantity",i) if qty !=0 : rows.append(i) this.View.Model.SetValue("F_NBDF_Rate",qty / sumValue * 100, i ) # 序号列表中删除修改后重量为0的元素。 if e.NewValue==0 and rows.count(e.Row) > 0: rows.remove(e.Row) # 因为占比是重量除以总重量,类型是一个采用IEEEE754的浮点数, 只能近似的表示小数, # 故占比之和有可能不是100, 那么跟客户商量后, 最后一行占比 用100 - 前N-1 行占比和 # for i in range(len(rows)) : if i == len(rows)-1: rates_l= rates rates += this.View.Model.GetValue("F_NBDF_Rate", rows[i] ) if rates != 100: this.View.Model.SetValue("F_NBDF_Rate", 100 - rates_l, rows[len(rows)-1] ) this.View.UpdateView("F_NB_Rate")
要确保占比的之和等于100。
用不着这么麻烦吧,直接把重量那一列汇总到表头字段,然后从表体做值更新计算不就解决了
计算行数量在总数量中的占比
客户要求每行录入重量, 得出该重量在总重量中的占比,然后再用这个占比值,去参与其它运算。 简化成公式: 行占比 = 行重量 / 总重...
点击下载文档
本文2024-09-16 17:10:58发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-14058.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章