PLM物料库如何统计出物料【是否被BOM单据体引用】及引用的数量
【应用场景】
一个物料可以被多个BOM引用为子项,可以快速统计引用数量,便于下推到ERP等业务场景。
【案例演示】
1.物料库显示物料【是否被BOM单据体引用】及引用的数量。
2.该演示同样适用于统计物料被BOM单据头引用的数量,但需修改脚本查询条件,相关脚本请参考知识贴:https://vip.kingdee.com/article/423853888236841216。
【实现步骤】
<1>BOSIDE->PDM基础对象扩展分别增加【是否被BOM单据体引用】复选框、【被BOM子单据体引用数量】整数两个字段。
<2>物料业务类型配置->属性配置,添加自定义扩展字段,用于列表查询显示
<3>编写表单插件(如何编写二开插件配置等请参考:二次开发扩展程序开发之插件模式https://vip.kingdee.com/article/83591896433330944?productLineId=1其他星空PLM开发指南也可以参考 【汇总】星空PLM二开指南(持续更新)https://vip.kingdee.com/article/329914697153905408?productLineId=1&isKnowledge=2更多详细的金蝶云星空BOS二次开发指南:https://vip.kingdee.com/article/94751030918525696?productLineId=1&isKnowledge=2)
示例代码如下:
using Kingdee.BOS; using Kingdee.BOS.App.Core.Utils; using Kingdee.BOS.Core.List.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Resource; using Kingdee.K3.PLM.CFG.Business.PlugIn.BaseObject; using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Base; using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Manager; using Kingdee.K3.PLM.Common.Core.Utility; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using Kingdee.K3.PLM.Business.PlugIn; namespace ISV.Material.Common.BusinessEntity { [Description("物料被BOM单据体引用二开插件")] public class MaterailList : AbstractPLMListPlugIn { /// <summary> /// 是否加载过当前列表数据 /// </summary> private bool setData = false; /// <summary> /// 物料库当前列表数据 /// </summary> private DynamicObject[] materialList = null; public override void OnLoad(EventArgs e) { setData = false; base.OnLoad(e); } public override void FormatCellValue(FormatCellValueArgs args) { DynamicObjectDataRow row = (DynamicObjectDataRow)args.DataRow; switch (args.Header.FieldName.ToUpper()) { case "FISUSEDBYBOM": case "FNUM": if (CategoryContract.Instance.IsMaterialCategory(_currentCategoryID)) { if (!setData) { //第一次打开物料库,一次性加载所有物料对象 var baseIds = this.ListView.CurrentPageRowsInfo.Select(w => Convert.ToInt64(w.DataRow["FID"])).ToArray(); materialList = DomainObjectManager.AutoLoad(PLMContext, baseIds).ToArray(); setData = true; } DynamicObject obj = materialList != null ? materialList.Where(x => Convert.ToInt64(x["id"]) == Convert.ToInt64(row["FID"])).FirstOrDefault() : null; if (obj != null) { string sql = string.Format("select COUNT(1) num from t_plm_cfg_relation where FSLAVERELATION={0}", Math.Abs(Convert.ToInt64(row.DynamicObject["FID"]))); var num = Convert.ToInt64(PLMDBUtils.Instance.ExecuteDynamicObject(PLMContext, sql).First()["num"]); obj.SetDynamicObjectItemValue("NUM", num); obj.SetDynamicObjectItemValue("IsUsedByBom", num > 0 ? true : false); DomainObjectManager.Instance(PLMContext, Convert.ToInt64(obj["CategoryId_Id"])).Save(PLMContext, obj); if (args.Header.FieldName.ToUpper() == "FISUSEDBYBOM") { args.FormateValue = num > 0 ? ResManager.LoadKDString("是", "120007000000185", SubSystemType.PLM) : "否"; } else { args.FormateValue = num.ToString(); } } } break; default: break; } base.FormatCellValue(args); } } }
<4>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<5>BOSIDE扩展研发物料单据,注册列表插件,保存元数据,开发完毕。
【功能验证】
<1>打开物料库,可以看到物料【是否被BOM单据体引用】及引用的数量
【参考资料】
【汇总】星空PLM二开指南(持续更新)https://vip.kingdee.com/article/329914697153905408?productLineId=1&isKnowledge=2
【合辑】金蝶云.星空 PLM知识合辑(持续更新) https://vip.kingdee.com/article/329662872047302912?productLineId=1&isKnowledge=2
二次开发扩展程序开发之插件模式 https://vip.kingdee.com/article/83591896433330944?productLineId=1
PLM云 -- 基于BOS平台的二次开发扩展 https://vip.kingdee.com/article/10875?productLineId=1
PLM云 -- 基于配置系统的二次开发扩展(对象属性扩展)https://vip.kingdee.com/article/10887?productLineId=1
PLM云 -- 基于标准业务系统的二次开发扩展 https://vip.kingdee.com/article/10901?productLineId=1
金蝶云星空BOS二次开发指南 https://vip.kingdee.com/article/94751030918525696?productLineId=1&isKnowledge=2
金蝶云星空数据字典V7.6 https://open.kingdee.com/K3Cloud/WenKu/DocumentView.aspx?docId=102613
PLM物料库如何统计出物料【是否被BOM单据体引用】及引用的数量
本文2024-09-23 03:03:12发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-156360.html