即时库存明细可用量排除弱预留计算二开案例

在【即时库存明细】查询中,涉及到库存量、可用量、预留量,以及各种单位:基本单位、主单位(库存单位)、库存辅单位,与之对应的数量有:
库存量(基本单位)、库存量(主单位)、库存量(库存辅单位)
可用量(基本单位)、可用量(主单位)、可用量(库存辅单位)
预留量(基本单位)、预留量(主单位)、可用量(库存辅单位)
| 数量&单位 | 基本单位 | 库存单位 | 库存辅单位 |
| 库存量 | 库存量(基本单位) | 库存量(库存单位) | 库存量(库存单位) |
| 可用量 | 可用量(基本单位) | 可用量(库存单位) | 可用量(库存单位) |
| 预留量 | 预留量(基本单位) | 预留量(库存单位) | 预留量(库存单位) |
结合即时库存表数据结构、插件处理逻辑以及单位和数量的一些关系需要理解:
1、即时库存表T_STK_INVENTORY,只有基本单位数量以及辅单位数量是能直接使用,其他单位数量以及可用量情况都需要经过单位换算、计算才能得到
2、即时库存中的预留量的计算,取数来源于预留表T_PLN_RESERVELINK、T_PLN_RESERVELINKENTRY,目前展示数据并未区分强预留和弱预留,即:可用量 = 库存量-强预留-弱预留
3、预留关系表头:T_PLN_RESERVELINK,字段FRESERVETYPE:1:弱预留 3:强预留
预留关系表体:T_PLN_RESERVELINKENTRY, 字段FSUPPLYFORMID: 供给类型

4、即时库存明细列表插件中,各单位数据的换算核心逻辑在BeforeGetDataForTempTableAccess方法,该方法中返回一个临时表,该表包含本次查询满足条件的
即时库存数据,以基本单位数量为基础,更新及换算该表的其他数量,最终展示到页面
当前的一个需求:即时库存明细中的可用量是否可以设置为 "库存量-强预留", 而不是"库存量-强预留-弱预留"?
通过对上述逻辑的理解,通过二开插件,重写取数和换算逻辑即可。
一、反编译标准插件的处理:


二、二开插件,核心逻辑
sql = '''MERGE INTO {0} IT
USING(SELECT T2.FID,SUM(ISNULL(TKE.FBASEQTY,0)) AS FBASELOCKQTY,SUM(ISNULL(TKE.FSECQTY,0)) AS FSECLOCKQTY
FROM T_PLN_RESERVELINKENTRY TKE INNER JOIN T_PLN_RESERVELINK TLKH ON TKE.FID = TLKH.FID RIGHT JOIN {0} T2
ON TKE.FSUPPLYINTERID = T2.FID AND TKE.FSUPPLYFORMID = 'STK_Inventory' AND TLKH.FRESERVETYPE = '3' AND TKE.FBASEQTY > 0
GROUP BY T2.FID) IT2
ON (IT.FID = IT2.FID)
WHEN MATCHED THEN
UPDATE SET
IT.FBASELOCKQTY = IT2.FBASELOCKQTY;'''.format(str(e.TableName))
DBUtils.Execute(this.View.Context, sql)
sql = '''UPDATE {0} SET FBASEAVBQTY = FBASEQTY - FBASELOCKQTY'''.format(str(e.TableName))
DBUtils.Execute(this.View.Context, sql)
# <type 'List[ColumnField]'>
selCols = this.ListModel.FilterParameter.ColumnInfo
secQty = selCols.Exists(lambda p: p.Key == "FSecQty") or selCols.Exists(lambda p: p.Key == "FSecLockQty") or selCols.Exists(lambda p: p.Key == "FSecAVBQty")
if secQty == True:
sql = '''UPDATE {0} SET FSECAVBQTY = FSECQTY - FSECLOCKQTY'''.format(str(e.TableName))
即时库存明细可用量排除弱预留计算二开案例
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



