При разработке управляемых форм часто возникает задача отображения иерархического справочника в виде двух отдельных списков: в левой части — дерево групп, в правой — список элементов, принадлежащих выбранной группе. Многих разработчиков ставит в тупик вопрос, как связать эти компоненты так, чтобы при переключении группы список элементов обновлялся автоматически без сложного кода. Давайте разберем два основных подхода к решению этой задачи.
Этот метод основан на принудительном обновлении динамического списка при изменении текущей строки в дереве. Суть подхода заключается в использовании события ПриАктивизацииСтроки у элемента управления, отображающего группы.
ПриАктивизацииСтроки для элемента ДеревоГрупп.Рассмотрим пример кода, который выполняет эту задачу:
&НаКлиенте
Процедура ДеревоГруппПриАктивизацииСтроки(Элемент)
ТекущаяГруппа = Элементы.ДеревоГрупп.ТекущаяСтрока;
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
СписокНоменклатура,
"Родитель",
ТекущаяГруппа,
ВидСравненияКомпоновкиДанных.Равно,
"Родитель",
Истина
);
КонецПроцедуры
Этот способ прост в реализации и позволяет гибко управлять логикой отбора, однако он требует написания программного кода, что не всегда соответствует принципам декларативной разработки в управляемых формах.
Более правильным и архитектурно чистым подходом считается использование механизма Связи параметров выбора. Платформа 1С позволяет настроить обновление данных автоматически, без написания кода в модуле формы.
Разберем процесс настройки по шагам:
СписокНоменклатура необходимо добавить условие, фильтрующее записи по параметру. Например: ГДЕ Ссылка.Родитель = &Родитель. Обязательно убедитесь, что параметр Родитель определен в параметрах динамического списка.СписокНоменклатура. Найдите раздел Связи параметров выбора.Родитель. В качестве источника данных укажите элемент формы ДеревоГрупп (путь к данным — ТекущаяСтрока).После выполнения этих настроек платформа самостоятельно отследит изменение текущей строки в дереве групп и передаст новое значение в параметр Родитель запроса динамического списка. Это обновление произойдет на уровне движка платформы.
Мы проанализировали оба подхода и пришли к следующим выводам:
Таким образом, «магия» работы типовых справочников заключается именно в декларативных настройках. Теперь вы знаете, что при создании подобных интерфейсов не всегда нужно искать логику в коде — зачастую она скрыта в настройках свойств элементов управления в конфигураторе.