Как получить параметры формы-владельца при выборе справочника в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В процессе разработки конфигураций на платформе 1С часто возникает задача передать дополнительные данные из формы документа или справочника в форму выбора (подбора) другого справочника. Например, нам нужно знать значение Склад или Организация в момент выбора номенклатуры, чтобы отфильтровать список или применить специфическую логику. Давайте разберем, как правильно реализовать это взаимодействие в разных типах форм.

Решение для управляемых форм: использование механизма «Связи параметров выбора»

В современных управляемых формах (платформа 8.2 и выше) наиболее правильным, декларативным и поддерживаемым способом является использование механизма Связи параметров выбора. Этот метод позволяет платформе автоматически передать значения из контекста формы-владельца в форму выбора без написания сложного кода обхода иерархии элементов.

  1. Откройте форму, из которой осуществляется выбор, и найдите нужный реквизит или поле ввода.
  2. В свойствах поля найдите пункт Связи параметров выбора.
  3. В открывшемся окне добавьте новую связь: укажите имя параметра, который будет передан, и выберите реквизит формы-владельца, значение которого необходимо отправить.

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


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

Этот метод считается стандартом разработки, так как он не зависит от структуры размещения элементов на форме и не ломается при изменении дизайна интерфейса.

Решение для обычных форм (например, УТ 10.4)

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

Передача параметров при открытии формы

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

При вызове ОткрытьФорму() или ОткрытьФормуМодально() вторым параметром можно передать структуру:


ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("Склад", ЭлементыФормы.ПолеСклад.Значение);
ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыОткрытия);

Внутри вызываемой формы выбора эти данные будут доступны в коллекции ПараметрОбъект или при анализе стандартного параметра Владелец.

Обращение к форме-владельцу напрямую

Если форма открыта модально, можно передать саму ссылку на форму-владелец. В коде открытия это выглядит так:

ОткрытьФормуМодально("Справочник.Номенклатура.ФормаВыбора", ЭтаФорма);

Тогда в форме выбора вы сможете обратиться к форме-владельцу напрямую и прочитать любые ее реквизиты:


// В коде формы выбора
Если ТипЗнч(ПараметрОбъект) = Тип("Форма") Тогда
    ТекущийСклад = ПараметрОбъект.Склад;
КонецЕсли;

Чего стоит избегать

Начинающие разработчики часто пытаются «докопаться» до источника выбора через иерархию элементов формы: ЭтаФорма.ВладелецФормы.КонтекстноеМеню.Родитель.... Настоятельно рекомендуем не использовать этот метод. Это «хрупкий» код: любое изменение расположения элементов в Конфигураторе приведет к ошибке доступа к объекту и неработоспособности функции подбора. Всегда отдавайте предпочтение передаче параметров через структуру при открытии или использованию штатных связей параметров выбора.

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

← На главную