计划订单批量维护可选返工类投放单据类型解决方案
【应用场景】
基于特殊业务场景,需要把计划订单的投放单据类型修改成返工生产或返工委外单据类型,在计划订单订单新增和修改界面,有现成的解决方案,详见知识贴:https://vip.kingdee.com/article/578962647945837312
本贴着重介绍在计划订单批量维护场景实现类似功能。
【注意事项】
本实现方案只是特殊示例,不代表大众场景,若有其他更好解决方案避免计划订单不用投放成返工类目标单时,请优先采取其他方案。
【案例演示】
投放类型为生产/委外类型的计划订单批量维护时投放目标单据类型维护成生产/委外类计划订单。
【实现步骤】
<1>增加计划订单批量维护表单插件,该插件继承并替换标准插件,作用是放开可选投放单据类型,示例代码如下。
using Kingdee.BOS.Util;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.K3.Core.MFG.Utils;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using Kingdee.K3.MFG.PLN.Business.PlugIn.DynamicForm;
using Kingdee.BOS.ProductModel;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
namespace CustTest20231219.BusinessPlugIn
{
[Description("二开计划订单批量维护插件")]
public class TestPlBatchEdit : PlBatchEditPlugIn
{
public override void BeforeF7Select(BeforeF7SelectEventArgs e)
{
if (e.BaseDataField.Key.EqualsIgnoreCase("FReleaseBillType"))
{
string releaseType = this.View.Model.GetValue<string>("FReleaseType", e.Row);
if (releaseType.Equals("2"))
{ //只有投放类型为委外才处理,其他投放类型要处理请参照:1生产,2委外,3采购,4组织间受托,5生产线
e.ListFilterParameter.Filter = string.Format("FBILLFORMID IN('{0}','{1}')", "PRD_MO", "SUB_SUBREQORDER");
}
else
{
base.BeforeF7Select(e);
}
}
else
{
base.BeforeF7Select(e);
}
}
}
}
<2>注册该表单插件到计划订单批量维护的表单插件上。
<3>增加计划订单保存,该插件置于标准保存插件之后,作用是处理返工类投放单据类型的计划BOM数据,示例代码如下。
using Kingdee.BOS.Util;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Core.Metadata;
using Kingdee.K3.MFG.App;
using Kingdee.K3.Core.MFG;
using Kingdee.K3.Core.MFG.EntityHelper;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core;
namespace CustTest20231219.ServicePlugIn
{
[Description("二开保存")]
public class CustTestSave : AbstractOperationServicePlugIn
{
/// <summary>
/// 执行操作前(在保存校验之前)
/// </summary>
/// <param name="e"></param>
public override void BeforeDoSaveExecute(BeforeDoSaveExecuteEventArgs e)
{
base.BeforeDoSaveExecute(e);
if (e.DataEntities.IsEmpty()) return;
FormMetadata metaData = AppServiceContext.MetadataService.Load(this.Context, MFGFormIdConst.SubSys_PLN.PlanOrderBill) as FormMetadata;
foreach (DynamicObject dataEntity in e.DataEntities)
{
//提交和审核状态不再处理
string documentStatus = dataEntity.GetDynamicValue<string>("DocumentStatus");
if (documentStatus.Equals("C") || documentStatus.Equals("B")) continue;
//只针对投放类型是委外,且投放单据类型是返工时处理:将计划BOM置为父项物料
string releaseType = dataEntity.GetDynamicValue<string>("ReleaseType");
DynamicObject plSubHeadData = dataEntity.GetDynamicValue<DynamicObjectCollection>("PLSubHead").FirstOrDefault();
if (plSubHeadData.IsNullOrEmpty()) continue;
string releaseBillTypeId = plSubHeadData.GetDynamicValue<string>("ReleaseBillType_Id");
DynamicObject billTypePara = AppServiceContext.BusinessDataService.LoadBillTypePara(this.Context, "MoBillTypeParaSetting", releaseBillTypeId);
if (billTypePara.IsNullOrEmpty()) billTypePara = AppServiceContext.BusinessDataService.LoadBillTypePara(this.Context, "SubReqOrderParamSetting", releaseBillTypeId);
if (releaseType.Equals("2") && !billTypePara.IsNullOrEmpty())
{
string subType = billTypePara.GetDynamicValue<string>("SubType");
if (subType.Equals("2"))
{ //对于返工投放类的计划订单,计划BOM上的物料、供应组织、BOM版本、辅助属性、计划跟踪号置为父项物料相关信息
long materialId = dataEntity.GetDynamicValue<long>("SupplyMaterialId_Id");
long supplyOrgId = dataEntity.GetDynamicValue<long>("SupplyOrgId_Id");
long bomId = dataEntity.GetDynamicValue<long>("BomId_Id");
long auxPropId = dataEntity.GetDynamicValue<long>("AuxPropId_Id");
string mtoNo = dataEntity.GetDynamicValue<string>("MtoNo");
DateTime demandDate = dataEntity.GetDynamicValue<DateTime>("DemandDate");
IBillView billView = MFGBaseDataHelperUtil.CreateBillAddNewView(this.Context, metaData) as IBillView;
billView.Model.DataObject = dataEntity;
billView.Model.DeleteEntryData("FEntity");
billView.Model.DeleteEntryData("FEntityCoby");
billView.Model.CreateNewEntryRow("FEntity");
billView.Model.SetItemValueByID("FMaterialIdChild", materialId, 0);
billView.Model.SetItemValueByID("FChildSupplyOrgId", supplyOrgId, 0);
billView.Model.SetItemValueByID("FBOMIdChild", bomId, 0);
billView.Model.SetItemValueByID("FAuxPropIdChild", auxPropId, 0);
billView.Model.SetValue("FMTONoChild", mtoNo, 0);
billView.Model.SetValue("FDemandDateChild", demandDate, 0);
}
}
}
}
}
}
<4>注册该保存插件到计划订单的保存操作上。
<5>注意须取消或调整计划订单BOS配置的父项和子项物料不能相等的保存校验。
<6>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS(图略)。
【功能验证】
<1>登录业务站点,在计划订单列表选中一张创建状态,投放类型为委外的计划订单,点业务操作》批量维护,跳转到计划订单批量维护界面,已可选投放类型为返工类,选完之后选中点保存,然后回到列表打开该计划订单发现已经修改OK。
计划订单批量维护可选返工类投放单据类型解决方案
本文2024-09-23 03:14:51发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-157634.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