二开案例-【C#】生产订单拆分行自定义字段携带至拆分后分录行

【应用场景】
生产订单单据界面-明细页签-业务操作-拆分行-生产订单拆分行界面自定义字段携带至新的分录上。

【注意事项】
该实现方案涉及到修改保存后的生产订单数据,仅限于特殊场景下的特殊应用。(如发现问题,欢迎评论指证)
【案例演示】
生产订单,生产订单拆分行单据都要编写插件,实现效果如下:

【实现步骤】
<1>分别在生产订单和生产订单拆分行上添加自定义字段,注意需要字段类型保持一致。


<2>分别在生产订单和生产订单拆分行上添加表单插件。
生产订单拆分行表单插件

生产订单表单插件

插件代码如下:
引用组件
Kingdee.BOS.Core.dll
Kingdee.BOS.dll
Kingdee.K3.Core.dll
Kingdee.BOS.DataEntity.dll
Kingdee.K3.MFG.App.dll
生产订单表单插件
using System; using System.Collections.Generic; using System.ComponentModel; using System.IO.Pipes; using System.Linq; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DependencyRules; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Util; using Kingdee.K3.Core.MFG.EntityHelper; using Kingdee.K3.MFG.App; namespace ITIBB.App.ServicePlugIn { [Description("生产订单表单插件二开")] public class Ext_MoEdit : AbstractBillPlugIn { public override void CustomEvents(CustomEventsArgs e) { base.CustomEvents(e); IDynamicFormView childView = this.View.GetView(e.Key); if (childView.IsNullOrEmpty()) { return; } if (childView.BusinessInfo.GetForm().Id == "PRD_MOBILL_SPLITROW" && e.EventName == "SetExtFieldValus") { //拆分行界面数据包 DynamicObject splitData = childView.Model.DataObject; List<DynamicObject> splitDataEntrys = splitData.GetDynamicValue<DynamicObjectCollection>("Entity").ToList(); long splitMtrlId = splitData.GetDynamicValue<long>("PrdMoMaterialId_Id"); long srcMoEntryId = Convert.ToInt64(e.EventArgs); //拆分后生产订单数据包 DynamicObject billData = this.View.Model.DataObject; List<DynamicObject> billEntryDatas = billData.GetDynamicValue<DynamicObjectCollection>("TreeEntity").ToList(); //用来记录已赋值的分录 HashSet<long> hsMoEntryId = new HashSet<long>(); foreach (var splitDataEntry in splitDataEntrys) { decimal splitQty = splitDataEntry.GetDynamicValue<decimal>("SplitQty"); string extField = splitDataEntry.GetDynamicValue<string>("FText_qtr"); foreach (var billEntryData in billEntryDatas) { long moEntryId = billEntryData.GetDynamicValue<long>("Id"); //匹配上了就不需要再匹配了 if (hsMoEntryId.Contains(moEntryId)) continue; //生产订单分录内码等于拆分行界面生产订单分录内码,需要排除 if (moEntryId == srcMoEntryId) continue; decimal decQty = billEntryData.GetDynamicValue<decimal>("Qty"); //如果数量不一致也不能赋值 if (splitQty != decQty) continue; string createType = billEntryData.GetDynamicValue<string>("CreateType"); //如果生成方式不是拆分,则不是拆分行生成 if (!createType.EqualsIgnoreCase("6")) continue; long mtrlID = billEntryData.GetDynamicValue<long>("MaterialId_Id"); //如果分录行物料内码不等于拆分界面内也不需要赋值 if (splitMtrlId != mtrlID) continue; billEntryData.SetDynamicObjectItemValue("FText_qtr", extField); hsMoEntryId.Add(moEntryId); } } //最后调用一遍保存,然后刷新表体数据 this.View.Model.Save();
二开案例-【C#】生产订单拆分行自定义字段携带至拆分后分录行
【应用场景】生产订单单据界面-明细页签-业务操作-拆分行-生产订单拆分行界面自定义字段携带至新的分录上。【注意事项】该实现方案涉及到修...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



