Имя: Пароль:
1C
1С v8
Табличный документ, тонкий клиент и производительность.
,
0 H A D G E H O G s
 
27.03.14
20:59
День добрый.

Ситуация - управляемая форма, на ней Табличный документ, примерно в 10000 строк, с 20 колонками, расшифровкой, и.т.д.

Вывод в него производится на сервере (на клиенте выводить нельзя).

После вывода табличный документ передается на клиент, как результат функции. Передача отнимает 30 секунд в локальной сети (но проблема не в этом).

28 секунд примерно занимает Сериализация Табличного документа в XDTO и записи в XML объект, который и передается по сети.

К такому выводу я пришел, когда получил такую же производительность при ручной сериализации (если я не прав - прошу поправить меня специалистам). Код сериализации:
&НаСервереБезКонтекста
Функция ПолучитьТабДокЧерезXDTOНаСервере(Знач ИмяБлока,Знач АдресДанныхНаСервере)
    Декларации=ВывестиБлокДанныхВТабличныйДокумент("Декларации",АдресДанныхНаСервере);
    Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
    ОбъектXDTO = Сериализатор.ЗаписатьXDTO(Декларации);
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл("D:\test\new.xml");
    ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO); //28 секунд
    ЗаписьXML.Закрыть();
КонецФункции

записанный файл занимает 69 мегабайт.

Беда.

Что пробовалось:

1. Запись табличного документа в mxl (39 мегабайт, практически мгновенное формирование, отличной ZIP сжатие), но метод Прочитать() у Табличного документа не доступен на Тонком клиенте.
2. Сериализация в ЗаписьFastInfoset (25 мегабайт, приемлимая скорость (5-7 секунд), но объект ЧтениеFastInfoset недоступен на Тонком клиенте (в отличии от ЧтенияXML)

Есть еще идеи?
2 H A D G E H O G s
 
28.03.14
09:36
Поднимем ветку.
3 Kyon8
 
28.03.14
09:39
А пользователи все 10000 строк внимательно просматривают? :)
4 H A D G E H O G s
 
28.03.14
09:42
(3) Да.
5 alexhtn
 
28.03.14
09:47
Попробовал сформировать табличный документ с большим количеством строк и по счетчикам производительности вижу, что он не весь сразу передается тонкому клиенту, а только по мере прокрутки.
Попробую сделать замер производительности.
6 H A D G E H O G s
 
28.03.14
09:58
(5) Момент
8 H A D G E H O G s
 
28.03.14
10:06
Так, беру таймаут.
Изначально, я получал табдок через безконтекстную функцию.
Сейчас попробовал получил через контекстную функцию, выводя его на форму прямо на сервере.
Все отработало быстро, по мере промотки табличного документа - периодическое обращение к серверу (при безконтекстном вызове такого не было).

Респект 1С, они сделали динамически подгружаемый с сервера, табличный документ.
9 alexhtn
 
28.03.14
10:20
Но только сохранение такого документа превращается в ужас.
Количество вызовов сервера зашкаливает.
10 H A D G E H O G s
 
28.03.14
10:45
(9) Неприятность эту мы переживем. Вызов безконтекстной функции, которая вернет этот таб док сразу. Который будет нединамическим.
11 mistеr
 
28.03.14
11:26
(4) Не верю. (с)
12 vi0
 
09.04.14
21:05
(5) а какие счетчики смотрел?
13 H A D G E H O G s
 
09.04.14
21:07
(12) Да просто окно производительности.
При прокрутке - мигает обращением к серверу - только в путь и накапливает счетчик серверных вызовов.
14 vi0
 
09.04.14
21:09
(13) одинесная которая?
15 H A D G E H O G s
 
09.04.14
21:22
(14) да
16 jsmith82
 
09.04.14
21:24
для твоего примера 28 секунд это норма
17 jsmith82
 
09.04.14
21:26
>>безконтекстную
бесконтекстную, не режь ухо
18 Torquader
 
09.04.14
22:12
Можно передать на клиента таблицу или массив с данными, а уже саму таблицу собрать на клиенте - явно получится намного меньше.
P.S. я так Excel собирал.
19 H A D G E H O G s
 
09.04.14
22:34
(18) табличный документ на клиенте не формируется
20 floody
 
09.04.14
22:46
(17) давно правильное написание стало резать ухо?
21 milan
 
09.04.14
22:48
Попробуй перескочить в конец документа, а потом отмотать к началу - получишь тот же самый фриз ;)

Вообще беда с  производительностью - что динамические списки, что скд, что табдоки.
Ошибка? Это не ошибка, это системная функция.