物料清单勾选了跳层,用料清单在展开到子件的同时,怎么清楚看到是哪个半成品展开的?
问题描述:
解决方案:
二开方案如下:
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<long, IGrouping<long, DynamicObject>> 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<long, DynamicObject> 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(','));
}
}
}
}
物料清单勾选了跳层,用料清单在展开到子件的同时,怎么清楚看到是哪个半成品展开的?
本文2024-09-23 03:22:58发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-158503.html
- 鼎捷EAI整合規範文件V3.1.07 (集團).pdf
- 鼎捷OpenAPI應用場景說明_基礎資料.pdf
- 鼎捷OpenAPI應用場景說明_財務管理.pdf
- 鼎捷T100 API設計器使用手冊T100 APIDesigner(V1.0).docx
- 鼎新e-GoB2雲端ERP B2 線上課程E6-2應付票據整批郵寄 領取.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A4使用者建立權限設定.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程C3會計開帳與會計傳票.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程E6-1應付票據.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A5-1進銷存參數設定(初階篇).pdf
- 鼎新e-GoB2雲端ERP B2 線上課程D2帳款開帳與票據開帳.pdf