Тут наткнулся случайно, у себя не использую (так как специфичная кодировка ЗО), а так думаю можно использовать.....
CALL FUNCTION 'ME_SELECT_EKORG_FOR_PLANT'
EXPORTING
i_werks = werks
i_pipel = x_pipel
i_konsi = x_konsi
IMPORTING
e_ekorg = ekorg
EXCEPTIONS
no_entry_found = 1
no_default_found = 2.
Параметры думаю понятны даже из названия,
правда есть еще I_UMLAG, судя по всему для "Обработка ДавальчМтр"....
Попытался тут понять как же она работает, был хмм .... слегка озадачен ....
Считывается табличка T024W - Допустимые закупочные организации для завода,
FORM lesen_t024w.
IF t024w_gelesen EQ space.
SELECT * FROM t024w INTO TABLE tt024w WHERE werks NE space.
IF sy-subrc IS INITIAL.
* faster for small tables (otherwise select ordered by, note 200821)
SORT tt024w BY werks ekorg.
ENDIF.
t024w_gelesen = 'X'.
ENDIF.
ENDFORM.
Интересная подсказка "faster for small tables (otherwise select ordered by, note 200821)", посмотрю ноту.
и потом цикл .... вообще не понятный .....
Кароче весь код приведу, может кто растолкует сию немецкую мудрость ....
FUNCTION me_select_ekorg_for_plant.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(I_WERKS) LIKE T001W-WERKS
*" VALUE(I_PIPEL) OPTIONAL
*" VALUE(I_UMLAG) OPTIONAL
*" VALUE(I_KONSI) OPTIONAL
*" VALUE(I_STANDARD) OPTIONAL
*" EXPORTING
*" VALUE(E_EKORG) LIKE T024E-EKORG
*" EXCEPTIONS
*" MORE_THAN_ONE_ORGANIZATION
*" NO_ENTRY_FOUND
*" NO_DEFAULT_FOUND
*"----------------------------------------------------------------------
CLEAR: e_ekorg.
DATA: i_index LIKE sy-index,
l_tabix LIKE sy-tabix. "200821
PERFORM lesen_t024w.
*LOOP AT TT024W WHERE WERKS EQ I_WERKS.
* E_EKORG = TT024W-EKORG.
* I_INDEX = I_INDEX + 1.
*ENDLOOP.
*tt024w is sorted by werks (note 200821)
READ TABLE tt024w WITH KEY werks = i_werks
BINARY SEARCH.
IF sy-subrc IS INITIAL.
l_tabix = sy-tabix.
e_ekorg = tt024w-ekorg.
i_index = 1.
DO.
l_tabix = l_tabix + 1.
READ TABLE tt024w INDEX l_tabix.
IF NOT sy-subrc IS INITIAL OR
tt024w-werks NE i_werks.
EXIT. "from do
ENDIF.
e_ekorg = tt024w-ekorg.
i_index = i_index + 1.
ENDDO.
ELSE.
i_index = 0.
ENDIF.
CASE i_index.
WHEN 0.
RAISE no_entry_found.
WHEN 1.
EXIT. "ok
WHEN OTHERS.
IF i_pipel EQ space AND i_umlag EQ space AND i_konsi EQ space AND
i_standard EQ space.
RAISE more_than_one_organization.
EXIT.
ENDIF.
* bei Pipeline, Umlagerung, Konsi und auf Wunsch
* --> Default aus T001W
IF t001w-werks NE i_werks.
SELECT SINGLE * FROM t001w WHERE werks EQ i_werks.
ENDIF.
IF t001w-ekorg NE space.
e_ekorg = t001w-ekorg.
ELSE.
RAISE no_default_found.
ENDIF.
ENDCASE.
ENDFUNCTION.