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

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

Как задать параметр в СКД 1С

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

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

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

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

Где в СКД объявляются параметры и как они работают

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

Объявить параметр можно двумя путями. Первый — вручную на закладке «Параметры» конструктора схемы компоновки данных. Второй — автоматически: если в тексте запроса набора данных встречается конструкция &ИмяПараметра, конструктор при нажатии кнопки «Заполнить» сам добавит параметр в список. Автоматическое заполнение удобно, но тип данных при этом определяется по контексту запроса и не всегда угадывается верно — проверяйте его вручную.

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

Добавление параметра через конструктор схемы компоновки

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

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

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

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

Параметры периода: стандартный подход и подводные камни

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

Есть два надёжных решения этой проблемы. Первое — использовать функцию языка запросов КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ) в тексте запроса. Второе — задавать в условии не «МЕЖДУ», а сравнения: Период >= &НачалоПериода И Период < &ДатаОкончания, где дата окончания — начало следующего дня. Оба подхода корректны, выбор зависит от принятых в проекте соглашений.

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

Программная установка значения параметра

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

Настройки = Отчет.КомпоновщикНастроек.Настройки;

Параметр = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(

Новый ПараметрКомпоновкиДанных("Организация"));

Если Параметр <> Неопределено Тогда

Параметр.Значение = ТекущаяОрганизация;

Параметр.Использование = Истина;

КонецЕсли;

Короткий вариант — метод УстановитьЗначениеПараметра: Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Организация", ТекущаяОрганизация). Он автоматически включает использование параметра. Учтите, что метод вернёт ошибку, если параметра с таким именем нет в схеме, — перед вызовом убедитесь, что параметр объявлен.

Если значение нужно установить до первого формирования отчёта, делайте это в обработчике ПриСозданииНаСервере формы отчёта или в событии ПриКомпоновкеРезультата модуля объекта отчёта. Установка параметра после формирования не перестроит отчёт автоматически — потребуется повторный вызов формирования.

bsl
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода", НачалоМесяца(ТекущаяДатаСеанса()))

Использование параметра в отборе и выражениях

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

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

Настройка видимости параметра для пользователя отчёта

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

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

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

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

Большинство проблем с параметрами СКД сводится к нескольким повторяющимся причинам. Их легко диагностировать, если знать, где искать.

Типичные ошибки
01
Параметр используется в запросе, но не объявлен на закладке «Параметры» — отчёт падает с ошибкой при формировании
02
Имя параметра в коде не совпадает с именем в схеме (опечатка, лишний пробел) — УстановитьЗначениеПараметра вызывает исключение
03
Тип параметра задан неверно (Строка вместо ссылки) — сравнение в запросе работает некорректно или медленно
04
Параметр установлен, но флаг «Использование» снят — значение игнорируется, отчёт формируется без отбора
05
Конец периода без времени — документы последнего дня не попадают в отчёт
Контрольные точки

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

Параметр в списке на закладке «Параметры»
Норма

Параметр присутствует, тип заполнен

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

Параметр отсутствует или тип пустой

Формирование отчёта с разными значениями
Норма

Данные меняются в соответствии с условием

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

Результат одинаков при любых значениях

Граничная дата периода
Норма

Документы последнего дня включены

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

Документы последнего дня пропадают

Программная установка
Норма

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

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

Исключение или значение сбрасывается

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

Часто задаваемые вопросы

Чем параметр СКД отличается от отбора в настройках отчёта?

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

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

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

Почему параметр не появляется на форме отчёта?

Проверьте три вещи: снят ли флаг «Ограничение доступности» у параметра, включён ли он в пользовательские настройки (в режиме отчёта: «Ещё → Изменить вариант»), и не скрыт ли он настройками вида отчёта в БСП. Если параметр добавлен в схему после сохранения пользовательских настроек, пользователю может потребоваться сброс настроек к стандартным.

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

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

Можно ли использовать один параметр в нескольких наборах данных?

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

Что делать, если при установке параметра возникает ошибка «Параметр не найден»?

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

Итог

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

Параметр СКД объявляется на закладке «Параметры» схемы, используется в запросе через &Имя или в отборе, а программно устанавливается через ПараметрыДанных.УстановитьЗначениеПараметра. Главные источники ошибок — несовпадение имён, неправильный тип даты без времени и снятый флаг использования. После настройки всегда проверяйте отчёт на граничных значениях периода.