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

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

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

【应用场景】

基于特殊业务场景,需要把计划订单的投放单据类型修改成返工生产或返工委外单据类型,在计划订单订单新增和修改界面,有现成的解决方案,详见知识贴: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。


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

【应用场景】基于特殊业务场景,需要把计划订单的投放单据类型修改成返工生产或返工委外单据类型,在计划订单订单新增和修改界面,有现成的...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息