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

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

Какие есть параметры формы в 1С и как с ними работать

Разбираем параметры формы в 1С: стандартные и пользовательские, передача при открытии, обработка в ПриСозданииНаСервере, типичные ошибки и примеры кода.

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

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

Работа с параметрами строится вокруг трёх моментов: передача значений при вызове ОткрытьФорму() или ПолучитьФорму(), объявление параметров в конфигураторе и их обработка в обработчике ПриСозданииНаСервере. Ниже разберём каждый этап с конкретными примерами.

Какие бывают параметры формы: стандартные и пользовательские

Стандартные параметры задаются платформой и зависят от назначения формы. У формы списка это Отбор, ТекущаяСтрока, Отображение, у формы объекта — Ключ (ссылка на редактируемый объект), ЗначениеКопирования, ЗначенияЗаполнения, Основание для ввода на основании. У форм выбора дополнительно есть РежимВыбора, МножественныйВыбор, ЗакрыватьПриВыборе, ВыборГруппИЭлементов.

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

Стандартные параметры форм объектов и списков

Чаще всего на практике используются параметры Отбор и ЗначенияЗаполнения. Первый накладывает отбор на динамический список формы, второй заполняет реквизиты нового объекта при его создании. Параметр Ключ передаётся автоматически при открытии существующего объекта и вручную почти никогда не задаётся.

ПараметрТип формыНазначение
ОтборФорма спискаСтруктура с отбором динамического списка
КлючФорма объектаСсылка на редактируемый объект
ЗначениеКопированияФорма объектаОбъект, на основе которого создаётся копия
ЗначенияЗаполненияФорма объектаСтруктура значений реквизитов нового объекта
ОснованиеФорма объектаОбъект-основание при вводе на основании
РежимВыбораФорма выбораОткрытие формы в режиме подбора значения
ЗакрыватьПриВыбореФорма выбораЗакрытие формы после выбора элемента
ТекущаяСтрокаФорма спискаПозиционирование списка на указанной ссылке

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

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

Параметры передаются вторым аргументом метода ОткрытьФорму() в виде структуры. Ключи структуры должны совпадать с именами стандартных или объявленных пользовательских параметров — регистр букв значения не имеет, но опечатка в имени приведёт к ошибке «Параметр не найден» либо к тихому игнорированию, если проверка отключена.

bsl
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Новый Структура("Контрагент", ВыбранныйКонтрагент));
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина);

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

Третий аргумент — владелец формы — тоже влияет на поведение: форма, открытая с владельцем, закрывается вместе с ним и может вернуть результат выбора через обработчик ОбработкаВыбора формы-владельца. Это стандартный способ организовать подбор значения без модальных окон.

Как открыть список с отбором
  1. 1
    Сформируйте структуру отбора: Новый Структура("ИмяПоля", Значение)
  2. 2
    Поместите её в структуру параметров под ключом "Отбор"
  3. 3
    Вызовите ОткрытьФорму() с именем формы списка и структурой параметров
  4. 4
    Проверьте, что открывшийся список показывает только нужные записи

Обработка параметров в ПриСозданииНаСервере

Внутри формы переданные значения доступны через свойство Параметры в обработчике ПриСозданииНаСервере. Здесь принято читать пользовательские параметры, проверять их заполненность через Параметры.Свойство("Имя", Значение) и настраивать форму: устанавливать отборы, менять видимость элементов, блокировать редактирование.

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

bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
  ТолькоПросмотрРежим = Ложь;
  Если Параметры.Свойство("ОткрытьДляПросмотра", ТолькоПросмотрРежим)
    И ТолькоПросмотрРежим Тогда
    ЭтаФорма.ТолькоПросмотр = Истина;
  КонецЕсли;
КонецПроцедуры

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

Пользовательские параметры: объявление и ограничения

Чтобы параметр можно было передать, его нужно объявить в конфигураторе: палитра свойств формы → «Параметры» → «Добавить». Указываются имя, тип значения и флаги. Тип ограничивает, что можно передать: если объявлен тип «СправочникСсылка.Контрагенты», а передана строка, платформа выдаст ошибку несоответствия типов ещё на этапе открытия формы.

