УФ. динамический список, группировка, сортировка.

1. oldfornit 11.02.14 09:25 Сейчас в теме
Здравствуйте, уважаемые коллеги.

Возникла следующая задача:
а) динамический список на управляемой форме
б) используется произвольный запрос с группировками (с удовольствием бы отказался от них, но увы)
в) ряд реквизитов источника данных специально проиндексирован во избежание.

Необходимо включить возможность сортировки списка по ряду проиндексированных реквизитов щелчком на заголовке колонки, но вот как это сделать - волосы уже шевелятся. Может пнете в нужную сторону?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. zqzq 25 11.02.14 09:38 Сейчас в теме
В чём вопрос-то? :)
В конфигураторе: реквизит формы список - настройка - сортирока
В прадприятии: Все действия формы - настройка списка - сортировка
3. oldfornit 11.02.14 09:42 Сейчас в теме
(2) zqzq, прошу прощения, изначально недоформулировал. Необходимо включать возможность сортировки, а не сразу же выводить отсортированные данные.
4. batlerrett 11.02.14 09:54 Сейчас в теме
В СКД все сортируется по любому полю
5. Rothschild 11.02.14 10:03 Сейчас в теме
(4) batlerrett,
вот только быстрая сортировка кликом по заголовку колонки
есть далеко не во всех случаях
6. oldfornit 11.02.14 10:05 Сейчас в теме
(5) дадададада. Вот слова умного человека. Мне нужна именно "быстрая сортировка" по динамическому списку, в тексте запроса которого используется группировка.
7. oldfornit 11.02.14 11:20 Сейчас в теме
ну что ж. Все многочисленные примеры показывают, что сделать быструю сортировку штатными средствами, в том числе через настройку списка в пользовательском режиме в случае, если используется оператор "группировать по" в тексте запроса динамического списка - невозможны.

Решение - програмная сортировка


&НаКлиенте
Процедура СортироватьСписокПоПолю(Список, ПолеНаименование)
	
	Список.Порядок.Элементы.Очистить();
	Порядок = Список.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
	Порядок.Поле =  Новый ПолеКомпоновкиДанных (ПолеНаименование);
	Порядок.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
    Порядок.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;
    Порядок.Использование = Истина;
	
КонецПроцедуры
Показать
8. Rothschild 11.02.14 12:34 Сейчас в теме
(7) oldfornit,
даже нет события что-то вроде "ПриВыбореЗаголовкаКолонки()",
которое могло бы помочь красиво програмно это обработать .

и вообще ... не очень то "управляемые" эти управляемые формы, а часто - просто "невменяемые"
-(((
Bukaska; starjevschik; +2 Ответить
16. Art1387 4 22.09.17 10:03 Сейчас в теме
(7)
&НаКлиенте
Процедура СортироватьСписокПоПолю(Список, ПолеНаименование)

Список.Порядок.Элементы.Очистить();
Порядок = Список.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
Порядок.Поле = Новый ПолеКомпоновкиДанных (ПолеНаименование);
Порядок.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
Порядок.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;
Порядок.Использование = Истина;

КонецПроцедуры

А вложенный запрос (с группировкой во вложенном запросе) как вариант не подходит?
17. dnikolaev 179 15.09.21 21:41 Сейчас в теме
Прошло 7 лет... 8.3.18.. я с этой же проблемой.
скажу сразу у меня получилось.
опытным путем я выяснил что "группировать по" нельзя делать с участием "основной таблицы".
если группировать во вложенном запросе- то быстрая сортировка не пропадает.
в итоге я "заколхозил" запрос следующим образом.
весь его впихнул во вложенный запрос. там сгруппировал.
а в верхнем уровне запроса снова выбрал свой документ. и связал его с вложенным запросом.

Я не знаю насколько это получилось оптимально.. но сработало
9. oldfornit 11.02.14 14:37 Сейчас в теме
дополнение:
если некие криворучки в тексте запроса будут использовать конструкции вида
левое соединение
(выбрать все из неведомого места) как НафигаЭтоНужно

, то и програмная сортировка работать не будет.
10. Rothschild 11.02.14 16:15 Сейчас в теме
(9)
а если
(выбрать все из неведомого места) как НафигаЭтоНужно

уложить во времтаблицу и проиндексировать ее ???
***
хотя блин!
для динамических списков возможности языка запросов мал-мало подрезаны
-(((
11. oldfornit 11.02.14 17:16 Сейчас в теме
(10) да-да. Нельзя временные таблицы. Вариант обхода - левое соединение по n > 1 полю
12. AleksSF 226 27.02.14 13:24 Сейчас в теме
А группировкой средствами конфигуратора не пробовали пользоваться.
Свойства Динамического списка - Настройка списка Открыть - закладка Группировка
13. oldfornit 27.02.14 13:59 Сейчас в теме
(12) это настройки отображения данных, спасибо.

Мне же было необходимо получать данные именно из запроса с группировкой. Чуете разницу?
14. AleksSF 226 28.02.14 09:10 Сейчас в теме
(13) oldfornit,
Разницу то я чую. Но запрос внутри динамического списка и нужен для получения данных, которые потом отображаются. В другом месте результатом этого запроса воспользоваться невозможно. Так сделайте запрос без группировки, а группировку опишите в настройках динамического списка.
15. oldfornit 28.02.14 09:16 Сейчас в теме
(14) разница в аттаче
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот