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

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

Как добавить параметр в СКД 1С: полное руководство

Как добавить параметр в СКД 1С: создание в конструкторе, настройка типа и значения, использование в запросе и отборе, программное заполнение.

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

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

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

Где в СКД находятся параметры и зачем они нужны

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

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

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

Способ 1: добавить параметр вручную на закладке «Параметры»

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

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

Обратите внимание на колонку «Заголовок»: именно она отображается пользователю в форме настроек. Если оставить заголовок пустым, пользователь увидит техническое имя параметра, что неудобно. Для параметров типа «Дата» полезно задавать значение по умолчанию через выражение, например &ТекущаяДата недоступна, но можно использовать стандартные даты — для этого параметр лучше связывать со стандартным периодом.

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

Способ 2: автоматическое создание через запрос

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

bsl
ВЫБРАТЬ
	Продажи.Номенклатура,
	Продажи.СуммаОборот
ИЗ
	РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи
ГДЕ
	Продажи.Номенклатура = &Номенклатура

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

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

Способ 3: параметры виртуальных таблиц и стандартный период

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

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

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

Способ 4: добавить и заполнить параметр программно

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

bsl
Настройки = Отчет.КомпоновщикНастроек.Настройки;
Параметр = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(
	Новый ПараметрКомпоновкиДанных("Организация"));
Если Параметр <> Неопределено Тогда
	Параметр.Значение = ОрганизацияСсылка;
	Параметр.Использование = Истина;
КонецЕсли;

Два обязательных действия при программной установке: присвоить значение и включить флаг Использование. Если флаг не установить, параметр считается отключенным, и запрос получит пустое значение даже при заполненном свойстве «Значение». Это одна из самых частых причин «пустого» отчета при программном формировании.

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

Настройка поведения: значения по умолчанию, списки и обязательность

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

Если включить флаг «Доступен список значений», пользователь сможет задать параметру несколько значений сразу — например, список складов. В запросе такой параметр должен сравниваться через оператор В (&СписокСкладов), а не через равенство, иначе сравнение со списком вернет ложь и отчет будет пустым.

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

Сравнение вариантов

Параметр в запросе

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

Отбор СКД

Подходит для необязательных фильтров, которые пользователь включает сам. Ограничение: отбор применяется после выборки, при больших объемах медленнее параметра.

Программное заполнение

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

Проверка результата и типичные ошибки

После добавления параметра сформируйте отчет и проверьте три вещи: параметр виден в панели настроек, изменение его значения меняет результат, отчет не выдает ошибку компоновки при пустом значении. Если отчет формируется программно, проверьте и ручной, и программный сценарии — настройки могут отличаться.

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

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

Итог

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

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

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

Почему параметр не отображается в настройках отчета в режиме предприятия?

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

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

Используйте в параметрах виртуальной таблицы имена &НачалоПериода и &КонецПериода — СКД автоматически создаст параметр «Период» типа «Стандартный период». Пользователь увидит единое поле с кнопкой выбора и предопределенными вариантами вроде «Этот месяц» или «Прошлый квартал».

Как передать в параметр список значений?

Включите для параметра флаг «Доступен список значений» и задайте тип элемента списка. В запросе сравнивайте поле с параметром через оператор В: ГДЕ Склад В (&Склады). Сравнение через равенство со списком не работает.

Отчет программно формируется пустым, хотя параметр задан. В чем причина?

Почти всегда дело в отсутствии флага Использование: после присвоения значения установите Параметр.Использование = Истина. Дополнительно убедитесь, что параметр найден по точному имени — НайтиЗначениеПараметра возвращает Неопределено при любом расхождении в написании.

Чем параметр отличается от отбора в СКД?

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

Можно ли задать значение параметра выражением, например текущую дату?

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