Имя: Пароль:
1C
1С v8
Работа с таблицами большого объема
,
0 Victor111
 
02.09.21
13:55
Есть обработка с табличной часть куда загружаем запросом данные.
Проблема возникает при передачи с сервера на клиент, очень много времени занимает, может кто-то сталкивался с таким и как боролся?
Циклов не использую, Выгрузить/Загрузить (запрос очень быстро отдает результат)
1 RomanYS
 
02.09.21
13:56
(0) А на клиенте то данные эти нужны?
2 Михаил Козлов
 
02.09.21
13:57
(1)+ Что Вы собираетесь с ними на клиенте делать?
3 Мультук
 
гуру
02.09.21
14:04
(0)

1) "Очень" это сколько тысяч строк?
2) Не показывайте эту таб.часть на клиенте
4 nicxxx
 
02.09.21
14:05
Мало контекста. Нужны ли все данные сразу на клиенте или можно показать часть? Если можно - делайте пагинацию своими силами. Примеры запросов можно взять для MSSQL и переделать на 1С. Говорю из собственного опыта.
5 nicxxx
 
02.09.21
14:08
Второй вариант - передавайте меньше данных. Кодируйте значения, например Перечисление.ВидОперации.Покупка будет символ "1". Колонки типизируйте заранее. На клиенте - раскодирование, будете подставлять нужное значение вместо кода.
6 RomanYS
 
02.09.21
14:09
(4) О! Кстати интересно, можно ли малой кровью создать ДС к ТЗ которая будет жить на сервере (без сохранения в БД). Или в контексте (0) такая реализация не имеет смысл ил не возможна
7 H A D G E H O G s
 
02.09.21
14:09
(0) Регистр сведений и ДинамическийСписок.
Не забывайте только чистить после работы
8 H A D G E H O G s
 
02.09.21
14:10
(6) ДинСписок к ВТ было бы годно!
9 Garykom
 
гуру
02.09.21
14:20
(0) код покажи, как ТЧ заполняешь
10 Fragster
 
гуру
02.09.21
14:33
если вызов неконтекстный - то сделай его контекстным. не крути таблицу на клиенте. всю таблицу на клиент он не всегда тянет, немного подробнее см https://infostart.ru/public/504141/
11 Fragster
 
гуру
02.09.21
14:37
в некоторых случаях большую таблицу хранить во временном хранилище и на клиент передавать только нужную часть
12 Victor111
 
02.09.21
14:40
(9) на сервере процедура, выполняю
порядка 5000 строк,  может быть еще больше.
РезТЗ = Запрос.Выполнить().Выгрузить();
Объект.ТЗДанные.Загрузить(РезТЗ); // около 1-2-х секунд

Все просто, быстро, процедура закончилась на сервере.
Возвращаемся на клиент и тут происходит зависание (дальше на клиенте ни одной строчки кода), может до 20-30 секунд висеть.
13 Victor111
 
02.09.21
14:41
(10) спасибо, почитаю
14 Victor111
 
02.09.21
14:47
(8) изначально использовал ДС, потом отказались от этого.
Информативно ДС хорошо использовать, но не для постоянной работы со строками.

у меня обработка выступает как пульт оператора, где постоянно фиксируют данные/сохраняют
+ использую функционал отборов свой, где при позиционировании в колонке, предлагает уникальные данные в этой колонке, и так далее по уменьшению в каждой колонке (такого штатным не сделать)
15 fisher
 
02.09.21
15:19
(12) > Возвращаемся на клиент и тут происходит зависание (дальше на клиенте ни одной строчки кода), может до 20-30 секунд висеть.
Ненормально на первый взгляд. Либо что-то все-таки еще происходит, либо таблица реально большая (много длинных строк, например).
16 Garykom
 
гуру
02.09.21
15:21
(15) подозреваю отрабатывает ПриИзменении на клиенте или нечто вроде
17 Dmitrii
 
гуру
02.09.21
15:34
(16) > отрабатывает ПриИзменении на клиенте или нечто вроде.

Тогда это было бы видно в окне отчета замера производительности.
18 Fragster
 
гуру
02.09.21
15:35
попробуй на клиенте принудительно первую сроку установить активной после загрузки данных. ну и в процессе этого последить за счетчиками объема переданных данных - передаст он всю таблицу на клиент в момент возврата на клиента или в момент выхода из клиентской процедуры.
также можно складывать данныеформыколлекция на сервере во временное хранилище, очищать и доставать в реквизит на клиенте. по какой-то причине это часто быстрее. но тогда перед контекстным уходом на сервер надо очищать обратно будет.