Имя: Пароль:
1C
1С v8
Оптимизация сортировки в табличной части (по ссылкам)
0 jackill2611
 
03.10.12
12:59
Есть табличная часть, в обработке, в ней около 6000 строк. Реквизит ТЧ "Документ" имеет составной ссылочный тип данных (ДокументСсылка.ЗаказПокупателя, ДокументСсылка.РеализацияТоваровУслуг и т.п.). Когда с помощью командной панели делаю сортировку по этому реквизиту, это затягивается на 20 сек. Вопрос: как оптимизировать сортировку?
1 IronDemon
 
03.10.12
13:01
Ограничить количество строк :)
2 DrShad
 
03.10.12
13:01
имхо никак
3 DrShad
 
03.10.12
13:03
хотя, а если вывести МоментВремени?
4 Maxus43
 
03.10.12
13:04
если вывести доп поле и по нему сортировать то можно, например по Представлению документа. сортировка строки пройдёт быстрей
5 jackill2611
 
03.10.12
13:04
(1) дык это вариант известный. (2) я пока тоже так думаю...
6 jackill2611
 
03.10.12
13:04
Платформа вроде по представлению и сортирует, вряд ли быстрее будет.
7 Maxus43
 
03.10.12
13:05
ну значит нет.
З.ы. платформа по ссылкам сортирует имхо
8 jackill2611
 
03.10.12
13:06
(7)Это если однотипные данные. Хотя, спорить можно, даже нужно.
9 ptiz
 
03.10.12
13:07
(0) Выгрузить и запросом сортировать. Для справочников точно быстрее, проверял и использую.
10 jackill2611
 
03.10.12
13:08
(9)Выгружается тоже долго. Представь, выгрузить 6000 строк, сортировать, загрузить... Если про это идет речь.
11 jackill2611
 
03.10.12
13:09
Может кто-нибудь знает, что делает платформа при нажатии кнопки "Сортировать" на командной панели (на уровне БД)?
12 ptiz
 
03.10.12
13:10
(10) "Выгружается тоже долго" - проверял?
13 jackill2611
 
03.10.12
13:11
(12) да
14 jump if overflow
 
03.10.12
13:11
(11) в УФ наверно лезет на сервер через каждые 30 строк
15 ptiz
 
03.10.12
13:11
Кстати, выгружать не обязательно, запрос по объекту "ТабЧасть" может работать.
16 jackill2611
 
03.10.12
13:11
(12) дольше, чем сортировка системой.
17 DrShad
 
03.10.12
13:11
(11) мне так кажется что она таки сортирует по моменту времени
18 КуплюКровать
 
03.10.12
13:11
выгрузить 6000 строк сравнимо с 20 сек? что то фантастика
19 jackill2611
 
03.10.12
13:12
(18), не выгрузить, а Выгрузить, сортировать, загрузить.
20 ptiz
 
03.10.12
13:12
(13) Тогда добавить реквизит "Дата" (или что еще нужно тебе для сортировки) в таб.часть обработки и по нему сортировать.
21 МихаилМ
 
03.10.12
13:13
(11)
в 7.7 для каждой строчки получала представление отдельным запросом
думаю 8.2 тоже самое.

глупо сориторать по ссылочному типу
22 ptiz
 
03.10.12
13:13
(19) Сортируешь, надеюсь, запросом, а не ТЗ.Сортировать("ДокСсылка") ?
23 jackill2611
 
03.10.12
13:15
(19) конечно, если перед заполнением табл. части - прямо в запросе и сортирую. Но я говорю про сортировку системным способом - кнопка "Сортировать", когда выбрана колонка "Документ".
24 jackill2611
 
03.10.12
13:15
(21) см. (23)
25 ptiz
 
03.10.12
13:24
Замерил:
ТЧ с одной колонкой "ДокСсылка": 5000 документов "Реализация" + 5000 "Поступление".
Сортировка стандартно: 9 сек.
Запрос по ТЧ + Загрузить() <= 1 сек.
26 jackill2611
 
03.10.12
13:24
Забыл сказать, форма ОБЫЧНАЯ,   НЕ управляемая.
27 jackill2611
 
03.10.12
13:25
(25) Спасибо, попробую, отпишусь.
28 hhhh
 
03.10.12
13:25
(27) индексы в ТЗ не забудь добавить.
29 jackill2611
 
03.10.12
13:30
(25), кстати, как лучше выгрузить запросом ТЧ из обработки? Конструктор запроса ее не видит. У меня на уме временная таблица, потом ее сортировать.
30 ptiz
 
03.10.12
13:34
Запрос = Новый Запрос("ВЫБРАТЬ
                         |    ТЗ.ДокСсылка
                         |ПОМЕСТИТЬ ТЗ
                         |ИЗ
                         |    &ТЗ КАК ТЗ
                         |;
                         |
                         |////////////////////////////////////////////////////////////////////////////////
                         |ВЫБРАТЬ
                         |    ТЗ.ДокСсылка.Дата КАК ДокСсылкаДата,
                         |    ТЗ.ДокСсылка
                         |ИЗ
                         |    ТЗ КАК ТЗ
                         |
                         |УПОРЯДОЧИТЬ ПО
                         |    ДокСсылкаДата");
   Запрос.УстановитьПараметр("ТЗ", Доки);
   
   Доки.Загрузить(Запрос.Выполнить().Выгрузить());
31 jackill2611
 
03.10.12
13:41
(30) И мне загрузится 2 колонки.
32 jackill2611
 
03.10.12
13:43
(30) Но идею понял)) Не все же телепаты ))
33 jackill2611
 
03.10.12
16:10
Результат: быстрее работает ТЧ через выгрузку в запрос - сортировать.