Есть важное ограничение: через параметры нельзя передавать произвольные объекты, не сериализуемые платформой, — например, объекты типа «Запрос» с установленными параметрами или открытые соединения. Передавайте простые значения, ссылки, структуры и массивы из допустимых типов. Для сложных данных используйте временное хранилище: поместите данные через ПоместитьВоВременноеХранилище() и передайте в форму только адрес.

Типичные ошибки при работе с параметрами

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

Вторая группа ошибок связана с ключом уникальности. Если форма открывается «не та» или активируется уже открытая вместо новой, проверьте ключевые параметры: вероятно, они совпадают у разных вызовов. Обратная ситуация — плодятся одинаковые окна — возникает, когда ключевых параметров нет, а нужно было ограничить число экземпляров.

Типичные ошибки
01
Обращение к Параметры.Имя напрямую без Свойство() — ошибка, если форму открыли без параметра
02
Опечатка в имени параметра в структуре — значение молча теряется или вызывает ошибку открытия
03
Передача несериализуемого объекта вместо ссылки или адреса хранилища
04
Ожидание, что Отбор сработает на форме без динамического списка в основном реквизите
05
Чтение параметров после ПриСозданииНаСервере без сохранения их в реквизиты формы

Как проверить, что параметры сработали

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

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

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

Открытие формы из интерфейса без параметров
Норма

Форма открывается в режиме по умолчанию

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

Ошибка обращения к отсутствующему параметру

Открытие с параметром Отбор
Норма

Список показывает только отфильтрованные записи

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

Список полный, отбор не применился

Повторный вызов с теми же ключевыми параметрами
Норма

Активируется уже открытая форма

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

Открывается дубль окна

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

Итог

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

Параметры формы бывают стандартные (Отбор, Ключ, ЗначенияЗаполнения, РежимВыбора) и пользовательские, объявляемые в конфигураторе. Передаются структурой через ОткрытьФорму(), читаются в ПриСозданииНаСервере через Параметры.Свойство(). Ключевые параметры управляют уникальностью окна, объёмные данные передают через временное хранилище.

Частые вопросы о параметрах формы 1С

Можно ли передать параметр в форму, не объявляя его в конфигураторе?

Стандартные параметры (Отбор, Ключ, РежимВыбора) объявлять не нужно — их знает платформа. Пользовательский параметр без объявления в конфигураторе либо вызовет ошибку при открытии, либо будет недоступен в форме, поэтому объявление обязательно.

Чем отличаются ОткрытьФорму() и ПолучитьФорму() при передаче параметров?

Оба метода принимают структуру параметров. Разница в том, что ПолучитьФорму() только создаёт объект формы без отображения, что удобно для программной подготовки перед показом, а ОткрытьФорму() сразу показывает форму пользователю. Обработка параметров в ПриСозданииНаСервере работает одинаково.

Почему параметр Отбор игнорируется при открытии формы списка?

Наиболее вероятные причины: основной реквизит формы не является динамическим списком, имя поля в структуре отбора не совпадает с именем поля запроса списка, либо отбор переопределяется кодом в ПриСозданииНаСервере, который сбрасывает установки.

Как передать в форму таблицу значений?

Напрямую таблицу через параметры передавать не рекомендуется. Поместите её во временное хранилище методом ПоместитьВоВременноеХранилище(), передайте в форму адрес хранилища строкой, а в ПриСозданииНаСервере извлеките данные через ПолучитьИзВременногоХранилища().

Что делает флаг «Ключевой параметр» и когда его включать?

Ключевой параметр входит в ключ уникальности формы. Включайте флаг, когда нельзя допустить два одинаковых окна: например, форма настройки для конкретного объекта. Тогда повторный вызов с тем же значением параметра активирует уже открытую форму вместо создания дубликата.

Доступны ли параметры формы после её создания?

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