二开案例-【C#】生产用料清单库存刷新指定仓库获取库存

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

二开案例-【C#】生产用料清单库存刷新指定仓库获取库存

【应用场景】

目前生产用料清单单据和列表上的库存刷新逻辑都是只能根据发料仓库进行库存匹配,但是部分客户需要根据自身业务逻辑指定多个仓库,或者其他库存维度的匹配条件来获取库存,此时库存刷新的功能无法满足需求,需要利用服务【获取即时库存信息】进行二开插件,干预获取库存的维度。


【注意事项】

该实现方案的实现只针对举例场景,具体应用应该根据自身业务进行辨别是否可用


【案例演示】

生产用料清单单据上配置按钮-供应链库存刷新-点击之后刷新基本单位即时库存数量


【实现步骤】

<1>取消生产用料清单单据上【库存刷新】按钮可见性(列表菜单同步处理),避免后续添加的按钮造成混淆。


<2>生产用料清单单据菜单添加菜单(列表菜单同步处理),并配置获取即使库存信息服务。


<3>编写插件,干预获取即使库存信息,示例代码如下

using System.Collections.Generic;
using System.Data;
using System.Linq;
using Kingdee.BOS;
using Kingdee.BOS.Util;
using Kingdee.K3.Core.SCM.Args;
using Kingdee.K3.SCM.App.Core;
using Kingdee.K3.SCM.Common.BusinessEntity.STK;

namespace ITIBB.App.ServicePlugIn
{
    [Kingdee.BOS.Util.HotUpdate]
    /// <summary>
    /// 二开获取即时库存服务,并指定仓库进行获取库存
    /// </summary>
    public class GetInvStock : AbstractGetInvStockPlugIn
    {
        public override IEnumerable<STK_Inventory> ApplyExtFilter(IEnumerable<STK_Inventory> data, GetInvStockDetailArg item)
        {
            //当组织等于1时,只获取仓库A和B库存
            long orgId = 1; //组织内码
            List<long> stockId = new List<long>();//仓库内码
            stockId.Add(430230);
            stockId.Add(430231);
            if (!stockId.IsEmpty() && orgId == 1)
            {
                data = data.Where(p => stockId.Contains(p.StockId));
            }
            return data;
        }
    }
}

代码说明:代码中组织内码硬编码用了内码1,仓库内码用了430230,430231(对应图中YZG001,YZG002),实际开发过程中根据自身业务获取自身数据中心的值,切勿直接拷贝运行,从而导致无法实现需求。

插件编辑好之后,将插件命名空间位置复制在图中位置。



【功能验证】

<1>登录业务站点,打开生产用料清单编辑界面,点击供应链库存刷新菜单,即可看到效果,也可以使用VS调试。



【参考资料】

获取库存服务如何自定义条件 (kingdee.com)




二开案例-【C#】生产用料清单库存刷新指定仓库获取库存

【应用场景】目前生产用料清单单据和列表上的库存刷新逻辑都是只能根据发料仓库进行库存匹配,但是部分客户需要根据自身业务逻辑指定多个仓...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息