VadSel написал(а):
Так ведь этот экзит срабатывает только при "ручном" присвоении источника поставки. А при прогоне ППМ нет.
BADI MD_PURREQ_CHANGE
Метод CHANGE_BEFORE_SAVE_MRP
У меня ситуация была такой:
Необходимо было перемещать товар с другого завода, соотвественно в КИП было заведено две записи, поставщик завод и внешний поставщик, использовалось так же квотирование для опеределения максимального заказа с завода, так вот, если на заводе было не доступно количество, а так же все превышаюшее количество максимального заказа размещались у внешнего поставщика путем подмены источника поставки в создаваемой заявке.
Для чего написал, для того, чтобы описать возможность бади и плюс возможно кому пригодиться
Надесюь Вам тоже.
Code:
*tables T441W.
TYPE-POOLS v03v.
*--------------------------------------
data: W_USEQU,
* W_PLNMG type PLNMG,
lt_wmdvsx type table of BAPIWMDVS initial size 1,
lt_wmdvex type table of BAPIWMDVE initial size 0,
ws_wmdvex TYPE BAPIWMDVE.
* lt_avbbd type table of bv03v,
* lt_xmverf_pos TYPE v03v_xmverf_pos,
* w_lt_xmverf_pos TYPE V03V_MVERF_POS.
select single USEQU from marc into (W_USEQU) where MATNR = CH_EBAN-MATNR and werks = CH_EBAN-WERKS.
if IM_VSTAT = 'H'.
if W_USEQU ne '' and CH_EBAN-BSART eq 'UB'.
* select single PLNMG from PBIM AS a
* inner join PBED AS b
* on b~BDZEI = a~BDZEI
* into (W_PLNMG)
* where a~MATNR = CH_EBAN-MATNR and a~WERKS = CH_EBAN-WERKS and a~VERSB = '00' and
* b~PDATU between CH_EBAN-FRGDT and CH_EBAN-LFDAT.
* if CH_EBAN-LFDAT >= sy-datum.
DATA: INDXKEY type INDX-SRTFD VALUE 'MENGEVALUE',
WA_INDX TYPE INDX,
menge type BAMNG.
* if CH_EBAN-LFDAT >= sy-datum and CH_EBAN-FRGDT < sy-datum.
* WA_INDX-AEDAT = SY-DATUM.
* WA_INDX-USERA = SY-UNAME.
* EXPORT MENGE FROM CH_EBAN-MENGE TO SHARED BUFFER INDX(ST) FROM WA_INDX ID INDXKEY.
* menge = CH_EBAN-MENGE.
* else.
IMPORT MENGE TO menge FROM SHARED BUFFER INDX(ST) ID INDXKEY TO WA_INDX.
add CH_EBAN-MENGE to menge.
clear WA_INDX.
WA_INDX-AEDAT = SY-DATUM.
WA_INDX-USERA = SY-UNAME.
EXPORT MENGE FROM menge TO SHARED BUFFER INDX(ST) FROM WA_INDX ID INDXKEY.
* endif.
CALL FUNCTION 'BAPI_MATERIAL_AVAILABILITY'
EXPORTING
plant = CH_EBAN-RESWK
material = CH_EBAN-MATNR
unit = CH_EBAN-MEINS
STGE_LOC = '1000'
check_rule = 'A'
* stge_loc = mverf_pos-lgort
TABLES
wmdvsx = lt_wmdvsx
wmdvex = lt_wmdvex.
READ TABLE lt_wmdvex INDEX 1 INTO ws_wmdvex.
IF ws_wmdvex-com_qty < menge. " CH_EBAN-MENGE. "
data: W_QUPOS type QUPOS,
W_QUPOS_MIN type QUPOS,
W_LIFNR type ELIFN,
W_LIFNR_MIN type ELIFN,
id type i.
id = 1.
select QUPOS LIFNR from equp into (W_QUPOS, W_LIFNR)
where QUNUM = CH_EBAN-QUNUM and QUPOS > CH_EBAN-QUPOS.
if id = 1.
W_QUPOS_MIN = W_QUPOS.
W_LIFNR_MIN = W_LIFNR.
add 1 to id.
else.
if W_QUPOS_MIN > W_QUPOS.
W_QUPOS_MIN = W_QUPOS.
W_LIFNR_MIN = W_LIFNR.
endif.
endif.
endselect.
if sy-subrc = 0.
CH_EBAN-QUPOS = W_QUPOS_MIN.
CH_EBAN-FLIEF = W_LIFNR_MIN.
CH_EBAN-BSART = 'NB'.
clear CH_EBAN-RESWK.
CH_CHANGED = 'X'.
endif.
endif.
* endif.
endif.
else.
clear WA_INDX.
WA_INDX-AEDAT = SY-DATUM.
WA_INDX-USERA = SY-UNAME.
menge = 0.
EXPORT MENGE FROM menge TO SHARED BUFFER INDX(ST) FROM WA_INDX ID INDXKEY.
endif.
endmethod.
Единственное предупреждение - будте внимательны к производительности.