物料清单勾选了跳层,用料清单在展开到子件的同时,怎么清楚看到是哪个半成品展开的?

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

物料清单勾选了跳层,用料清单在展开到子件的同时,怎么清楚看到是哪个半成品展开的?

问题描述:

解决方案:

二开方案如下:

using Kingdee.BOS.Core.DynamicForm.PlugIn;

using Kingdee.BOS.Util;

using Kingdee.K3.Core.MFG.EntityHelper;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.ComponentModel;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS;

using Kingdee.K3.MFG.App;

using Kingdee.K3.Core.BD;

using Kingdee.K3.Core.BD.ServiceArgs;

using Kingdee.K3.Core.MFG.EnumConst;

 

namespace EK.Kingdee.K3.MFG.PRD.App.ServicePlugIn

{

    [Description("生产订单计划确认跳层携带上一层的物料编码拼接至用料清单子项分录")]

    public class PPBomGetTopMtrlNumber : AbstractOperationServicePlugIn

    {

        public override void BeginOperationTransaction(global::Kingdee.BOS.Core.DynamicForm.PlugIn.Args.BeginOperationTransactionArgs e)

        {

            base.BeginOperationTransaction(e);

            if (e.DataEntitys.IsEmpty()) return;

            var ppbomEntryDatas = from datatity in e.DataEntitys

                                  from row in datatity.GetDynamicObjectItemValue<DynamicObjectCollection>("PPBomEntry")

                                  select row;

            if (ppbomEntryDatas.IsEmpty()) return;

            List<string> bomEntryIds = new List<string>();

            //找到上级父项的BOM分录内码

            foreach (DynamicObject entryData in ppbomEntryDatas)

            {

                string pathEntryId = entryData.GetDynamicValue<string>(CONST_PRD_PPBOM.CONST_FEntity.ORM_PathEntryID);

                if (pathEntryId.IsNullOrEmptyOrWhiteSpace()) continue//不存在BOM展开路径,意味着非物料清单携带

                List<string> pathEntryIds = pathEntryId.Split(',').ToList();

                if (pathEntryIds.Count() == 1) continue;//存在展开路径,但是分割出来只有一个,说明只存在自身,非虚拟键和跳层件展开

                bomEntryIds.AddRange(pathEntryIds);

            }

 

            if (bomEntryIds.IsEmpty()) return;

            //获取上级BOM中的物料编码

            List<long> cBomEntryIds = bomEntryIds.Select(s => Convert.ToInt64(s)).ToList();

            string sql = string.Format(@"SELECT T.FENTRYID AS BOMENTRYID,TM.FMATERIALID AS MTRLID,TM.FNUMBER AS MTRLNUMBER FROM T_ENG_BOMCHILD T INNER JOIN {0} T1 ON T.FENTRYID=T1.FID

INNER JOIN T_BD_MATERIAL TM ON T.FMATERIALID=TM.FMATERIALID"StringUtils.GetSqlWithCardinality(bomEntryIds.Distinct().Count(), "@BOMENTRYID", 1));

            List<SqlParam> paramLists = new List<SqlParam>();

            paramLists.Add(new SqlParam("@BOMENTRYID"KDDbType.udt_inttable, bomEntryIds.Distinct().ToArray()));

            DynamicObjectCollection objs = AppServiceContext.DbUtils.ExecuteDynamicObject(this.Context, sql, paramLists.ToArray());

            if (objs.IsEmpty()) return;

            Dictionary<longIGrouping<longDynamicObject>> dicBomDatas = objs.GroupBy(g => g.GetDynamicValue<long>("BOMENTRYID")).ToDictionary(d => d.Key);

            foreach (DynamicObject entryData in ppbomEntryDatas)

            {

                string pathEntryId = entryData.GetDynamicValue<string>(CONST_PRD_PPBOM.CONST_FEntity.ORM_PathEntryID);

                if (pathEntryId.IsNullOrEmptyOrWhiteSpace()) continue//不存在BOM展开路径,意味着非物料清单携带

                List<string> pathEntryIds = pathEntryId.Split(',').ToList();

                if (pathEntryIds.Count() == 1) continue;//存在展开路径,但是分割出来只有一个,说明只存在自身,非虚拟键和跳层件展开

                string mtrlNumbers = string.Empty;

                foreach (string bomEntryId in pathEntryIds)

                {

                    long bomEID = Convert.ToInt64(bomEntryId);

                    IGrouping<longDynamicObject> igBomDatas;

                    if (dicBomDatas.TryGetValue(bomEID, out igBomDatas))

                    {

                        long mtrlId = igBomDatas.FirstOrDefault().GetDynamicValue<long>("MTRLID");

                        long ppbomMtrlId = entryData.GetDynamicValue<long>(CONST_PRD_PPBOM.CONST_FEntity.ORM_MaterialID_Id);

                        if (mtrlId == ppbomMtrlId) continue//不需要自身

                        string mtrlNumber = igBomDatas.FirstOrDefault().GetDynamicValue<string>("MTRLNUMBER");

                        mtrlNumbers += mtrlNumber + ",";

                    }

                }

                entryData.SetDynamicObjectItemValue("MTRLNUMBER", mtrlNumbers.TrimEnd(','));

            }

        }

    }

}



物料清单勾选了跳层,用料清单在展开到子件的同时,怎么清楚看到是哪个半成品展开的?

问题描述:解决方案:二开方案如下:using Kingdee.BOS.Core.DynamicForm.PlugIn;using Kingdee.BOS.Util;using Kingdee.K3.Core.MFG.Entit...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息