Можно вот так..
Code:
PARAMETERS: fname_1(100) modif id LCK.
PARAMETERS: fname_2(100) modif id LCK.
PARAMETERS: fname_3(100) modif id LCK.
DATA: fname(1024).
DATA: gt_fname type FILETABLE with header line.
data: rc type i.
at selection-screen output.
loop at screen.
if screen-group1 = 'LCK'.
screen-input = 0.
modify screen.
endif.
endloop.
at selection-screen on value-request for fname_1.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
CHANGING
file_table = gt_fname[]
rc = rc
.
read table gt_fname index 1.
if sy-subrc = 0.
fname = gt_fname.
fname_1 = fname(100).
fname_2 = fname+100(100).
fname_3 = fname+200(100).
endif.
data: dynpfields type table of DYNPREAD with header line.
dynpfields-FIELDNAME = 'FNAME_1'.
dynpfields-FIELDVALUE = FNAME_1.
append dynpfields.
dynpfields-FIELDNAME = 'FNAME_2'.
dynpfields-FIELDVALUE = FNAME_2.
append dynpfields.
dynpfields-FIELDNAME = 'FNAME_3'.
dynpfields-FIELDVALUE = FNAME_3.
append dynpfields.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = sy-cprog
dynumb = sy-dynnr
tables
dynpfields = dynpfields.
START-OF-SELECTION.
write fname.
Для FILE_OPEN_DIALOG имя может быть 1024 знака.
Если брать имя директории, то DIRECTORY_BROWSE, там уже STRING..