В Системе компоновки данных (СКД) понятие «необязательный параметр» тесно связано с тем, как платформа формирует итоговый SQL-запрос к базе данных.
Если в обычном запросе (через объект Запрос) вы обязаны установить значение для каждого параметра с префиксом &, иначе система выдаст ошибку, то в СКД все гибче.
Необязательный параметр в СКД — это параметр, который может быть исключен из исполнения, если для него не задано значение или не установлен флаг «Использование».
В СКД это реализуется через специальные фигурные скобки {} в тексте запроса. Это называется расширениями языка запросов для СКД.
Обычно параметры в ГДЕ выглядят так: ГДЕ Склад = &Склад. Если вы не передадите склад, запрос «упадет».
Чтобы сделать его необязательным, используется такой синтаксис:
ВЫБРАТЬ
Продажи.Номенклатура,
Продажи.Количество
ИЗ
РегистрНакопления.Продажи КАК Продажи
{ГДЕ
Продажи.Склад.* КАК Склад} // Это расширение СКД
Если значение параметра заполнено: СКД автоматически добавит в итоговый запрос условие ГДЕ Продажи.Склад = &Склад.
Если значение НЕ заполнено (снята галочка использования): СКД просто «выкусит» этот кусок из текста запроса. В итоге в базу данных уйдет чистый запрос без лишних фильтров, что положительно сказывается на производительности.
На закладке «Параметры» в конструкторе схемы компоновки данных есть две важные колонки:
Ограничение доступности: Если галочка стоит, пользователь не увидит этот параметр в настройках отчета.
Запрет незаполненных значений: * Если галочка стоит, СКД не даст сформировать отчет, пока параметр не будет заполнен (аналог обязательного поля).
Если галочка снята, параметр считается необязательным. Если пользователь его не заполнит, условие с этим параметром просто не применится.
Гибкие фильтры: Когда пользователю нужно отобрать данные по конкретному контрагенту, но если он его не выбрал — показать данные по всем сразу.
Оптимизация: Вместо того чтобы писать в запросе громоздкие конструкции вида ГДЕ (&Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) ИЛИ Контрагент = &Контрагент), вы просто используете необязательный параметр СКД.
Для виртуальных таблиц (например, Обороты или СрезПоследних) параметры Период, НачалоПериода и КонецПериода часто являются «условно-необязательными». Если их не заполнить, СКД возьмет данные за все время или на текущий момент, но сами параметры из структуры никуда не исчезнут.
Остались вопросы?
Мы расскажем вам все про 1С в облаке, ответим на любые вопросы и поделимся полезными материалами по обучению.
Расскажите, как сервис 42Clouds помог вашему бизнесу. Отзыв будет опубликован после проверки модератором.