关于通过MD04获取实时非限制性库存

T-code:MD04

相关函数:MD_STOCK_REQUIREMENTS_LIST_API

其他相关函数:BAPI_MATERIAL_AVAILABILITY

(关于MD04的详解可参考文章:https://www.jianshu.com/p/66e704bea8a5

业务场景:生成STO提示批次库存不足等

关于MD04的一些浅见:

1)查询结果:

测试样例:工厂:9050 物料编码:318
结果如下:

MD04结果截图

由截图结果可以看到,该处的可用数量为9050工厂下所有库位的数量,往往实际业务需求过程中需要从特定的库位出入库
再者,行项目细节的MRP元素数据的来源单据是目前仍需交货完成单据(一般自动过账时,来源订单数量与过账数量一致,细单行会自动交货完成)。仍需交货完成单据存在以下情况:
1.正常单据已完成过账,但数量不达到来源单据需求数量;
2.正常单据但未完成过账,此情况下一般为待处理单据或待过账单据;
3.正常单据但物流配货失败,此情况单据需要批量作废或做交货完成处理;
4.其他业务待处理等(此情况因业务不同处理方式不同)

2)函数MD_STOCK_REQUIREMENTS_LIST_API的使用
DATA S_MDPS LIKE MDPS OCCURS 0 WITH HEADER LINE.
DATA S_MDEZ LIKE MDEZ OCCURS 0 WITH HEADER LINE.
DATA S_MDSU LIKE MDSU OCCURS 0 WITH HEADER LINE.

REFRESH: S_MDPS,S_MDEZ,S_MDSU.
CLEAR: S_MDPS,S_MDEZ,S_MDSU,FIRST,LABST,OTHERS.
CALL FUNCTION 'MD_STOCK_REQUIREMENTS_LIST_API'
EXPORTING
MATNR = COM_TAB-IDNRK
WERKS = COM_TAB-WERKS
* AFIBZ = 'ZSAP_ALL'
TABLES
MDPSX = S_MDPS
MDEZX = S_MDEZ
MDSUX = S_MDSU
EXCEPTIONS
MATERIAL_PLANT_NOT_FOUND = 1
PLANT_NOT_FOUND = 2
OTHERS = 3.

函数测试结果截图(仅供参考):

函数结果

主要关注最下面红框非0条目的内表,其实也是将MD04的结果内表化显示。
内表 MDPSX为库存数量的出入库(通过正负数)显示:
内表MDPSX数据

内表MDEZX为MD04显示的行项目细节
内表MDEZX数据

内表MDSUX记录库存数量动态变化的过程与及库存的记录
内表MDSUX数据

至此,库存数量仍旧是包含了所有库位的数量。

3)BAPI函数BAPI_MATERIAL_AVAILABILITY的使用

(关于该bapi使用可参考文章:https://www.jianshu.com/p/dd5c11be8b02
该函数可以按照特定的库位进行统计非限制性库存

测试参数

函数测试结果:
测试结果

内表WMDVEX是1000库位对应的非限制性库存
内表WMDVEX数据

注:此处并不是最终的非限制性可用库存

4)最终的非限制性可用库存计算

非限制性可用库存应该是该BAPI函数的WMDVEX-COM_QTY的数量减去MD04中行项目单据中的正常单据但未过账的来源单据数量

前提条件非正常单据或正常已过账单据但订单数量与最终过账数量不一致的单据需要做交货完成处理