Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Работа с таблицами большого объема

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

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


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

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

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

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.