Имя: Пароль:
1C
1С v8
ТЧ и ТЗ в ОФ - скорости вопрос
,
0 ДенисЧ
 
05.05.16
12:39
Есть обработка с ТЧ, лежащей на форме.
Унутре делается
тз = ПостроительОтчета.Результат.Выгрузить();
тч.Загрузить(тз);

//Не смейтесь, тяжёлое наследие тоталитаризьма...

Так вот, на объёмах от 5-7 тыщ записей начинается ощутимое торможение, хотя сам запрос выполняется меньше секунды.
Отсюда вопрос - куда копать?

ЗЫ. ДС пока не предлагать, конфа в режие совместимости 8.1 ...
1 vicof
 
05.05.16
12:45
Дс и не поможет, он предназначен для отображения небольшого количества записей
2 ДенисЧ
 
05.05.16
12:46
(1) ДС будет тянуть порциями, а не все 5000 записей...
3 vicof
 
05.05.16
12:46
Нафейхоа пользователю 7 тыщ записей?
4 Йохохо
 
05.05.16
12:46
обновлять построчно обходом результата, доли секунды вместо падения по памяти на 50к строк примитивных типов
5 ДенисЧ
 
05.05.16
12:47
(3) Чтобы одновременно видеть документы как марта, так и мая.
6 vicof
 
05.05.16
12:48
(2) проверял? Я вот на больших объёмах записей, особенно при скроллинге, в дс вижу сплошные тормоза.
7 Лефмихалыч
 
05.05.16
12:49
(0) а если итоги все убить, воспроизводится?
8 vicof
 
05.05.16
12:49
(5) может,  ты ему отчёт состряпаешь? Я за месяц столько документов не просмотрю.
9 Лефмихалыч
 
05.05.16
12:50
(3) чтобы крЫЖЫТЬ!
10 ДенисЧ
 
05.05.16
12:55
(8) Это не отчет, это АРМ
(7) какие итоги?
11 Лефмихалыч
 
05.05.16
13:00
(10) в запросе есть ИТОГИ ПО? Вот если сделать так, чтобы их не было, выгружаться так же долго будет?
12 ДенисЧ
 
05.05.16
13:01
(11) нет итогов. Это плоская таблица а-ля журнал документов, только с кучей дополнительных приплюшек
13 Лефмихалыч
 
05.05.16
13:02
(12) а которая из двух строк-то медленно делается? Или обе?
14 ДенисЧ
 
05.05.16
13:03
(13) Выгрузка результата
15 Лефмихалыч
 
05.05.16
13:04
(14) а если Выгрузить() на сервере? На клиента так же долго идти будет?
16 ДенисЧ
 
05.05.16
13:05
(15) ОФ же. Научи меня запускать код внешней обработки на сервере...
17 Лефмихалыч
 
05.05.16
13:06
(16) внешняя обработка может вызывать то, что выполняется только на сервере. Этому же, надеюсь, не надо учить? Или у тебя доступа в код нет?
18 ДенисЧ
 
05.05.16
13:07
(17) Мне не хочется лезть в общие модули... Там такого наворочено.
Да и не думаю, что будет быстрее. Ибо сейчас, в тестовом режиме скуль и сервер 1с работают на одном компе. И клиент там же.
19 Лефмихалыч
 
05.05.16
13:09
(18) 5-7 тысяч - это слишком мало. На продуктиве это воспроизводится? Может дело именно в тестовом сервере?
Или 5-7 тысяч - это не строк, а колонок? Это бы всё объяснило...
20 ДенисЧ
 
05.05.16
13:11
(19) На продуктиве всё ещё хуже. Там немного больше пользователей в базе. На пару порядков ))
21 Лефмихалыч
 
05.05.16
13:13
(20) происходящее у тебя там подозрительно бессмысленно
22 ДенисЧ
 
05.05.16
13:33
(21) Обоснуй
23 Лефмихалыч
 
05.05.16
13:38
(22) ну - чудеса в смысле. Либо железо древнее, как яйца мамонта, либо оно сконфигурировано через ДПО (например, оперативы мало и всё в свопе живет), либо не должно такого быть. Даже 10К строк - это пыль и на сервере не может оно тормозить.
24 Лефмихалыч
 
05.05.16
13:39
Д - в смысле "дамский"
25 ДенисЧ
 
05.05.16
14:31
А если такой вариант: отказаться от ТЧ и сделать все на форме списка документов?
Будет лучше?
26 4St
 
05.05.16
14:42
(25) Можно и на форме, в "ПриПолученииДанных". Выборка явно будет меньше. Минус - невозможна фильтрация/поиск по добавленным к основному списку полям. Если она не критична, то и ладно.
27 4St
 
05.05.16
14:50
(10) Вообще 7К строк для АРМ - не многовато ли?
В выборке точно нет реквизитов типа неограниченной строки или ХранилищеЗначения?
Сколько вообще колонок в таблице?
28 ДенисЧ
 
