Имя: Пароль:
1C
1С v8
Тормоза таблицы на форме
0 wuff
 
31.07.23
15:53
Здравствуйте.
Платформа 8.3.20, УФ.
Есть таблица на форме, колонок 10-15, строк 10-15 тысяч. Сам отчет формируется довольно долго. Но проблема даже не в этом. Когда становишься на строку и жмакаешь "End" все замирает на минут 5-7, иногда 10, и только тогда просходит отрисовка и курсор отображает в конце таблицы.
Подскажите с как можно, и можно-ли вообще что-то сделать для ускорения процесса работы с таблицей?
1 rphosts
 
31.07.23
15:54
Ссылочные типы выводишь ведь?
2 wuff
 
31.07.23
15:57
Не только.
3 Fragster
 
гуру
31.07.23
15:57
если включить показатели производительности, то видно, что оно всю таблицу маленькими кусочками на клиент передает. Решением может быть формирование отчета неконтекстным серверным вызовом с возвратом табдока.
4 АгентБезопасной Нацио
 
31.07.23
15:58
(0) ежели не секрет, а что вы делаете с 200 000 значений? На для ускорения можно "таблицу" выводить динамческим списком...
5 АгентБезопасной Нацио
 
31.07.23
15:59
(3) а у него табдок или таблица?
6 Fragster
 
гуру
31.07.23
16:00
если таблица, то решение примерно то же самое
7 wuff
 
31.07.23
16:00
(3) Таблица формы.
8 Fragster
 
гуру
31.07.23
16:02
вот описание эффекта https://infostart.ru/1c/tools/504141/
9 wuff
 
31.07.23
16:03
(8) не, все делается в контексте.
10 Fragster
 
гуру
31.07.23
16:04
(9) "Естественно, никого обмануть не получится, и, например, при печати или поиске документ так или иначе будет получен на клиенте."
11 Fragster
 
гуру
31.07.23
16:11
при этом в зависимости от характеристик сети (в основном латентность) возврат из неконтекстного вызова может быть сильно быстрее получения по кускам в случае работы с контекстом.
12 wuff
 
31.07.23
16:14
Да, блин, все формируется на сервере и заполняется таблица соответственно там. Значит все таблица уже на клиенте. И тут начинаются тормоза.
13 wuff
 
31.07.23
16:21
Отрисовалась таблица. Ставлю курсор на вторую строку таблицы - и все 1с уходит в коматоз.
14 wuff
 
31.07.23
16:23
Процесс на клиенте "Не отвечает". На сервере 1c особо никаких экстремумов не наблюдается. Сетка между СУБД и 1с сервером 10Gb.
15 wuff
 
31.07.23
16:24
Между клиентом и сервером 1с тоже 10Gb.
16 Fragster
 
гуру
31.07.23
16:28
(12) нет. замени серверный вызов с контектом на неконтекстный с возвратом твоей таблицы. он будет дольше (возможно, в разы), но при перемотке таблица тормозить не будет.
17 wuff
 
31.07.23
16:30
(16) Да, это не моя таблица... Там отчет, звездец...
18 wuff
 
31.07.23
16:31
(16) Ну думаю что дело именно в передаче всей таблицы... Хрен с ней, сформировалась она, а дальше с ней практически невозможно работать как в (13)
19 wuff
 
31.07.23
16:32
(18) *Ну думаю = Не думаю.
20 novichok79
 
31.07.23
16:36
в 2018м занимался чем-то подобным. удалось довольно неплохо оптимизировать 1Сину.
а ТЖ смотрели? может быть там есть что-то?
и что там с ссылочными типами в колонках?
ну и накряйняк - обычный выход в таких ситуациях - пагинация, то есть уменьшать количество данных, которые необходимо обрабатывать серверу и держать в памяти клиенту.
21 dmt
 
31.07.23
16:36
(18) все правильно тебе говорят, попробуй на клиенте запусти после заполнения

Для каждого Строка из МояТаблица Цикл
КонецЦикла;

в этот момент вся таблица будет получена на клиент, при этом потормозит - зато потом будет летать
22 Fragster
 
гуру
31.07.23
16:36
(18) ну включи показатели производительности и смотри на счетчики количества вызовов и объема переданных данных
23 Fragster
 
гуру
31.07.23
16:38
(21) вроде бы этот способ по времени просто перенесет тормоза непосредственно в точку формирования отчета. Неконтекстный же вызов будет сильно быстрее, так как это будет одно взаимодействие с сервером. Надо счетчики смотреть.
24 wuff
 
31.07.23
16:45
Сделать неконтекстный вызов не получится. Надо будет переписывать все, а это нереально...
25 Fragster
 
гуру
31.07.23
17:31
(24) думаю, что далеко не всё. ну, конечно, если твой выбор - страдать, тогда да. ну можешь еще костыль из (21) вставить, чисто чтобы убедиться, что причина в этом, но это приведет к тому, что просто дольше всё будет формироваться.

еще тебе лайфхак - пихать данные не в реквизит формы, а просто в переменную, её во временное хранилище, а по возвращению на клиента - из этого временного хранилища доставать в реквизит. ну и дополнительно перед вызовом твоего мега отчета реквизит формы неплохо бы очищать.
26 Мимохожий Однако
 
01.08.23
07:13
Выведи отчет не на форму,а в табличный документ. Добавь расшифровку
27 yopQua
 
01.08.23
10:25
(26) да большой табдок тоже медленно работает
28 mistеr
 
01.08.23
11:33
(0) Можно. Дать пользователю сразу те 2-3 цифры, ради которых формируется эта 15-тысячная простыня.