Получаю строку так:

```1c
    ДеревоСтарое = РеквизитФормыВЗначение("Товары");
    Строка = ДеревоСтарое.Строки.НайтиСтроки(Новый Структура("Номенклатура,Характеристика", строка2.Номенклатура, строка2.Характеристика));
```

Как теперь "Строка" добавить в другое ДеревоЗначений?
---
```1c
    Для Каждого пСтрока Из Строка Цикл
    НоваяСтрока = НовоеДерево.Строки.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, пСтрока);
    КонецЦикла;
```
---
```1c
    Строка = ДеревоСтарое.Строки.НайтиСтроки(Новый Структура("Номенклатура,Характеристика", строка2.Номенклатура, строка2.Характеристика));
```

Вот это возвращает массив строк. В новом дереве нет никаких реквизитов, поэтому ЗаполнитьЗначенияСвойств не даст нужного эффекта. Поэтому надо, для начала, новое дерево сделать идентичным старому:

```1c
    НовоеДерево = Новый ДеревоЗначений;
    Для Каждого пКолонка Из ДеревоСтарое.Колонки Цикл
    НовоеДерево.Колонки.Добавить(пКолонка.Имя);
    КонецЦикла;
```

Ну и дальше

```1c
    МассивСтрок = ДеревоСтарое.Строки.НайтиСтроки(Новый Структура("Номенклатура,Характеристика", строка2.Номенклатура, строка2.Характеристика));
    Для Каждого пСтрока Из МассивСтрок Цикл
    НоваяСтрока = ДеревоНовое.Строки.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, пСтрока);
    КонецЦикла;
```
---
Читаем внимательно справку по Методу НайтиСтроки для дерева значений. Там есть второй параметр "ВключатьПодчиненные".
---
```1c
    Для Каждого пСтрока Из Строка Цикл
    НоваяСтрока = НовоеДерево.Строки.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, пСтрока);
    КонецЦикла;
```
---
Ошибку выдает:
Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
{Обработка.СостояниеОбеспечения.Форма.Форма.Форма(81)}:ЗначениеВРеквизитФормы(НоваяСтрока, Строка);

Вот Код:

```1c
    Строка = ДеревоСтарое.Строки.НайтиСтроки(Новый Структура("Номенклатура,Характеристика", строка2.Номенклатура, строка2.Характеристика));
    НоваяСтрока = ДеревоНовое.Строки.Добавить();
    ЗначениеВРеквизитФормы(НоваяСтрока, Строка);
```
---
Я вроде другой код писал :)
---
А ОЙ :D Извиняюсь, немножечко перепутал
---
Чтобы потом новое дерево добавить в реквизит с типом ДеревоЗначений, то нужно уже ЗначениеВРеквизитФормы использовать, да ?
---
Да, если нужно именно в реквизит формы запихать, конечно
---
Реквизит с типом ДеревоЗначений Называется Товары.
Пробовал сделать так: "ЗначениеВРеквизитФормы(ДеревоНовое, Товары);"
И так ЗначениеВРеквизитФормы(ДеревоНовое, "Товары");
Но выдает ошибку:
Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
{Обработка.СостояниеОбеспечения.Форма.Форма.Форма(86)}:ЗначениеВРеквизитФормы(ДеревоНовое, Товары);

