Имя: Пароль:
1C
1С v8
Долго передает табличный документ с сервера на клиент
, ,
0 Impuls20_03
 
11.11.20
09:30
Доброго дня. Ситуация следующая. Есть довольно сложный печатный документ. Общий объем около 400 страниц. Формируется довольно быстро, а вот передача табличного документа с сервера на клиент занимает порядка 40 секунд времени. И это на мощном железе в пределах одного ПК. Пробовал на версии 8.3.13.1644 и 8.3.16.1224. Время не изменяется. Подскажите в какую сторону можно копнуть чтобы ускорить передачу?
1 Impuls20_03
 
11.11.20
09:42
Пробовал ПоместитьВоВременноеХранилище ПолучитьИзВременногоХранилища. Стало получше, но все равно довольно долго
2 Kassern
 
11.11.20
09:55
(1) А передается по локалке, или через интернет?
3 Impuls20_03
 
11.11.20
10:07
(2) Вообще по локалке. Но я пробую на своем компе. На нем стоит сервер 1c + MSSQL. Так что оно даже в локалку не выходит. Так чисто через стек прогоняется. MXL весит всего 9 Мб
4 alkorolev
 
11.11.20
10:15
(0) в расшифровке много данных лежит? на клиенте отображается сформированный табДок? Все 400 страниц?
5 timurhv
 
11.11.20
10:16
(3) Следите за объемом ОЗУ.
6 Kassern
 
11.11.20
10:21
(3) А дальше что с файлом делаешь, когда из временного хранилища на клиенте получаешь двоичные данные?
7 Fedor-1971
 
11.11.20
10:43
(0) Есть форма, на ней лежит поле с типом ТабличныйДокумент,
бежим на сервер, формируем печ.форму и заполняем данное поле. Правильно понял?

Либо нажимаем некую кнопку и после формирования табДок.Показать()

Хоть схематично код покажи.
8 Impuls20_03
 
11.11.20
11:15
(7) Упростил до самого простого варианта. Нажимаем кнопку, бежим на сервер заполняем ТабДок, передаем его на клиент, на клиенте ТабДок.Показать(). Сам код заполнения ТабДок - около 8 секунд, далее после Возврат ТабДок; 40 секунд курим, после ТабДок.Показать() - 2 секунды и документ сформирован.
ОЗУ на компе 32 ГБ. Проц i5. На клиенте все 400 страниц махом показываем.
9 Kassern
 
11.11.20
11:28
(8) Если табдок вынести на форму и ничего не возвращать на клиент? ТабДок.Показать() уже юзать не нужно будет
10 polosov
 
11.11.20
11:30
(8) Наверное валидатор XML при передаче данных с сервера на клиент тупит.
11 timurhv
 
11.11.20
11:34
Это проблема работы 1С с большими объемами, даже с абсолютно пустым табличным документом (проверял на 8.2 - тоже самое).

Замеры формирования табличного документа с выводом пустых областей и получением на клиенте:
40000 областей: 751 сек, ОЗУ 4850Мб rphost + столько же на клиенте 1cv8c.exe = 9700МБ
4000 областей: 76 сек, ОЗУ 630Мб rphost + примерно столько же 1cv8c.exe (не так заметно как выше)
400 областей: 7 сек, ОЗУ 320Мб rphost

90% времени занимает строчка на клиенте:
ТабДок = ПолучитьИзВременногоХранилища(АдресТабДок);

Как вариант на сервере получать двоичные данные и их передавать, на клиенте открывать.
12 Rovan
 
гуру
11.11.20
11:43
а такой вариант, что передать на клиент сами даннные и уже там заболнить ТабДок ?
13 Impuls20_03
 
11.11.20
11:48
(12) Чет мне кажется что это будет не быстро все равно.
14 alkorolev
 
11.11.20
12:43
(12) все основные методы работы с ТабДоком на клиенте не работают
15 acht
 
11.11.20
12:49
(8) Сделай через контекстный серверный вызов, чтобы документ был реквизитом формы и прихал на клиента вместе с формой.
16 Kassern
 
11.11.20
12:56
(15) я ж об этом написал (9) видимо ТС это не устраивает
17 acht
 
11.11.20
12:59
(16) Скорей всего ТС даже не пробовал.
Там его даже выносить на форму не надо, а просто реквизит формы сделать и заполнить, чтобы он с контекстом приехал, а не вручную через временной хранилизе и тыпы.
18 timurhv
 
11.11.20
13:25
(17) Так конечно быстро работает, по 40000 из (11) отработалось за 34 сек. Но и памяти rphost сожрал 14265 МБ
19 MyNick
 
11.11.20
13:32
А если через хранилище значения его сжать, а на клиенте распаковать?
20 Kassern
 
11.11.20
14:11
(18) сейчас потестил табдок на 400тыс строк у себя, если просто сформировать на клиенте, заполнить функцией на сервере, вернуть табдок на клиент и показать, то у меня заняло 71сек. Если же на сервере этот же ТабДок записать в ексель, а на клиенте ЗапуститьПриложение(файл экселя) то все это телодвижение занимает 23сек)))
П.С. если без изврата сделать как я написал в (9) то на форме данный табдок выводится за 3.8сек все 400тыс строк...
21 Вафель
 
11.11.20
14:16
так не передавай на клиент - оставляй на сервере.
1с сама умеет порциями с сервера получать
22 RomanYS
 
11.11.20
14:18
(20) >> то на форме данный табдок выводится за 3.8сек все 400тыс строк...
Не все, а только видимую часть. Табдоки в УФ вроде кешируются и динамически подгружаются частями.

А вопрос зачем ТСу ТД с 400к строк уже задавали?
23 Kassern
 
11.11.20
14:21
(21) ТСу нужно 400 страниц показать, насколько я понял, а про 400тыс строк - писал timurhv (11)
24 VladZ
 
11.11.20
14:26
(0) "Общий объем около 400 страниц." - что это? Оперативный отчет?
Кому нужен отчет в 400 страниц?
25 Rovan
 
гуру
11.11.20
15:45
(+24) видимо какая-то гос. контора.... очень любят они всё печатать и складывать в архив ! :-)
26 Kassern
 
11.11.20
15:51
(25) Для этого не обязательно показывать табдок. Сохраняй его сразу куда надо, или печатай
27 VladZ
 
11.11.20
15:53
+26 Или так:
- сформировать на сервере
- отправить по почте нужным получателям.
28 Impuls20_03
 
11.11.20
16:04
(16) Нет. Просто это не работает. Я такое делал изначально
29 Kassern
 
11.11.20
16:06
(28) какая ошибка?
30 Impuls20_03
 
12.11.20
07:59
(29) Ошибок нету, просто долго формируется
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший