src/BLL/Demo.BillView/Demo.BillView.csproj | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB2.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/BLL/Demo.BillView/PRD/Pro_MaterialRequisitionAuditDayPlan.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/BLL/Demo.BillView/PRD/Pro_ZJDBFSH.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/BLL/Demo.BillView/PRD/Pro_ZJDBSH.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/BLL/Demo.BillView/Demo.BillView.csproj
@@ -220,6 +220,9 @@ <Compile Include="PRD\ProCompleteAnalysisMateriel.cs" /> <Compile Include="PRD\ProCompleteAnalysisDetails.cs" /> <Compile Include="PRD\Pro_DayPlanCheckSelectMenu.cs" /> <Compile Include="PRD\Pro_ZJDBSH.cs" /> <Compile Include="PRD\Pro_ZJDBFSH.cs" /> <Compile Include="PRD\Pro_DayPlanPushZJDB2.cs" /> <Compile Include="PRD\Pro_DayPlanSelectMenu.cs" /> <Compile Include="PRD\Pro_DayPlanPushZJDB.cs" /> <Compile Include="PRD\Pro_MaterialRequisitionAuditDayPlan.cs" /> src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB.cs
@@ -16,13 +16,13 @@ namespace Demo.DynamicForm.PRD { /// <summary> /// 插件示例:引入销售出库单,建立与销售订单的关联 /// 日计划用料清单下推后,建立直接调拨单与日计划用料清单关联关系 /// </summary> /// <remarks> /// 要求: /// 1. 需要引入单据体的源单类型、源单编号字段 /// 2. 本插件挂在销售出库单的保存操作上 /// 出库关联销售订单 /// 2. 本插件挂在直接调拨单的保存操作上 /// 直接调拨单关联日计划用料清单 /// </remarks> [Description("日计划用料清单下推后,建立直接调拨单与生产用料清单关联关系")] [HotUpdate] @@ -42,6 +42,7 @@ e.FieldKeys.Add("FBaseJoinQty"); } private const string POFormId = "PRD_PPBOM"; public List<string> FentryIdList = new List<string>(); public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) { base.BeforeExecuteOperationTransaction(e); @@ -57,15 +58,18 @@ as DynamicObjectCollection; foreach (var entryRow in entryRows) { //生产用料清单为空时 if (Convert.ToString(entryRow["FDayPlanBillNo"]) == "") continue; string srcFormId = ""; string srcSrcBillNo = ""; string FPPBOMFENTRYID = ""; try { srcFormId = "PRD_PPBOM"; srcSrcBillNo = entryRow["FPPBOMBILLNO"].ToString(); string FPPBOMFID = entryRow["FPPOMFID"].ToString(); FPPBOMFENTRYID = entryRow["FPPBOMFENTRYID"].ToString(); srcSrcBillNo = entryRow["FPPBOMBILLNO"]?.ToString(); string FPPBOMFID = entryRow["FPPOMFID"]?.ToString(); FPPBOMFENTRYID = entryRow["FPPBOMFENTRYID"]?.ToString(); } catch (Exception) { @@ -101,10 +105,11 @@ as DynamicObjectCollection; foreach (var entryRow in entryRows) { string srcFormId = "PRD_PPBOM"; string srcSrcBillNo = entryRow["FPPBOMBILLNO"].ToString(); string FPPBOMFID = entryRow["FPPOMFID"].ToString(); string FPPBOMFENTRYID = entryRow["FPPBOMFENTRYID"].ToString(); string srcSrcBillNo = entryRow["FPPBOMBILLNO"]?.ToString(); string FPPBOMFID = entryRow["FPPOMFID"]?.ToString(); string FPPBOMFENTRYID = entryRow["FPPBOMFENTRYID"]?.ToString(); if (string.IsNullOrWhiteSpace(srcFormId) || string.IsNullOrWhiteSpace(srcSrcBillNo) @@ -123,6 +128,10 @@ bool Ret = SourceVerification(Convert.ToString(entryRow["Id"])); if (!Ret) continue; //记录源单ID 用于更新 if (!FentryIdList.Contains(entryRow["Id"]?.ToString())) FentryIdList.Add(entryRow["Id"]?.ToString()); DynamicObjectCollection linkRows = linkEntry.DynamicProperty.GetValue(entryRow) as DynamicObjectCollection; DynamicObject linkRow = new DynamicObject(linkEntry.DynamicObjectType); @@ -137,20 +146,42 @@ dbService.AutoSetPrimaryKey(this.Context, allNewLinkRows.ToArray(), linkEntry.DynamicObjectType); } public override void EndOperationTransaction(EndOperationTransactionArgs e) /// <summary> /// 保存操作关联关系写入完成后 更改源单信息 /// </summary> /// <param name="e"></param> public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) { base.EndOperationTransaction(e); string sql = @"/*dialect*/ base.AfterExecuteOperationTransaction(e); //更改LK表信息 以及 源单关联信息 List<string> sqlList = new List<string>(); string sql = ""; if (FentryIdList.Count > 0) { string FentryId = string.Join(",", FentryIdList.ToArray()); sql = string.Format(@"/*dialect*/ update a set FBASEQTY = FQTY from T_STK_STKTRANSFERINENTRY_LK a join T_STK_STKTRANSFERINENTRY b on a.FENTRYID = b.FENTRYID where a.FSTABLENAME = 'T_PRD_PPBOMENTRY' and a.FBASEQTY = 0"; DBServiceHelper.Execute(Context, sql); where --a.FSTABLENAME = 'T_PRD_PPBOMENTRY' and a.FENTRYID in ({0})", FentryId); sqlList.Add(sql); sql = string.Format(@"/*dialect*/update T_STK_STKTRANSFERINENTRY_R set FSrcBillTypeId = 'PRD_PPBOM',FSRCBILLNO=b.FPPBOMBILLNO ,FTRANSRESERVELINK=1 from T_STK_STKTRANSFERINENTRY_R a join T_STK_STKTRANSFERINENTRY b on a.FENTRYID=b.FENTRYID where a.FENTRYID in({0})", FentryId); sqlList.Add(sql); DBServiceHelper.ExecuteBatch(Context, sqlList); } } /// <summary> /// 加载相关的销售订单数据 /// 加载相关的生产用料清单信息 /// </summary> /// <param name="poBillNos"></param> /// <returns></returns> @@ -159,7 +190,7 @@ IViewService viewService = ServiceHelper.GetService<IViewService>(); string formId = "PRD_PPBOM"; // 指定需要加载的销售订单字段 // 指定需要加载的用料清单字段 List<SelectorItemInfo> fields = new List<SelectorItemInfo>(); fields.Add(new SelectorItemInfo("FID")); // 单据主键 fields.Add(new SelectorItemInfo("FTreeEntity_FEntryID")); // 单据体主键 @@ -179,7 +210,7 @@ return objs; } /// <summary> /// 把销售订单单据体行构建为字典:Dictionary(单据编号, Dictionary(物料编码, 源单行)); /// 把用料清单单据体行构建为字典:Dictionary(单据编号, Dictionary(物料编码, 源单行)); /// </summary> /// <param name="poObjs"></param> /// <returns></returns> @@ -204,7 +235,7 @@ return dctAllBills; } /// <summary> /// 获取销售订单关联主实体表格编码 /// 获取用料清单关联主实体表格编码 /// </summary> /// <returns></returns> private string GetPOEntryTableNumber() @@ -242,7 +273,7 @@ /// <returns></returns> public bool SourceVerification(string FTID) { string sql = $" select count(*) from T_BF_INSTANCEENTRY where FSTABLENAME= 'T_PRD_PPBOMENTRY' and FTID = '{FTID}'"; string sql = $" select count(*) from T_BF_INSTANCEENTRY where FSTABLENAME= 'T_PRD_PPBOMENTRY' and FTTABLENAME = 'T_STK_STKTRANSFERINENTRY' and FTID = '{FTID}'"; int count = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0); if (count == 0) return true; src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB2.cs
New file @@ -0,0 +1,273 @@ using System; using System.Collections.Generic; using Kingdee.BOS.Util; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Contracts; using Kingdee.BOS.App; using Kingdee.BOS.Core.Metadata.FieldElement; using System.ComponentModel; using Kingdee.BOS.ServiceHelper; using Kingdee.K3.SCM.App; using System.Data; namespace Demo.DynamicForm.PRD { /// <summary> /// 插件示例:引入销售出库单,建立与销售订单的关联 /// </summary> /// <remarks> /// 要求: /// 1. 需要引入单据体的源单类型、源单编号字段 /// 2. 本插件挂在销售出库单的提交操作上 /// 出库关联销售订单 /// 暂时不使用 /// </remarks> [Description("日计划用料清单下推后,建立直接调拨单与日计划用料清单关联关系")] [HotUpdate] public class Pro_DayPlanPushZJDB2 : AbstractOperationServicePlugIn { public override void OnPreparePropertys(PreparePropertysEventArgs e) { base.OnPreparePropertys(e); e.FieldKeys.Add("FSrcBillType"); e.FieldKeys.Add("FSrcBillNo"); e.FieldKeys.Add("FID"); e.FieldKeys.Add("FTreeEntity_FEntryID"); e.FieldKeys.Add("FBillNo"); e.FieldKeys.Add("FBFLowId"); e.FieldKeys.Add("FMaterialId"); e.FieldKeys.Add("FBaseUnitQty"); e.FieldKeys.Add("FBaseJoinQty"); e.FieldKeys.Add("FDayPlanBillNo"); } private const string POFormId = "Paez_Sc_DayPlanPPBomBill"; public List<string> FentryIdList = new List<string>(); public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) { base.BeforeExecuteOperationTransaction(e); HashSet<string> poBillNos = new HashSet<string>(); Entity entity = this.BusinessInfo.GetEntity("FBillEntry");//获取明细信息 Entity linkEntry = this.BusinessInfo.GetEntity("FBillEntry_Link"); Field fldSrcFormId = this.BusinessInfo.GetField("FSrcBillType"); Field fldSrcBillNo = this.BusinessInfo.GetField("FSrcBillNo"); // 对单据体进行循环,取关联的源单编号 foreach (var billObj in e.SelectedRows) { DynamicObjectCollection entryRows = entity.DynamicProperty.GetValue(billObj.DataEntity) as DynamicObjectCollection; foreach (var entryRow in entryRows) { string srcFormId = ""; string srcSrcBillNo = ""; string FPPBOMFENTRYID = ""; try { srcFormId = "Sc_DayPlanPPBomBillSub"; srcSrcBillNo = entryRow["FDayPlanBillNo"]?.ToString(); //string FPPBOMFID = entryRow["FDayPlanFid"]?.ToString(); //FPPBOMFENTRYID = entryRow["FDayPlanFentryId"]?.ToString(); } catch (Exception) { } if (string.IsNullOrWhiteSpace(srcFormId) || string.IsNullOrWhiteSpace(srcSrcBillNo) ) {// 源单不是采购订单,略过 continue; } // 源单编号已经登记,不再重复记录,略过 if (poBillNos.Contains(srcSrcBillNo)) continue; // Link已经记录了源单信息,略过 //DynamicObjectCollection linkRows = linkEntry.DynamicProperty.GetValue(entryRow) // as DynamicObjectCollection; //if (linkRows.Count > 0) continue; bool Ret = SourceVerification(Convert.ToString(entryRow["Id"])); if (!Ret) continue; poBillNos.Add(srcSrcBillNo); } } if (poBillNos.Count == 0) return; DynamicObject[] poObjs = this.LoadPurchaseOrder(poBillNos); if (poObjs == null || poObjs.Length == 0) return; Dictionary<string, Dictionary<string, DynamicObject>> dctAllBills = this.BuildDictionary(poObjs); string srcTableNumber = this.GetPOEntryTableNumber(); List<DynamicObject> allNewLinkRows = new List<DynamicObject>(); // 循环单据体,为单据体,建立起源单关联信息: foreach (var billObj in e.SelectedRows) { DynamicObjectCollection entryRows = entity.DynamicProperty.GetValue(billObj.DataEntity) as DynamicObjectCollection; foreach (var entryRow in entryRows) { string srcFormId = "Sc_DayPlanPPBomBillSub"; string srcSrcBillNo = entryRow["FDayPlanBillNo"]?.ToString(); //string FPPBOMFID = entryRow["FDayPlanFid"]?.ToString(); //string FPPBOMFENTRYID = entryRow["FDayPlanFentryId"]?.ToString(); if (string.IsNullOrWhiteSpace(srcFormId) || string.IsNullOrWhiteSpace(srcSrcBillNo) ) {// 源单不是销售订单,略过 continue; } Dictionary<string, DynamicObject> dctOneBill = null; if (dctAllBills.TryGetValue(srcSrcBillNo, out dctOneBill) == false) continue; DynamicObject materialObj = entryRow["MaterialId"] as DynamicObject; if (materialObj == null) continue; string materialNumber = Convert.ToString(materialObj["number"]); DynamicObject srcRow = null; if (dctOneBill.TryGetValue(materialNumber, out srcRow) == false) continue; // Link已经记录了源单信息,略过 bool Ret = SourceVerification(Convert.ToString(entryRow["Id"])); if (!Ret) continue; //记录源单ID 用于更新 if (!FentryIdList.Contains(entryRow["Id"]?.ToString())) FentryIdList.Add(entryRow["Id"]?.ToString()); DynamicObjectCollection linkRows = linkEntry.DynamicProperty.GetValue(entryRow) as DynamicObjectCollection; DynamicObject linkRow = new DynamicObject(linkEntry.DynamicObjectType); linkRow["STableName"] = srcTableNumber; this.FillLinkRow(srcRow, entryRow, linkRow); linkRows.Add(linkRow); allNewLinkRows.Add(linkRow); } } // 为新建的源单关联信息,设置内码 IDBService dbService = ServiceHelper.GetService<IDBService>(); dbService.AutoSetPrimaryKey(this.Context, allNewLinkRows.ToArray(), linkEntry.DynamicObjectType); } // public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) // { // base.AfterExecuteOperationTransaction(e); // string FentryId = string.Join(",", FentryIdList.ToArray()); // List<string> sqlList = new List<string>(); // string sql = string.Format(@"/*dialect*/ // update a set FBASEQTY = FQTY // from T_STK_STKTRANSFERINENTRY_LK a // join T_STK_STKTRANSFERINENTRY b on a.FENTRYID = b.FENTRYID // where // --a.FSTABLENAME = 'T_PRD_PPBOMENTRY' and // a.FENTRYID in ({0})", FentryId); // sqlList.Add(sql); // sql = string.Format(@"/*dialect*/update T_STK_STKTRANSFERINENTRY_R //set FSrcBillTypeId = 'PRD_PPBOM',FSRCBILLNO=b.FPPBOMBILLNO //,FTRANSRESERVELINK=1 //from T_STK_STKTRANSFERINENTRY_R a //join T_STK_STKTRANSFERINENTRY b on a.FENTRYID=b.FENTRYID //where a.FENTRYID in({0})", FentryId); // sqlList.Add(sql); // DBServiceHelper.ExecuteBatch(Context, sqlList); // //DBServiceHelper.Execute(Context, sql); // } /// <summary> /// 加载相关的销售订单数据 /// </summary> /// <param name="poBillNos"></param> /// <returns></returns> private DynamicObject[] LoadPurchaseOrder(HashSet<string> poBillNos) { IViewService viewService = ServiceHelper.GetService<IViewService>(); string formId = "Paez_Sc_DayPlanPPBomBill"; // 指定需要加载的销售订单字段 List<SelectorItemInfo> fields = new List<SelectorItemInfo>(); fields.Add(new SelectorItemInfo("FID")); // 单据主键 fields.Add(new SelectorItemInfo("FEntity_FEntryID")); // 单据体主键 fields.Add(new SelectorItemInfo("FBillNo")); // 单据编号 fields.Add(new SelectorItemInfo("FBFLowId")); // 业务流程 fields.Add(new SelectorItemInfo("FHMaterSubID")); // 物料 fields.Add(new SelectorItemInfo("FHQtyMust"));//应发数量 fields.Add(new SelectorItemInfo("FSelTranslateQty"));//调拨数量 fields.Add(new SelectorItemInfo("FBFLOWID")); // // 指定过滤条件 string filter = string.Format(" FBillNo IN ('{0}') ", string.Join("','", poBillNos)); OQLFilter ofilter = OQLFilter.CreateHeadEntityFilter(filter); var objs = viewService.Load(this.Context, formId, fields, ofilter); return objs; } /// <summary> /// 把日计划用料清单 单据体行构建为字典:Dictionary(单据编号, Dictionary(物料编码, 源单行)); /// </summary> /// <param name="poObjs"></param> /// <returns></returns> private Dictionary<string, Dictionary<string, DynamicObject>> BuildDictionary(DynamicObject[] poObjs) { Dictionary<string, Dictionary<string, DynamicObject>> dctAllBills = new Dictionary<string, Dictionary<string, DynamicObject>>(); foreach (var poObj in poObjs) { string billNo = Convert.ToString(poObj["BillNo"]); Dictionary<string, DynamicObject> dctOneBill = new Dictionary<string, DynamicObject>(); DynamicObjectCollection entryRows = poObj["FEntity"] as DynamicObjectCollection; foreach (var entryRow in entryRows) { DynamicObject materialObj = entryRow["FHMaterSubID"] as DynamicObject; if (materialObj == null) continue; string materialNumber = Convert.ToString(materialObj["number"]); dctOneBill[materialNumber] = entryRow; } dctAllBills.Add(billNo, dctOneBill); } return dctAllBills; } /// <summary> /// 获取销售订单关联主实体表格编码 /// </summary> /// <returns></returns> private string GetPOEntryTableNumber() { IBusinessFlowService bfMetaService = ServiceHelper.GetService<IBusinessFlowService>(); var tableDefine = bfMetaService.LoadTableDefine(this.Context, POFormId, "FEntity"); return tableDefine.TableNumber; } /// <summary> /// 填写源单信息 /// </summary> /// <param name="srcRow">源单行</param> /// <param name="toRow">目标单行</param> /// <param name="linkRow">关联行</param> private void FillLinkRow(DynamicObject srcRow, DynamicObject toRow, DynamicObject linkRow) { ////剩余调拨数量 //decimal remainQty = DBServiceHelper.ExecuteScalar<decimal>(Context, $"select FMustQty -isnull(FSELTRANSLATEQTY,0) from T_PRD_PPBOMENTRY t1 left join T_PRD_PPBOMENTRY_Q t2 on t1.FENTRYID = t2.FENTRYID where t1.FENTRYID={toRow["FPPBOMFENTRYID"]?.ToString()}", 0); DataTable dt = DBServiceHelper.ExecuteDataSet(Context, $"select * from T_STK_STKTRANSFERINENTRY where FENTRYID={toRow[0]}").Tables[0]; linkRow["FlowId"] = ""; linkRow["FlowLineId"] = 0; linkRow["RuleId"] = "DayPlanPPBomBill-STK_TransferDirect"; linkRow["SBillId"] = dt.Rows[0]["FDAYPLANFID"].ToString(); linkRow["SId"] = dt.Rows[0]["FDAYPLANFENTRYID"].ToString(); // 原始携带量 linkRow["BaseQtyOld"] = Convert.ToDecimal(dt.Rows[0]["FBASEQTY"]);//剩余调拨数量 linkRow["BaseQty"] = Convert.ToDecimal(dt.Rows[0]["FBASEQTY"]); //本次需要调拨数量 } /// <summary> /// 验证是否生成过生产用料清单对应的源单 /// </summary> /// <returns></returns> public bool SourceVerification(string FTID) { string sql = $" select count(*) from T_BF_INSTANCEENTRY where FSTABLENAME= 'T_PRD_PPBOMENTRY' and FTTABLENAME = 'Sc_DayPlanPPBomBillSub' and FTID = '{FTID}'"; int count = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0); if (count == 0) return true; else return false; } } } src/BLL/Demo.BillView/PRD/Pro_MaterialRequisitionAuditDayPlan.cs
@@ -42,6 +42,8 @@ e.FieldKeys.Add("FBaseJoinQty"); } private const string POFormId = "PRD_PPBOM"; public List<string> FentryIdList = new List<string>(); public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) { base.BeforeExecuteOperationTransaction(e); @@ -59,12 +61,12 @@ { string srcFormId = ""; string srcSrcBillNo = ""; string FPPBOMFENTRYID = ""; try { srcFormId = "PRD_PPBOM"; srcSrcBillNo = fldSrcBillNo.DynamicProperty.GetValue<string>(entryRow); srcSrcBillNo = DBServiceHelper.ExecuteScalar<string>(Context, $" select distinct FPPBOMBILLNO from T_PRD_PICKMTRLDATA where FSRCBILLNO = '{srcSrcBillNo}' ", srcSrcBillNo); srcSrcBillNo = entryRow["PPBOMBILLNO"].ToString(); FPPBOMFENTRYID = entryRow["PPBomEntryId"].ToString(); } catch (Exception) { @@ -100,10 +102,13 @@ as DynamicObjectCollection; foreach (var entryRow in entryRows) { string srcSrcBillNo = fldSrcBillNo.DynamicProperty.GetValue<string>(entryRow); string srcFormId = "PRD_PPBOM"; srcSrcBillNo = DBServiceHelper.ExecuteScalar<string>(Context, $" select distinct FPPBOMBILLNO from T_PRD_PICKMTRLDATA where FSRCBILLNO = '{srcSrcBillNo}' ", srcSrcBillNo); string srcFormId = ""; string srcSrcBillNo = ""; string FPPBOMFENTRYID = ""; srcFormId = "PRD_PPBOM"; srcSrcBillNo = entryRow["PPBOMBILLNO"].ToString(); FPPBOMFENTRYID = entryRow["PPBomEntryId"].ToString(); if (string.IsNullOrWhiteSpace(srcFormId) || string.IsNullOrWhiteSpace(srcSrcBillNo) @@ -122,21 +127,50 @@ bool Ret = SourceVerification(Convert.ToString(entryRow["Id"])); if (!Ret) continue; //记录源单ID 用于更新 if (!FentryIdList.Contains(entryRow["Id"]?.ToString())) FentryIdList.Add(entryRow["Id"]?.ToString()); DynamicObjectCollection linkRows = linkEntry.DynamicProperty.GetValue(entryRow) as DynamicObjectCollection; linkRows.Clear(); //linkRows.Clear(); DynamicObject linkRow = new DynamicObject(linkEntry.DynamicObjectType); linkRow["STableName"] = srcTableNumber; this.FillLinkRow(srcRow, entryRow, linkRow); linkRows.Add(linkRow); allNewLinkRows.Add(linkRow); } } } // 为新建的源单关联信息,设置内码 IDBService dbService = ServiceHelper.GetService<IDBService>(); dbService.AutoSetPrimaryKey(this.Context, allNewLinkRows.ToArray(), linkEntry.DynamicObjectType); } /// <summary> /// 新增操作后 sql更新数量 以及 源单信息表 /// </summary> /// <param name="e"></param> public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) { base.AfterExecuteOperationTransaction(e); string FentryId = string.Join(",", FentryIdList.ToArray()); List<string> sqlList = new List<string>(); string sql = string.Format(@"/*dialect*/ update a set FBASEACTUALQTY = b.FBASEACTUALQTY from T_PRD_PICKMTRLDATA_LK a join T_PRD_PICKMTRLDATA b on a.FENTRYID = b.FENTRYID where a.FSTABLENAME = 'T_PRD_PPBOMENTRY' and a.FENTRYID in ({0})", FentryId); sqlList.Add(sql); sql = string.Format(@"/*dialect*/ update T_PRD_PICKMTRLDATA set FSrcBillType = 'PRD_PPBOM', FSRCENTRYID=FPPBomEntryId, FSrcBillNo=FPPBOMBILLNO where FENTRYID in ({0}) ", FentryId); sqlList.Add(sql); DBServiceHelper.ExecuteBatch(Context, sqlList); //DBServiceHelper.Execute(Context, sql); } /// <summary> /// 加载相关的销售订单数据 /// </summary> @@ -208,16 +242,17 @@ /// <param name="linkRow">关联行</param> private void FillLinkRow(DynamicObject srcRow, DynamicObject toRow, DynamicObject linkRow) { //剩余领料数量 decimal remainQty = DBServiceHelper.ExecuteScalar<decimal>(Context, $"select FMustQty -isnull(FSelPickedQty,0) from T_PRD_PPBOMENTRY t1 left join T_PRD_PPBOMENTRY_Q t2 on t1.FENTRYID = t2.FENTRYID where t1.FENTRYID={toRow["PPBomEntryId"]?.ToString()}", 0); linkRow["FlowId"] = srcRow["BFLowId_Id"]; linkRow["FlowLineId"] = 0; linkRow["RuleId"] = "PRD_PPBOM2PICKMTRL_NORMAL"; linkRow["SBillId"] = ((DynamicObject)srcRow.Parent)[0]; linkRow["STableId"] = ((DynamicObject)srcRow.Parent)[0]; linkRow["SId"] = srcRow[0]; // 原始携带量 decimal baseUnitQty = Convert.ToDecimal(srcRow["BaseNeedQty"]);//用料清单单位数量 decimal joinUnitQty = Convert.ToDecimal(srcRow["BasePickedQty"]);//用料清单单位领料数量 linkRow["BaseActualQtyOld"] = baseUnitQty - joinUnitQty; linkRow["BaseActualQty"] = toRow["BASEACTUALQTY"]; //基本单位实发数量 linkRow["BaseActualQtyOld"] = remainQty; linkRow["BaseActualQty"] = toRow["ACTUALQTY"]; //基本单位实发数量 } /// <summary> @@ -226,7 +261,7 @@ /// <returns></returns> public bool SourceVerification(string FTID) { string sql = $" select count(*) from T_BF_INSTANCEENTRY where FSTABLENAME= 'T_PRD_PPBOMENTRY' and FTID = '{FTID}'"; string sql = $" select count(*) from T_BF_INSTANCEENTRY where FSTABLENAME= 'T_PRD_PPBOMENTRY' and FTTABLENAME = 'T_PRD_PICKMTRLDATA' and FTID = '{FTID}'"; int count = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0); if (count == 0) return true; src/BLL/Demo.BillView/PRD/Pro_ZJDBFSH.cs
New file @@ -0,0 +1,67 @@ using System; using System.Collections.Generic; using Kingdee.BOS.Util; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Contracts; using Kingdee.BOS.App; using Kingdee.BOS.Core.Metadata.FieldElement; using System.ComponentModel; using Kingdee.BOS.ServiceHelper; using Kingdee.K3.SCM.App; namespace Demo.DynamicForm.PRD { [Description("[直接调拨单-反审核]按钮功能]")] [HotUpdate] public class Pro_ZJDBFSH : AbstractOperationServicePlugIn { public override void OnPreparePropertys(PreparePropertysEventArgs e) { base.OnPreparePropertys(e); e.FieldKeys.Add("FSrcBillType"); e.FieldKeys.Add("FSrcBillNo"); e.FieldKeys.Add("FID"); e.FieldKeys.Add("FTreeEntity_FEntryID"); e.FieldKeys.Add("FBillNo"); e.FieldKeys.Add("FBFLowId"); e.FieldKeys.Add("FMaterialId"); e.FieldKeys.Add("FBaseUnitQty"); e.FieldKeys.Add("FBaseJoinQty"); e.FieldKeys.Add("FDayPlanBillNo"); e.FieldKeys.Add("FDayPlanFentryId"); } /// <summary> ///反审核 反更新日计划用料清单调拨数量 /// </summary> /// <param name="e"></param> public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) { base.AfterExecuteOperationTransaction(e); List<string> sqlList = new List<string>(); string sql = ""; //保存时更新生产用料清单表明细调拨数量 Entity entity = this.BusinessInfo.GetEntity("FBillEntry");//获取明细信息 foreach (var billObj in e.SelectedRows) { DynamicObjectCollection entryRows = entity.DynamicProperty.GetValue(billObj.DataEntity) as DynamicObjectCollection; foreach (var entryRow in entryRows) { //生产用料清单为空时 if (Convert.ToString(entryRow["FDayPlanBillNo"]) == "") continue; string fentryId = entryRow["FDayPlanFentryId"].ToString(); decimal FBaseQty = Convert.ToDecimal(entryRow["BaseQty"]); sql = string.Format($"/*dialect*/update Sc_DayPlanPPBomBillSub set FTranslateQty -= {FBaseQty} where FEntryID = { fentryId} "); sqlList.Add(sql); } } DBServiceHelper.ExecuteBatch(Context, sqlList); } } } src/BLL/Demo.BillView/PRD/Pro_ZJDBSH.cs
New file @@ -0,0 +1,66 @@ using System; using System.Collections.Generic; using Kingdee.BOS.Util; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Contracts; using Kingdee.BOS.App; using Kingdee.BOS.Core.Metadata.FieldElement; using System.ComponentModel; using Kingdee.BOS.ServiceHelper; using Kingdee.K3.SCM.App; namespace Demo.DynamicForm.PRD { [Description("[直接调拨单-审核]按钮功能]")] [HotUpdate] public class Pro_ZJDBSH : AbstractOperationServicePlugIn { public override void OnPreparePropertys(PreparePropertysEventArgs e) { base.OnPreparePropertys(e); e.FieldKeys.Add("FSrcBillType"); e.FieldKeys.Add("FSrcBillNo"); e.FieldKeys.Add("FID"); e.FieldKeys.Add("FTreeEntity_FEntryID"); e.FieldKeys.Add("FBillNo"); e.FieldKeys.Add("FBFLowId"); e.FieldKeys.Add("FMaterialId"); e.FieldKeys.Add("FBaseUnitQty"); e.FieldKeys.Add("FBaseJoinQty"); e.FieldKeys.Add("FDayPlanBillNo"); e.FieldKeys.Add("FDayPlanFentryId"); } /// <summary> ///反审核 反更新日计划用料清单调拨数量 /// </summary> /// <param name="e"></param> public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) { base.AfterExecuteOperationTransaction(e); List<string> sqlList = new List<string>(); string sql = ""; //审核时更新生产用料清单表明细调拨数量 Entity entity = this.BusinessInfo.GetEntity("FBillEntry");//获取明细信息 foreach (var billObj in e.SelectedRows) { DynamicObjectCollection entryRows = entity.DynamicProperty.GetValue(billObj.DataEntity) as DynamicObjectCollection; foreach (var entryRow in entryRows) { //生产用料清单为空时 if (Convert.ToString(entryRow["FDayPlanBillNo"]) == "") continue; string fentryId = entryRow["FDayPlanFentryId"].ToString(); sql = string.Format($"/*dialect*/update Sc_DayPlanPPBomBillSub set FTranslateQty = (select sum(FBaseQty) from T_STK_STKTRANSFERINENTRY where FDayPlanFentryId = { fentryId})where FEntryID = { fentryId} "); sqlList.Add(sql); } } DBServiceHelper.ExecuteBatch(Context, sqlList); } } }