【插件二开】使用MemBomExpandOption获取物料清单正查BOM数据写入底表

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

【插件二开】使用MemBomExpandOption获取物料清单正查BOM数据写入底表

# 使用MemBomExpandOption获取物料清单正查BOM数据写入底表,下面直接上代码 ``` public class BomShow : IScheduleService { public void Run(Context ctx, Schedule schedule) { string sql = string.Format(@"/*dialect*/ select distinct * from(select 'bom版本' bom版本,a.FID, '使用组织' 使用组织,a.FUSEORGID, '物料' 物料,a.FMATERIALID, '物料单位' 物料单位,a.FUNITID from T_ENG_BOM a join T_ORG_ORGANIZATIONS b on a.FUSEORGID=b.forgid join T_BD_MATERIAL c on a.FMATERIALID=c.FMATERIALID join T_BD_UNIT d on a.FUNITID=d.FUNITID where a.FFORBIDSTATUS='A' and b.FNumber='105.01' and Convert(date,a.FMODIFYDATE,120)='{0}' union all select 'bom版本' bom版本,BomId, '使用组织' 使用组织,b.FUSEORGID, '物料' 物料,b.FMATERIALID, '物料单位' 物料单位,b.FUNITID from Run_BomTable a join T_ENG_BOM b on a.BomId=b.FID where BomLevel=0 and a.BomId in (select BomId from Run_BomTable where BomLevel=0 and Id in (select Id from Run_BomTable where MaterialId in (select a.FMATERIALID from T_ENG_BOM a join T_ORG_ORGANIZATIONS b on a.FUSEORGID=b.forgid where a.FFORBIDSTATUS='A' and b.FNumber='105.01' and Convert(date,a.FMODIFYDATE,120)='{0}'))))a", DateTime.Now.ToString("yyyy-MM-dd")); DataTable dt = DBServiceHelper.ExecuteDataSet(ctx, sql).Tables[0]; if (dt.Rows.Count > 0) { MemBomExpandOption memBomExpandOption = new MemBomExpandOption(); memBomExpandOption.DeleteVirtualMaterial = false; memBomExpandOption.ExpandVirtualMaterial = true; memBomExpandOption.DeleteSkipRow = false; memBomExpandOption.ExpandSkipRow = true; memBomExpandOption.CsdSubstitution = true; memBomExpandOption.IsExpandForbidden = true; //疑似展开外购件 memBomExpandOption.ParentCsdYieldRate = true; memBomExpandOption.ChildCsdYieldRate = true; memBomExpandOption.ExpandLevelTo = 30; memBomExpandOption.BomExpandCalType = Kingdee.K3.Core.MFG.EnumConst.Enums.Enu_BomExpandCalType.kdBySystemProfile; memBomExpandOption.IsStandReplaceGroup = false; memBomExpandOption.ChildCsdYieldRate = true; memBomExpandOption.CsdMtrlPlanStrategy = true; memBomExpandOption.IsConvertUnitQty = true; memBomExpandOption.IsExpandSubMtrl = true; memBomExpandOption.IsExpandSupplyManager = true; memBomExpandOption.IsHideOutSourceBOM = true; memBomExpandOption.IsKeepNumeratorUnchange = true; memBomExpandOption.IsUseCache = true; memBomExpandOption.ParentCsdYieldRate = true; int Id = 1; for (int i = 0; i < dt.Rows.Count; i++) { List<DynamicObject> bomCollection = new List<DynamicObject>(); BomForwardSourceDynamicRow row = BomForwardSourceDynamicRow.CreateInstance(); row.MaterialId_Id = Convert.ToInt32(dt.Rows[i]["FMATERIALID"].ToString()); //物料内码 row.BomId_Id = Convert.ToInt32(dt.Rows[i]["FID"].ToString());//BOM内码 row.UnitId_Id = Convert.ToInt32(dt.Rows[i]["FUNITID"].ToString()); //单位内码 row.BaseUnitId_Id = Convert.ToInt32(dt.Rows[i]["FUNITID"].ToString()); //基本单价内码 row.SupplyOrgId_Id = Convert.ToInt32(dt.Rows[i]["FUSEORGID"].ToString());//使用组织内码 row.TimeUnit = 1.ToString(); //默认BOM展开过程使用的时间单位为天。 row.NeedQty = 1;//需求数量 bomCollection.Add(row); string textsql = string.Format(@"select Id from Run_BomTable where BomId='{0}' and BomLevel='0'",dt.Rows[i]["FID"].ToString()); DataTable ds = DBServiceHelper.ExecuteDataSet(ctx, textsql).Tables[0]; if (ds.Rows.Count>0) { Id = Convert.ToInt32(ds.Rows[0]["Id"].ToString()); string delsql = string.Format(@"delete from Run_BomTable where Id='{0}'", Id); int n = DBServiceHelper.Execute(ctx, delsql); if (n==0) { continue; } else { DynamicObjectCollection bomData = BomExpandServiceHelper.ExpandBomForwardMen(ctx, bomCollection, memBomExpandOption)["BomExpandResult"] as DynamicObjectCollection; foreach (DynamicObject item in bomData) { string BomId_Id = item["BomId_Id"].ToString();//bom版本内码 DynamicObject BomId = item["BomId"] as DynamicObject; string BomNumber = BomId == null ? "" : BomId[6].ToString(); string BomLevel = item["BomLevel"].ToString();//当前展开的级次 string MaterialId_Id = item["MaterialId_Id"].ToString();//物料内码 DynamicObject MaterialId = item["MaterialId"] as DynamicObject; string MaterialNumber = MaterialId == null ? "" : MaterialId[6].ToString(); string MaterialName = MaterialId == null ? "" : MaterialId[5].ToString(); DynamicObject UnitId = item["UnitId"] as DynamicObject;//单位 string UnitName = UnitId == null ? "" : UnitId[3].ToString(); decimal NUMERATOR = Convert.ToDecimal(item["NUMERATOR"].ToString());//--用量:分子 decimal DENOMINATOR = Convert.ToDecimal(item["DENOMINATOR"].ToString());//用量:分母 decimal ActualQty = Convert.ToDecimal(item["ActualQty"].ToString());//实际用量 string POSITIONNO = item["POSITIONNO"] == null ? "" : item["POSITIONNO"].ToString();//位置号 if (POSITIONNO.IndexOf("'") != -1)//判断字符串中是否存在单引号 { POSITIONNO = POSITIONNO.Replace("'", "''"); } string ReplaceType = item["ReplaceType"].ToString();//替代方式(1、替代;2、取代) if (item["ReplaceType"].ToString() == "1") { ReplaceType = "替代"; } if (item["ReplaceType"].ToString() == "2") { ReplaceType = "取代"; } string MATERIALTYPE = item["MATERIALTYPE"].ToString();//子项类型(1、标准件;2、返还件;3、替代件) if (item["MATERIALTYPE"].ToString() == "1") { MATERIALTYPE = "标准件"; } if (item["MATERIALTYPE"].ToString() == "2") { MATERIALTYPE = "返还件"; } if (item["MATERIALTYPE"].ToString() == "3") { MATERIALTYPE = "替代件"; } int ReplacePriority = Convert.ToInt32(item["ReplacePriority"].ToString());//替代优先级 string allocation = "100%";//采购配额 if (ReplaceType == "取代" && ReplacePriority != 1) { allocation = "0%"; } if (ReplaceType == "替代" && MATERIALTYPE != "标准件") { allocation = "0%"; } string PATHENTRYID = item["PATHENTRYID"] == null ? "" : item["PATHENTRYID"].ToString();//上级组合码 int ReplaceGroup = Convert.ToInt32(item["ReplaceGroup"].ToString());//行号 string TotalGroup = BomLevel == "0" ? "0" : item["TotalGroup"].ToString();//顺序号 string sqlInsert = string.Format(@"insert into Run_BomTable(Id,BomId,BomNumber,BomLevel,MaterialId,MaterialNumber,MaterialName, UnitName,NUMERATOR,DENOMINATOR,ActualQty,POSITIONNO,ReplaceType,MATERIALTYPE,allocation,PATHENTRYID,ReplaceGroup,TotalGroup) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}')", Id, BomId_Id, BomNumber, BomLevel, MaterialId_Id, MaterialNumber, MaterialName, UnitName, NUMERATOR, DENOMINATOR, ActualQty, POSITIONNO, ReplaceType, MATERIALTYPE, allocation, PATHENTRYID, ReplaceGroup, TotalGroup); DBServiceHelper.Execute(ctx, sqlInsert); } } } else { string sqlstr = string.Format(@"select isnull(max(Id),0)+1 Id from Run_BomTable"); DataTable dr = DBServiceHelper.ExecuteDataSet(ctx, sqlstr).Tables[0]; Id = Convert.ToInt32(dr.Rows[0]["Id"].ToString()); DynamicObjectCollection bomData = BomExpandServiceHelper.ExpandBomForwardMen(ctx, bomCollection, memBomExpandOption)["BomExpandResult"] as DynamicObjectCollection; foreach (DynamicObject item in bomData) { string BomId_Id = item["BomId_Id"].ToString();//bom版本内码 DynamicObject BomId = item["BomId"] as DynamicObject; string BomNumber = BomId == null ? "" : BomId[6].ToString(); string BomLevel = item["BomLevel"].ToString();//当前展开的级次 string MaterialId_Id = item["MaterialId_Id"].ToString();//物料内码 DynamicObject MaterialId = item["MaterialId"] as DynamicObject; string MaterialNumber = MaterialId == null ? "" : MaterialId[6].ToString(); string MaterialName = MaterialId == null ? "" : MaterialId[5].ToString(); DynamicObject UnitId = item["UnitId"] as DynamicObject;//单位 string UnitName = UnitId == null ? "" : UnitId[3].ToString(); decimal NUMERATOR = Convert.ToDecimal(item["NUMERATOR"].ToString());//--用量:分子 decimal DENOMINATOR = Convert.ToDecimal(item["DENOMINATOR"].ToString());//用量:分母 decimal ActualQty = Convert.ToDecimal(item["ActualQty"].ToString());//实际用量 string POSITIONNO = item["POSITIONNO"] == null ? "" : item["POSITIONNO"].ToString();//位置号 if (POSITIONNO.IndexOf("'") != -1)//判断字符串中是否存在单引号 { POSITIONNO = POSITIONNO.Replace("'", "''"); } string ReplaceType = item["ReplaceType"].ToString();//替代方式(1、替代;2、取代) if (item["ReplaceType"].ToString() == "1") { ReplaceType = "替代"; } if (item["ReplaceType"].ToString() == "2") { ReplaceType = "取代"; } string MATERIALTYPE = item["MATERIALTYPE"].ToString();//子项类型(1、标准件;2、返还件;3、替代件) if (item["MATERIALTYPE"].ToString() == "1") { MATERIALTYPE = "标准件"; } if (item["MATERIALTYPE"].ToString() == "2") { MATERIALTYPE = "返还件"; } if (item["MATERIALTYPE"].ToString() == "3") { MATERIALTYPE = "替代件"; } int ReplacePriority = Convert.ToInt32(item["ReplacePriority"].ToString());//替代优先级 string allocation = "100%";//采购配额 if (ReplaceType == "取代" && ReplacePriority != 1) { allocation = "0%"; } if (ReplaceType == "替代" && MATERIALTYPE != "标准件") { allocation = "0%"; } string PATHENTRYID = item["PATHENTRYID"] == null ? "" : item["PATHENTRYID"].ToString();//上级组合码 int ReplaceGroup = Convert.ToInt32(item["ReplaceGroup"].ToString());//行号 string TotalGroup = BomLevel == "0" ? "0" : item["TotalGroup"].ToString();//顺序号 string sqlInsert = string.Format(@"insert into Run_BomTable(Id,BomId,BomNumber,BomLevel,MaterialId,MaterialNumber,MaterialName, UnitName,NUMERATOR,DENOMINATOR,ActualQty,POSITIONNO,ReplaceType,MATERIALTYPE,allocation,PATHENTRYID,ReplaceGroup,TotalGroup) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}')", Id, BomId_Id, BomNumber, BomLevel, MaterialId_Id, MaterialNumber, MaterialName, UnitName, NUMERATOR, DENOMINATOR,ActualQty, POSITIONNO, ReplaceType, MATERIALTYPE, allocation, PATHENTRYID, ReplaceGroup, TotalGroup); DBServiceHelper.Execute(ctx, sqlInsert); } } } } else { return; } } } ```

【插件二开】使用MemBomExpandOption获取物料清单正查BOM数据写入底表

# 使用MemBomExpandOption获取物料清单正查BOM数据写入底表,下面直接上代码``` public class BomShow : IScheduleService { ...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息