组装拆卸单BOM展开携带子件货主类型的二开处理(Python实现)

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

组装拆卸单BOM展开携带子件货主类型的二开处理(Python实现)

一、【需求问题】

组装拆卸时,按BOM展开后,物料清单中货主类型为客户的子项物料没有携带到组装拆卸单上,当前携带的是成品表的货主类型。 

image.webp


二、【功能分析】

组装拆卸单的表单插件,对BOM展开的触发操作,将当前BOM展开后子件的货主类型和货主默认赋值为成品表的货主类型和货主,并没有采用清单上设置的子项物料货主类型和货主

当前标准插件无法禁用,只能是二开插件在BOM操作触发后,再获取到BOM子项的信息,将展开后的子件物料数据中货主类型和货主重新做赋值。


之前对于组装拆卸单的二开帖子参考:

1、组装拆卸单BOM展开,成品表仓库仓位赋值到子件表仓库仓位

2、Python继承AbstractValidator实现校验器案例 


核心代码Py: 


import clr 
clr.AddReference("System")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS.App")
clr.AddReference('Kingdee.BOS.ServiceHelper')
clr.AddReference('Kingdee.BOS.DataEntity')
clr.AddReference("Kingdee.BOS.App.Core")
clr.AddReference('Kingdee.BOS.ServiceHelper')
clr.AddReference("Kingdee.BOS.Contracts")

from System import *
from System import StringComparison
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.Core.Metadata.FieldElement import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from System.Collections.Generic import *
from Kingdee.BOS.ServiceHelper import * 
from Kingdee.BOS.Contracts import *
from Kingdee.BOS.App.Core import *

def AfterEntryBarItemClick(e):
    if e.BarItemKey.Equals("TBBOMEXPAND", StringComparison.OrdinalIgnoreCase):
        viewService = ViewService()
        metaService = MetaDataService()
        
        formMetaData = metaService.Load(this.Context, "ENG_BOM")
        products = this.View.Model.DataObject["ProductEntity"]
        for i in range (0, products.Count):
            refBomID = Convert.ToInt64(products[i]["RefBomID_Id"])
            if refBomID == 0:
                continue
                
            bomObj = viewService.LoadSingle(this.Context, refBomID, formMetaData.BusinessInfo.GetDynamicObjectType())
            if bomObj == None:
                continue
                
            subItems = products[0]["STK_ASSEMBLYSUBITEM"]
            bomTreeEntity = bomObj["TreeEntity"]
            for j in range (0, subItems.Count):
                materialId = Convert.ToInt64(subItems[j]["MaterialIDSETY_Id"])
                dySubResult = filter(lambda x: x["MATERIALIDCHILD_Id"] == materialId, bomTreeEntity)
                dySub = List[object](dySubResult)
                if dySub.Count > 0:
                    if dySub[0]["OWNERTYPEID"] == "BD_Customer":
                        subItems[j]["OwnerTypeIDSETY"] = Convert.ToString(dySub[0]["OWNERTYPEID"])
                        #subItems[j]["FOwnerIDSETY_Id"] = 0 #Convert.ToInt64(dySub[0]["OWNERID_Id"])
                        this.Model.SetValue("FOwnerIDSETY", Convert.ToInt64(dySub[0]["OWNERID_Id"]), j);

          

C#:

public override void AfterEntryBarItemClick(AfterBarItemClickEventArgs e)
{
    switch (e.BarItemKey.ToUpperInvariant())
    {
        case "TBBOMEXPAND":
            this.BomExpand();
            break;
    }
}

private void BomExpand()
{
    IViewService viewService = SCM.Contracts.ServiceFactory.GetService<IViewService>(this.Context);
    IMetaDataService metaService = Kingdee.BOS.Contracts.ServiceFactory.GetService<IMetaDataService>(this.Context);
    FormMetadata formMetaData = (FormMetadata)metaService.Load(this.Context, "ENG_BOM");
    List<object> list = new List<object>();
    DynamicObjectCollection dataCollection = this.View.Model.DataObject["ProductEntity"] as DynamicObjectCollection;

	foreach(DynamicObject product in dataCollection)
    {
        long refBomID = Convert.ToInt64(product["RefBomID_Id"]);
        if (refBomID == 0) continue;
        DynamicObject bomObj = viewService.LoadSingle(this.Context, refBomID, formMetaData.BusinessInfo.GetDynamicObjectType());
        if (bomObj == null) continue;

        DynamicObjectCollection subItems = product["STK_ASSEMBLYSUBITEM"] as DynamicObjectCollection;
        DynamicObjectCollection bomTreeEntity = bomObj["TreeEntity"] as DynamicObjectCollection;
        foreach (var subItem in subItems)
        {
            long materialId = Convert.ToInt64(subItem["MaterialIDSETY_Id"]);
            DynamicObject dySub = bomTreeEntity.FirstOrDefault(p => Convert.ToInt64(p["MATERIALIDCHILD_Id"]) == materialId);
            if (dySub != null)
            {
                if(Convert.ToString(dySub["OWNERTYPEID"]) == "BD_Customer")
                {
                    subItem["OwnerTypeIDSETY"] = dySub["OWNERTYPEID"];
                    subItem["FOwnerIDSETY"] = dySub["OWNERID_Id"];
                }
            }
        }
    }
}


实现效果:

image.webp


BOM展开子件货主类型携带自物料清单上子项物料的货主类型设置.rar

组装拆卸单BOM展开携带子件货主类型的二开处理(Python实现)

一、【需求问题】组装拆卸时,按BOM展开后,物料清单中货主类型为客户的子项物料没有携带到组装拆卸单上,当前携带的是成品表的货主类型。 ...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息