Как связать два динамических списка в управляемой форме, чтобы элементы отображались согласно выбранной группе?

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

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

Вариант 1: Программная установка отбора

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

  1. Создаем на форме обработчик события ПриАктивизацииСтроки для элемента ДеревоГрупп.
  2. В теле обработчика вызываем метод, который будет устанавливать отбор для второго динамического списка.

Рассмотрим пример кода, который выполняет эту задачу:


&НаКлиенте
Процедура ДеревоГруппПриАктивизацииСтроки(Элемент)
    ТекущаяГруппа = Элементы.ДеревоГрупп.ТекущаяСтрока;
    ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
        СписокНоменклатура, 
        "Родитель", 
        ТекущаяГруппа, 
        ВидСравненияКомпоновкиДанных.Равно, 
        "Родитель", 
        Истина
    );
КонецПроцедуры

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

Вариант 2: Декларативная настройка связей параметров выбора

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

Разберем процесс настройки по шагам:

  1. Подготовка запроса: В запросе динамического списка СписокНоменклатура необходимо добавить условие, фильтрующее записи по параметру. Например: ГДЕ Ссылка.Родитель = &Родитель. Обязательно убедитесь, что параметр Родитель определен в параметрах динамического списка.
  2. Настройка связей: Перейдите в палитру свойств элемента СписокНоменклатура. Найдите раздел Связи параметров выбора.
  3. Добавление связи: В открывшемся окне добавьте новую связь для параметра Родитель. В качестве источника данных укажите элемент формы ДеревоГрупп (путь к данным — ТекущаяСтрока).

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

Какой метод выбрать?

Мы проанализировали оба подхода и пришли к следующим выводам:

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

← На главную