MRP清單的動態和靜態ABAP的取法

lyb_yt發表於2013-08-01

無意中發現有個程式用IMPORT mdtbx FROM DATABASE mdtc(arID mdkp-dtnum取MRP清單的時候,發現如果一個工廠對應多種MRP區域的時候,取不到另外MRP區域的資料,

但是用函式MD_STOCK_REQUIREMENTS_LIST_API可以取到,經深入分析得知這兩種取法的區別:

 

用語句IMPORT mdtbx FROM DATABASE mdtc(arID mdkp-dtnum取的是上一次MRP執行過後的結果,這個是靜態的結果(也就是事物碼MD05的結果)。

用函式MD_STOCK_REQUIREMENTS_LIST_API取得是實時的MRP的結果,這個是動態的結果(也就是事物碼MD04的結果),此種方法可以區別MRP區域,如果不輸入MRP區域

的話,就是預設為一個工廠所有MRP區域所有的結果,如果想取靜態的其他MRP區域的結果的話,可以使用下面的程式碼:

 

REPORT ZMRPTABLE.

TABLESMDKP,  "Header Data for MRP Document
        MDTB,  "MRP table
        MDTC,  "Aggregated MRP table items
        T457T"Description of MRP elements

DATABEGIN OF MDTBX OCCURS 0.
        INCLUDE STRUCTURE MDTB.
DATAEND   OF MDTBX.

SELECT-OPTIONSPLANT FOR MDKP-PLWRK OBLIGATORY,
                MATNR FOR MDKP-MATNR OBLIGATORY.
* 預設工廠和MRP區域一樣的情況
CLEARMDKPMDTB.
SELECT FROM MDKP WHERE DTART EQ 'MD'
                     AND MATNR IN MATNR
                     AND PLWRK IN PLANT.
    WRITE:/ MDKP-MATNRMDKP-PLWRK.
    IF MDKP-CFLAG EQ 'X'.
       CLEAR MDTBXREFRESH MDTBX.
       IMPORT MDTBX FROM DATABASE MDTC(ARID MDKP-DTNUM.
       LOOP AT MDTBX.
         MOVE MDTBX TO MDTB.

         SELECT SINGLE FROM T457T WHERE SPRAS 'E'
                                      AND DELKZ MDTB-DELKZ.

         IF MDTB-PLUMI '-'MULTIPLY MDTB-MNG01 BY -1ENDIF.

         WRITE:/ MDTB-DAT00T457T-DELB1MDTB-VSTAT,
                                          MDTB-MNG01MDTB-LGORT.
       ENDLOOP.
    ELSE.
       SELECT FROM MDTB
                     WHERE DTNUM EQ MDKP-DTNUM
                     ORDER BY PRIMARY KEY.
         SELECT SINGLE FROM T457T WHERE SPRAS 'E'
                                      AND DELKZ MDTB-DELKZ.

         IF MDTB-PLUMI '-'MULTIPLY MDTB-MNG01 BY -1ENDIF.

         WRITE:/ MDTB-DAT00T457T-DELB1MDTB-VSTAT,
                                          MDTB-MNG01MDTB-LGORT.
       ENDSELECT.
    ENDIF.
ENDSELECT.

* 預設工廠和MRP區域不一樣的情況

CLEARMDKPDBMDTB.
SELECT FROM MDKPDB WHERE DTART EQ 'MD'
                     AND MATNR IN MATNR
                     AND PLWRK IN PLANT.
    WRITE:MDKPDB-MATNRMDKPDB-PLWRK.
    IF MDKP-CFLAG EQ 'X'.
       CLEAR MDTBXREFRESH MDTBX.
       IMPORT MDTBX FROM DATABASE MDTC(ARID MDKPDB-DTNUM.
       LOOP AT MDTBX.
         MOVE MDTBX TO MDTB.

         SELECT SINGLE FROM T457T WHERE SPRAS 'E'
                                      AND DELKZ MDTB-DELKZ.

         IF MDTB-PLUMI '-'MULTIPLY MDTB-MNG01 BY -1ENDIF.

         WRITE:/ MDTB-DAT00T457T-DELB1MDTB-VSTAT,
                                          MDTB-MNG01MDTB-LGORT.
       ENDLOOP.
    ELSE.
       SELECT FROM MDTB
                     WHERE DTNUM EQ MDKPDB-DTNUM
                     ORDER BY PRIMARY KEY.
         SELECT SINGLE FROM T457T WHERE SPRAS 'E'
                                      AND DELKZ MDTB-DELKZ.

         IF MDTB-PLUMI '-'MULTIPLY MDTB-MNG01 BY -1ENDIF.

         WRITE:/ MDTB-DAT00T457T-DELB1MDTB-VSTAT,
                                          MDTB-MNG01MDTB-LGORT.
       ENDSELECT.
    ENDIF.
ENDSELECT.

 

相關文章