电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

表单插件.二开案例.小数尾差处理

来源:金蝶云社区作者:金蝶2024-09-234

表单插件.二开案例.小数尾差处理

【场景】小数尾差处理 针对表体,每一行的数据都是总数*比例值,得出的结果小数位数可能会比字段的精度高,导致被系统按照精度舍入掉; ![image.webp](/download/01009bfaae1b9f3c4875aad4ba882d1c9948.webp) 【案例】二开插件,实现调整表体数值,通过调整最后一行的数值实现表头金额 = 表体金额汇总 ![image.webp](/download/01004c21f7db379c46e39ae46e42c05cb0d9.webp) ```csharp using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using System; namespace DynamicFormPlugIn.Test { [Kingdee.BOS.Util.HotUpdate] [System.ComponentModel.Description("处理单据体尾差")] public class BillPlugIn_TailDiff : AbstractBillPlugIn { /// <summary> /// 尾差处理实体 /// </summary> private string EntityKey = "FEntity"; /// <summary> /// 总价 /// </summary> private string FieldKey_Total = "F_BHR_AmountTotal"; /// <summary> /// 行比例 /// </summary> private string FieldKey_Precent = "F_BHR_precent"; /// <summary> /// 行金额尾差值 /// </summary> private string FieldKey_Amount = "F_BHR_Amount"; public override void DataChanged(DataChangedEventArgs e) { //单据头更新时,整个表格尾差重算 if (string.Equals(e.Field.Key, FieldKey_Total, StringComparison.OrdinalIgnoreCase)) { TailDiffHandle(); } //比例更新时,更新当前行 和整个表格尾差重算 if (string.Equals(e.Field.Key, FieldKey_Precent, StringComparison.OrdinalIgnoreCase)) { RefreshRowData(e.Row); TailDiffHandle(); } } private bool isTailDiff = false; private void RefreshRowData(int rowIdx) { decimal totalVal = ToDecimal(this.View.Model.GetValue(FieldKey_Total)); if (totalVal == 0) return; var entity = this.View.BillBusinessInfo.GetEntryEntity(EntityKey); DynamicObject rowObj = this.View.Model.GetEntityDataObject(entity, rowIdx); var precentField = this.View.BillBusinessInfo.GetField(FieldKey_Precent); var amountField = this.View.BusinessInfo.GetField(FieldKey_Amount); decimal rowAmount = totalVal * ToDecimal(precentField.GetFieldValue(rowObj)) / 100; Model.SetValue(amountField, rowObj, rowAmount); } /// <summary> /// 计算尾差处理,将剩余值计算到最后一行 /// (最好是放在保存时实现做校验时尾差处理,值更新时容易导致计算量过大) /// </summary> private void TailDiffHandle() { if (isTailDiff) return; decimal totalVal = ToDecimal(this.View.Model.GetValue(FieldKey_Total)); if (totalVal == 0) return; var entity = this.View.BillBusinessInfo.GetEntryEntity(EntityKey); DynamicObjectCollection rowObjs = this.View.Model.GetEntityDataObject(entity); if (rowObjs.Count <= 0) return; var precentField =

表单插件.二开案例.小数尾差处理

【场景】小数尾差处理针对表体,每一行的数据都是总数*比例值,得出的结果小数位数可能会比字段的精度高,导致被系统按照精度舍入掉;![ima...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信