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