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

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

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

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

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

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

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

Что такое параметры формы и где они объявляются

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

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

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

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

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

// Клиентский код

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

ПараметрыФормы.Вставить("Организация", ТекущаяОрганизация);

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

ОткрытьФорму("Обработка.ПодборТоваров.Форма.ФормаПодбора",

ПараметрыФормы, ЭтотОбъект, Новый УникальныйИдентификатор);

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

Форма = ПолучитьФорму("Справочник.Номенклатура.Форма.ФормаЭлемента",

Новый Структура("Ключ", ВыбраннаяСсылка));

Форма.Открыть();

Для форм списков параметры часто передаются через стандартный параметр Отбор: в структуру помещается ещё одна структура с полями отбора. Например, Новый Структура("Отбор", Новый Структура("Владелец", Контрагент)) откроет список договоров конкретного контрагента. Это работает без какой-либо доработки формы — механизм встроен в платформу.

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

Как прочитать параметры внутри формы

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

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если Параметры.Свойство("РежимПодбора") Тогда

РежимПодбора = Параметры.РежимПодбора;

Элементы.ГруппаВыбора.Видимость = Истина;

Иначе

РежимПодбора = Ложь;

КонецЕсли;

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

Метод Параметры.Свойство("Имя") — безопасный способ проверки наличия параметра. Прямое обращение Параметры.Имя к необъявленному или непереданному параметру вызовет исключение, поэтому для необязательных параметров всегда используйте проверку через Свойство или задавайте значение по умолчанию в ветке Иначе.

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

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

Формы элементов справочников, документов и записей регистров получают параметр Ключ — ссылку на редактируемый объект. Если Ключ не передан или пуст, форма открывается для нового объекта. Параметр ЗначенияЗаполнения принимает структуру с реквизитами нового объекта, а ЗначениеКопирования — ссылку на объект-образец для копирования.

Формы списков поддерживают параметры Отбор, ТекущаяСтрока, РежимВыбора, МножественныйВыбор, ЗакрыватьПриВыборе. Через них реализуются типовые сценарии: открытие списка с предустановленным отбором, позиционирование на нужной строке, открытие формы в режиме подбора из другого документа.

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

Как проверить, что параметры дошли до формы

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

Для Каждого Параметр Из Параметры Цикл

Сообщить(Параметр.Ключ + " = " + Параметр.Значение);

КонецЦикла;

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

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

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

Коллекция Параметры в отладчике
Норма

Содержит переданные имена и значения

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

Коллекция пуста или значение Неопределено

Поведение формы
Норма

Отбор, видимость и заполнение соответствуют параметрам

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

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

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

Активируется уже открытое окно

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

Создаются дубликаты окон

Типичные ошибки и их последствия

Чаще всего проблемы возникают из-за несовпадения имён, чтения параметра в неподходящем обработчике и попытки передать несериализуемое значение. Управляемая форма работает в клиент-серверном режиме, поэтому параметры должны быть сериализуемыми: ссылки, примитивные типы, структуры и массивы из них передаются без проблем, а объекты типа ТабличныйДокумент или запрос — нет.

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

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

Выбор способа передачи в разных сценариях

Выбор между ОткрытьФорму, ПолучитьФорму и стандартными параметрами зависит от задачи: нужен ли результат выбора, требуется ли настройка формы до показа, работаете ли вы с типовой или собственной формой.

Сравнение вариантов

ОткрытьФорму со структурой параметров

Универсальный способ для собственных форм; поддерживает оповещение о закрытии. Ограничение — нет доступа к форме до её открытия

Стандартные параметры (Ключ, Отбор)

Подходит для типовых форм без доработки. Ограничение — состав параметров фиксирован платформой

ПолучитьФорму

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

Оповещения (Оповестить)

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

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

Итог

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

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

Частые вопросы

Как передать параметр в форму, которая уже открыта?

Через механизм оповещений: вызовите Оповестить("ИмяСобытия", Данные, Источник), а в целевой форме реализуйте обработчик ОбработкаОповещения с проверкой имени события. Коллекция Параметры после создания формы изменить нельзя.

Почему параметр виден в отладчике, но обращение к нему вызывает ошибку?

Скорее всего, обращение происходит вне ПриСозданииНаСервере — например, в ПриОткрытии на клиенте после серверных вызовов или в обработчике команды. Сохраните значение в реквизит формы при создании и далее работайте с реквизитом.

Можно ли передать таблицу значений через параметры формы?

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

Чем ключевой параметр отличается от обычного?

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

Как узнать, какие параметры передаёт типовая конфигурация при открытии формы?

Установите точку останова в ПриСозданииНаСервере нужной формы, запустите отладку и откройте форму штатным путём. В табло добавьте коллекцию Параметры — будут видны все переданные имена и значения, включая стандартные.

Что делать, если параметр с отбором не применяется к списку?

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