Справочные материалы по 1С

Работа с деревом значений в 1С 8.x

Как самостоятельно заполнить дерево значений?

Процедура ЗаполнениеДерева(Кнопка) 
	Дерево.Колонки.Очистить(); 
	Дерево.Колонки.Добавить("ИмяКолонки"); 

	// Создать первую строку. Правильнее сказать создать элемент 
	// коллекции. Он помещается в переменную "СтрокаВерхнегоУровня". 
	СтрокаВерхнегоУровня = Дерево.Строки.Добавить(); 

	// В колонку "ИмяКолонки" записать значение "Старшая". 
	СтрокаВерхнегоУровня.ИмяКолонки = "Старшая"; 

	// Создать строку подчиненную "Старшей". 
	ПодчиненнаяСтрока =СтрокаВерхнегоУровня.Строки.Добавить(); 
	ПодчиненнаяСтрока.ИмяКолонки = "Первая подчиненная"; 

	ПодчиненнаяВторогоУровня = ПодчиненнаяСтрока.Строки.Добавить(); 
	ПодчиненнаяВторогоУровня.ИмяКолонки = "Первая нижняя"; 

	ПодчиненнаяВторогоУровня = ПодчиненнаяСтрока.Строки.Добавить(); 
	ПодчиненнаяВторогоУровня.ИмяКолонки = "Вторая нижняя"; 

	ПодчиненнаяСтрока = СтрокаВерхнегоУровня.Строки.Добавить(); 
	ПодчиненнаяСтрока.ИмяКолонки = "Вторая подчиненная"; 

	// Использование метода позволит увидеть результат работы 
	// с деревом значений в табличном поле. 
	ЭлементыФормы.Дерево.СоздатьКолонки(); 

КонецПроцедуры 

Процедура ОткрытиеВетки(Кнопка) 

	// Сделать текущим именно элемент коллекции "Строки". 
	РезультатПоиска = Дерево.Строки.Найти("Первая нижняя", "ИмяКолонки", Истина); 

	Если РезультатПоиска <> Неопределено Тогда 
		ЭлементыФормы.Дерево.ТекущаяСтрока = РезультатПоиска; 
	КонецЕсли; 

КонецПроцедуры            
Как в дереве значений найти строку по определенному условию?

// С деревом значений проблема в том, что по сути это массив строк с данными,
// каждая строка в котором может иметь свой массив строк, а может и не иметь.
// Ниже приведен пример функции, которая возвращает строку, найденную по 
// определенному условию

// Получаем искомую строку вызвав функцию, в функцию передаем строки дерева 
// значений на первом уровне:
ОписаниеМетаданныхЗагрузки = НайтиОтмеченноеЗначениеВДеревеЗначений(ДеревоМетаданных.Строки);

// Эта функция осуществляет поиск строки
// Если строка найдена, возвращает найденною строку дерева
// Если строка не найдена, возвращает неопределено
Функция НайтиОтмеченноеЗначениеВДеревеЗначений(СтрокиДерева)

	// пробежимся по всем строкам (по всем строкам одного уровня, которые были переданы!)
	Для каждого Строка из СтрокиДерева Цикл
		// Вот наше условие, значение Выгружать у строки равно 1:
		Если Строка.Выгружать = 1 Тогда
			// Если условие сработало, возвращаем строку
			Возврат Строка;
		КонецЕсли;
	КонецЦикла;

	// Если не нашли строку, смотрим под-строки каждой строки
	Для каждого Строка из СтрокиДерева Цикл

		// Здесь осуществляется рекурсивный вызов
		НайденнаяСтрока = НайтиОтмеченноеЗначениеВДеревеЗначений(Строка.Строки);
		Если НайденнаяСтрока <> неопределено Тогда
			// Если нашли, возвращается строка
			Возврат НайденнаяСтрока;
		КонецЕсли;

	КонецЦикла;

	// Не нашли строку по условию, возвращаем неопределено
	Возврат неопределено;

КонецФункции          



Задайте вопрос программисту 1С

+7 901 312 83 57