即时库存快捷过滤根据选中仓位加载对应仓位值集BeforeFilterGridF7Select实现

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

即时库存快捷过滤根据选中仓位加载对应仓位值集BeforeFilterGridF7Select实现

一、【问题现象】

1、即时库存快捷过滤筛选,选择了指定的仓位值集,弹出的仓位值没有按照仓位值集加载过滤,显示了所有仓位值集下的仓位值

image.webp


二、【实现】

抓取对应的查询语句,标准产品未对仓位的过滤做特定处理,无论选择哪个仓位值集,都加载所有的仓位值信息。

image.webp


二开过滤界面表单插件,重写BeforeFilterGridF7Select方法,加入仓位值集的查询条件:

using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.ListFilter;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using System;

namespace Kingdee.K3.SCM.Business.DynamicForm
{
    public class InventoryFilterEditEx: AbstractListFilterPlugIn
    {
        public override void BeforeFilterGridF7Select(BeforeFilterGridF7SelectEventArgs e)
        {
            base.BeforeFilterGridF7Select(e);
            e.PermissionFormId = Kingdee.K3.Core.SCM.SCMFormIdConst.STK_Inventory;

            var fieldKey = e.FieldKey;
            if (fieldKey.Contains("FStockLocId"))
            {
                string[] keys = fieldKey.Split('.');
                string key = keys[1];
                string sqlText = string.Format("SELECT TOP 1 FID from T_BAS_FLEXVALUES where FFLEXNUMBER = '{0}'", key);
                DynamicObjectCollection dyObjs = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlText);
                if (dyObjs.Count > 0)
                {
                    e.ListFilterParameter.Filter = string.Format(" FID = {0}", Convert.ToInt64(dyObjs[0]["FID"]));
                }
            }
        }
    }
}


python实现:

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

from System import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.ServiceHelper import * 
from Kingdee.BOS.Log import Logger 

def BeforeFilterGridF7Select(e):
    if "FStockLocId" in e.FieldKey:
        keys = e.FieldKey.split('.')
        sqlText = "SELECT TOP 1 FID from T_BAS_FLEXVALUES where FFLEXNUMBER = '{0}'".format(str(keys[1])) 
        dyObjs = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlText)
        if dyObjs.Count > 0:
            e.ListFilterParameter.Filter = " FID = {0}".format(str(dyObjs[0]["FID"]));


实现效果:

image.webp


代码示例.rar


插件需要挂到对应的列表过滤框界面。

这个能解决列表过滤框中的过滤,无法解决单据列表中的快速过滤。

即时库存快捷过滤根据选中仓位加载对应仓位值集BeforeFilterGridF7Select实现

一、【问题现象】1、即时库存快捷过滤筛选,选择了指定的仓位值集,弹出的仓位值没有按照仓位值集加载过滤,显示了所有仓位值集下的仓位值...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息