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