Один из простых способов выбрать последовательно материал — завод — склад, с учётом зависимости воспользоваться следующими ФМ:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | REPORT zre_test. PARAMETERS:   p_matnr TYPE matnr,       " Материал   p_werks TYPE werks,       " Завод   p_lgort TYPE mard-lgort.  " Склад AT SELECTION-SCREEN OUTPUT.   LOOP AT SCREEN.     IF screen-NAME = 'P_WERKS' AND p_matnr IS INITIAL.       screen-INPUT = '0'.       CLEAR p_werks.       MODIFY SCREEN.     ENDIF.     IF screen-NAME = 'P_LGORT' AND p_werks IS INITIAL.       screen-INPUT = '0'.       CLEAR p_lgort.       MODIFY SCREEN.     ENDIF.   ENDLOOP. AT SELECTION-SCREEN ON p_matnr.   SELECT SINGLE matnr INTO (p_matnr) FROM mara WHERE matnr = p_matnr.   IF sy-subrc NE 0.     p_matnr = ''.   ELSE.     LOOP AT SCREEN.       IF screen-NAME = 'P_WERKS'.         screen-INPUT = '1'.         MODIFY SCREEN.       ENDIF.     ENDLOOP.   ENDIF. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_werks.   CALL FUNCTION 'EINGABEWERTE_WERK'     EXPORTING       kzall         = ' '       kzbew_werk    = ' '       matnr         = p_matnr     IMPORTING       werks         = p_werks. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_lgort.   CALL FUNCTION 'EINGABEWERTE_LGORT'     EXPORTING       kzall         = ' '       matnr         = p_matnr       werks         = p_werks     IMPORTING       lagerort      = p_lgort       werks         = p_werks     EXCEPTIONS       ERROR_MESSAGE = 1. | 
Жалко что нельзя так написать, p_matnr TYPE matnr USER-COMMAND f, » Материал
Не удобно каждый раз enter нажимать.
Еще проще написать, как-то так:
p_matnr TYPE mdcl-matnr, » Материал
p_werks TYPE mdcl-werks, » Завод
p_lgort TYPE mdcl-lgpro. » Склад
Согласен, проще найти подходящую структуру, чем сейчас активно и пользуюсь 🙂