今天接到一个需求,MM模块对物料进行处理的时候,需要考虑物料的信息记录是否有效。
业务顾问给我提了个需求:
问题:ZPPR0001_NEW寄售转自有时存在多供应商库存时,先消耗库存少的供应商库存。当该供应商物料寄售信息记录失效时,系统仍对其进行寄售转自有。
现更改逻辑为:抓取寄售库存时,排除信息记录失效的供应商库存。
满足以下任一条件则判断信息记录为失效,需排除:
1. 通过供应商、物料关联EINA-LIFNR、EINA-MATNR,EINA-LOEKZ为“X”。
2. 通过EINA-INFNR关联EINE-INFNR且EINE-WERKS为“1000”、EINE-ESOKZ为“2”,EINE-LOEKZ为“X”。
3. 通过供应商、物料、工厂、信息类别2关联A017-LIFNR、A017-MATNR、A017-WERKS、A017-ESOKZ,当前日期不在有效期间(有效从A017-DATAB,有效到A017-DATBI)内。
4. 通过A017-KNUMH关联KONP-KNUMH,KONP-LOEVM_KO为“X”或者KONP-KBETR为“0”。
然后我开始回忆思考SAP中信息记录相关的东东,原来用过,但是又忘记,于是我画了一个信息记录的表关联关系,放到我的笔记里面,还准备整理一下其它业务关系。
这个关关系图和网上资料的一副关系图有出入,原图应该搞错了。
然后我使用ABAP实现需求里的东东,当我把代码写完后,突然想到,好像有BAPI可以检查信息记录,于是赶紧找了一下。
BAPI_INFORECORD_GETLIST
这个BAPI经我和MM业务顾问测试,可以用来检查信息记录是否完整:
1. 如果没有信息记录,BAPI返回0条记录.
2. 如果信息记录中的价格有效期失效,BAPI返回的记录里面,价格是0.
那么,还是用BAPI优先吧
"---------------信息记录过期排除----------------------
DATA GT_PURCHORG LIKE TABLE OF BAPIEINE WITH HEADER LINE.
DATA GS_PURCHORG LIKE BAPIEINE .
LOOP AT T_MKOL.
"物料号补零
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
INPUT = T_MKOL-MATNR
IMPORTING
OUTPUT = T_MKOL-MATNR.
"供应商补0
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = T_MKOL-LIFNR
IMPORTING
OUTPUT = T_MKOL-LIFNR.
CALL FUNCTION 'BAPI_INFORECORD_GETLIST'
EXPORTING
VENDOR = T_MKOL-LIFNR
MATERIAL = T_MKOL-MATNR
PURCH_ORG = '1000'
INFO_TYPE = '2'
PLANT = T_MKOL-WERKS
PURCHORG_DATA = 'X'
TABLES
INFORECORD_PURCHORG = GT_PURCHORG.
IF GT_PURCHORG IS INITIAL.
DELETE T_MKOL FROM T_MKOL.
ELSE.
READ TABLE GT_PURCHORG INDEX 0 INTO GS_PURCHORG .
IF GS_PURCHORG-NET_PRICE = 0.
DELETE T_MKOL FROM T_MKOL.
ENDIF.
ENDIF.
ENDLOOP.
"---------------信息记录过期排除----------------------
SAP MM物料寄售转自有逻辑优化
针对SAP MM模块中物料寄售转自有处理逻辑存在的问题,本文介绍了一种新的处理策略,即在处理过程中排除信息记录已失效的供应商库存。文章详细解释了判断信息记录是否失效的标准,并提供了ABAP代码实现方案。
149

被折叠的 条评论
为什么被折叠?



