Долгий возврат с сервера на клиент

1. Genda 09.10.19 11:48 Сейчас в теме
Всем доброго времени суток!
Есть обработка с ТЧ (колонок:90+; строк может быть: 30000+). ТЧ на форму обработки НЕ выведена, но ее данные используются для отрисовки в табдоке информации для пользователя + данные ТЧ используются в команде.
В процедуре выбора в табдоке происходит открытие другой формы (форма2), в которую из формы обработки (форма1) передаются некоторые данные (через Адрес в хранилище). Для того чтобы получить нужные данные для передачи в форму2 в процедуре события выбора табдока (НаКлиенте) вызывается серверная процедура, после чего происходит возврат на клиента (платформенный) и открытие формы2 с передачей в параметрах открытия Адреса с нужными данными.
Если ТЧ содержит большое количество строк, то платформенный возврат с сервера на клиент происходит очень долго: порядка 10-12 секунд!
Пыталась делать без контекста (варианты описаны ниже), но пока безуспешно.

Были уже испробованы следующие варианты:
Вариант 1:
- с клиента вызываем процедуру НаСервере
- в процедуре НаСервере получаем Объект через РеквизитФормыВЗначение и передаем в процедуру НаСервереБезКонтекста (в ней получаем нужные данные и помещаем в хранилище по адресу (ПоместитьВоВременноеХранилище))
- после возврата НаСервер сохраняем Адрес в реквизит Объекта
- происходит платформенный возврат НаКлиента для открытия формы2 - висит очень долго при большой ТЧ!

Вариант 2:
- на клиенте помещаем все данные (в том числе и Объект.ТЧ) в структуру параметров
- вызываем процедуру НаСервереБезКонтекста в которую передаем структуру параметров - начинает висеть уже на данном этапе, т.к. передается вся ТЧ (как я понимаю)

Вариант 3:
- на клиенте через Объект.ТЧ.НайтиСтроки() получаем Массив только нужных нам данных. Массив помещаем в структуру параметров
- вызываем процедуру НаСервереБезКонтекста в которую передаем структуру параметров - возникает ошибка "Ошибка отображения типов:
Отсутствует отображение для типа 'ДанныеФормыЭлементКоллекции'" - т.к. элементы массива это ДанныеФормыЭлементКоллекции

Моя фантазия на этом закончилась...
Подскажите, пожалуйста, как минимизировать это время возврата? Как вообще корректно работать с управляемыми формами с большими ТЧ?
По теме из базы знаний
Найденные решения
10. Sashares 34 09.10.19 14:26 Сейчас в теме
(1)Единственный вариант - не использовать ТЧ. Будь она табличной частью объекта или реквизитом формы - не важно.
То есть вся работа таблицей идет на сервере.
По завершению работы с таблицей она помещается во временное хранилище и вот адрес временного хранилища и хранится в реквизитах формы.
Когда надо еще что-то сделать - идем на сервер, достаем таблицу из адреса, правим ее, помещаем обратно.

Если же таблица есть в реквизитах объекта или формы, вне зависимости от того, выводите вы таблицу на форму или нет, при контекстных вызовах она будет передаваться на сервер и обратно.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. Sashares 34 09.10.19 14:26 Сейчас в теме
(1)Единственный вариант - не использовать ТЧ. Будь она табличной частью объекта или реквизитом формы - не важно.
То есть вся работа таблицей идет на сервере.
По завершению работы с таблицей она помещается во временное хранилище и вот адрес временного хранилища и хранится в реквизитах формы.
Когда надо еще что-то сделать - идем на сервер, достаем таблицу из адреса, правим ее, помещаем обратно.

Если же таблица есть в реквизитах объекта или формы, вне зависимости от того, выводите вы таблицу на форму или нет, при контекстных вызовах она будет передаваться на сервер и обратно.
13. Genda 09.10.19 14:31 Сейчас в теме
(10) Вот это уже интереснее. Попробую, спасибо.
17. Sashares 34 09.10.19 14:47 Сейчас в теме
(13)Чтобы было повеселее работать с таблицей (поиск там, отбор) можно ей добавить индекс по полям поиска/отбора.
18. Genda 10.10.19 12:24 Сейчас в теме
(17) Перевела 3 ТЧ в программно создаваемые ТЗ во временном хранилище, в результате: если ранее форма2 открывалась ~1,5 минуты, то теперь за 1,25 секунды!
Правда пришлось изменить некоторые процедуры, т.к. ТЗ и ТЧ - это разные сущности.

Sashares, а не подскажете есть ли какие-то риски в использовании данного метода?
Почитала что если в методе ПоместитьВоВременноеХранилище в параметр адрес указать УИД формы обработки, то все данные будут "жить" пока "жива" форма. Также прочла что данные живут в рамках сеанса.
Есть вопрос: если обработка будет запущена у разных пользователей в одно время, конфликтов в данных при использовании ПоместитьВоВременноеХранилище /ПолучитьИзВременногоХранилища не возникнет? Не будет такого что пользователь1 перезапишет данные по адресу пользователя2?
Вроде как если данные по адресу хранятся в рамках сеанса, то такого быть недолжно, но хотелось бы услышать мнение тех, кто реально с этим работал.
19. Sashares 34 10.10.19 12:33 Сейчас в теме
(18)
Перевела 3 ТЧ во временное хранилище, в результате: если ранее форма2 открывалась ~14 секунд, то теперь за 1,25 секунды!


