销售退货单Python干预退货校验逻辑试例

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

销售退货单Python干预退货校验逻辑试例

    在金蝶云星空版本 PT-146906 [8.0.0.202203] 之前,销售退货单中的 ReturnStockEdit 单据插件(此插件在程序集文件 Kingdee.K3.SCM.Sal.Business.PlugIn.dll中)会拒绝录入退货检验的物料,退货检验的物料必须先走完校验流程后从退货通知单下推过来,相关逻辑是在方法 BeforeF7SelectBeforeSetItemValueByNumber (这两个方法都调用了另一个方法GetFieldFilter)中控制的,反编译截图如下图1-1所示:

image.webp

图1-1


    上图1-1中是星空新版本(PT-146906 [8.0.0.202203])之后的插件反编译截图,其中添加了对WebApi操作的兼容逻辑。如果是WebApi,则允许赋值成功(在之前的版本中,if语句中是没有 base.View.ClientType != ClientType.WebApi,并且在保存操作上挂载了一个校验器,相关截图如下图1-2所示:

image.webp

图1-2


    针对客户通过WebApi生成销售退货单(物料为退货检验的),则只需要升级到PT-146906 [8.0.0.202203]版本并将保存操作上的校验 '需退货检验物料不能直接退货,请走检验线路!' 禁用即可。如果想在销售退货单新增界面上也能选择到退货检验物料,则可以扩展销售退货单,在表单插件列表的最后位置注册一个Python插件,如下图1-3所示:

image.webp图1-3

    上图中的Python代码如下(请使用附件中的代码,不要直接在论坛中复制下文):

# -*- coding: utf-8 -*-
#销售退货单表单插件
import clr
clr.AddReference('System')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
from System import *
from Kingdee.BOS import *
from Kingdee.BOS.Core import *

global checkMaterialFilter;
checkMaterialFilter = "AND FCHECKRETURN <> '1'";

def BeforeF7Select(e):
    if(e.FieldKey.ToUpperInvariant() == "FMATERIALID"):
        if e.ListFilterParameter.Filter is not None:
            e.ListFilterParameter.Filter = e.ListFilterParameter.Filter.Replace(checkMaterialFilter, "");
            
def BeforeSetItemValueByNumber(e):
    if(e.BaseDataFieldKey.ToUpperInvariant() == "FMATERIALID"):
        if e.Filter is not None:
            e.Filter = e.Filter.Replace(checkMaterialFilter, "");

     

    上文中的代码逻辑大致为:Python插件执行前会先执行通版的 ReturnStockEdit  插件(按插件列表中的顺序执行),通版插件会向e.ListFilterParameter.Filter 追加 AND FCHECKRETURN <> '1' 过滤条件,而我们新加的Python逻辑只是按条件去删除过滤条件 AND FCHECKRETURN <> '1'  而已。注册完后,则可以选择到检验物料了,如下图1-4所示:

image.webp

图1-4


KingdeeReturnStockEdit.zip

销售退货单Python干预退货校验逻辑试例

在金蝶云星空版本 PT-146906 [8.0.0.202203] 之前,销售退货单中的 ReturnStockEdit 单据插件(此插件在程序集文件 Kingdee.K3.SCM.S...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息