Отчеты и Аналитика · 9 мин
Как задать значение параметра в СКД 1С
Как задать значение параметра в СКД 1С: настройка в конструкторе, программное задание через код, обязательные параметры, выражения и типичные ошибки.
Параметры в системе компоновки данных (СКД) определяют, какие данные попадут в отчёт: период, организацию, контрагента, склад и другие условия отбора. Если параметр не задан или задан неверно, отчёт либо не сформируется, либо покажет не те данные, поэтому понимание механизма задания значений — базовый навык при работе с отчётами на СКД.
Значение параметра можно задать тремя способами: в настройках отчёта в пользовательском режиме, в конструкторе СКД на этапе разработки и программно из встроенного языка 1С. Каждый способ имеет свои сценарии применения и ограничения.
Где в СКД задаются параметры
В конструкторе схемы компоновки данных параметры описываются на закладке «Параметры». Для каждого параметра указывается имя, тип значения, заголовок (как его увидит пользователь), признак доступности и значение по умолчанию. Параметры попадают на эту закладку автоматически, если они используются в тексте запроса в виде &ИмяПараметра, либо добавляются вручную.
Важно различать параметры самого запроса и параметры СКД. Параметр запроса передаётся в СУБД при выполнении, а параметры СКД могут использоваться ещё и в выражениях, в отборах и в вычисляемых полях. Параметр, объявленный в запросе, но не заданный ни в настройках, ни программно, приведёт к ошибке при формировании отчёта.
Для служебных параметров виртуальных таблиц (например, периода регистра накопления) СКД автоматически создаёт соответствующие параметры с особыми именами — как правило, «НачалоПериода» и «КонецПериода». Их удобно связывать со стандартным периодом отчёта.
Задание значения по умолчанию в конструкторе
На закладке «Параметры» для нужной строки заполните колонку «Значение». Здесь можно указать константу (например, конкретную дату или ссылку на элемент справочника), но чаще используют выражения на языке выражений СКД. Например, для текущей даты применяется функция ТекущаяДатаСеанса() недоступна напрямую — вместо неё в выражениях компоновки используют &ТекущаяДата как параметр либо функции языка выражений, доступные в конкретной версии платформы.
Типичный приём — задать для параметра типа «Дата» значение по умолчанию через стандартную дату начала или окончания. Для этого в колонке «Значение» выбирается «СтандартнаяДатаНачала» или «СтандартнаяДатаОкончания», а в колонке «Выражение» при необходимости указывается расчёт, например начало текущего месяца.
- 1Откройте схему компоновки данных и перейдите на закладку «Параметры»
- 2Найдите нужный параметр или добавьте его кнопкой «Добавить»
- 3Укажите тип значения — от него зависит, что сможет ввести пользователь
- 4В колонке «Значение» задайте константу или выберите стандартную дату
- 5Снимите флажок «Ограничение доступности», если пользователь должен менять значение
- 6Сохраните схему и сформируйте отчёт для проверки
Флажок «Включать в доступные поля» и настройка «Ограничение доступности» управляют тем, увидит ли пользователь параметр в настройках отчёта. Если ограничение установлено, параметр скрыт от пользователя и берётся только из схемы или из кода.
Задание параметра в пользовательском режиме
В режиме 1С:Предприятие пользователь задаёт значения через форму настроек отчёта: кнопка «Настройки» (или «Изменить вариант»), далее закладка «Параметры». Там отображаются все параметры, у которых не включено ограничение доступности. Пользователь вводит значение, и оно сохраняется в варианте отчёта, если отчёт поддерживает сохранение вариантов.
Если параметр помечен как обязательный (включён флажок использования без значения), отчёт не сформируется, пока значение не будет заполнено. Это удобно для защиты от «тяжёлых» запросов без отборов — например, без ограничения периода по большому регистру.
Программное задание значения параметра
Программная установка нужна, когда отчёт формируется из кода: по расписанию, из обработки, при открытии формы с предопределёнными отборами. Работа идёт через компоновщик настроек и коллекцию значений параметров.
Компоновщик = Отчет.КомпоновщикНастроек;
Параметр = Компоновщик.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(
Новый ПараметрКомпоновкиДанных("Организация"));
Если Параметр <> Неопределено Тогда
Параметр.Значение = МояОрганизация;
Параметр.Использование = Истина;
КонецЕсли;
Два ключевых момента: после присвоения значения обязательно установите Использование = Истина, иначе параметр останется отключённым и не попадёт в запрос. Второй момент — ищите параметр через НайтиЗначениеПараметра, а не по индексу: порядок элементов в коллекции не гарантирован.
Установка периода
Для стандартного периода используется тип СтандартныйПериод: создаётся объект, заполняются дата начала и дата окончания, и это значение присваивается параметру. Если в схеме два отдельных параметра «НачалоПериода» и «КонецПериода», каждому присваивается значение типа «Дата» отдельно.
Параметр со списком значений
Если параметр допускает список (в схеме включён флажок «Доступен список значений»), в коде ему присваивается объект СписокЗначений. В запросе такой параметр используется с оператором В (&Параметр). Присвоение одиночного значения списочному параметру — частая причина ошибки несоответствия типов.
Параметр = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период"));
Параметр.Значение = Новый СтандартныйПериод(ВариантСтандартногоПериода.ЭтотМесяц);
Параметр.Использование = Истина;Обязательные параметры и параметры-выражения
Признак «Обязательный» в конструкторе означает, что отчёт не сформируется без заполненного значения. Это полезно для периодов и ключевых отборов, но злоупотреблять не стоит: слишком много обязательных параметров утомляет пользователя. Оставляйте обязательными только те, без которых запрос теряет смысл или выполняется неоправданно долго.
Через колонку «Выражение» параметру можно задать вычисляемое значение на языке выражений СКД — например, конец дня от другого параметра: КонецПериода(&НачалоПериода, "День"). Так параметры связываются между собой, и пользователю достаточно заполнить один из них.
Проверка результата и диагностика
После задания параметра сформируйте отчёт и сверьте итог с эталонным запросом в консоли запросов с теми же значениями. Совпадение сумм и количества строк — признак корректной передачи параметра. Если данных нет, а по запросу они есть, проверьте флажок «Использование» у параметра и часовой пояс дат.
Для отладки в конфигураторе удобно вывести итоговые настройки компоновщика перед формированием: там видно фактические значения всех параметров. Это быстрее, чем гадать, какое значение «победило» — из схемы, из варианта отчёта или из кода.
Как проверить результат
Данные выведены, итоги сходятся с консолью запросов
Сообщение «Параметр не найден» или «Несоответствие типов»
В шапке отчёта видно значение, данные отфильтрованы
Выводятся все данные — у параметра не включено Использование
Документы первого и последнего дня присутствуют
Данные последнего дня обрезаны — дата окончания без конца дня
FAQ
Как задать параметру значение «текущая дата»?
В конструкторе СКД для параметра типа «Дата» задайте выражение через доступные функции языка выражений компоновки либо передайте значение программно: Параметр.Значение = ТекущаяДатаСеанса(); с установкой Использование = Истина. В пользовательском режиме дату можно выбрать вручную в настройках отчёта.
Почему параметр не виден в настройках отчёта?
На закладке «Параметры» конструктора для него включено ограничение доступности либо снят флажок «Включать в доступные поля». Снимите ограничение доступности — параметр появится в форме настроек пользователя.
Как передать в параметр список организаций?
В схеме включите у параметра признак «Доступен список значений», а в коде присвойте объект СписокЗначений, заполненный ссылками. В тексте запроса условие должно быть вида Организация В (&Параметр).
Что приоритетнее: значение из схемы или из настроек пользователя?
Приоритет у пользовательских настроек и сохранённого варианта отчёта. Значение по умолчанию из схемы применяется только если пользователь не задал своё. Программно установленное значение действует в рамках текущего формирования.
Отчёт выдаёт ошибку «Параметр не установлен», хотя значение задано. Что проверить?
Проверьте три вещи: установлено ли свойство Использование у элемента параметра, совпадает ли имя в коде с именем в схеме (регистр и лишние пробелы имеют значение) и не переопределяется ли значение в сохранённом варианте отчёта пустым.
Что важно запомнить
Значение параметра СКД задаётся на закладке «Параметры» конструктора, в пользовательских настройках или программно через ПараметрыДанных компоновщика. В коде всегда устанавливайте Использование = Истина и проверяйте тип значения. Пользовательские настройки имеют приоритет над значениями по умолчанию, поэтому при странном поведении отчёта начинайте диагностику с варианта отчёта.