關於SAP 資訊記錄失效的排除
阿新 • • 發佈:2019-01-09
今天接到一個需求,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. "---------------資訊記錄過期排除----------------------