SELECTION-SCREEN - Селекционные экраны отчетов

Автор Uukrul, Вересень 05, 2012, 06:19:17 ПП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

Uukrul

Зайдем издалека, в общем, требуется написать отчет, небольшой, но на селекционном экране возможны два варианты работы и соответственно, нужно предусмотреть выбор варианта загрузки данных из файла, как в первом случае, так и во втором. Варианты как это можно сделать есть несколько, но саамы распространенный, как обычно я и делал это объявляем что-то типа две радио-кнопки или два подэкрана, где размещаем необходимые поля ввода, при этом так как и в первом и втором случае требуется ввести возможность указания имени файла, то заводились две переменные. В общем виде это рисовалось например так:

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, но переменная для ввода имени файла используется в этом случае одна и соответственно обработку ввода нужно делать только один раз. Недостаток только тот, что на обеих закладках имя файла будет одинаковым, так как это одна и та же переменная. Как по мне, то довольно удобное решение, если это сложный отчет, в котором запрашивается куча данных для работы, при этом часть зпрошенных данных пересекается по параметрам.

Sed0Y

супер, это то, чего мне не хватало для полного счастья

Uukrul

Цитата: Sed0Y від Вересень 07, 2012, 11:33:55 ДП
супер, это то, чего мне не хватало для полного счастья
Ага, аналогично. Реализация подсмотрена в транзакции AR29N.

SMF spam blocked by CleanTalk