Автор Тема: SELECTION-SCREEN - Селекционные экраны отчетов  (Прочитано 16212 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 762
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
SELECTION-SCREEN - Селекционные экраны отчетов
« : Сентябрь 05, 2012, 06:19:17 pm »
Зайдем издалека, в общем, требуется написать отчет, небольшой, но на селекционном экране возможны два варианты работы и соответственно, нужно предусмотреть выбор варианта загрузки данных из файла, как в первом случае, так и во втором. Варианты как это можно сделать есть несколько, но саамы распространенный, как обычно я и делал это объявляем что-то типа две радио-кнопки или два подэкрана, где размещаем необходимые поля ввода, при этом так как и в первом и втором случае требуется ввести возможность указания имени файла, то заводились две переменные. В общем виде это рисовалось например так:
Код: You are not allowed to view links. Register or Login
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. Как видим, объявлены две переменные под ввод имен файлов. Обойтись одной в принципе можно, но это как-то будет не очень наглядно, особенно если поля ввода разместить на разных подэкранах/закладках, например:
Код: You are not allowed to view links. Register or Login
*----------------------------------------------------------------------*
* Объявим первый подэкран для данных номер раз
*----------------------------------------------------------------------*
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 <имя переменной>.

Но, оказывается если почитать справку вдумчиво ну или посмотреть на некоторые стандартные отчеты системы, то все можно сделать, используя одну переменную. Так сказать более элегантное решение:
Код: You are not allowed to view links. Register or Login
*----------------------------------------------------------------------*
* Объявим блок содержащий запрос имени файла. Номер экрана используем
* не реальный, тут нам просто надо объявить перменную для работы с
* именем файла.
*----------------------------------------------------------------------*
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

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: SELECTION-SCREEN - Селекционные экраны отчетов
« Ответ #1 : Сентябрь 07, 2012, 11:33:55 am »
супер, это то, чего мне не хватало для полного счастья

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 762
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: SELECTION-SCREEN - Селекционные экраны отчетов
« Ответ #2 : Сентябрь 07, 2012, 01:23:38 pm »
You are not allowed to view links. Register or Login
супер, это то, чего мне не хватало для полного счастья
Ага, аналогично. Реализация подсмотрена в транзакции AR29N.