Зайдем издалека, в общем, требуется написать отчет, небольшой, но на селекционном экране возможны два варианты работы и соответственно, нужно предусмотреть выбор варианта загрузки данных из файла, как в первом случае, так и во втором. Варианты как это можно сделать есть несколько, но саамы распространенный, как обычно я и делал это объявляем что-то типа две радио-кнопки или два подэкрана, где размещаем необходимые поля ввода, при этом так как и в первом и втором случае требуется ввести возможность указания имени файла, то заводились две переменные. В общем виде это рисовалось например так:
PARAMETERS p_one RADIOBUTTON GROUP g01 DEFAULT 'X'.
PARAMETERS: p_file1 LIKE rlgrap-filename DEFAULT '*.XLS'.
SELECTION-SCREEN SKIP 1.
PARAMETERS p_two RADIOBUTTON GROUP g01.
PARAMETERS: p_file2 LIKE rlgrap-filename DEFAULT '*.XLS'.
Примечание: В один момент времени, работать надо только с одним файлом, в зависимости от выбранного режима запуска программы, т.е. две переменные под имена файлов в общем виде как бы и не нужны.
Выглядит это как на рисунке SEL-1.png. Как видим, объявлены две переменные под ввод имен файлов. Обойтись одной в принципе можно, но это как-то будет не очень наглядно, особенно если поля ввода разместить на разных подэкранах/закладках, например:
*----------------------------------------------------------------------*
* Объявим первый подэкран для данных номер раз
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF SCREEN 0011 AS SUBSCREEN NO INTERVALS.
PARAMETERS p_one AS CHECKBOX DEFAULT 'X'.
PARAMETERS: p_file1 LIKE rlgrap-filename DEFAULT '*.XLS'.
SELECTION-SCREEN END OF SCREEN 0011.
*----------------------------------------------------------------------*
* Объявим второй подэкран для данных номер два
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF SCREEN 0012 AS SUBSCREEN NO INTERVALS.
PARAMETERS p_two AS CHECKBOX.
PARAMETERS: p_file2 LIKE rlgrap-filename DEFAULT '*.XLS'.
SELECTION-SCREEN END OF SCREEN 0012.
*----------------------------------------------------------------------*
* Выведем два подэкрана в виде картотеки
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF TABBED BLOCK tabbl FOR 26 LINES.
SELECTION-SCREEN TAB (14) text-001
USER-COMMAND tab1
DEFAULT SCREEN 0011.
SELECTION-SCREEN TAB (14) text-002
USER-COMMAND tab2
DEFAULT SCREEN 0012.
SELECTION-SCREEN END OF BLOCK tabbl.
Пример что получилось на рисунке SEL-2-png, уже более солидный вид, но переменных под имена файлов также две и они разные, а это значит, что и обработку диалога выбора файла надо написать под каждую из таких переменных в блоке AT SELECTION-SCREEN ON VALUE-REQUEST FOR <имя переменной>.
Но, оказывается если почитать справку вдумчиво ну или посмотреть на некоторые стандартные отчеты системы, то все можно сделать, используя одну переменную. Так сказать более элегантное решение:
*----------------------------------------------------------------------*
* Объявим блок содержащий запрос имени файла. Номер экрана используем
* не реальный, тут нам просто надо объявить перменную для работы с
* именем файла.
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF SCREEN 9999 AS SUBSCREEN NO INTERVALS.
SELECTION-SCREEN BEGIN OF BLOCK blk_file WITH FRAME TITLE text-fle.
PARAMETERS: p_file LIKE rlgrap-filename
DEFAULT '*.XLS'.
SELECTION-SCREEN END OF BLOCK blk_file.
SELECTION-SCREEN END OF SCREEN 9999.
*----------------------------------------------------------------------*
* Объявим первый подэкран 0011 и включим в него объявленный ранее блок
* содержащий имя файла с именем BLK_FILE
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF SCREEN 0011 AS SUBSCREEN NO INTERVALS.
PARAMETERS p_one TYPE xfeld DEFAULT space.
SELECTION-SCREEN INCLUDE BLOCKS blk_file. "File
SELECTION-SCREEN END OF SCREEN 0011.
*----------------------------------------------------------------------*
* Объявим второй подэкран 0012 и включим в него также объявленный ранее
* блок содержащий имя файла с именем BLK_FILE
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF SCREEN 0012 AS SUBSCREEN NO INTERVALS.
PARAMETERS p_two TYPE xfeld DEFAULT space.
SELECTION-SCREEN INCLUDE BLOCKS blk_file. "File
SELECTION-SCREEN END OF SCREEN 0012.
*----------------------------------------------------------------------*
* Тперь объявим наши подэкраны на закладках. Конфликта в переменных
* для имени файла нет
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF TABBED BLOCK tabbl FOR 26 LINES.
SELECTION-SCREEN TAB (14) text-001
USER-COMMAND tab1
DEFAULT SCREEN 0011.
SELECTION-SCREEN TAB (14) text-002
USER-COMMAND tab2
DEFAULT SCREEN 0012.
SELECTION-SCREEN END OF BLOCK tabbl.
Комментарии по вызовам в тексте программы. Результат работы такой же, как и на рисунке SEL-2.png, но переменная для ввода имени файла используется в этом случае одна и соответственно обработку ввода нужно делать только один раз. Недостаток только тот, что на обеих закладках имя файла будет одинаковым, так как это одна и та же переменная. Как по мне, то довольно удобное решение, если это сложный отчет, в котором запрашивается куча данных для работы, при этом часть зпрошенных данных пересекается по параметрам.