Круто =)

(18)
Есть вопрос: если обработка будет запущена у разных пользователей в одно время, конфликтов в данных при использовании ПоместитьВоВременноеХранилище /ПолучитьИзВременногоХранилища не возникнет? Не будет такого что пользователь1 перезапишет данные по адресу пользователя2?


Нет, таких проблем быть не должно.
Каждый работает с теми данными временного хранилища, которые есть в его сеансе.

Если у вас табличный документ в обработке большой, то можно еще оптимизировать работу с обработкой, используя вызов сервера без контекста, где это возможно, чтобы не тащить табличный документ в серверные вызовы в составе контекста формы.
22. Genda 10.10.19 15:44 Сейчас в теме
(19) Спасибо большое за советы!
По поводу ТабДока и безконтекстных вызовов подумаю, может на досуге переделаю тоже.
В предыдущем сообщении исправила - при заполнении по большому подразделению форма открывалась 1,5 минуты, а стала 1,25 секунд! Еще больше прирост!
23. Sashares 34 10.10.19 15:59 Сейчас в теме
(22)Вот она оптимизация, почти в 45 раз=)))
20. Sashares 34 10.10.19 12:43 Сейчас в теме
(18)
ПоместитьВоВременноеХранилище в параметр адрес указать УИД формы обработки

Дополню, второй параметр указывать обязательно, УИД обработки или уникальный идентификатор - решайте сами, в зависимости от необходимости.
Если не указывать, то данные во временном хранилище будут жить только до следующего серверного вызова (любого), а потом удаляются.
21. Genda 10.10.19 15:41 Сейчас в теме
(20) Да, я как раз указываю - УникальныйИдентификатор формы обработки
2. YannikAlx 43 09.10.19 12:11 Сейчас в теме
Если у вас есть Обработка с ТЧ, то просто выводите эту ТЧ на форму, и все манипуляции с данными делаете в модуле формы...
Все...
Никуда ничего специально не придется передавать дополнительно...

Про вторую форму нужна более подробная информация...
Зачем вам вообще 2 формы с одними данными?
3. Genda 09.10.19 13:05 Сейчас в теме
(2) Мне не нужна ТЧ на форме. Посмотрите как сделана альтернативная форма табеля в типовой ЗУП 3.1.
Это не 2 формы с одними данными, вторая форма для редактирования данных одного дня (опять же по аналогии с типовой ЗУП).
От типового отличается тем, что у меня строк в ТЧ получается в 2 раза больше, чем при заполнении в стандартном табеле. Поэтому процедура возврата с сервера на клиент происходит в разы дольше.
4. YannikAlx 43 09.10.19 13:27 Сейчас в теме
Я так понял, что вы привели механизм ЗУП только в качестве аналога?
А у вас другие данные?
И вопрос - тормоза при открытии первой формы или второй?
5. Genda 09.10.19 13:52 Сейчас в теме
(4) Да, все верно. Сделано по аналогии ЗУП, данные другие.
Тормоза при открытии второй формы, конкретно при неявном возврате с сервера обратно на клиент (с клиента вызываю серверную процедуру, по окончании серверной процедуры платформа автоматически возвращается на клиент - вот этот возврат при большой ТЧ отрабатывает очень долго. Если в ТЧ мало строк, то возврат происходит мгновенно).
6. YannikAlx 43 09.10.19 13:54 Сейчас в теме
(5) А зачем вы тащите на вторую форму ВСЕ данные из первой?
Если как вы указали вам нужно редактирование отдельной записи?
7. Genda 09.10.19 14:13 Сейчас в теме
(6) резонный вопрос) пыталась тащить НаСерверБезКонтекста не все данные, но возникла ошибка (см.вариант 3)
8. YannikAlx 43 09.10.19 14:17 Сейчас в теме
А почему используете БезКонтекста?
9. Genda 09.10.19 14:20 Сейчас в теме
Чтобы контекст (форму) не тащить...разве нет?
как я понимаю если я с клиента вызову процедуру "НаСервере", то в нее автоматом будет передан весь контекст (вся форма) (или не так?)
у меня это все в модуле формы обработки происходит (форма1)
11. YannikAlx 43 09.10.19 14:29 Сейчас в теме
(9) Вам что трудно попытаться &НаСервере и все увидите....
Или жажда ничто, имидж - все?
12. Genda 09.10.19 14:30 Сейчас в теме
(11) На сервер будет передан весь контекст формы, т.к. процедура в модуле формы находится
14. YannikAlx 43 09.10.19 14:34 Сейчас в теме
И что ?
Вы пытаетесь в форму свою притащить информации в миллион раз больше!
15. Genda 09.10.19 14:39 Сейчас в теме
(14) Вы не поняли сути. Я в форму2 ничего не тащу, в нее как раз всегда передается только то, что нужно - инфа за 1 день. А вот получаю/отбираю/фильтрую я эту инфу в форме1, которая принадлежит обработке в которой есть гигантская ТЧ.
16. YannikAlx 43 09.10.19 14:46 Сейчас в теме
(15) Вот и видно ваше слабое место...
Зачем вы отбираете , фильтруете данные в форме1 ?
Вы должны передать в форму 2 всего лишь параметры отбора или фильтр. А отбирать и фильтровать уже в самой форме2 и не будет тормозов
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот