Если транзакция является отчётом, то у неё есть экран выбора.
И если параметров много, и вы часто заполняете их одинаково, то имеет смысл запомнить это в виде шаблона. Вот этот шаблон и называется вариантом.
А теперь – в подробностях…
Что это такое?
Экраном выбора (селекционным экраном) является экран, сформированный операторами PARAMETERS, SELECT-OPTIONS с вариациями. Он всегда имеет номер 1000. Такой экран может сгенерирован только автоматически и только для программы типа REPORT. Вносить вручную изменения в такой экран – запрещается.
Если соотносить с вариантами транзакций (SHD0), то тут полное разделение:
- Экран выбора не может быть включен в вариант транзакции
- В варианте экрана выбора может использоваться только экран выбора, и его невозможно создать для других экранов
Функции вариантов экрана выбора и вариантов транзакций реализованы похоже (похоже, но не то же).
Над экраном выбора всегда горит стандартная кнопка сохранения, и если её нажать, то появится экран сохранения:
Вот тут можно порасставлять галочки и сохранить под нужным именем.
В-целом очень похоже на варианты транзакций, вот только значения “по-умолчанию” напрямую не показываются и напрямую не вписываются. Не очень приятное поведение.
Если к программе создан хотя бы один вариант, то появляется кнопочка, нажав которую можно выбрать варианты из списка:
NB: Мне вообще не нравится принятое название “селекционный экран” или “селективный экран”. В английском всё просто “Selection screen”. Официально он называется всё-таки “экран выбора”, в этом можно убедиться в транзакции SE93.
Переносы
Варианты экрана выбора делятся на два вида:
- системные: начинаются на CUS&, не зависят от манданта, переносятся автоматически, автоматически защищаются
- пользовательские: начинаются на другие буквы, зависят от манданта, не переносятся автоматически
Маркер CUS& нужно вводить ручками. Что-то вроде этого можно найти и в вариантах ALV, но там используется другой маркер-префикс: это прямой слеш, да и означает этот маркер чуть другое.
Если пользовательский вариант хочется перенести, то можно воспользоваться программой RSTRANSP. Можно включить и ручками, но там нужно будет склеить правильно имя объекта.
Если говорить о систематическом подходе, то лучше всегда придерживаться стандартной логики:
- Системные варианты – всегда переносить, ландшафт должен быть ровным
- Пользовательские варианты – никогда не переносить
- В транзакциях использовать только системные варианты
А то, например, может сложиться не очень приятная ситуация, если решат перенести корректировку варианта через запрос из разработки, и окажется что на продуктивной системе в варианте были сделаны локальные корректировки.
Использование
Пока пользователь у нас может только запустить отчёт, и потом выбрать из списка нужный. Можно сократить этот шаг:
- Создать транзакцию с предустановленным вариантом
- При инициализации отчёта вызвать RS_SUPPORT_SELECTIONS (в том числе и вызывать разные варианты в зависимости от пользователя)
Защита
С защитой всё не очень приятно. По сути это завязка на имя пользователя – вот насколько всё просто. Снять защиту с пользовательского варианта легко с помощью программы RSVARENT, тут лезть в таблицы не обязательно.
А вот снять защиту с системного варианта непросто. Даже если зайти под владельцем, то снимать флаг защиты бесполезно – он при сохранении будет поставлен обратно. Получается что нельзя сменить владельца системного отчёта.
Ситуацию усложняет тот факт, что системные варианты хранятся в 000 манданте (и как следствие они являются независимыми от манданта). А лично меня не тянет идти ради этого в нулевой мандант. Поэтому даже снять флаг защиты с полпинка не получится. Ну а таблица не секретная: VARID; надо только написать вручную запрос учитывая мандант.
Снимаете защиту, и при следующем сохранении он защитится обратно, но уже на вас.
На закуску
Можно поглядеть на кучку программ RSVAR* – там есть небольшие помогалки на разные случаи.
Если что и стоит разведать дополнительно, то это механизм использования переменных.
С датой всё просто: если поле является датой, то там появляются дополнительные вкусняшки:
А вот если вам нужна какая-то условная константа с динамическим расчётом (например, код БЕ из профиля пользователя), то необходимо сделать какие-то дополнительные шаги. Вот это стоило бы копнуть дополнительно.
Может кто даст наводку?
Планирование
Есть стандартная функция платформы: можно запланировать регулярный запуск отчёта (например: ежедневно).
Если ввести параметры на экране выбора и запланировать запуск в фоновом режиме, то будет создан технический вариант вроде &0000000000012. В данном случае не играет роли, если вы перед этим вызвали какой-либо вариант для предварительного заполнения этих полей.
Поэтому если у вас есть динамические переменные выбора в варианте, то планировать следует из SM36 (где можно напрямую указать вариант), а не из SA38.