К статье
Практический материал

Отчеты и Аналитика · 11 мин

Как сделать параметр обязательным в СКД 1С

Как сделать параметр обязательным в СКД 1С: флажки «Ограничение доступности» и «Включать в пользовательские настройки», проверка результата и типичные ошибки.

Обязательный параметр в системе компоновки данных (СКД) — это параметр, без заполнения которого отчёт не должен формироваться. Типичный пример — период отчёта, организация или склад: если пользователь оставит их пустыми, отчёт либо вернёт бессмысленную выборку по всем данным, либо завершится с ошибкой запроса. В СКД такая защита настраивается штатными средствами конструктора, без программирования, но с несколькими важными нюансами.

Основной механизм — сочетание двух настроек на закладке «Параметры» схемы компоновки: снятие флажка «Ограничение доступности» и установка признака обязательности. Дополнительно параметр нужно вывести пользователю через «Включать в пользовательские настройки», иначе он окажется обязательным, но невидимым — и отчёт нельзя будет сформировать вообще.

Где в схеме компоновки находятся настройки параметров

Откройте схему компоновки данных отчёта: в конфигураторе это делается через кнопку «Открыть схему компоновки данных» в свойствах отчёта, в режиме предприятия — через консоль отчётов СКД или внешний отчёт. В конструкторе СКД перейдите на закладку «Параметры». Именно здесь перечислены все параметры, которые платформа обнаружила в тексте запроса набора данных, а также параметры виртуальных таблиц.

Если параметр в запросе обозначен амперсандом, например &НачалоПериода, он автоматически появится в списке. Для параметров виртуальных таблиц (например, РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, )) СКД создаёт вложенные строки внутри составного параметра. Для каждой строки доступны колонки: имя, заголовок, тип, значение по умолчанию, «Ограничение доступности», «Включать в пользовательские настройки» и колонка обязательности.

Заголовок параметра стоит заполнить осмысленно: именно его увидит пользователь в форме настроек отчёта. Например, вместо «Параметр1» укажите «Начало периода» — это снизит число ошибок при заполнении и упростит поддержку отчёта.

Как сделать параметр обязательным: пошаговая настройка

Базовая настройка выполняется в конструкторе СКД и занимает меньше минуты. Важно выполнить оба действия: только снятие ограничения доступности или только установка обязательности по отдельности не даст нужного эффекта.

Порядок действий
  1. 1
    Откройте схему компоновки данных и перейдите на закладку «Параметры».
  2. 2
    Найдите нужный параметр и снимите флажок «Ограничение доступности» — иначе настройки использования параметра будут заблокированы.
  3. 3
    Установите флажок в колонке обязательности (значок замка) в строке параметра.
  4. 4
    Убедитесь, что включён флажок «Включать в пользовательские настройки», чтобы параметр был виден пользователю.
  5. 5
    Сохраните схему и сформируйте отчёт без заполнения параметра — должно появиться сообщение о необходимости его заполнить.

После снятия «Ограничения доступности» становятся доступными режимы использования параметра. Обязательность означает: платформа проверит значение до выполнения запроса и не даст сформировать отчёт с пустым параметром. Это надёжнее, чем проверка в коде, потому что срабатывает на уровне компоновщика настроек для любого способа запуска отчёта — из формы, программно или через варианты отчёта.

Если параметр является датой периода, часто вместо двух отдельных параметров НачалоПериода и КонецПериода удобнее использовать один параметр типа «СтандартныйПериод». Он тоже делается обязательным тем же способом, а в запросе границы извлекаются через точку: &Период.ДатаНачала и &Период.ДатаОкончания.

Настройка видимости обязательного параметра для пользователя

Обязательный параметр, скрытый от пользователя, — классическая причина «сломанного» отчёта. Платформа требует значение, а ввести его негде. Поэтому после установки обязательности проверьте, что параметр выведен в настройки: флажок «Включать в пользовательские настройки» на закладке «Параметры» должен быть установлен, а в самих пользовательских настройках (закладка «Настройки», режим «Пользовательские настройки») у элемента должен стоять признак использования.

Для периодических отчётов удобно задать параметру значение по умолчанию — например, стандартный период «Этот месяц». Тогда обязательность сохранится (пользователь не сможет очистить значение), но отчёт откроется уже с осмысленными настройками. Значение по умолчанию задаётся в колонке «Значение» на закладке «Параметры»; для дат доступны выражения на языке выражений СКД и стандартные даты.

Обязательные параметры виртуальных таблиц и отборы

Отдельный случай — параметры виртуальных таблиц регистров. Например, в запросе РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) параметр «Период» отображается как вложенная строка внутри составного параметра виртуальной таблицы. Обязательность устанавливается на уровне вложенной строки — раскройте составной параметр и работайте с конкретным элементом.

Не путайте обязательный параметр с обязательным отбором. Если условие реализовано не параметром запроса, а отбором СКД (например, «Организация = &Организация» в настройках отбора), то механизм другой: на закладке «Отбор» в настройках схемы для элемента отбора можно установить режим «Обязательный» через свойства пользовательской настройки. Тогда пользователь обязан включить и заполнить этот отбор, иначе отчёт не сформируется.

Параметр запроса или обязательный отбор

Обязательный параметр запроса

Подходит, когда условие жёстко зашито в текст запроса (период виртуальной таблицы, параметр СрезПоследних). Гарантированно применяется всегда, но пользователь не видит его в списке отборов.

Обязательный отбор СКД

Подходит для условий, которые пользователь должен видеть и редактировать в панели отборов (организация, склад, контрагент). Гибче, но требует настройки на закладке «Отбор» и в пользовательских настройках.

