多组织预测冲销向导界面自定义数据过滤条件原创
金蝶云社区-超级远
超级远
9人赞赏了该文章 446次浏览 未经作者许可,禁止转载编辑于2021年1月6日 15:09:48

        2020年12月24号的补丁更新之后,在多组织预测冲销向导界面第一步中增加一个字段,使第二步中加载出来的预测单、销售订单和组织间需求单按照这个字段进行过滤。

        如果冲销的单据很多,数据量太大导致第二步加载不出来或者加载得很慢,就能通过这种方法按不同的条件分批加载数据。

        例如,增加一个基础资料类型的客户字段,字段标识为"FABCCustId":

多组织预测冲销插件3.png

        在多组织预测冲销那个动态表单的表单插件里面注册一个新插件,停用标准产品的那个,新的插件继承自标准产品的那个插件。

多组织预测冲销插件1.png

        原理就是在往第二步界面的左右两个单据体填充数据之前,用自己加的自定义字段过滤待填充数据。

        我们提供的接口:

多组织预测冲销插件2.png

        二开插件代码,可以只过滤预测单或者只过滤冲销单据,也可以一起过滤:

using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using Kingdee.K3.Core.MFG.EntityHelper;
using System;
using System.Collections.Generic;
using System.ComponentModel;

namespace Kingdee.K3.MFG.PLN.Business.PlugIn.DynamicForm.WizardForm
{
    [Description("多组织预测冲销向导二开数据过滤表单插件")]
    public class MyMultiOrgWriteOffWizardPlugIn : MultiOrgWriteOffWizardPlugIn
    {
        public override BOS.Orm.DataEntity.DynamicObjectCollection CustomFilter(BOS.Orm.DataEntity.DynamicObjectCollection writeOffDatas)
        {
            //获取界面上自定义过滤字段的值
            DynamicObject Cust = (DynamicObject)this.View.Model.GetValue("FABCCustId");
            if (!Cust.IsNullOrEmpty())
            {
                List<DynamicObject> needRemoveData = new List<DynamicObject>();
                //writeOffDatas是第二步中左右两边所有的销售订单、组织间需求单、预测单的集合                
                foreach (DynamicObject data in writeOffDatas)
                {
                    //预测单
                    //if ("A".Equals(data.GetDynamicObjectItemValue<string>(CONST_REQ_WriteOffBillData.CONST_FBillHead.ORM_BillCategory)))
                    //{                        
                    //}
                    //冲销单据,"B",指的是销售订单和组织间需求单
                    //else
                    //{                        
                    //}
                    if (data.GetDynamicObjectItemValue<long>("CustID_Id") != (Convert.ToInt64(Cust["Id"])))
                    {
                        needRemoveData.Add(data);
                    }
                }
                if (!needRemoveData.IsEmpty())
                {
                    foreach (DynamicObject delData in needRemoveData)
                    {
                        writeOffDatas.Remove(delData);
                    }
                }
            }
            return writeOffDatas;
        }
    }
}
赞 9