Возникают задачи, когда по определенному событию требуется скрыть или отобразить определенные блоки параметров на селекционном экране. Например, при нажатии на Check-Box или Radio-Button требуется отобразить фреймы с дополнительной информацией. Ниже описан способ как можно проводить манипуляции с целыми блоками без привязки к именам параметров.
Пример ниже демонстрирует возможность манипуляции над фреймами селекционного экрана. Важным моментом является указание FRAME TITLE определяемых блоков.
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 55 56 57 58 59 |
REPORT z_screen_options. TABLES: mseg, bkpf. SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME TITLE text-top. PARAMETERS f_mm TYPE flag RADIOBUTTON GROUP gr0 USER-COMMAND mode. PARAMETERS f_fi TYPE flag RADIOBUTTON GROUP gr0 DEFAULT 'X'. PARAMETERS f_no TYPE flag RADIOBUTTON GROUP gr0. SELECTION-SCREEN END OF BLOCK main. SELECTION-SCREEN BEGIN OF BLOCK frame_mseg WITH FRAME TITLE text-zmm. PARAMETERS p_mblnr TYPE mseg-mblnr. PARAMETERS p_mjahr TYPE mseg-mjahr. PARAMETERS p_matnr TYPE mseg-matnr. PARAMETERS p_werks TYPE mseg-werks. PARAMETERS p_lgort TYPE mseg-lgort. PARAMETERS p_charg TYPE mseg-charg. SELECTION-SCREEN END OF BLOCK frame_mseg. SELECTION-SCREEN BEGIN OF BLOCK frame_bkpf WITH FRAME TITLE text-zfi. SELECT-OPTIONS s_bukrs FOR bkpf-bukrs. SELECT-OPTIONS s_belnr FOR bkpf-belnr. SELECT-OPTIONS s_gjahr FOR bkpf-gjahr. SELECT-OPTIONS s_budat FOR bkpf-budat. SELECTION-SCREEN END OF BLOCK frame_bkpf. SELECTION-SCREEN BEGIN OF BLOCK frame_alv WITH FRAME TITLE text-alv. PARAMETERS p_format TYPE disvariant-variant. SELECTION-SCREEN END OF BLOCK frame_alv. AT SELECTION-SCREEN OUTPUT. PERFORM pbo. FORM pbo. DATA lv_block_visible TYPE string. DATA lv_block_current TYPE string. " Для каждого режима настраиваем отображаемые блоки CASE abap_true. WHEN f_mm. lv_block_visible = 'TOP ZMM ALV'. WHEN f_fi. lv_block_visible = 'TOP ZFI ALV'. WHEN f_no. lv_block_visible = 'TOP'. ENDCASE. LOOP AT SCREEN. IF screen-group3 = 'BLK'. lv_block_current = screen-name+2(3). ENDIF. IF lv_block_visible CS lv_block_current. screen-active = 1. ELSE. screen-active = 0. ENDIF. MODIFY SCREEN. ENDLOOP. ENDFORM. |
Результат работы программы с разными режимами отображения
Параметрам в блоке назначается MODIF ID
в loop at screen проверяется что screen-group1 равен/не равен указанному modif id
если нужно скрыть — screen-active = 0 . modify screen
если все поля в блоке скрыты — весь блок срывается
frame не нужен
Иногда удобнее скрыть весь фрейм с параметрами.