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

Программист 1С v8.3 (Управляемые формы)
← На главную

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

Основные принципы передачи параметров

Чтобы успешно передать параметр в форму, мы не будем отказываться от стандартных механизмов платформы. Мы лишь возьмем под контроль процесс открытия формы. Основным инструментом здесь выступает метод ОткрытьФорму().

Алгоритм действий следующий:

  1. В процедуре НачалоВыбора поля ввода мы устанавливаем СтандартнаяОбработка = Ложь. Это не означает, что мы ломаем систему — мы просто сообщаем платформе, что хотим самостоятельно настроить параметры открытия формы, после чего откроем её программно.
  2. Формируем структуру с данными, которые необходимо передать.
  3. Вызываем ОткрытьФорму(), передавая имя формы, сформированную структуру параметров и элемент-владелец.

Реализация на стороне вызывающей формы

Рассмотрим конкретный пример. Допустим, у нас есть поле Сырье в табличной части документа, и нам нужно передать текущее значение реквизита МестоХранения из объекта документа в форму выбора справочника Сырье.


&НаКлиенте
Процедура ПоступлениеНаименованиеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("Сырье", Элементы.Поступление.ТекущиеДанные.Сырье);
    ПараметрыФормы.Вставить("МестоХранения", Объект.МестоХранения);
    
    // Передаем параметры и элемент-владелец
    ОткрытьФорму("Справочник.Сырье.ФормаВыбора", ПараметрыФормы, Элемент);
КонецПроцедуры

Обратите внимание: передача Элемент в качестве третьего параметра (владельца) обязательна. Именно благодаря этому платформа понимает, куда возвращать выбранное значение после того, как пользователь сделает свой выбор в форме.

Обработка параметров в принимающей форме

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.Свойство("МестоХранения") Тогда
        МестоХранения = Параметры.МестоХранения;
    КонецЕсли;
    
    Если Параметры.Свойство("Сырье") Тогда
        НашеСырье = Параметры.Сырье;
    КонецЕсли;
КонецПроцедуры

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

Использование универсального подхода к инициализации

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Универсальный перенос параметров в реквизиты формы с совпадающими именами
    Для Каждого Реквизит Из ЭтотОбъект.ПолучитьРеквизиты() Цикл
        Если Параметры.Свойство(Реквизит.Имя) Тогда
            Значение = Параметры[Реквизит.Имя];
            ЭтотОбъект[Реквизит.Имя] = Значение;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Этот метод позволяет существенно сократить объем кода и сделать его более поддерживаемым при добавлении новых реквизитов.

Полезные советы для настройки формы выбора

Иногда требуется не просто передать значение, а повлиять на поведение списка данных:

Используя данные подходы, вы сможете создавать гибкие и интерактивные формы, которые отвечают требованиям бизнеса, оставаясь при этом в рамках «чистой» архитектуры управляемого приложения 1С.

← На главную