Что не так ?
---
Тут не знаю, всё зависит от того, что в реквизите формы и того, что в реквизите ДеревоНовое
---
Ну я с Товары достал нужные мне строки по тому коду, который писал выше. Делаю Товары.ПолучитьЭлементы().Очистить(); А потом просто добавляю туда данные с другого дерева, где находятся отобранные строки
---
Ключевой вопрос - как :) Покажи полный код?
---
```1c
    ДеревоНовое = Новый ДеревоЗначений;
    ДеревоСтарое = РеквизитФормыВЗначение("Товары");
    РезервТовары = Товары.ПолучитьЭлементы();
    Резерв = Товары.ПолучитьЭлементы();
    Для каждого строка1 из Резерв Цикл
    Товар = строка1.ПолучитьЭлементы();
    Для каждого строка2 из Товар Цикл

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ВложенныйЗапрос.Номенклатура КАК Номенклатура,
    | ВложенныйЗапрос.Характеристика КАК Характеристика
    |ИЗ
    | (ВЫБРАТЬ
    | ЗаказыПоставщикам.ЗаказПоставщику КАК ЗаказПоставщику,
    | ЗаказыПоставщикам.Номенклатура КАК Номенклатура,
    | ЗаказыПоставщикам.Характеристика КАК Характеристика
    | ИЗ
    | РегистрНакопления.ЗаказыПоставщикам КАК ЗаказыПоставщикам
    | ГДЕ
    | ЗаказыПоставщикам.ЗаказПоставщику.ДокументОснование = &ЗаказПоставщику) КАК ВложенныйЗапрос
    |ГДЕ
    | ВложенныйЗапрос.Номенклатура = &Номенклатура
    | И ВложенныйЗапрос.Характеристика = &Характеристика";

    Запрос.УстановитьПараметр("ЗаказПоставщику", строка2.Заказ);
    Запрос.УстановитьПараметр("Номенклатура", строка2.Номенклатура);
    Запрос.УстановитьПараметр("Характеристика", строка2.Характеристика);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Если ВыборкаДетальныеЗаписи.Количество() > 0 Тогда
    Строка = ДеревоСтарое.Строки.НайтиСтроки(Новый Структура("Номенклатура,Характеристика", строка2.Номенклатура, строка2.Характеристика));
    НоваяСтрока = ДеревоНовое.Строки.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
    КонецЕсли;

    КонецЦикла;
    КонецЦикла;
    Товары.ПолучитьЭлементы().Очистить();
    ЗначениеВРеквизитФормы(ДеревоНовое, "Товары");
    Элементы.Товары.Обновить();
```

Два цикла, потому что нужно дойти до 2 уровня, так как данные о номенклатуре там.
---
```1c
    Строка = ДеревоСтарое.Строки.НайтиСтроки(Новый Структура("Номенклатура,Характеристика", строка2.Номенклатура, строка2.Характеристика));
```

Вот это возвращает массив строк. В новом дереве нет никаких реквизитов, поэтому ЗаполнитьЗначенияСвойств не даст нужного эффекта. Поэтому надо, для начала, новое дерево сделать идентичным старому:

```1c
    НовоеДерево = Новый ДеревоЗначений;
    Для Каждого пКолонка Из ДеревоСтарое.Колонки Цикл
    НовоеДерево.Колонки.Добавить(пКолонка.Имя);
    КонецЦикла;
```

Ну и дальше

```1c
    МассивСтрок = ДеревоСтарое.Строки.НайтиСтроки(Новый Структура("Номенклатура,Характеристика", строка2.Номенклатура, строка2.Характеристика));
    Для Каждого пСтрока Из МассивСтрок Цикл
    НоваяСтрока = ДеревоНовое.Строки.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, пСтрока);
    КонецЦикла;
```
---
```1c
    Если ВыборкаДетальныеЗаписи.Количество() > 0 Тогда
    МассивСтрок = ДеревоСтарое.Строки.НайтиСтроки(Новый Структура("Номенклатура,Характеристика", строка2.Номенклатура, строка2.Характеристика));
    Для Каждого пСтрока Из МассивСтрок Цикл
    НоваяСтрока = ДеревоНовое.Строки.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, пСтрока);
    КонецЦикла;
    КонецЕсли;
```

Вот тут, ставил точку остановки, Доходит до Для Каждого пСтрока Из МассивСтрок Цикл и в цикл уже не лезет, неужели массив пустой ? ...
---
Раз не лезет, значит пустой, ага, строки не нашлись.
---
Сейчас отбор сделал по заказу, всё вышло, но заказ по сути это 1 уровень, а позиции(номенклатура) уже 2 уровень. Заказы всё вышли, но без позиций, сейчас надо думать, как вывести 2 уровень
---
Читаем внимательно справку по Методу НайтиСтроки для дерева значений. Там есть второй параметр "ВключатьПодчиненные".
---
Оппачки, спасибо за наводку
---
А можно как-то по подчиненным отбор сделать, чтобы вывести нужные мне по отбору номенклатуру?
---
по подчиненным чему? Искать будет везде.
---
Про 2 уровень говорил, уже сделал это, но теперь 1 уровень почему-то не выводится.
Вот код:

