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