1) в логике экрана добавляешь событие
Code:
PROCESS ON VALUE-REQUEST.
FIELD поле MODULE модуль.
2) в модуле зовешь фм
Code:
data: return_tab LIKE ddshretval OCCURS 100 WITH HEADER LINE.
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
EXPORTING
tabname = имя_таблицы
fieldname = имя_поля_таблицы
searchhelp = имя_СХ_которое надо позвать
shlpparam = имя_параметра_СХ_ который_надо_вернуть
dynpprog = sy-cprog
dynpnr = sy-dynnr
dynprofield = поле_экрана_куда_вернуть
display = ' ' "признак СХ только для чтения или нет
TABLES
return_tab = return_tab
EXCEPTIONS
field_not_found = 1
no_help_for_field = 2
inconsistent_help = 3
no_values_found = 4
OTHERS = 5.
IF sy-subrc = 0.
READ TABLE return_tab INDEX 1.
IF sy-subrc = 0.
WRITE return_tab-fieldval TO поле_куда_надо_значение.
ENDIF.
ELSE.
MESSAGE e000 WITH 'Сбой'.
ENDIF.
3) тут вроде бы не надо принудительно на экран выставлять значение. но на всяк. пожарный обновить поля экрана :
Code:
DATA: it_fields LIKE dynpread OCCURS 100 WITH HEADER LINE.
it_fields-fieldname = имя_поля_на_экране.
it_fields-fieldvalue = значение_поля.
APPEND it_dynpfields.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = sy-cprog
dynumb = sy-dynnr
TABLES
dynpfields = it_fields
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
undefind_error = 7
OTHERS = 8.
[/code]