计划运算向导检查并整理选单数据解决方案

【应用场景】
在计划运算向导界面,存在一些场景,需要对所选单据的数据完整性进行检查,对于不完整的数据给出提示,或移除不参与运算。
【注意事项】
该实现方案涉及到干预标准的运算的过滤策略,容易造成参与运算范围的误解,比如标准可以选到某个单据运算,因为本方案移除了,给后面分析运算结果增加一定难度。非最佳实践,非必要不推荐使用,仅限于特殊场景下的特殊应用。
【案例演示】
本方案演示的场景是所选单据若是自制件或委外件,但又不存在BOM时,将这类单据移除,不参与本次运算。
【实现步骤】
<1>编写表单插件,注意因为涉及更改标准逻辑,因此二开表单插件须继承标准插件,示例代码如下。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using Kingdee.BOS.Util; //引用Kingdee.BOS.dll
using Kingdee.BOS.Orm.DataEntity; //引用Kingdee.BOS.DataEntity.dll
using Kingdee.K3.MFG.BusinessCommon.BillPlugIn; //引用Kingdee.K3.MFG.BusinessCommon.dll
using Kingdee.K3.Core.MFG.EnumConst; //引用Kingdee.K3.Core.dll
using Kingdee.K3.Core.MFG.EntityHelper;
namespace MyMrpWizardPlugIn_240708
{
[Description("个性Mrp向导插件")]
public class MyMrpWizardPlugIn : Kingdee.K3.MFG.PLN.Business.PlugIn.DynamicForm.WizardForm.MrpComputeWizardPlugIn
{
public override void ButtonClick(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.ButtonClickEventArgs e)
{
//捕捉到点击了下一步或直接运算时,事先处理选单表体数据
if (e.Key.EqualsIgnoreCase("FNext") || e.Key.EqualsIgnoreCase("FBtnDireCalc"))
{
DynamicObjectCollection selEntrys = this.View.Model.DataObject.GetDynamicValue<DynamicObjectCollection>("SelBillData");
for (int i = selEntrys.Count - 1; i >= 0; i--)
{
long bomId = selEntrys[i].GetDynamicValue<long>("BomId_Id");
if (bomId > 0) continue;
DynamicObject mtrlObj = selEntrys[i].GetDynamicValue<DynamicObject>("MaterialId");
if (mtrlObj.IsNullOrEmpty()) continue;
//注意以下几行代码是读取计划运算向导需求范围选择表体的物料引用属性
DynamicObject mtrlBaseObj = (mtrlObj["MaterialBase"] as DynamicObjectCollection).FirstOrDefault();
if (mtrlBaseObj.IsNullOrEmpty()) continu
计划运算向导检查并整理选单数据解决方案
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



