Имя: Пароль:
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
попробуй на клиенте принудительно первую сроку установить активной после загрузки данных. ну и в процессе этого последить за счетчиками объема переданных данных - передаст он всю таблицу на клиент в момент возврата на клиента или в момент выхода из клиентской процедуры.
также можно складывать данныеформыколлекция на сервере во временное хранилище, очищать и доставать в реквизит на клиенте. по какой-то причине это часто быстрее. но тогда перед контекстным уходом на сервер надо очищать обратно будет.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn