Я воспроизвел проблему (см. Минимальный код и экран внизу).
Шаги для воспроизведения:
- запустите программу (-> отображается ALV)
- дважды щелкните по одной строке ALV (-> отображается экран 0100)
- нажмите F4 в поле экрана, определенном с помощью поиска (-> всплывающее окно 'ненормальная ситуация' вместо помощи поиска! )
Причина: статус активного графического интерфейса переназначает функциональную клавишу F4 классическим поведением функциональной клавиши вместо вызова справочной системы поиска и , как вы не делали 'Чтобы установить статус графического интерфейса на вашем экране, снова используется тот, что был на предыдущем экране.
Решение: определите свой собственный статус графического интерфейса и установите его в PBO экрана (и неКонечно, не переопределяйте F4!)
Правило большого пальца: всегда определяйте свои собственные кнопки и меню для каждого экрана (зачем отображать кнопки и меню с других экранов, которые не имеют смысла).
Минимальный код:
REPORT.
SELECT * FROM sflight INTO TABLE @DATA(flights).
" does a CALL SCREEN which does SET PF-STATUS 'STANDARD_FULLSCREEN' (in program SAPLKKBL)
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_user_command = 'USER_COMMAND'
i_structure_name = 'SFLIGHT'
TABLES
t_outtab = flights
EXCEPTIONS
OTHERS = 2.
FORM user_command
USING
r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
IF r_ucomm = '&IC1'.
CALL SCREEN 100.
ENDIF.
ENDFORM.
MODULE pbo OUTPUT.
" missing part !! ==> create GUI status 0100 and do SET PF-STATUS '0100'
ENDMODULE.
MODULE pai INPUT.
CASE sy-ucomm.
WHEN '&F03'.
SET SCREEN 0.
WHEN '&F4'.
" corresponds to F4 key inherited from ALV GUI status 'STANDARD_FULLSCREEN'
MESSAGE 'abnormal situation -> define your own GUI status !' TYPE 'I'.
ENDCASE.
ENDMODULE.
Экран 0100:
- Любое поле с помощью поиска (такое же, как и у вас)
Логика потока экрана 0100:
PROCESS BEFORE OUTPUT.
MODULE pbo.
PROCESS AFTER INPUT.
MODULE pai.