本文讨论了即时库存的二开问题,整理了专家在社区中的相关说明和回复,包括即时库存查询汇总数据表(T_STK_INVSUMQUERY)和即时库存表(T_STK_INVENTORY)的结构及使用方法,以及BOS单据、预留产生类型等概念。同时,文章提供了多种二开处理方式和业务场景解决方案,如通过插件维护数据、增加字段、编写查询报表等,并指出了二开需遵守的规范及其对系统性能的影响。
关于即时库存二开的问题,专家老师在社区很多帖子做了相关说明及针对问题有回复,这里我根据自己的学习及碰到的问题,将相关的内容做了一个整理,后续如有新的知识和理解,将会持续更新!如有错误的地方,还请指正。
【概述】
1、T_STK_INVSUMQUERY: 即时库存查询汇总数据表,该表初始数据为空,在即时库存查询时由插件即时插入,Kingdee.K3.SCM.Stock.Business.PlugIn.InvSumQueryList
Kingdee.K3.SCM.ServiceHelper.StockServiceHelper.FillInvSumQueryData(this.Context, para);
2、T_STK_INVENTORY:即时库存表,系统在用的14个库存维度:组织、辅助属性、批号、货主类型、货主、保管者类型、保管者、仓库、仓位、库存状态、生产日期、有效期至、计划跟踪号、BOM版本
3、BOS
单据
即时库存(系统界面): STK_InventoryQuery
即时库存汇总数据查询: STK_InvSumQuery
即时库存(明细): STK_Inventory
即时库存明细(系统界面):STK_Inventory
库存锁库列表: STK_LockStock
动态表单
单据联查库存(查询库存操作): STK_InvJoinQuery
4、"预留产生类型" 包括:
手工锁库产生:代表销售订单执行锁库操作,或者即时库存明细执行锁库操作,产生的预留;
MRP运算产生:代表进行MRP计算产生的预留;
手工产生:代表销售订单执行预留操作产生的预留;
单据转换产生:代表源单下推下游单据时产生的预留。
【业务场景】
参考文章:即时库存查询自定义
https://vip.kingdee.com/article/37929
系统的即时库存查询和即时库存明细使用的分别是“即时库存汇总数据查询”和“即时库存”的单据列表,由于即时库存维度固定,且即时库存表的数据都是由库存更新服务后台维护,
所以在BOS设计器,仅支持现有字段的配置或者增加现有基础资料属性类的扩展,不支持其他类型的扩展,如果要增加实际物理字段,数据只能自行维护,则需要通过定时服务或者其他单据插件自行维护数据(不建议,会影响系统单据操作的库存更新性能),
如果二开能严格遵守规范(比如组件和字段命名等),补丁和升级不会影响二开扩展
二开处理方式:
1、增加实际物理字段,通过定时服务或者其他单据插件自行维护数据(不建议,会影响系统单据操作的库存更新性能)
2、只增加字段,在查询时通过列表插件维护查询结果的数据,可参考如下方法:
即时库存查询使用的是“即时库存汇总数据查询”单据的列表,需要派生标准的单据列表插件Kingdee.K3.SCM.Stock.Business.PlugIn.InvSumQueryList,重写PrePareFilterParameter事件,先调用父类中的标准方法,得到This.TransactionID,然后使用这个ID值作为条件,根据业务需要操作t_stk_invsumquery表中当次查询事务的结果数据
即时库存明细使用的是“即时库存”单据的列表,该单据列表采用临时表模式,需要派生BOS列表插件抽象类AbstractListPlugIn,重写BeforeGetDataForTempTableAccess方法,该方法的参数e.TableName是当次查询结果存储的临时表名,可以在这里对临时表中的数据进行再加工
如果自定义字段的结果需要经过很复杂业务要求,计算过程非常耗时,建议还是通过自定义查询报表来实现,否则可能引起库存查询性能问题
1、业务场景:在物料上增加文本字段命名为货号,由新增物料人员填写,现需要把该字段在即时库存中显示,所以在即时库存中增加基础资料属性字段取物料上的货号字段,在查询即时库存的时候也能看到改货号,在即时库存中已货号搜索的时候报错
说明:在“即时库存汇总数据查询”单据里面也要加上这个字段
2、业务场景:在即时库存里面加了一个字段 安全库存,然后我想再加一个字段,这个字段=库存量-安全库存,该如何处理?
说明:即时库存查询自定义: https://vip.kingdee.com/article/37929
3、业务场景:在物料里面新增一个整数字段“货架期”,并且在即时库存及即时库存汇总表里面也引用了这个基础资料辅助属性,
另外在即时库存和即时库存汇总表里面又增加了一个“货架日期”字段,希望实现的效果是在即时库存里面 货架日期 = 生产日期+货架期
说明: 单据列表不支持查询时计算,所以只能把计算结果保存到数据表中,
要么就要编写即时库存单据的列表插件,在FormatCell中自己完成新加字段的数据计算,这样可能对性能影响会比较大
4、业务场景:即时库存表,新增的字段不能进行过滤
问题来源:https://vip.kingdee.com/article/18420
说明:BOS里除了这个即时库存汇总数据单据,即时库存单据也要加上这个基础资料属性字段,标识保持一致
5、业务场景:即时库存增加采购单位、采购单位数量解决方案
参考文章: https://vip.kingdee.com/article/1449
操作步骤
扩展即时库存单据,增加采购单位,采购单位数量,销售单位,销售单位数量字段。
编写即时库存单据列表插件并注册。
重写列表插件BeforeGetDataForTempTableAccess方法,从e.TableName获得BOS查询结果存放的临时表名,
执行脚本,为该临时表中的采购单位,销售单字段赋值,并根据基本单位数量计算出对应单位数量更新到采购单位数量和销售单位数量中。
可反编译即时库存单据标准列表组件,参考标准产品更新库存单位数量和锁库量可用量等字段的代码。
6、业务场景:在即时库存(T_STK_INVENTORY)里新增了一个文本字段做测试,也在即时库存汇总数据查询(T_STK_INVSUMQUERY)里新增了一个一样的文本字段,为什么即时库存(T_STK_INVENTORY)里的数据不会自动更新到即时库存汇总数据查询(T_STK_INVSUMQUERY)表里?我打开即时库存查看,新增的字段依然是空白,实际上我已经T_STK_INVENTORY表里的字段都update,有数据了
说明: 这个标准产品不会处理同步,只能使用即时库存明细查看
【社区文章】
2、即时库存如何通过二开方式添加新字段?【官方知识】
推荐阅读