计划订单批量维护可选返工类投放单据类型解决方案

【应用场景】
基于特殊业务场景,需要把计划订单的投放单据类型修改成返工生产或返工委外单据类型,在计划订单订单新增和修改界面,有现成的解决方案,详见知识贴: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.LoadBillTy
计划订单批量维护可选返工类投放单据类型解决方案
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



