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

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

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

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

Моя фантазия на этом закончилась...
Подскажите, пожалуйста, как минимизировать это время возврата? Как вообще корректно работать с управляемыми формами с большими ТЧ?
---
Единственный вариант - не использовать ТЧ. Будь она табличной частью объекта или реквизитом формы - не важно.
То есть вся работа таблицей идет на сервере.
По завершению работы с таблицей она помещается во временное хранилище и вот адрес временного хранилища и хранится в реквизитах формы.
Когда надо еще что-то сделать - идем на сервер, достаем таблицу из адреса, правим ее, помещаем обратно.

Если же таблица есть в реквизитах объекта или формы, вне зависимости от того, выводите вы таблицу на форму или нет, при контекстных вызовах она будет передаваться на сервер и обратно.
---
Единственный вариант - не использовать ТЧ. Будь она табличной частью объекта или реквизитом формы - не важно.
То есть вся работа таблицей идет на сервере.
По завершению работы с таблицей она помещается во временное хранилище и вот адрес временного хранилища и хранится в реквизитах формы.
Когда надо еще что-то сделать - идем на сервер, достаем таблицу из адреса, правим ее, помещаем обратно.

Если же таблица есть в реквизитах объекта или формы, вне зависимости от того, выводите вы таблицу на форму или нет, при контекстных вызовах она будет передаваться на сервер и обратно.
---
Вот это уже интереснее. Попробую, спасибо.
---
Чтобы было повеселее работать с таблицей (поиск там, отбор) можно ей добавить индекс по полям поиска/отбора.
---
Перевела 3 ТЧ в программно создаваемые ТЗ во временном хранилище, в результате: если ранее форма2 открывалась ~1,5 минуты, то теперь за 1,25 секунды!
Правда пришлось изменить некоторые процедуры, т.к. ТЗ и ТЧ - это разные сущности.

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

Круто =)

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

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

Если у вас табличный документ в обработке большой, то можно еще оптимизировать работу с обработкой, используя вызов сервера без контекста, где это возможно, чтобы не тащить табличный документ в серверные вызовы в составе контекста формы.
---
Спасибо большое за советы!
По поводу ТабДока и безконтекстных вызовов подумаю, может на досуге переделаю тоже.
В предыдущем сообщении исправила - при заполнении по большому подразделению форма открывалась 1,5 минуты, а стала 1,25 секунд! Еще больше прирост!
---
Вот она оптимизация, почти в 45 раз=)))
---
ПоместитьВоВременноеХранилище в параметр адрес указать УИД формы обработки
Дополню, второй параметр указывать обязательно, УИД обработки или уникальный идентификатор - решайте сами, в зависимости от необходимости.
Если не указывать, то данные во временном хранилище будут жить только до следующего серверного вызова (любого), а потом удаляются.
---
Да, я как раз указываю - УникальныйИдентификатор формы обработки
---
Если у вас есть Обработка с ТЧ, то просто выводите эту ТЧ на форму, и все манипуляции с данными делаете в модуле формы...
Все...
Никуда ничего специально не придется передавать дополнительно...

Про вторую форму нужна более подробная информация...
Зачем вам вообще 2 формы с одними данными?
---
Мне не нужна ТЧ на форме. Посмотрите как сделана альтернативная форма табеля в типовой ЗУП 3.1.
Это не 2 формы с одними данными, вторая форма для редактирования данных одного дня (опять же по аналогии с типовой ЗУП).
От типового отличается тем, что у меня строк в ТЧ получается в 2 раза больше, чем при заполнении в стандартном табеле. Поэтому процедура возврата с сервера на клиент происходит в разы дольше.
---
Я так понял, что вы привели механизм ЗУП только в качестве аналога?
А у вас другие данные?
И вопрос - тормоза при открытии первой формы или второй?
---
Да, все верно. Сделано по аналогии ЗУП, данные другие.
Тормоза при открытии второй формы, конкретно при неявном возврате с сервера обратно на клиент (с клиента вызываю серверную процедуру, по окончании серверной процедуры платформа автоматически возвращается на клиент - вот этот возврат при большой ТЧ отрабатывает очень долго. Если в ТЧ мало строк, то возврат происходит мгновенно).
---
А зачем вы тащите на вторую форму ВСЕ данные из первой?
Если как вы указали вам нужно редактирование отдельной записи?
---
резонный вопрос) пыталась тащить НаСерверБезКонтекста не все данные, но возникла ошибка (см.вариант 3)
---
А почему используете БезКонтекста?
---
Чтобы контекст (форму) не тащить...разве нет?
как я понимаю если я с клиента вызову процедуру "НаСервере", то в нее автоматом будет передан весь контекст (вся форма) (или не так?)
у меня это все в модуле формы обработки происходит (форма1)
---
Вам что трудно попытаться &НаСервере и все увидите....
Или жажда ничто, имидж - все?
---
На сервер будет передан весь контекст формы, т.к. процедура в модуле формы находится
---
И что ?
Вы пытаетесь в форму свою притащить информации в миллион раз больше!
---
Вы не поняли сути. Я в форму2 ничего не тащу, в нее как раз всегда передается только то, что нужно - инфа за 1 день. А вот получаю/отбираю/фильтрую я эту инфу в форме1, которая принадлежит обработке в которой есть гигантская ТЧ.
---
Вот и видно ваше слабое место...
Зачем вы отбираете , фильтруете данные в форме1 ?
Вы должны передать в форму 2 всего лишь параметры отбора или фильтр. А отбирать и фильтровать уже в самой форме2 и не будет тормозов