05.05.16
14:53
(27) 1. нет. Перевозки могут длиться по 2-3 месяца. Так что период нужен большой
2. нет
3. ~45
29 4St
 
05.05.16
14:59
(28) тз = ПостроительОтчета.Результат.Выгрузить(тч.Загрузить(тз));

Когда-то тестил подобное, по-моему, это самый шустрый вариант оказался.
30 ДенисЧ
 
05.05.16
15:01
(29) Что это за нелепая конструкция?
31 4St
 
05.05.16
15:02
Ну ты понял )
тч.Загрузить(ПостроительОтчета.Результат.Выгрузить());
32 Fragster
 
гуру
05.05.16
15:03
представления тормозят?
33 Fragster
 
гуру
05.05.16
15:03
текст запроса построителя какой?
34 Fragster
 
гуру
05.05.16
15:04
настоящий, я имею ввиду
35 ДенисЧ
 
05.05.16
15:04
(32) Кстати я пробовал, например вместо Организация в запросе выбрать ПРЕДСТАВЛЕНИЕ(Организация). +5% к тормозам...
36 ДенисЧ
 
05.05.16
15:04
(34) 5 экранов. Что тебя в нём интересует? Запрос выполняется <2сек. А выгружается > 8
37 4St
 
05.05.16
15:05
(28) Не Деловые Линии часом? ))
38 ДенисЧ
 
05.05.16
15:05
(37) Мы по сравнению с ними сосунки. У них 5000 человек, у нас всего 200 )))
39 Fragster
 
гуру
05.05.16
15:10
(35) в замере затуп на "загрузить"? или в замере все ок и тормозит на возврате в "визуальную" часть?
40 4St
 
05.05.16
15:10
(38) Я просто представил, как 5000 человек будут разом обновлять АРМ )))
Кстати, они вообще запретили в своих АРМ показывать более 100 строк. Как только в запросе появляется 101-я, пользователю предлагается сузить выборку.
41 Fragster
 
гуру
05.05.16
15:10
(36) есть ли в реально выполняемом запросе представления. ну и профайлером скуля и прокмоном можно еще попробовать снять, что 1ска в этот момент делает.
42 ДенисЧ
 
05.05.16
15:11
(39) В замере затуп на Выгрузить(). Я уже написал. ПРофайлер на это ничего не показывает.
43 Лефмихалыч
 
05.05.16
15:11
(25) будет. ДокументСписок порционно читает данные. Но там отборы только по И. Если подходит - делай
44 ДенисЧ
 
05.05.16
15:12
(40) Вот когда ребята-админы заметили, что при каждом обновлении сервер читает по 8 лямов строк, тогда и возникла эта задачка...
Запросы были бешеные. Но я доился ускорения их на порядок...
45 ДенисЧ
 
05.05.16
15:12
(41) Явно ПРЕДСТАВЛЕНИЕ нигде нет
46 ДенисЧ
 
05.05.16
15:13
(43) Да и у меня сейчас только И
47 Fragster
 
гуру
05.05.16
15:14
(42) а если использовать
1: построитель запроса
2: где будет затуп при таком варианте:
рез = ПостроительОтчета.Результат;
тз = рез.Выгрузить();
тч.Загрузить(тз);
48 ДенисЧ
 
05.05.16
15:15
(47) Ща попробую
49 Лефмихалыч
 
05.05.16
15:15
(46) пробуй тогда. Возможно понадобится подкинуть индексов под то, по чем отбираешь.
Правда мне не понятно, что там делают 7 экранов запроса, если тот же самый список можно отборами из ДокументСписка получить
50 4St
 
05.05.16
15:17
(49) там длинные отгрузки. Хренова гора всяких статусов, отметок, ФИО водителей, номера контейнеров, квитанции и т.д.
51 ДенисЧ
 
05.05.16
15:18
(47) Хм... На Результат... Странно...
Надо копать дальше...
52 4St
 
05.05.16
15:18
(48) А еще интересно
ЗначениеВФайл("c:\temp\123.tx_",ТЗ)
Каков будет размер файла?
53 Fragster
 
гуру
05.05.16
15:18
(51) значит таки запрос ;)
54 4St
 
05.05.16
15:19
а, все, снимаю вопрос ))
55 Лефмихалыч
 
05.05.16
15:19
(51) таки откуда тогда уверенность, что профайлер не покажет ни чего?
56 ptiz
 
05.05.16
15:19
(0) Что-то странное.
У себя в одной обработке сделал ТЧ.Загрузить(ТЗ) - 1 секунда 6000 строк и 115 колонок.
57 Fragster
 
гуру
05.05.16
15:20
(56) да запрос у него тормозит
58 Лефмихалыч
 
05.05.16
15:25
(57) что, в общем, странно, ведь запрос должен выполняться, когда кастуешь Выполнить(), а не когда к результату обращаешься. Построитель - гадкий тип...
59 Fragster
 
