1. 程式人生 > >關於SAP 資訊記錄失效的排除

關於SAP 資訊記錄失效的排除

今天接到一個需求,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.
"---------------資訊記錄過期排除----------------------