MRP清单的动态和静态ABAP的取法
無意中發現有個程序用IMPORT?mdtbx?FROM?DATABASE?mdtc(ar)?ID?mdkp-dtnum取MRP清單的時候,發現如果一個工廠對應多種MRP區域的時候,取不到另外MRP區域的數據,
但是用函數MD_STOCK_REQUIREMENTS_LIST_API可以取到,經深入分析得知這兩種取法的區別:
?
用語句IMPORT?mdtbx?FROM?DATABASE?mdtc(ar)?ID?mdkp-dtnum取的是上一次MRP運行過后的結果,這個是靜態的結果(也就是事物碼MD05的結果)。
用函數MD_STOCK_REQUIREMENTS_LIST_API取得是實時的MRP的結果,這個是動態的結果(也就是事物碼MD04的結果),此種方法可以區別MRP區域,如果不輸入MRP區域
的話,就是默認為一個工廠所有MRP區域所有的結果,如果想取靜態的其他MRP區域的結果的話,可以使用下面的代碼:
?
REPORT?ZMRPTABLE.
TABLES:?MDKP,??"Header?Data?for?MRP?Document
????????MDTB,??"MRP?table
????????MDTC,??"Aggregated?MRP?table?items
????????T457T.?"Description?of?MRP?elements
DATA:?BEGIN?OF?MDTBX?OCCURS?0.
????????INCLUDE?STRUCTURE?MDTB.
DATA:?END???OF?MDTBX.
SELECT-OPTIONS:?PLANT?FOR?MDKP-PLWRK?OBLIGATORY,
????????????????MATNR?FOR?MDKP-MATNR?OBLIGATORY.
* 默認工廠和MRP區域一樣的情況
CLEAR:?MDKP,?MDTB.
SELECT?*?FROM?MDKP?WHERE?DTART?EQ?'MD'
?????????????????????AND?MATNR?IN?MATNR
?????????????????????AND?PLWRK?IN?PLANT.
????WRITE:/?MDKP-MATNR,?MDKP-PLWRK.
????IF?MDKP-CFLAG?EQ?'X'.
???????CLEAR?MDTBX.?REFRESH?MDTBX.
???????IMPORT?MDTBX?FROM?DATABASE?MDTC(AR)?ID?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?-1.?ENDIF.
?????????WRITE:/?MDTB-DAT00,?T457T-DELB1,?MDTB-VSTAT,
??????????????????????????????????????????MDTB-MNG01,?MDTB-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?-1.?ENDIF.
?????????WRITE:/?MDTB-DAT00,?T457T-DELB1,?MDTB-VSTAT,
??????????????????????????????????????????MDTB-MNG01,?MDTB-LGORT.
???????ENDSELECT.
????ENDIF.
ENDSELECT.
* 默認工廠和MRP區域不一樣的情況
CLEAR:?MDKPDB,?MDTB.
SELECT?*?FROM?MDKPDB?WHERE?DTART?EQ?'MD'
?????????????????????AND?MATNR?IN?MATNR
?????????????????????AND?PLWRK?IN?PLANT.
????WRITE:/?MDKPDB-MATNR,?MDKPDB-PLWRK.
????IF?MDKP-CFLAG?EQ?'X'.
???????CLEAR?MDTBX.?REFRESH?MDTBX.
???????IMPORT?MDTBX?FROM?DATABASE?MDTC(AR)?ID?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?-1.?ENDIF.
?????????WRITE:/?MDTB-DAT00,?T457T-DELB1,?MDTB-VSTAT,
??????????????????????????????????????????MDTB-MNG01,?MDTB-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?-1.?ENDIF.
?????????WRITE:/?MDTB-DAT00,?T457T-DELB1,?MDTB-VSTAT,
??????????????????????????????????????????MDTB-MNG01,?MDTB-LGORT.
???????ENDSELECT.
????ENDIF.
ENDSELECT.
總結
以上是生活随笔為你收集整理的MRP清单的动态和静态ABAP的取法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP实施项目中顾问与客户的有效沟通
- 下一篇: ABAP程序系统字段中英文详解