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

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

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

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

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

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

Где в СКД задаются параметры

В конструкторе схемы компоновки данных параметры описываются на закладке «Параметры». Для каждого параметра указывается имя, тип значения, заголовок (как его увидит пользователь), признак доступности и значение по умолчанию. Параметры попадают на эту закладку автоматически, если они используются в тексте запроса в виде &ИмяПараметра, либо добавляются вручную.

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

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

Задание значения по умолчанию в конструкторе

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

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

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

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

Задание параметра в пользовательском режиме

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

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

Программное задание значения параметра

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

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

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

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

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

Параметр.Значение = МояОрганизация;

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

КонецЕсли;

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

Установка периода

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

Параметр со списком значений

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

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

Обязательные параметры и параметры-выражения

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

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

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

Проверка результата и диагностика

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

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

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

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

Отчёт формируется без ошибок
Норма

Данные выведены, итоги сходятся с консолью запросов

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

Сообщение «Параметр не найден» или «Несоответствие типов»

Отбор по параметру применён
Норма

В шапке отчёта видно значение, данные отфильтрованы

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

Выводятся все данные — у параметра не включено Использование

Границы периода
Норма

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

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

Данные последнего дня обрезаны — дата окончания без конца дня

FAQ

Как задать параметру значение «текущая дата»?

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

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

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

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

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

Что приоритетнее: значение из схемы или из настроек пользователя?

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

Отчёт выдаёт ошибку «Параметр не установлен», хотя значение задано. Что проверить?

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

Итог

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

Значение параметра СКД задаётся на закладке «Параметры» конструктора, в пользовательских настройках или программно через ПараметрыДанных компоновщика. В коде всегда устанавливайте Использование = Истина и проверяйте тип значения. Пользовательские настройки имеют приоритет над значениями по умолчанию, поэтому при странном поведении отчёта начинайте диагностику с варианта отчёта.