Доброго времени суток! Столкнулся с проблемой: в управляемую добавил реквизит с типом ДеревоЗначений. Нужно программно отсортировать это дерево по текущей колонке. В обработчике команды сортировки пишу:

```1c
    ТабличноеПоле = Элементы.ДеревоДанных;

    Если ТабличноеПоле.ТекущийЭлемент = Неопределено Тогда
    Сообщить("Не выбрана колонка!", СтатусСообщения.Важное);
    Возврат;
    КонецЕсли;

    ДеревоДанных.Сортировать(ТабличноеПоле.ТекущийЭлемент.Имя);
```

Но дело в том, что в метод Сортировать нужно передать имя колонки, а в переменной ТабличноеПоле.ТекущийЭлемент.Имя содержится совсем не имя колонки. У текущего элемента есть свойство ПутьКДанным, но через отладку говорит, что свойство не доступно. Так вот как через текущий элемент получить типа путь к данным этого элемента или как поступают в данном случае?
---
Можно создать переменную модуля на клиенте типа Соответствие, в которой хранить связь ИмяЭлемента - ПутьКДанным.

```1c
    &НаКлиенте
    Перем ПутиКДанным;

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    ПутиКДанным = ПолучитьПутиКДанным();
    КонецПроцедуры

    &НаСервере
    Функция ПолучитьПутиКДанным()
    Результат = Новый Соответствие;
    Для Каждого Элемент Из Элементы Цикл
    Если ТипЗнч(Элемент) = Тип("ПолеФормы") И Элемент.ПутьКДанным <> " Тогда
    Результат.Вставить(Элемент.Имя, Элемент.ПутьКДанным);
    КонецЕсли;
    КонецЦикла;
    Возврат Результат
    КонецФункции
```
---
ПолеФормы (FormField)
ПутьКДанным (DataPath)

Описание:
Тип: Строка.
Содержит путь к реквизиту, с которым связан объект.

Доступность:
Сервер, мобильное приложение(сервер).
---
А как текущий элемент передать на Сервер? Напрямую никак, говорит не допустимый тип для передачи с клиента на сервер.
---
для этого используется отдельный реквизит формы (список значений или таблица значений) с именами колонок. Из него и брать нужное имя.
---
Может кто нибудь готовый код написать как программно отсортировать дерево значений по текущей колонке в управляемой форме?
---
Корче пришлось полностью "гонять" форму на сервер, тогда получилось, т.е. на стороне сервера выполнять код по получению текущего элемента и там уже доступен путь к данным. Но это чертовски не оптимально! 1000 чертей, целый 1 (один) серверный вызов получается. Думал что можно как то на стороне клиента все сделать, получить реальное имя колонки (путь к данным) без "ходки" на сервер, т.к. сортировать позволяет и на клиенте.
---
Можно создать переменную модуля на клиенте типа Соответствие, в которой хранить связь ИмяЭлемента - ПутьКДанным.

```1c
    &НаКлиенте
    Перем ПутиКДанным;

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    ПутиКДанным = ПолучитьПутиКДанным();
    КонецПроцедуры

    &НаСервере
    Функция ПолучитьПутиКДанным()
    Результат = Новый Соответствие;
    Для Каждого Элемент Из Элементы Цикл
    Если ТипЗнч(Элемент) = Тип("ПолеФормы") И Элемент.ПутьКДанным <> " Тогда
    Результат.Вставить(Элемент.Имя, Элемент.ПутьКДанным);
    КонецЕсли;
    КонецЦикла;
    Возврат Результат
    КонецФункции
```
---
Спасибо, думаю Ваш метод самый подходящий. Сегодня затестирую.
---
Я делал так

```1c
    &НаКлиенте
    Процедура СотрировкаНоменклатураСписок(Убыв = Ложь)

    Если Убыв Тогда
    КартинкаШапки = БиблиотекаКартинок.СтрелкаВверх;
    Порядок = "Убыв";
    Иначе
    КартинкаШапки = БиблиотекаКартинок.СтрелкаВниз;
    Порядок = "Возр";
    КонецЕсли;

    ТекущийЭлементНоменклатураСписок = Элементы.НоменклатураСписок.ТекущийЭлемент;

    Элементы.НоменклатураСписокЦветПоставщика.КартинкаШапки = Новый Картинка();
    Элементы.НоменклатураСписокЦвет.КартинкаШапки = Новый Картинка();
    Элементы.НоменклатураСписокШтрихКод.КартинкаШапки = Новый Картинка();
    Элементы.НоменклатураСписокРазмер.КартинкаШапки = Новый Картинка();

    Если ТекущийЭлементНоменклатураСписок = Элементы.НоменклатураСписокЦветПоставщика Тогда
    НоменклатураСписок.Сортировать("ЦветПоставщика " + Порядок);
    ИначеЕсли ТекущийЭлементНоменклатураСписок = Элементы.НоменклатураСписокЦвет Тогда
    НоменклатураСписок.Сортировать("Цвет " + Порядок);
    ИначеЕсли ТекущийЭлементНоменклатураСписок = Элементы.НоменклатураСписокШтрихКод Тогда
    НоменклатураСписок.Сортировать("ШтрихКод " + Порядок);
    ИначеЕсли ТекущийЭлементНоменклатураСписок = Элементы.НоменклатураСписокРазмер Тогда
    НоменклатураСписок.Сортировать("Размер " + Порядок);
    КонецЕсли;

    ТекущийЭлементНоменклатураСписок.КартинкаШапки = КартинкаШапки;

    КонецПроцедуры
```
---
Интересный способ, но как я понял, при добавлении новых колонок нужно и код дописывать. Хотя если состав колонок не изменен, Ваш способ весьма хорош, большое спасибо!
---
А что, у "ДанныеФормыДерево" есть метод "сортировать"?
---
Да