Обход дерева значений по уровням

1. Johney20 15.06.18 16:38 Сейчас в теме
Есть заполненное дерево значений типа:
-БазаОтправитель
.....-БазаПолучатель
-БазаОтправитель
.....-БазаПолучатель
...

Мне нужно эти значения записать в регистр сведений:

Отправитель|Получатель|ПланОбмена|ЭтапОбмена|

И я вот не пойму, как мне обходить значения верхнего и нижнего уровней??

&НаСервере
Процедура ОкНаСервере()
	ЭлементыДерева = ИерархияИБ.ПолучитьЭлементы();

	 Если ЭлементыДерева.Количество() > 0 Тогда
		 НЗ = РегистрыСведений.УчастникиПлановОбмена.СоздатьНаборЗаписей();
		 НЗ.Отбор.ПланОбмена.Установить(ПланОбмена);
		 НЗ.Отбор.ЭтапОбмена.Установить(ЭтапОбмена);
		 
		 Для Каждого Стр Из ЭлементыДерева Цикл
			 СтрокаЗапись = НЗ.Добавить();
			 СтрокаЗапись.ПланОбмена = ПланОбмена;
			 СтрокаЗапись.ЭтапОбмена = ЭтапОбмена;
			 СтрокаЗапись.Отправитель = //Элемент дерева значений верхнего уровня
			 СтрокаЗапись.Получатель = // Элемент дерева значений нижнего уровня
		 КонецЦикла;
		 
		 Попытка
			 НЗ.Записать();
		 Исключение
			 ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("Не удалось записать состав участников по этапу ""%1"". Причина" + Символы.ПС + ОписаниеОшибки(), ЭтапОбмена));
		 КонецПопытки;
	 Иначе
		 Сообщить("Необходимо выбрать участников обмена!");
	 КонецЕсли;
КонецПроцедуры
Показать
+
По теме из базы знаний
Найденные решения
5. herfis 498 15.06.18 17:02 Сейчас в теме
(4)
УзлыОтправителей = ИерархияИБ.ПолучитьЭлементы();
Для Каждого УзелОтправителя Из УзлыОтправителей Цикл
      УзлыПолучателей = УзелОтправителя.ПолучитьЭлементы();
      Для Каждого УзелПолучателя Из УзлыПолучателей Цикл
             // тут в переменной УзелОтправителя будет узел верхнего уровня, а в переменной УзелПолучателя - один из его получателей (вложенного уровня)
      КонецЦикла;
КонецЦикла;
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 298 15.06.18 16:46 Сейчас в теме
(1)
И я вот не пойму, как мне обходить значения верхнего и нижнего уровней??

да также через получить элементы, только по родителю.

Если количество уровней иерерхии неопределено, то делать рекурсивную функцию.
Если их всего 2, то получай подчиненного и все.
+
3. Johney20 15.06.18 16:54 Сейчас в теме
(2) А можете пример написать, пожалуйста.
+
4. Johney20 15.06.18 16:59 Сейчас в теме
(2) У меня сложно состоит конкретно в том, чтобы при обходе цикла по данным верхнего уровня получать данные нижнего уровня. Уровней всего два.
+
5. herfis 498 15.06.18 17:02 Сейчас в теме
(4)
УзлыОтправителей = ИерархияИБ.ПолучитьЭлементы();
Для Каждого УзелОтправителя Из УзлыОтправителей Цикл
      УзлыПолучателей = УзелОтправителя.ПолучитьЭлементы();
      Для Каждого УзелПолучателя Из УзлыПолучателей Цикл
             // тут в переменной УзелОтправителя будет узел верхнего уровня, а в переменной УзелПолучателя - один из его получателей (вложенного уровня)
      КонецЦикла;
КонецЦикла;
+
6. Johney20 15.06.18 17:10 Сейчас в теме
(5) Аа, вот я тормоз! Спасибо Вам огромное!
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот