Добрый день коллеги!
Подскажите пожалуйста, как лучше решить 2 вопроса. Есть Бух 3.0 на упр. формах. Есть иерархический справочник СправочникОбщиеС (далее Справочник1). Есть другой справочник СправочникБ (далее Справочник2). У элемента Справочник2 на форме, чтобы было удобно работать, делаем (ДревоЗначений = ДЗ):
1) ДЗ_Справочник1 - просто тупо все группы и элементы справочника Справочник1 с сохранением иерархии(т.е. должно быть как в стандартной форме списка или выбора групп и элементов "1 в 1", с сохранением иерархии)
2) ДЗ_Справочник2 - некая иерархическая структура, набираемая из элементов Справочник1 в произвольном порядке. Для этого я сделал элементы ДЗ_Справочник2 с двумя типами: СсылкаСправочник1 для самих ссылок и Строка - для создания "собственной" иерархии, т.е. элемент с типом Строка является внутренней "папкой", которую можно как угодно назвать и набрать туда в внутрь уже элементов Справочник1 либо еще "строковых папок" сделать. Для удобства набор из ДЗ_Справочник1 в ДЗ_Справочник2 хочется сделать перетаскиванием.

Теперь собственно вопросы.
1) Запрос вида

```1c
    "ВЫБРАТЬ
    Справочник1.Ссылка КАК Имя1
    ИЗ
    Справочник.Справочник1 КАК Справочник1
    ИТОГИ
    Имя1 КАК Имя1
    ПО
    ОБЩИЕ,
    Имя1 ИЕРАРХИЯ"
```

и дальнейший

```1c
    РезультатЗапроса = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
    ЗначениеВРеквизитФормы(РезультатЗапроса,"ДЗ_Справочник1");
```

дают мне иерархическое дерево на форме, но с дублированием элементов внутри (типа детальная запись конечного уровня дерева). Можно ли сделать это как-то только запросом, без обхода дерева и его "чистки"? Т.е. получить ту же структуру что и в форме списка Справочник1, только в ДЗ_Справочник1 на форме элемента?

2) Перетаскивание между деревьями на одной форме вообще не реагирует никак. Это вообще возможно? Я не нашел информации по данному вопросу, подскажите пожалуйста как это можно реализовать кто знает.

3) Есть ли у кого-то под рукой готовый механизм(код), чтобы потом дерево ДЗ_Справочник2 хранить как табличную часть элемента Справочник2? "Развертывание" ТЧ в ДЗ и обратное преобразование?
---
Остается только вопрос как запихнуть всю выборку иерархического справочника в дерево значений запросом так, чтобы не создавались дубли строк, которые потом придется обходить, проверять и чистить...Вы случайно не знаете? :)
А почему так хочется построить дерево запросом? Динамический список с свойством "Отображение" = "Дерево" не подходит?
---
Просто может существуют "стандартные" или даже более разумные механизмы реализации подобных вопросов? :-)
---
Господа, ужель никто не делал перетаскивание между деревьями на одной форме? :-)
---
ToTMoM, контр+шифт+Ь типовая кнопка в панели.
---
В таблице 2 обязательных поля - КлючСтроки И КлючСвязи

```1c
    Процедура ДеревоВТаблицуЗначений(тДерево, тТаблица) Экспорт
    ДеревоВТаблицуЗначений_Рекурсивно(тДерево, тТаблица, КлючСтрокиВерхнегоУровня());
    КонецПроцедуры
    Процедура ТаблицаЗначенийВДерево(тТаблица, тДерево) Экспорт
    ТаблицаЗначенийВДерево_Рекурсивно(тТаблица, тДерево, КлючСтрокиВерхнегоУровня())
    КонецПроцедуры

    Функция КлючСтрокиВерхнегоУровня()
    Возврат "00000000-0000-0000-0000-000000000000";
    КонецФункции
    Процедура ДеревоВТаблицуЗначений_Рекурсивно(тДерево, тТаблица, КлючСтроки)
    Для Каждого тСтр Из тДерево.Строки Цикл
    нСтр = тТаблица.Добавить();
    ЗаполнитьЗначенияСвойств(нСтр, тСтр);
    нСтр.КлючСвязи = КлючСтроки;
    нСтр.КлючСтроки = Строка(Новый УникальныйИдентификатор());
    Если тСтр.Строки.Количество()>0 Тогда
    ДеревоВТаблицуЗначений_Рекурсивно(тСтр, тТаблица, нСтр.КлючСтроки);
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
    Процедура ТаблицаЗначенийВДерево_Рекурсивно(тТаблица, тДерево, КлючСтроки)
    тПоиск = Новый Структура("КлючСвязи", КлючСтроки);
    тМассив = тТаблица.НайтиСтроки(тПоиск);
    Для Каждого тСтр Из тМассив Цикл
    нСтр = тДерево.Строки.Добавить();
    ЗаполнитьЗначенияСвойств(нСтр, тСтр);
    ТаблицаЗначенийВДерево_Рекурсивно(тТаблица, нСтр, тСтр.КлючСтроки)
    КонецЦикла;
    КонецПроцедуры
```
---
caponid, благодарю, пока вроде работает :) Правда пришлось попреобразовывать данные перед использованием этого кода, например

```1c
    вДерево = ДанныеФормыВЗначение(ЭтаФорма.ДЗ_Справочник2,Тип("ДеревоЗначений"));
```

и уже потом пользоваться.
Перетаскивание уже решил.

Остается только вопрос как запихнуть всю выборку иерархического справочника в дерево значений запросом так, чтобы не создавались дубли строк, которые потом придется обходить, проверять и чистить...Вы случайно не знаете? :)
---
Правда пришлось попреобразовывать данные перед использованием этого кода
хм.. это все работает и без преобразования с данными формы.. писалось универсально
---
caponid, дело в том, что одно - это не ТаблицаЗначений, а Табличная часть элемента, а дерево - это не просто ДеревоЗначений, а ДанныеФормыДерево. Поэтому соответствующие преобразования, об этом писал.
---
Остается только вопрос как запихнуть всю выборку иерархического справочника в дерево значений запросом так, чтобы не создавались дубли строк, которые потом придется обходить, проверять и чистить...Вы случайно не знаете? :)
А почему так хочется построить дерево запросом? Динамический список с свойством "Отображение" = "Дерево" не подходит?
---
Ух ты, попробовал, все идеально так, как мне нужно! Просто мини-форма списка нужного справочника, со всей функциональностью, идеально)