MRP清单的动态和静态ABAP的取法

来源:互联网 发布:煤炭进出口数据 编辑:程序博客网 时间:2024/05/12 16:45

无意中发现有个程序用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.

0 0