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.
Единственное предупреждение - будте внимательны к производительности.