PLM物料库如何统计出物料【是否被BOM单据体引用】及引用的数量

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

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单据体引用】及引用的数量

【应用场景】一个物料可以被多个BOM引用为子项,可以快速统计引用数量,便于下推到ERP等业务场景。【案例演示】1.物料库显示物料【是否被BO...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息