如何实现检验单主表体修改字段值,使用决策表体决策状态为不合格的分录自动勾选不良处理原创
金蝶云社区-SkyZPP
SkyZPP
2人赞赏了该文章 885次浏览 未经作者许可,禁止转载编辑于2021年12月14日 14:37:37

需求描述:在检验单主表体修改合格数、不合格数或者检验结果字段时,如果修改时使用决策表体只存在一行分录,则会默认按照修改结果刷新使用决策表体数据,此时想要实现当使用决策表体分录的决策状态为不合格的分录,自动将其不良处理字段勾选上。

实现方案:由于标准产品按主表体相关字段值刷新使用决策表体的逻辑的在表单插件中处理的,所以想要实现上述效果也需要二开表单插件才可以,具体思路如下:

      二开表单插件继承BaseControlEdit(需要引用Kingdee.K3.MFG.QM.Business.PlugIn.dll 组件),在插件中注册实体服务规则,在实体服务规则中处理上述逻辑(注意:标准产品某些检验类型是不支持不良品处理流程的,所以代码中需要通过业务类型字段去区分是否走二开的逻辑,否则会导致不支持不良处理流程的检验单使用决策状态为不合格时无法反写数量回源单

1214a.png


      

示例代码如下:

     
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.K3.Core.MFG.EnumConst;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.K3.Core.MFG.Utils;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.K3.Core.MFG.EntityHelper;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.DependencyRules;
namespace Kingdee.K3.MFG.QM.Business.PlugIn.Bill
{
    public class InspectBillTest : BaseControlEdit
    {
        public override void OnInitialize(InitializeEventArgs e)
        {
            base.OnInitialize(e);
            this.View.RuleContainer.AddPluginRule("FEntity",
              RaiseEventType.ValueChanged,
              SetPolicyDefect,
              new string[] { "FQualifiedQty", "FUnqualifiedQty", "FInspectResult" });
        }
        private void SetPolicyDefect(DynamicObject dataEntity, dynamic row)
        {
            string businessType = this.View.Model.GetValue<string>("FBusinessType");
            //不支持不良品处理的流程不允许默认勾选不良处理,否则会导致相关数量无法反写回源单:
            //目前不支持不良品处理流程的主要包含:8:发货检验 9:生产先检验  20:其他检验  21:工序巡检
            //当然这里也可以按照实际的需求只处理需要处理的单据类型即可
            if (businessType == "8" || businessType == "9" || businessType == "20" || businessType == "21") return;
            DynamicObjectCollection policyEntrys = dataEntity.GetDynamicValue<DynamicObjectCollection>("PolicyDetail");
            if (policyEntrys.IsEmpty()) return;
            Entity entity = this.View.BusinessInfo.GetEntity("FPolicyDetail");
            foreach (DynamicObject policyEntry in policyEntrys)
            {
                string policyStatus = policyEntry.GetDynamicValue<string>("PolicyStatus");
                if (policyStatus == "2")//使用决策状态为不合格时,不良处理勾选
                {
                    int policyIndex = this.View.Model.GetEntityDataObject(entity).IndexOf(policyEntry);
                    this.View.Model.SetValue("FIsDefectProcess", true, policyIndex);
                }
            }
            this.View.UpdateView("FPolicyDetail");
        }
    }
}

补充说明:如果是在使用决策表体修改使用决策或者决策状态,想要实现当使用决策状态为不合格时,不良处理自动勾选可以按如下方式实现: 检验单使用决策表体增加实体服务规则,控制当使用决策状态为不合格时,勾选不良处理;

1214b.png

1214c.png

1214d.png

赞 2