гуру
05.05.16
15:27
(58) ПостроительЗапроса (QueryBuilder)
Выполнить (Execute)
Синтаксис:

Выполнить()
Описание:

Выполняет запрос и записывает результат в свойство Результат.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Выставляет внутренний флаг необходимости перевыполнения запроса при получении результата запроса.
60 Fragster
 
гуру
05.05.16
15:28
короче, если не делать Выполнить(), то запрос выполнится при обращении к .Результат. А если делать - то при Выполнить()
61 ДенисЧ
 
05.05.16
15:28
(53) Запрос в консоли выполняется 1.7 сек
62 Fragster
 
гуру
05.05.16
15:29
(61) сообщить(Построитель.ПолучитьЗапрос().Текст)
63 Лефмихалыч
 
05.05.16
15:30
(61) это хорошо или плохо? Запрос получен методом ПолучитьЗапрос() или нет?
64 ДенисЧ
 
05.05.16
15:30
(60) Двумя строками выше стоит выполнить() и занимает 0.0% времени
65 ДенисЧ
 
05.05.16
15:31
(63) Нет, перед выполнением Построитель.Запрос.Текст
По сравнению с тем, что было - это очень хорошо
66 Fragster
 
гуру
05.05.16
15:31
(64)  ну, значит "оптимизировали"
67 Лефмихалыч
 
05.05.16
15:31
(65) ты в консоли не тот текст тестировал
68 Fragster
 
гуру
05.05.16
15:31
зачем выполнять, если нет обращения к результату, и все такое...
69 ДенисЧ
 
05.05.16
15:33
(67) Сравнил. Однаковые вплоть до пробелов
70 Fragster
 
гуру
05.05.16
15:34
Запрос = Построитель.ПолучитьЗапрос();
Рез = Запрос.Выполнить();
...
71 Fragster
 
гуру
05.05.16
15:35
(69) может быть потому что это построитель отчета а не запроса и он таки добавляет колонки с представлением?
72 Fragster
 
гуру
05.05.16
15:35
при обращении к результату
73 Лефмихалыч
 
05.05.16
15:36
(71) тьху! Биомать... В самом же начале же...
74 Fragster
 
гуру
05.05.16
15:38
(73) я хз, все не читал. однако то, что тормозит запрос мы уже выяснили.
75 Fragster
 
гуру
05.05.16
15:39
и вообще, я атвору не верю, он мне пиво должен
76 ДенисЧ
 
05.05.16
15:39
(71) Проверил через ПолуитьЗапрос() - нет представлений
77 ДенисЧ
 
05.05.16
15:40
(75) Когда в Питере буду - поставлю. Я не забыл.
78 Fragster
 
гуру
05.05.16
15:40
(76) а вариант (70) проверил?
79 ДенисЧ
 
05.05.16
15:40
(74) в консоли 1.5 секунды, в построителе 3. С чего бы?
80 ДенисЧ
 
05.05.16
15:41
(78) Да. Разница в сотых долях секунды
81 Fragster
 
гуру
05.05.16
15:42
(79) с того, что при обращении к .Результат может происходить выполнение запроса
82 Лефмихалыч
 
05.05.16
15:42
(79) про - што? про - файлер.
83 Fragster
 
гуру
05.05.16
15:43
(80) на какой строке тормозит:

Запрос = ПостроительОтчета.ПолучитьЗапрос();
Рез = Запрос.Выполнить();
тз = Рез.Выгрузить();
тч.Загрузить(тз);
84 ДенисЧ
 
05.05.16
15:44
(83) на второй
(81) а в консоли оно не происходит?
85 Fragster
 
гуру
05.05.16
15:46
(84)  т.е. тормозит запрос, а не выгрузка?
тогда нам нужен запрос.текст. ну, или сделай сам на получившемся запросе https://www.youtube.com/watch?v=QqM8qXGcUVU
там есть замер по подзапросам
86 Fragster
 
гуру
05.05.16
15:48
(84) мы же хз, какой ты там текст в консоль пихаешь. Построитель.Текст - это не текст запроса, выполняемого построителем, это болванка
87 ptiz
 
05.05.16
15:54
Чтобы не было разночтений: метод .Выполнить() тормозить не может, т.к. запрос выполняется только при обращении к свойству .Результат или при выполнении метода .Вывести()
88 Карупян
 
05.05.16
16:01
Может там всяких свойств и значений?
89 ДенисЧ
 
05.05.16
16:02
В общем я понял.
Построитель тормозит на сборке результата, выкидывает лишние поля и параметры.
Буду этим играться.

Всем спасибо за внимание.
90 Карупян
 
05.05.16
16:03
Ну выкидывание не должно тормозить
91 ptiz
 
05.05.16
16:04
(89) Замени Построитель.Результат на:
Запрос = Построитель.ПолучитьЗапрос()
Результат = Запрос.Выполнить();
и убедишься, что тормозит именно Запрос.Выполнить()
92 Fragster
 
гуру
05.05.16
16:10
(91) он уже заменил и убедился