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

2021-06-17 17:38:33 字數 3321 閱讀 3916

無意中發現有個程式用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的取法

無意中發現有個程式用import mdtbx from database mdtc ar id mdkp dtnum取mrp清單的時候,發現如果乙個工廠對應多種mrp區域的時候,取不到另外mrp區域的資料,但是用函式md stock requirements list api可以取到,經深入分析得知...

陣列的動態和靜態定義

public static void main string args 2 指的是下標位第2 位,值是7,下標從0 開始 system.out.println arr3 2 system.out.println arr3.length 4 陣列的靜態定義 intarr4 new int 這種方式 不...

動態include和靜態include的區別

動態include和靜態include的區別 1 動態include 它總是會檢查所含檔案中的變化 適合用於包含動態頁面 並且可以帶引數。各個檔案分別先編譯,然後組合成乙個檔案。2 靜態include include file included.htm 不會檢查所含檔案的變化,適用於包含靜態頁面。先...