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

Разработка и Конфигурация · 8 мин

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

Как задать значение параметра в 1С: в запросе, в отчёте СКД, в форме, через константы и в коде. Пошаговые инструкции, примеры кода и типичные ошибки.

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

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

Инструкции применимы к платформе 1С:Предприятие 8.3 в управляемых формах. В обычных формах синтаксис работы с запросами тот же, отличается только работа с интерфейсом.

Как задать параметр запроса методом УстановитьПараметр

Самый распространённый сценарий — параметризованный запрос. Параметры в тексте запроса начинаются с символа «&», а их значения назначаются перед выполнением методом УстановитьПараметр(). Это защищает от ошибок подстановки и делает код читаемым.

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Ссылка КАК Товар

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|ГДЕ

| Номенклатура.Родитель = &Группа

| И НЕ Номенклатура.ПометкаУдаления";

Запрос.УстановитьПараметр("Группа", ГруппаТоваров);

Результат = Запрос.Выполнить();

Важные правила: имя параметра в методе указывается без символа «&», а сам метод вызывается до выполнения запроса. Если параметр в тексте запроса объявлен, но значение ему не присвоено, при выполнении возникнет ошибка «Переменная не определена».

Для параметра типа «массив» или «список значений» используется оператор В (&СписокЗначений) — платформа сама развернёт коллекцию в условие. Для пустой даты передавайте Дата(1,1,1), для пустой строки — "", для пустой ссылки — например, Справочники.Номенклатура.ПустаяСсылка().

Типичные ошибки при работе с параметрами запроса
01
Вызвать Выполнить() раньше УстановитьПараметр — запрос упадёт с ошибкой неопределённой переменной
02
Написать имя параметра с символом & в методе УстановитьПараметр — платформа не найдёт такой параметр
03
Передать в условие В (&Список) одиночное значение вместо массива или списка — условие не сработает корректно
04
Передавать строку вместо ссылки — сравнение с реквизитом ссылочного типа не даст результата

Как задать параметр отчёта на СКД программно

В отчётах на системе компоновки данных параметры объявляются на закладке «Параметры» схемы компоновки. Чтобы установить значение из кода, нужно обратиться к настройкам компоновщика через объект ПараметрыДанных.

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

Параметр = Настройки.ПараметрыДанных.Элементы.Найти("Период");

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

Параметр.Значение = ТекущаяДатаСеанса();

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

КонецЕсли;

Ключевой момент: недостаточно присвоить Значение — нужно ещё установить Использование = Истина, иначе параметр останется отключённым и отчёт использует значение по умолчанию. Это самая частая причина ситуации «параметр задал, а отчёт его не видит».

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

Как задать параметр отчёта в пользовательском режиме

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

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

Как задать параметр формы при открытии

Параметры формы передаются при её открытии через структуру. Это стандартный способ передать данные между формами — например, отбор для формы списка или ключ записи для формы объекта.

ПараметрыФормы = Новый Структура;

ПараметрыФормы.Вставить("Отбор", Новый Структура("Владелец", КонтрагентСсылка));

ОткрытьФорму("Справочник.ДоговорыКонтрагентов.ФормаСписка", ПараметрыФормы);

В модуле открываемой формы параметры доступны через свойство Параметры в обработчике ПриСозданииНаСервере. Обратите внимание: в структуру параметров можно передавать только сериализуемые значения — примитивные типы, ссылки, структуры, массивы. Передать, например, таблицу значений напрямую нельзя; её нужно преобразовать, например, через ПоместитьВоВременноеХранилище.

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

Константы — это хранимые в базе настройки, которые часто называют «параметрами учёта». Программно значение константы задаётся так:

Константы.ВалютаРегламентированногоУчета.Установить(ВалютаСсылка);

// Чтение для проверки:

ТекущееЗначение = Константы.ВалютаРегламентированногоУчета.Получить();

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

Параметры сеанса — это значения, живущие только в рамках текущего сеанса пользователя (например, текущая организация или текущий пользователь). Их устанавливает конфигурация при старте сеанса в обработчике УстановкаПараметровСеанса, а вручную из кода — через ПараметрыСеанса.ИмяПараметра = Значение;, если конфигурация это допускает.

Как проверить, что параметр задан правильно

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

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

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

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

Запрос с параметром выполняется
Норма

Возвращает ожидаемые строки без ошибки

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

Ошибка «Переменная не определена» или пустой результат при заведомо существующих данных

Параметр отчёта СКД применён
Норма

В сформированном отчёте виден заданный отбор или период

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

Отчёт использует значение по умолчанию — не установлено Использование = Истина

Константа сохранена
Норма

Получить() возвращает новое значение после Установить()

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

Возвращается старое значение — нет прав на запись или транзакция отменена

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

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

Сформируйте массив или СписокЗначений и передайте его через УстановитьПараметр, а в тексте запроса используйте условие «Поле В (&ИмяПараметра)». Платформа сама развернёт коллекцию. Передавать строку с перечислением через запятую нельзя — это будет одно строковое значение.

Почему отчёт не видит программно заданный параметр?

Чаще всего не установлено свойство Использование = Истина у элемента ПараметрыДанных. Также проверьте, что вы меняете именно те настройки, с которыми формируется отчёт (пользовательские настройки могут перекрывать основные), и что параметр в СКД не имеет ограничения доступности.

Как задать параметр типа «Дата», если нужна пустая дата?

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

Чем параметр сеанса отличается от константы?

Константа хранится в базе постоянно и одинакова для всех пользователей. Параметр сеанса существует только в памяти текущего сеанса, у каждого пользователя свой, и после завершения сеанса значение теряется.

Можно ли задать параметр запроса через конструктор запроса?

Да. В конструкторе запроса на закладке «Условия» при добавлении условия укажите, что сравнение идёт с параметром — конструктор автоматически добавит &Имя в текст. Но само значение всё равно задаётся в коде через УстановитьПараметр.

Итог

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

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