Проверка результата после настройки

После сохранения схемы обязательно проверьте поведение отчёта в трёх сценариях. Первый — откройте отчёт и попробуйте сформировать его, очистив значение параметра: должно появиться сообщение вида «Не заполнено значение параметра» и отчёт не должен сформироваться. Второй — заполните параметр и убедитесь, что данные выводятся корректно. Третий — сохраните вариант отчёта с заполненным параметром и переоткройте его: значение должно подставиться, а обязательность — сохраниться.

Контрольные точки

Как проверить результат

Формирование с пустым параметром
Норма

Появляется сообщение о незаполненном параметре, отчёт не строится

Тревожный признак

Отчёт формируется по всем данным или падает с ошибкой запроса

Видимость параметра в настройках
Норма

Параметр отображается в панели настроек и доступен для ввода

Тревожный признак

Параметр обязателен, но в форме настроек отсутствует

Сохранённый вариант отчёта
Норма

Вариант открывается с заполненным значением, обязательность работает

Тревожный признак

После переоткрытия варианта значение теряется и отчёт не формируется

Если отчёт вызывается программно (из обработки, фонового задания, расширения), проверьте и этот путь: код, формирующий отчёт, теперь обязан явно устанавливать значение параметра через КомпоновщикНастроек, иначе программное формирование начнёт завершаться ошибкой. Это частая причина «отчёт работал, а после доработки перестал» у регламентных рассылок.

Типичные ошибки и ограничения

Типичные ошибки
01
Установлена обязательность, но не снято «Ограничение доступности» — настройка не применяется, параметр ведёт себя как раньше.
02
Параметр обязателен, но не включён в пользовательские настройки — пользователь не может его заполнить, отчёт не формируется никогда.
03
Обязательность установлена для параметра, который заполняется только программно — ломается ручной запуск отчёта из интерфейса.
04
Ожидание, что обязательность проверит корректность значения — проверяется только факт заполнения, дата 01.01.0001 пройдёт проверку.
05
Обязательный параметр добавлен, но не обновлены сохранённые варианты отчёта у пользователей — старые варианты перестают формироваться.

Ещё одно ограничение: обязательность не работает как средство безопасности. Пользователь с доступом к консоли запросов или к изменению настроек может обойти логику отчёта. Если цель — ограничить доступ к данным, используйте RLS (ограничение доступа на уровне записей) и права, а не обязательные параметры.

При изменении состава параметров в уже используемом отчёте учитывайте, что пользовательские варианты хранят настройки по именам параметров. Переименование параметра в запросе фактически создаёт новый параметр, и старые варианты потеряют сохранённое значение. Перед такой доработкой предупредите пользователей или предусмотрите перенос настроек.

Альтернатива: проверка параметров программно

В сложных случаях — когда обязательность зависит от условий (например, параметр «Склад» обязателен только если снят флаг «По всем складам») — штатного механизма недостаточно. Тогда проверку делают в модуле объекта отчёта в обработчике ПриКомпоновкеРезультата: анализируют значения параметров компоновщика настроек, при нарушении условий выводят сообщение и устанавливают Отказ = Истина.

Такой подход гибче, но требует поддержки кода и не срабатывает до начала компоновки. Рекомендуемая практика — комбинировать: простые всегда-обязательные параметры делать средствами СКД, а условные проверки выносить в модуль отчёта.

Итог

Что важно запомнить

Обязательный параметр в СКД настраивается на закладке «Параметры»: снимите «Ограничение доступности», установите флажок обязательности и включите параметр в пользовательские настройки. Проверку выполняйте тремя сценариями: пустое значение, заполненное значение, сохранённый вариант. Помните, что обязательность проверяет только заполненность и может сломать программные вызовы отчёта.

Частые вопросы

Почему флажок обязательности недоступен для редактирования?

Скорее всего, у параметра установлено «Ограничение доступности». Пока этот флажок установлен, платформа блокирует изменение использования параметра. Снимите ограничение доступности — колонка обязательности станет редактируемой.

Можно ли сделать обязательным параметр типа «Стандартный период»?

Да, механизм тот же: параметр типа СтандартныйПериод делается обязательным на закладке «Параметры». Пользователь должен будет выбрать период целиком; отдельно контролировать заполненность даты начала и окончания штатная обязательность не умеет — при необходимости это проверяется в модуле отчёта.

Что произойдёт с уже сохранёнными вариантами отчёта после добавления обязательного параметра?

Варианты, в которых новый параметр не заполнен, перестанут формироваться — при их запуске появится требование заполнить параметр. Пользователю достаточно открыть настройки, заполнить значение и пересохранить вариант.

Чем обязательный параметр отличается от обязательного отбора?

Параметр подставляется в текст запроса и влияет на выборку на уровне СУБД, отбор — это элемент настроек СКД, который пользователь видит в панели отборов и может видоизменять. Для периодов и параметров виртуальных таблиц используют параметры, для условий вроде «Организация» чаще удобнее обязательный отбор.

Работает ли обязательность при программном формировании отчёта?

Да, проверка выполняется компоновщиком независимо от способа запуска. Код, формирующий отчёт программно, обязан явно установить значение параметра через настройки компоновщика, иначе формирование завершится ошибкой.

Как сделать параметр обязательным только при определённом условии?

Штатными настройками СКД — никак, обязательность безусловна. Реализуйте проверку в обработчике ПриКомпоновкеРезультата модуля отчёта: прочитайте значения параметров из компоновщика настроек, при нарушении условия выведите сообщение пользователю и установите Отказ = Истина.