Селекционный экран sap что это
Глава 1. Создание ALV GRID. Часть 2
ABAP OBJECTS ALV
§ 2. Селекционный экран
Необходимо создать следующие объекты:
SELECTION SCREEN 1100
Экран ввода данных.
Вызов селекционного экрана и передача данных с экрана в класс контроллер.
В se80 создаем группу функций ZFG_MVC_001.
Рис. 1
Рис. 2
В TOP инклуде описываем селекционный экран номер 1100.
SELECTION-SCREEN: BEGIN OF SCREEN 1100 TITLE title_01.
SELECT-OPTIONS: s_carrid FOR spfli-carrid.
SELECT-OPTIONS: s_connid FOR spfli-connid.
SELECTION-SCREEN: END OF SCREEN 1100.
Рис. 3
Для того чтобы класс контроллер смог вызвать данный селекционный экран, необходимо создать функциональный модуль (ZFM_MVC_001_SEL_SCR_1100) вызова экрана 1100.
Рис. 4
Данный функциональный модуль будет возвращать в класс контроллер данные
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
Селекционный экран sap что это
Часто есть необходимость для ввода только входных данных, для этих целей можно использовать экраны выбора. Экраны выбора предоставляют стандартизированный интерфейс SAP.
Вводим имя программы и нажимаем Создать. Как обычно задаем стандартные атрибуты, сохраняем в пакет ZKRE_PRO1, назначаем транспортный запрос. Итак введем такой текст в наш редактор.
Запускаем на выполнение.
Детальный синтаксис команд можно просмотреть если в редакторе выделить ключевое слово например SELECTION-SCREEN и нажать F1.
В коде программы есть text-001 так называемая текстовая переменная. Пока она еще не создана. Двойной щелчек в тексте программы мышью по text-001 позволит нам создать ее.
Нажав YES, попадаем в следующий экран.
Где мы вводим непосредственно сам текст и устанавливаем длину в 40 символов. Переключившись на вкладку Selections Texts видим что там имеются названия наших элементов на экране выбора.
Здесь можно ввести произвольный текст, а можно отметив галочки справа, тем самым скопировав описание полей автоматом.
Сохраняем и активируем. Запуств на выполнение программу увидим как изменился экран.
Отредактируем текст программы, сделаем поле Name обязательным и добавим кнопку.
Двойной клик по text—bt1 – создадим надпись на кнопке.
Сохраняем и активируем нашу новую текстовую переменную. Теперь на кнопке имеется надпись.
Сделаем кнопку активной, т.е. чтобы при ее нажатии поля экрана выбора очищались. Добавим в код следующий блок.
Обсуждения : 4 комментария
Комментарии
Виталий
Ошибка в программе.
Ругается на функционал кнопки
Ошибка:
Неизвестное поле «SSCRFIELDS-UCOMM». Оно не содержится ни в одной из указанных таблиц, не определено через оператор «DATA»
Виталий
Пересохранился. Заработало. СТранно(
Дмитрий
Добрый день. У меня была такая же проблема:
после REPORT не хватает
TABLES: sscrfields.
Чтобы оставить комментарий, необходимо Войти или Зарегистрироваться.
Вариант селекционного экрана
Варианты селекционного экрана знает каждый. Если не знает, то срочно надо узнать что это. Они сильно облегчают жизнь пользователя и САПера. Особенно для отчетов, а, если еще и к ним ALV вариант настроить, то совсем красиво получается. Так вот, есть еще такие вариант, как системные. Это те, которые просто так не изменить. Помогает сохранить пользователям руки и не отрывать их, когда они что-нибудь перезатирают друг у друга.
Системные варианты начинаются с SAP& для саповских вариантов и CUS& для клиентских. Эти варианты хранятся в 000 манданте и переносятся транспортными запросами.
А еще в вариантах можно делать подстановки:
Настройки варианта селекционного экрана
Если тип ‘D’ D: Dynamic date calculation, то встаем на поле Name of variable и нажимаем F4. Выбираем нужную нам математику. Удобно, когда нужно строить отчеты по четким границам (например, по календарному месяцу). Или запускать программы с фильтами. Фантазируйте! Мечты сбываются 🙂
Для табличных переменных есть волшебная штука — табличка TVARVC. Запускаем транзакцию STVARV, создаем свою переменную и присваиваем значения, которые должны подставиться на селекционнике в варианте. Получается шоколадная штука. Мы создаем системный вариант, в нем указываем переменную для видов оплаты (например, фонд оплаты труда), а в TVARVC прописываем все виды оплаты. И эту переменную используем во всех отчетах. Красота!
Иван Болховитинов
Если транзакция является отчётом, то у неё есть экран выбора.
И если параметров много, и вы часто заполняете их одинаково, то имеет смысл запомнить это в виде шаблона. Вот этот шаблон и называется вариантом.
А теперь – в подробностях…
Что это такое?
Экраном выбора (селекционным экраном) является экран, сформированный операторами PARAMETERS, SELECT-OPTIONS с вариациями. Он всегда имеет номер 1000. Такой экран может сгенерирован только автоматически и только для программы типа REPORT. Вносить вручную изменения в такой экран – запрещается.
Если соотносить с вариантами транзакций (SHD0), то тут полное разделение:
Функции вариантов экрана выбора и вариантов транзакций реализованы похоже (похоже, но не то же).
Над экраном выбора всегда горит стандартная кнопка сохранения, и если её нажать, то появится экран сохранения:
Вот тут можно порасставлять галочки и сохранить под нужным именем.
В-целом очень похоже на варианты транзакций, вот только значения “по-умолчанию” напрямую не показываются и напрямую не вписываются. Не очень приятное поведение.
Если к программе создан хотя бы один вариант, то появляется кнопочка, нажав которую можно выбрать варианты из списка:
NB: Мне вообще не нравится принятое название “селекционный экран” или “селективный экран”. В английском всё просто “Selection screen”. Официально он называется всё-таки “экран выбора”, в этом можно убедиться в транзакции SE93.
Переносы
Варианты экрана выбора делятся на два вида:
Маркер CUS& нужно вводить ручками. Что-то вроде этого можно найти и в вариантах ALV, но там используется другой маркер-префикс: это прямой слеш, да и означает этот маркер чуть другое.
Если пользовательский вариант хочется перенести, то можно воспользоваться программой RSTRANSP. Можно включить и ручками, но там нужно будет склеить правильно имя объекта.
Если говорить о систематическом подходе, то лучше всегда придерживаться стандартной логики:
А то, например, может сложиться не очень приятная ситуация, если решат перенести корректировку варианта через запрос из разработки, и окажется что на продуктивной системе в варианте были сделаны локальные корректировки.
Использование
Пока пользователь у нас может только запустить отчёт, и потом выбрать из списка нужный. Можно сократить этот шаг:
Защита
С защитой всё не очень приятно. По сути это завязка на имя пользователя – вот насколько всё просто. Снять защиту с пользовательского варианта легко с помощью программы RSVARENT, тут лезть в таблицы не обязательно.
А вот снять защиту с системного варианта непросто. Даже если зайти под владельцем, то снимать флаг защиты бесполезно – он при сохранении будет поставлен обратно. Получается что нельзя сменить владельца системного отчёта.
Ситуацию усложняет тот факт, что системные варианты хранятся в 000 манданте (и как следствие они являются независимыми от манданта). А лично меня не тянет идти ради этого в нулевой мандант. Поэтому даже снять флаг защиты с полпинка не получится. Ну а таблица не секретная: VARID; надо только написать вручную запрос учитывая мандант.
Снимаете защиту, и при следующем сохранении он защитится обратно, но уже на вас.
На закуску
Можно поглядеть на кучку программ RSVAR* – там есть небольшие помогалки на разные случаи.
Если что и стоит разведать дополнительно, то это механизм использования переменных.
С датой всё просто: если поле является датой, то там появляются дополнительные вкусняшки:
А вот если вам нужна какая-то условная константа с динамическим расчётом (например, код БЕ из профиля пользователя), то необходимо сделать какие-то дополнительные шаги. Вот это стоило бы копнуть дополнительно.
Может кто даст наводку?
Планирование
Есть стандартная функция платформы: можно запланировать регулярный запуск отчёта (например: ежедневно).
Если ввести параметры на экране выбора и запланировать запуск в фоновом режиме, то будет создан технический вариант вроде &0000000000012. В данном случае не играет роли, если вы перед этим вызвали какой-либо вариант для предварительного заполнения этих полей.
Поэтому если у вас есть динамические переменные выбора в варианте, то планировать следует из SM36 (где можно напрямую указать вариант), а не из SA38.
11 комментариев
Варианты настройки зависят от прикладного компонента (в СО, к примеру, они свои) и в этих компонентах есть свои настройки “по-умолчанию”. Общего для разных модулей при настройке вариантов мало, нужно конкретную ситуацию смотреть.
Само собой, обсуждение вариантов тут не затрагивает те вещи, которые пишутся напрямую в тексте ABAP-программы. И в каждой программе готовы появиться какие-то свои “феньки” в экранах выбора.
Вот например, у меня есть стандартный трюк: если данный пользователь имеет права только на одну БЕ, то эту БЕ я прописываю на экране выбора и закрываю ввод. А это делается старым добрым ABAP-ом, без всяких вариантов.
Небольшое замечание не по сути статьи. Утверждение
“Технически экраном выбора (селекционным экраном) является экран, сформированный операторами PARAMETERS, SELECT-OPTIONS. Он всегда имеет номер 1000. Такой экран может сформирован только для программы типа REPORT.” является не полностью корректным. Selection-screen может иметь и другой номер. Их может быть > 1. Никто не мешает создать его, например, в группе функций и затем вызвать через CALL SELECTION-SCREEN XXXX. А вот СТАНДАРТНЫЙ selection screen действительно имеет фиксированный номер 1000 и может быть только в программах типа REPORT.
Да, разумеется, есть такое пространство для манёвра. Просто в контексте данной статьи это не существенно.
> Никто не мешает создать его
Спорно. Я бы стал мешать разработчику так делать 😉
Технически спорные формулировки тут ещё есть. Например:
>Если транзакция является отчётом, то у неё есть экран выбора.
Отчёт можно сделать и без экрана выбора. Но вот нормальные отчёты так никто не делает.
>> Никто не мешает создать его
>Спорно. Я бы стал мешать разработчику так делать
Я лично не вижу причин запрещать, поскольку адекватное применение этому имеется. Например, экраны выбора применяются в стандартной группе функций V56L.
Спасибо Иван за статью. Даже не представишь как ты мне помог)
Огромное спасибо за статью, Иван. Если впервые с этим сталкиваешься, как я, то информация очень полезная.
А вот если вам нужна какая-то условная константа с динамическим расчётом (например, код БЕ из профиля пользователя), то необходимо сделать какие-то дополнительные шаги. Вот это стоило бы копнуть дополнительно.
транзакция STVARV.
Но не думаю, что выйдет связать с профилем пользователя.
Выйдет конечно, но только если поле экрана выбора связано с MEMORY ID в ABAP:
PARAMETERS: p_bukrs TYPE bkpf-bukrs MEMORY ID buk.
Просто оно обладает недостатками:
а) не всегда будет работать для стандарта, где иногда может не быть связки поля с MEMORY ID
б) если пользователь в сессии заранее перебивал поле другими значениями, тогда будут подставлены последние, а не значения из профиля
Глава 2. Два ALV GRID на одном экране. Часть 2
ABAP OBJECTS ALV
§2. Селекционный экран
Необходимо создать следующие объекты:
SELECTION SCREEN 1100
Экран ввода данных.
Вызов селекционного экрана и передача данных с экрана в класс контроллер.
Создаем функциональный модуль вызова селекционного экрана аналогично пункту 1.1.2.
Рис. 1
CALL SELECTION-SCREEN 1100.
IF sy-subrc = 0.
e_repid = sy-repid.
PERFORM set_context CHANGING es_context.
ELSE.
RAISE exit_program.
ENDIF.
ENDFUNCTION.
Тестируем функциональный модуль.
Рис. 2
§3. Класс модель
Необходимо создать следующие объекты:
Создаем класс выбора данных ZCL_MVC_002_MODEL. Транзакция SE24.
Рис. 3
Рис. 4
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland