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