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