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

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

Как задать параметр в 1С: полное руководство

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

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

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

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

Как задать параметр в запросе 1С

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

Значение присваивается методом УстановитьПараметр() объекта «Запрос». Порядок вызова не важен — главное, чтобы все параметры были установлены до Выполнить().

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

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

"ВЫБРАТЬ

| Продажи.Контрагент,

| СУММА(Продажи.Сумма) КАК Сумма

|ИЗ

| РегистрНакопления.Продажи КАК Продажи

|ГДЕ

| Продажи.Период МЕЖДУ &НачалоПериода И &КонецПериода

|СГРУППИРОВАТЬ ПО

| Продажи.Контрагент";

Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекущаяДатаСеанса()));

Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ТекущаяДатаСеанса()));

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

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

Параметры-списки и виртуальные таблицы

Для отбора по нескольким значениям используйте оператор В вместе с параметром типа «Список значений» или массивом. Это стандартная замена конструкции ИЛИ для каждого элемента.

СписокКонтрагентов = Новый СписокЗначений;

СписокКонтрагентов.Добавить(Контрагент1);

СписокКонтрагентов.Добавить(Контрагент2);

Запрос.Текст = "ВЫБРАТЬ * ИЗ Документ.Реализация ГДЕ Контрагент В (&Список)";

Запрос.УстановитьПараметр("Список", СписокКонтрагентов);

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

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

"ВЫБРАТЬ * ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Склад = &Склад)";

Запрос.УстановитьПараметр("Период", ТекущаяДатаСеанса());

Запрос.УстановитьПараметр("Склад", Склад);

Условие в параметрах виртуальной таблицы выполняется до выборки данных, поэтому оно работает быстрее, чем аналогичное условие в секции ГДЕ. Для больших регистров разница заметна.

Типичные ошибки
01
Передача строки вместо ссылки — запрос отрабатывает без ошибки, но возвращает пустой результат
02
Условие на поле в секции ГДЕ вместо параметра виртуальной таблицы — лишний перебор всех записей регистра
03
Параметр периода без границы времени: конец дня без указания времени трактуется как 00:00:00, часть документов выпадает из выборки

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

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

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

Программная установка параметра СКД

Если отчёт формируется из кода, параметр задаётся через настройки компоновщика:

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

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

Новый ПараметрКомпоновкиДанных("НачалоПериода"));

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

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

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

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

Параметры сеанса

Параметры сеанса хранят значения, специфичные для текущего пользователя: текущую организацию, склад, ответственного. Создаются они только в конфигураторе: ветка «Общие» → «Параметры сеанса». Для каждого параметра указывается имя и тип.

Заполнение происходит в модуле сеанса, в обработчике УстановкаПараметровСеанса. Он вызывается платформой при первом обращении к параметру.

Процедура УстановкаПараметровСеанса(ТребуемыеПараметры) Экспорт

Если ТребуемыеПараметры = Неопределено

Или ТребуемыеПараметры.Найти("ТекущийСклад") <> Неопределено Тогда

ПараметрыСеанса.ТекущийСклад =

Справочники.Склады.НайтиПоНаименованию("Основной");

КонецЕсли;

КонецПроцедуры

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

Функциональные опции и параметры форм

Функциональная опция — это настройка конфигурации, включающая или скрывающая часть интерфейса и логики. Создаётся в конфигураторе («Общие» → «Функциональные опции»), значение хранится в константе, регистре или другом объекте. В коде чтение выполняется через ПолучитьФункциональнуюОпцию("Имя").

Параметры формы передаются при открытии через структуру:

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

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

ПараметрыФормы.Вставить("РежимВыбора", Истина);

ОткрытьФорму("Документ.Реализация.ФормаОбъекта", ПараметрыФормы, ЭтаФорма);

В форме-получателе параметры доступны через Параметры.ИмяПараметра в обработчике ПриСозданииНаСервере. Если параметр объявлен в списке параметров формы с флагом «Ключевой», он влияет на уникальность открытия формы.

Какой тип параметра выбрать

Параметр запроса

Разовое значение для одной выборки. Не хранится, существует только в момент выполнения.

Параметр СКД

Настройка отчёта, видимая пользователю. Подходит для отборов и периодов в отчётах.

Параметр сеанса

Значение на время работы пользователя: склад, организация. Требует прав в конфигураторе.

Функциональная опция

Постоянная настройка поведения конфигурации, хранится в базе и влияет на интерфейс.

Проверка результата и типичные проблемы

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

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

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

Запрос с параметром-отбором
Норма

Возвращает ожидаемые строки, при смене значения результат меняется

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

Пустой результат при заведомо существующих данных — проверяйте тип значения

Параметр СКД
Норма

Изменение в настройках отчёта меняет итоговые данные

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

Значение задано, но отчёт не меняется — проверьте флаг Использование

Параметр сеанса
Норма

При обращении возвращает установленное значение

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

Возвращается пустая ссылка — обработчик УстановкаПараметровСеанса не отработал или упал с ошибкой

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

Итог

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

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

Часто задаваемые вопросы

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

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

Почему запрос с параметром возвращает пустой результат без ошибки?

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

Как передать в параметр дату с учётом конца дня?

Используйте функцию КонецДня() или КонецМесяца() при установке параметра. Дата без времени трактуется как начало суток (00:00:00), поэтому документы за последний день периода могут выпасть из выборки.

Можно ли изменить параметр сеанса во время работы?

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

Чем параметр СКД отличается от отбора?

Параметр подставляется в текст запроса или выражения схемы и влияет на выборку данных на уровне источника. Отбор применяется к уже полученным данным. Для производительности условия по периодам и ключевым измерениям лучше оформлять параметрами.

Нужны ли права администратора для создания параметра сеанса?

Создание самого объекта выполняется в конфигураторе, поэтому нужны права на изменение конфигурации. Чтение и установка значения в пользовательском режиме зависят от настроенных ролей — обычно прикладному пользователю достаточно стандартных прав.