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