Доброго времени суток всем!
Есть дерево значений. Нужно перебрать каждую строку.
Когда один уровень все понятно.

```1c
    Для Каждого СтрокаДереваОстатков Из ОстаткиДляНовогоКлиента.Строки Цикл
    производим действия
    КонецЦикла;
```

А как обратиться ко второму уровня, третьему, четвертому и т.д.

ОК Google. Говорил. Для первого уровня ответ есть, а вот далее тоже есть но не прокатывает.
Код выдран из рабочего места менеджера УТ 10.3.43.2
Только в дерево запихали еще иерархию и теперь ее надо обработать.
---
пример обхода рекурсивно:

```1c
    Процедура ОбходДереваДетально(ПереданноеДер)

    Для Каждого СтрПолученногоДерева Из ПереданноеДер.Строки Цикл

    Сообщить(СтрПолученногоДерева.Номенклатура);

    Если СтрПолученногоДерева.Строки.Количество()>0 Тогда

    ОбходДереваДетально(СтрПолученногоДерева);

    КонецЕсли;

    КонецЦикла;
```
---
Лицорука.
На основе "найденного решения"

```1c
    Процедура ОбходДереваДетально(ПереданноеДер, тз)
    Для Каждого СтрПолученногоДерева Из ПереданноеДер.Строки Цикл
    Сообщить(СтрПолученногоДерева.Номенклатура);
    Если (условие к удалению) тогда
    стрТз = тз.Добавить();
    стрТз.Строки - ПереданноеДер.Строки;
    стрТз.СтрокаКУдалению = СтрПолученногоДерева;
    Если СтрПолученногоДерева.Строки.Количество()>0 Тогда
    ОбходДереваДетально(СтрПолученногоДерева);
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры

    Процедура УдалитьНайденные(тз)
    Для Каждого стрТз из тз Цикл
    стрТз.Строки.Удалить(стрТз.СтрокаКУдалению);
    КОнеЦЦикла;
    КОнецПроцедуры
```
---
да также, н-р

```1c
    Для каждого СтрокаДокументаОле Из ПереносимыеДокументы.Строки Цикл
    ИмяТаблицыОле = СтрокаДокументаОле.ИмяТаблицы;

    ПодстрокаСтроки = СтрокаДокументаОле.Строки;
    Для каждого СтрокаДокумента Из ПодстрокаСтроки Цикл
```

если количество уровней неизвестно, то делай рекурсию
---
пример обхода рекурсивно:

```1c
    Процедура ОбходДереваДетально(ПереданноеДер)

    Для Каждого СтрПолученногоДерева Из ПереданноеДер.Строки Цикл

    Сообщить(СтрПолученногоДерева.Номенклатура);

    Если СтрПолученногоДерева.Строки.Количество()>0 Тогда

    ОбходДереваДетально(СтрПолученногоДерева);

    КонецЕсли;

    КонецЦикла;
```
---
Чтобы понять что такое рекурсия, нужно сначала понять, что такое рекурсия. ©
---
А как удалить строки по условию из дерева значений.
Дерево значений я перебрал. Получил массив строк которые нужно удалить.
Строки могут быть как первого, второго ... четвертого уровня и т.д.
Если вот так
```1c
    Для каждого СтрУдалить из МассивНаУдаление Цикл
    Дерево.Строки.Удалить(СтрУдалить);
    КонецЦикла
```

То проходит только первый уровень.
А как удалить в последующих уровнях.
---
А как удалить в последующих уровнях.

Сохранять не только строку, но и коллекцию Строки, из которой нужно удалить?
Или я ещё не проснулся и фигню гоню?
---
Можно пример???
---
Пример чего?
Создашь вместо массива ТЗ с колонками Строки и СтрокаКУдалению.
Дальше тот же алгоритм, тольно вместо добавления в массив - добавляешь в ТЗ.
Потом
Для каждого стрТз из ТЗ Цикл
  стрТз.Строки.Удалить(стрТз.СтрокаКУдалению);
КонецЦикла
---
Ну создал. С двумя колонками.

```1c
    Для каждого СтрДереваДляУдаления из Дерево.Строки Цикл
    Стр = ТЗ.Добавить();
    Стр.Строки = Что сюда писать???
    Стр.СтрокаКУдалению = СтрДереваДляУдаления.
    КонецЦикла
```
---
Лицорука.
На основе "найденного решения"

```1c
    Процедура ОбходДереваДетально(ПереданноеДер, тз)
    Для Каждого СтрПолученногоДерева Из ПереданноеДер.Строки Цикл
    Сообщить(СтрПолученногоДерева.Номенклатура);
    Если (условие к удалению) тогда
    стрТз = тз.Добавить();
    стрТз.Строки - ПереданноеДер.Строки;
    стрТз.СтрокаКУдалению = СтрПолученногоДерева;
    Если СтрПолученногоДерева.Строки.Количество()>0 Тогда
    ОбходДереваДетально(СтрПолученногоДерева);
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры

    Процедура УдалитьНайденные(тз)
    Для Каждого стрТз из тз Цикл
    стрТз.Строки.Удалить(стрТз.СтрокаКУдалению);
    КОнеЦЦикла;
    КОнецПроцедуры
```
---
Представь, что дерево значений это таблицазначений, которая содержит предопределенную колонку "строки". В каждой строке, в ячейке "строки" находится точно такая же по структуре таблицазначений, которая содержит предопределенную колонку "строки" и т.д. Реализовывал и часто пользовался такими структурами в 1С77.