```1c
    Если ВыборкаДетальныеЗаписи.Количество() > 0 Тогда
    МассивСтрок = ДеревоСтарое.Строки.НайтиСтроки(Новый Структура("Заказ,Номенклатура,Характеристика", строка2.Заказ,строка2.Номенклатура,строка2.Характеристика),Истина);
    Для Каждого пСтрока Из МассивСтрок Цикл
    НоваяСтрока = ДеревоНовое.Строки.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, пСтрока);
    КонецЦикла;
    КонецЕсли;
```

Выводится только 2 уровень
---
1 скрин - как выводит сейчас (тестовая база)
2 скрин - как должен правильно выводиться (рабочая)
---
Ну так потому что строки, которые подходят под условие, находятся на 2 уровне. Надо при выводе дергать родителя текущей строки, искать его в строках нового дерева, если его нет - добавлять и в его подстроки добавлять текущую строку.
---
ну если дергаю только родителя, то всё выводит, но вот отбор по подчиненным уже пропадает. Как тогда можно сделать правильно отбор на 2 уровень уже ?
---
У строки дерева значений есть свойство Родитель. В массив дергаете строки 2 уровня, при выводе обращаетесь к свойству Родитель, ищете его в новом дереве, если нет - добавляете и т.д.
---
Да, сейчас точкой остановки посмотрел и в МассивеСтроки переменная Родитель пустая
---
В родитель строки, которую добавляю в новое дерево впихиваю родителя, которую достаю со 2 уровня. Но выдает ошибку. А как тогда еще можно это сделать ? Больше идей нету
Ошибка:
Поле объекта недоступно для записи (Родитель)
{Обработка.СостояниеОбеспечения.Форма.Форма.Форма(82)}:НоваяСтрока.Родитель = строка2.Родитель;
---
Потому что только чтение у родителя, да и правильно - не надо ему ничего присваивать. Надо наоборот делать: на первый уровень добавлять родителя

```1c
    Родитель = НовоеДерево.Строки.Добавить();
    Родитель.ЧетоТам = ТекСтрока.Родитель.ЧетоТам;
    .....
```

а потом

```1c
    НовСтрока = Родитель.Строки.Добавить();
```

и т.д.
---
Получается к новому дереву присвоить строки с родителем - 1 уровень
Потом уже к новым строкам присвоить 1 уровень и в нее уже добавлять данные - 2 уровень
Надеюсь правильно всё понял?...
---
Родитель = НовоеДерево.Строки.Добавить();
Родитель.ЧетоТам = ТекСтрока.Родитель.ЧетоТам;
Там, где Родитель.ЧетоТам. Что нужно написать ?
Там получается можно поставить Владелец, Получить,Родитель,Строки,Уровень,Установить
---
Это заказ, в данном случае. То есть, сначала мы ищем - есть ли строка первого уровня с этим заказом

```1c
    Строки = НовоеДерево.Строки.НайтиСтроки(Новый Структура("Заказ", ТекСтрока.Родитель.Заказ));
    Если Строки.Количество() = 0 Тогда
    Родитель = НовоеДерево.Строки.Добавить();
    Родитель.Заказ = ТекСтрока.Родитель.Заказ;
    //заполняем остальные данные
    Иначе
    Родитель = Строки[0]
    КонецЕсли;

    НовСтрока = Родитель.Строки.Добавить();
    НовСтрока.Номенклатура = ТекСтрока.Номенклатура;
    //заполняем остальные данные
```
---
Понял, получается все строки придется прописать в ручную
---
Хотя, в принципе да, можно получить отдельно родителя и к нему уже присваивать 2 уровень
---
Чтобы работали ЗначениеВРеквизитФормы и ЗаполнитьЗначенияСвойств нужно чтобы в новом и старом дереве были идентичные колонки
---
Я правильно понимаю, что Вы нашли строку в дереве "Товары" и хотите ее добавить в какое-то другое дерево?
---
Там Отбор надо сделать, я вот получил нужные строки, хотел очистить всё с Товары и добавить туда новые строки