如何移除通版退货通知单对序列号的校验器原创
金蝶云社区-文安根
文安根
11人赞赏了该文章 1258次浏览 未经作者许可,禁止转载编辑于2021年05月19日 16:43:41

    在2021年1月发布的星空通版补丁中,在退货通知单上添加了序列号功能,默认也会有对序列号的校验,如退货通知单分录上的序列号单位数量要和序列号页签中的序列号个数一致,如下图1-1所示:

图1-1


    3月之后,陆续发现客户对此功能的抱怨,有些客户在录退货通知单环节时还不知道序列号是什么,或者此环节根本不会录序列号,可能是直到收到退货后才能知晓序列号,因此,这种校验是多余的。本文介绍如何通过BOS添加python插件移除此校验器。

    打开BOSIDE,找到退货通知单上的保存操作上的插件列表,注册一个python插件,如下图1-2所示:

image.png

    图1-2


python插件内容如下:注:直接复制下面的文本会有问题,其中的空格会经过论坛转化,需要重新删除所有空格再重新敲空格,建议使用附件中的文本或自己输入):


import clr 
clr.AddReference("System")
clr.AddReference("System.Core")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Core")
from System import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
def OnAddValidators(e):
    for validator in e.Validators:
        if (validator.GetType().ToString().Contains("ReturnNoticeSerialValidator")):
            e.Validators.Remove(validator);
            break;


保存后可以看到校验通过,如下图1-3所示

图1-3


当然,也可以使用C#插件,不过这样就得写程序集并在BOS中添加插件(适合传统销售模式的客户或单租户),以下附上C#插件代码:

[Description("移除标准退货通知单序列号校验器插件")]
public class RemoveSNValidator : AbstractOperationServicePlugIn
{
    public override void OnAddValidators(BOS.Core.DynamicForm.PlugIn.Args.AddValidatorsEventArgs e)
    {  
        base.OnAddValidators(e);        
        var validator = e.Validators.Where(w => w is Kingdee.K3.SCM.App.Sal.ServicePlugIn.ReturnNotice.ReturnNoticeSerialValidator).FirstOrDefault();
        if (validator != null)
        {            
            e.Validators.Remove(validator);
        }
    }
}



另外,应客户提单需求,在补丁(发布时间在2021.4.22,此补丁为灰度补丁,正式补丁在5月13号)中,通版将会把此序列号校验器单独用另一个保存插件(命名为:SaveSN,默认不启用,通版原来的插件名为Save)封装,届时更新补丁后可在BOS中删除python插件,再根据需要启用或禁用序列号保存插件,4.22补丁中的另一个修改就是销售出库单下推退货通知单的序列号携带逻辑也是通过另一个单独的单据转换(命名为:OutStockToSalReturnNoticeSN)插件来实现,默认不启用此单据转换插件,退货通知单下推销售退货单的序列号携带逻辑类似(命名为:ReturnNoticeToSalReturnStockSN)类似,区别是默认启用。客户可以根据需要在BOS中的单据转换中的插件策略自行启用或禁用SN结尾的插件(不要禁用没有SN结尾的同名插件),如下图1-4所示。

        图1-4


备注:考虑到特殊客户可能不出库就退货,直接在退货通知单上创建序列号主档也是可能的,此时会生成序列号主档,这里面也有校验,上面说的4.22发布的补丁中不会移除这种校验(这种校验也适合销售出库->退货通知)。

赞 11