即时库存二开字段方案整理

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

即时库存二开字段方案整理

系统的即时库存查询有2个入口,分为"即时库存"和"即时库存明细", 即时库存和即时库存明细的差别主要有: 

1、即时库存会按照显示隐藏列进行汇总,也可以设置分级汇总,还能在同一页面联查汇总行的相关明细,即时库存明细就是显示最明细数据,性能应该也会更好一些

2、后者显示的列(维度)多一点

3、两个在BOS设计器中的业务对象也不一样


什么是库存维度?


系统查看库存分为“即时库存”、“即时库存明细”。对于即时库存表的数据是以系统“即时库存明细”列表形式展示,而“即时库存”则是以设置的显示维度来汇总合计库存数量的列表形式展示。每次打开“即时库存”则会根据条件从即时库存表取数合计插入到T_STK_INVSUMQUERY表,界面再次查询会清除上次数据,界面关闭则会清除本次数据,针对异常关闭单据(关闭浏览器、注销、重启iis等)而异常的数据,也仅保留一天,大于一天的数据 下次查询时即会清理。


比如:

image.webp


这里即时库存页面只显示物料、仓库、批号、库存组织这四个维度数据,其余维度不显示,那么页面的库存量是根据4个维度做的汇总,比如库存量=200, 实际200的数量 可能涉及不同的"库存状态"、"货主"、"保管者"等, 这些数据只有即时库存明细才能做区分。相应的T_STK_INVSUMQUERY表中"库存状态"、"货主"、"保管者"等都是空值(实际即时库存不可能是这样的数据)

image.webp


系统查询入口业务对象FormId物理表
即时库存即时库存汇总数据查询STK_InvSumQueryT_STK_INVSUMQUERY
即时库存明细即时库存STK_InventoryT_STK_INVENTORY


4、列表插件取数的实现逻辑有很大差异


综合以上两者的差别,如果有业务需求需要二开字段,那么两者的处理方式也有很大差异,具体可参考【即时库存查询自定义】


普遍的二开场景有两种情况:

1、增加基础资料属性字段

2、增加非基础资料属性字段,即:添加实体字段,存在复杂的关联更新逻辑


针对第1种扩展场景比较简单,参考【即时库存明细增加字段】

对于第2种扩展场景,需要通过二开插件处理,参考

【即时库存查询增加非基础资料属性类型字段】 

【即时库存如何通过二开方式添加新字段?】


两种二开插件的处理方式如下:

一、即时库存,添加实体字段

1、BOS扩展文本字段

2、新增列表插件,继承原插件类InvSumQueryList(添加组件引用:Kingdee.K3.SCM.Stock.Business.PlugIn.dll),重写 PrepareFilterParameter方法

using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.List.PlugIn.Args;

namespace Kingdee.K3.SCM.Stock.Business.PlugIn.Inventory
{
    public class InvSumQueryListEx : InvSumQueryList
    {
        public override void PrepareFilterParameter(FilterArgs e)
        {
            base.PrepareFilterParameter(e);
            var transId = this.TransactionID;

            string sqlText = string.Format("UPDATE T_STK_INVSUMQUERY SET FExtText = '扩展文本' WHERE FTRANSID = '{0}'", transId);
            DBUtils.Execute(this.Context, sqlText);
        }
    }
}


3、注册新插件,禁用原插件

image.webp


4、实现效果

image.webp


【注意点】

1、即时库存扩展增加字段报错NULL】


二、即时库存明细,添加实体字段

1、BOS扩展文本字段

2、新增列表插件,继承列表插件抽象类AbstractListPlugIn,重写 BeforeGetDataForTempTableAccess方法

using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.ServiceHelper;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;

namespace Kingdee.K3.SCM.Stock.Business.PlugIn.Inventory
{
    public class InventoryListExt : AbstractListPlugIn
    {
        public override void BeforeGetDataForTempTableAccess(BOS.Core.List.PlugIn.Args.BeforeGetDataForTempTableAccessArgs e)
        {
            string sqlText = string.Format(@"MERGE INTO {0} IT 
                                            USING (
                                            SELECT FID
                                            FROM {0} ) IT2
                                            ON IT.FID=IT2.FID
                                            WHEN MATCHED THEN
                                            UPDATE SET IT.FExtText= '扩展文本';", e.TableName);

            DBUtils.Execute(this.Context, sqlText);
        }
    }
}


3、添加注册新插件,原插件继续保留

image.webp


4、实现效果

image.webp




感谢大佬分享!

即时库存二开字段方案整理

系统的即时库存查询有2个入口,分为"即时库存"和"即时库存明细", 即时库存和即时库存明细的差别主要有: 1、即时库存会按照显示隐藏列进行...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息