Программная сортировка дерева значений по текущей колонке на управляемой форме
Доброго времени суток! Столкнулся с проблемой: в управляемую добавил реквизит с типом ДеревоЗначений. Нужно программно отсортировать это дерево по текущей колонке. В обработчике команды сортировки пишу:
Но дело в том, что в метод Сортировать нужно передать имя колонки, а в переменной ТабличноеПоле.ТекущийЭлемент.Имя содержится совсем не имя колонки. У текущего элемента есть свойство ПутьКДанным, но через отладку говорит, что свойство не доступно. Так вот как через текущий элемент получить типа путь к данным этого элемента или как поступают в данном случае?
ТабличноеПоле = Элементы.ДеревоДанных;
Если ТабличноеПоле.ТекущийЭлемент = Неопределено Тогда
Сообщить("Не выбрана колонка!", СтатусСообщения.Важное);
Возврат;
КонецЕсли;
ДеревоДанных.Сортировать(ТабличноеПоле.ТекущийЭлемент.Имя);
Но дело в том, что в метод Сортировать нужно передать имя колонки, а в переменной ТабличноеПоле.ТекущийЭлемент.Имя содержится совсем не имя колонки. У текущего элемента есть свойство ПутьКДанным, но через отладку говорит, что свойство не доступно. Так вот как через текущий элемент получить типа путь к данным этого элемента или как поступают в данном случае?
По теме из базы знаний
Найденные решения
(5) Можно создать переменную модуля на клиенте типа Соответствие, в которой хранить связь ИмяЭлемента - ПутьКДанным.
&НаКлиенте
Перем ПутиКДанным;
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПутиКДанным = ПолучитьПутиКДанным();
КонецПроцедуры
&НаСервере
Функция ПолучитьПутиКДанным()
Результат = Новый Соответствие;
Для Каждого Элемент Из Элементы Цикл
Если ТипЗнч(Элемент) = Тип("ПолеФормы") И Элемент.ПутьКДанным <> "" Тогда
Результат.Вставить(Элемент.Имя, Элемент.ПутьКДанным);
КонецЕсли;
КонецЦикла;
Возврат Результат
КонецФункции
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Корче пришлось полностью "гонять" форму на сервер, тогда получилось, т.е. на стороне сервера выполнять код по получению текущего элемента и там уже доступен путь к данным. Но это чертовски не оптимально! 1000 чертей, целый 1 (один) серверный вызов получается. Думал что можно как то на стороне клиента все сделать, получить реальное имя колонки (путь к данным) без "ходки" на сервер, т.к. сортировать позволяет и на клиенте.
(5) Можно создать переменную модуля на клиенте типа Соответствие, в которой хранить связь ИмяЭлемента - ПутьКДанным.
&НаКлиенте
Перем ПутиКДанным;
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПутиКДанным = ПолучитьПутиКДанным();
КонецПроцедуры
&НаСервере
Функция ПолучитьПутиКДанным()
Результат = Новый Соответствие;
Для Каждого Элемент Из Элементы Цикл
Если ТипЗнч(Элемент) = Тип("ПолеФормы") И Элемент.ПутьКДанным <> "" Тогда
Результат.Вставить(Элемент.Имя, Элемент.ПутьКДанным);
КонецЕсли;
КонецЦикла;
Возврат Результат
КонецФункции
Показать
Я делал так
&НаКлиенте
Процедура СотрировкаНоменклатураСписок(Убыв = Ложь)
Если Убыв Тогда
КартинкаШапки = БиблиотекаКартинок.СтрелкаВверх;
Порядок = "Убыв";
Иначе
КартинкаШапки = БиблиотекаКартинок.СтрелкаВниз;
Порядок = "Возр";
КонецЕсли;
ТекущийЭлементНоменклатураСписок = Элементы.НоменклатураСписок.ТекущийЭлемент;
Элементы.НоменклатураСписокЦветПоставщика.КартинкаШапки = Новый Картинка();
Элементы.НоменклатураСписокЦвет.КартинкаШапки = Новый Картинка();
Элементы.НоменклатураСписокШтрихКод.КартинкаШапки = Новый Картинка();
Элементы.НоменклатураСписокРазмер.КартинкаШапки = Новый Картинка();
Если ТекущийЭлементНоменклатураСписок = Элементы.НоменклатураСписокЦветПоставщика Тогда
НоменклатураСписок.Сортировать("ЦветПоставщика " + Порядок);
ИначеЕсли ТекущийЭлементНоменклатураСписок = Элементы.НоменклатураСписокЦвет Тогда
НоменклатураСписок.Сортировать("Цвет " + Порядок);
ИначеЕсли ТекущийЭлементНоменклатураСписок = Элементы.НоменклатураСписокШтрихКод Тогда
НоменклатураСписок.Сортировать("ШтрихКод " + Порядок);
ИначеЕсли ТекущийЭлементНоменклатураСписок = Элементы.НоменклатураСписокРазмер Тогда
НоменклатураСписок.Сортировать("Размер " + Порядок);
КонецЕсли;
ТекущийЭлементНоменклатураСписок.КартинкаШапки = КартинкаШапки;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот