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