单据联查库存查询二开插件原创
金蝶云社区-邱育华
邱育华
14人赞赏了该文章 1,285次浏览 未经作者许可,禁止转载编辑于2021年12月21日 13:38:24

【业务背景】想控制比如做销售单据时库存查询只能选到A仓库的物料返回数据,做生产单据时库存查询只能选到B仓库的物料,避免做单人员误选。目前做单人员是仓管人员,在库存查询中还是要能看到所有物料


【需求分析】

1、"库存查询"根据不同的单据使用指定的仓库作为过滤条件获取数据,当前服务为通用服务,无法通过BOS做特殊配置

2、从单据联查库存的界面分析看, 通过选择表单上各库存维度的数据去做筛选,那么只要实现"仓库"的自动赋值,然后触发数据刷新,就能实现按照特定仓库去过滤即时库存数据


# 定义插件,重写AfterBindData事件处理


using Kingdee.BOS.Core.DynamicForm.PlugIn;
using System;

namespace Kingdee.K3.SCM.Stock.Business.PlugIn.Inventory
{
    public class InvJoinQueryEditEx : AbstractDynamicFormPlugIn
    {
        public override void AfterBindData(EventArgs e)
        {
            object billFormId = this.View.OpenParameter.GetCustomParameter("QueryBillFormId");
            if (billFormId != null)
            {
                string queryBillFormId = billFormId.ToString();
                switch (queryBillFormId)
                {
                    case "STK_MisDelivery":
                        this.Model.SetValue("FStockIdH", 499413);
                        break;
                    case "SAL_SaleOrder":
                        this.Model.SetValue("FStockIdH", 100022);
                        break;
                }
                this.View.UpdateView("FStockIdH");
                this.View.InvokeFieldUpdateService("FStockIdH", -1);
                
                this.View.GetMainMenu().ItemClick("tbRefresh");
                this.View.SendDynamicFormAction(this.View);
            }
        }
    }
}


Python版本:


clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')

from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from System import *

def AfterBindData(e):
    billFormId = this.View.OpenParameter.GetCustomParameter("QueryBillFormId")
    paraOrgId = this.View.OpenParameter.GetCustomParameter("QueryOrgId");
    dict = {"STK_MisDelivery" : 499413, "SAL_SaleOrder": 100022}
    
    if billFormId is not None and paraOrgId is not None:
        if dict.__contains__(str(billFormId)):
            this.Model.SetValue("FStockOrgIdH", str(paraOrgId))
            this.View.UpdateView("FStockOrgIdH")
            this.View.InvokeFieldUpdateService("FStockOrgIdH", -1)
            
            this.Model.SetValue("FStockIdH", dict[str(billFormId)])
            this.View.UpdateView("FStockIdH")
            this.View.InvokeFieldUpdateService("FStockIdH", -1)
            
            this.View.GetMainMenu().ItemClick("tbRefresh")
            this.View.SendDynamicFormAction(this.View)


3、注册插件

image.png


【实现效果】

image.png


image.png



说明:该插件实现针对各单据指定了仓库,属于需求特殊化处理,大部分的业务场景不适用,系统标准功能即可满足。

图标赞 14
14人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!