Всем доброго времени суток!
Есть обработка с ТЧ (колонок:90+; строк может быть: 30000+). ТЧ на форму обработки НЕ выведена, но ее данные используются для отрисовки в табдоке информации для пользователя + данные ТЧ используются в команде.
В процедуре выбора в табдоке происходит открытие другой формы (форма2), в которую из формы обработки (форма1) передаются некоторые данные (через Адрес в хранилище). Для того чтобы получить нужные данные для передачи в форму2 в процедуре события выбора табдока (НаКлиенте) вызывается серверная процедура, после чего происходит возврат на клиента (платформенный) и открытие формы2 с передачей в параметрах открытия Адреса с нужными данными.
Если ТЧ содержит большое количество строк, то платформенный возврат с сервера на клиент происходит очень долго: порядка 10-12 секунд!
Пыталась делать без контекста (варианты описаны ниже), но пока безуспешно.
Были уже испробованы следующие варианты:
Вариант 1:
- с клиента вызываем процедуру НаСервере
- в процедуре НаСервере получаем Объект через РеквизитФормыВЗначение и передаем в процедуру НаСервереБезКонтекста (в ней получаем нужные данные и помещаем в хранилище по адресу (ПоместитьВоВременноеХранилище))
- после возврата НаСервер сохраняем Адрес в реквизит Объекта
- происходит платформенный возврат НаКлиента для открытия формы2 - висит очень долго при большой ТЧ!
Вариант 2:
- на клиенте помещаем все данные (в том числе и Объект.ТЧ) в структуру параметров
- вызываем процедуру НаСервереБезКонтекста в которую передаем структуру параметров - начинает висеть уже на данном этапе, т.к. передается вся ТЧ (как я понимаю)
Вариант 3:
- на клиенте через Объект.ТЧ.НайтиСтроки() получаем Массив только нужных нам данных. Массив помещаем в структуру параметров
- вызываем процедуру НаСервереБезКонтекста в которую передаем структуру параметров - возникает ошибка "Ошибка отображения типов:
Отсутствует отображение для типа 'ДанныеФормыЭлементКоллекции'" - т.к. элементы массива это ДанныеФормыЭлементКоллекции
Моя фантазия на этом закончилась...
Подскажите, пожалуйста, как минимизировать это время возврата? Как вообще корректно работать с управляемыми формами с большими ТЧ?
Есть обработка с ТЧ (колонок:90+; строк может быть: 30000+). ТЧ на форму обработки НЕ выведена, но ее данные используются для отрисовки в табдоке информации для пользователя + данные ТЧ используются в команде.
В процедуре выбора в табдоке происходит открытие другой формы (форма2), в которую из формы обработки (форма1) передаются некоторые данные (через Адрес в хранилище). Для того чтобы получить нужные данные для передачи в форму2 в процедуре события выбора табдока (НаКлиенте) вызывается серверная процедура, после чего происходит возврат на клиента (платформенный) и открытие формы2 с передачей в параметрах открытия Адреса с нужными данными.
Если ТЧ содержит большое количество строк, то платформенный возврат с сервера на клиент происходит очень долго: порядка 10-12 секунд!
Пыталась делать без контекста (варианты описаны ниже), но пока безуспешно.
Были уже испробованы следующие варианты:
Вариант 1:
- с клиента вызываем процедуру НаСервере
- в процедуре НаСервере получаем Объект через РеквизитФормыВЗначение и передаем в процедуру НаСервереБезКонтекста (в ней получаем нужные данные и помещаем в хранилище по адресу (ПоместитьВоВременноеХранилище))
- после возврата НаСервер сохраняем Адрес в реквизит Объекта
- происходит платформенный возврат НаКлиента для открытия формы2 - висит очень долго при большой ТЧ!
Вариант 2:
- на клиенте помещаем все данные (в том числе и Объект.ТЧ) в структуру параметров
- вызываем процедуру НаСервереБезКонтекста в которую передаем структуру параметров - начинает висеть уже на данном этапе, т.к. передается вся ТЧ (как я понимаю)
Вариант 3:
- на клиенте через Объект.ТЧ.НайтиСтроки() получаем Массив только нужных нам данных. Массив помещаем в структуру параметров
- вызываем процедуру НаСервереБезКонтекста в которую передаем структуру параметров - возникает ошибка "Ошибка отображения типов:
Отсутствует отображение для типа 'ДанныеФормыЭлементКоллекции'" - т.к. элементы массива это ДанныеФормыЭлементКоллекции
Моя фантазия на этом закончилась...
Подскажите, пожалуйста, как минимизировать это время возврата? Как вообще корректно работать с управляемыми формами с большими ТЧ?
По теме из базы знаний
- Просмотр изображений через тонкий клиент с жесткого диска сервера UPD
- Обработка печатной формы WORD клиент-сервер УФ
- Удержание СОМ-соединения между вызовами сервера
- Взаимодействие с сотрудниками и клиентами из одного окна конфигурации 1С (Телеграм, ВКонтакте, Facebook, Discord). Преимущества, технические особенности, подводные камни
- Вывод сообщений при длительных операциях на сервере
Найденные решения
(1)Единственный вариант - не использовать ТЧ. Будь она табличной частью объекта или реквизитом формы - не важно.
То есть вся работа таблицей идет на сервере.
По завершению работы с таблицей она помещается во временное хранилище и вот адрес временного хранилища и хранится в реквизитах формы.
Когда надо еще что-то сделать - идем на сервер, достаем таблицу из адреса, правим ее, помещаем обратно.
Если же таблица есть в реквизитах объекта или формы, вне зависимости от того, выводите вы таблицу на форму или нет, при контекстных вызовах она будет передаваться на сервер и обратно.
То есть вся работа таблицей идет на сервере.
По завершению работы с таблицей она помещается во временное хранилище и вот адрес временного хранилища и хранится в реквизитах формы.
Когда надо еще что-то сделать - идем на сервер, достаем таблицу из адреса, правим ее, помещаем обратно.
Если же таблица есть в реквизитах объекта или формы, вне зависимости от того, выводите вы таблицу на форму или нет, при контекстных вызовах она будет передаваться на сервер и обратно.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)Единственный вариант - не использовать ТЧ. Будь она табличной частью объекта или реквизитом формы - не важно.
То есть вся работа таблицей идет на сервере.
По завершению работы с таблицей она помещается во временное хранилище и вот адрес временного хранилища и хранится в реквизитах формы.
Когда надо еще что-то сделать - идем на сервер, достаем таблицу из адреса, правим ее, помещаем обратно.
Если же таблица есть в реквизитах объекта или формы, вне зависимости от того, выводите вы таблицу на форму или нет, при контекстных вызовах она будет передаваться на сервер и обратно.
То есть вся работа таблицей идет на сервере.
По завершению работы с таблицей она помещается во временное хранилище и вот адрес временного хранилища и хранится в реквизитах формы.
Когда надо еще что-то сделать - идем на сервер, достаем таблицу из адреса, правим ее, помещаем обратно.
Если же таблица есть в реквизитах объекта или формы, вне зависимости от того, выводите вы таблицу на форму или нет, при контекстных вызовах она будет передаваться на сервер и обратно.
(17) Перевела 3 ТЧ в программно создаваемые ТЗ во временном хранилище, в результате: если ранее форма2 открывалась ~1,5 минуты, то теперь за 1,25 секунды!
Правда пришлось изменить некоторые процедуры, т.к. ТЗ и ТЧ - это разные сущности.
Sashares, а не подскажете есть ли какие-то риски в использовании данного метода?
Почитала что если в методе ПоместитьВоВременноеХранилище в параметр адрес указать УИД формы обработки, то все данные будут "жить" пока "жива" форма. Также прочла что данные живут в рамках сеанса.
Есть вопрос: если обработка будет запущена у разных пользователей в одно время, конфликтов в данных при использовании ПоместитьВоВременноеХранилище /ПолучитьИзВременногоХранилища не возникнет? Не будет такого что пользователь1 перезапишет данные по адресу пользователя2?
Вроде как если данные по адресу хранятся в рамках сеанса, то такого быть недолжно, но хотелось бы услышать мнение тех, кто реально с этим работал.
Правда пришлось изменить некоторые процедуры, т.к. ТЗ и ТЧ - это разные сущности.
Sashares, а не подскажете есть ли какие-то риски в использовании данного метода?
Почитала что если в методе ПоместитьВоВременноеХранилище в параметр адрес указать УИД формы обработки, то все данные будут "жить" пока "жива" форма. Также прочла что данные живут в рамках сеанса.
Есть вопрос: если обработка будет запущена у разных пользователей в одно время, конфликтов в данных при использовании ПоместитьВоВременноеХранилище /ПолучитьИзВременногоХранилища не возникнет? Не будет такого что пользователь1 перезапишет данные по адресу пользователя2?
Вроде как если данные по адресу хранятся в рамках сеанса, то такого быть недолжно, но хотелось бы услышать мнение тех, кто реально с этим работал.
(18)
Круто =)
(18)
Нет, таких проблем быть не должно.
Каждый работает с теми данными временного хранилища, которые есть в его сеансе.
Если у вас табличный документ в обработке большой, то можно еще оптимизировать работу с обработкой, используя вызов сервера без контекста, где это возможно, чтобы не тащить табличный документ в серверные вызовы в составе контекста формы.
Перевела 3 ТЧ во временное хранилище, в результате: если ранее форма2 открывалась ~14 секунд, то теперь за 1,25 секунды!
Круто =)
(18)
Есть вопрос: если обработка будет запущена у разных пользователей в одно время, конфликтов в данных при использовании ПоместитьВоВременноеХранилище /ПолучитьИзВременногоХранилища не возникнет? Не будет такого что пользователь1 перезапишет данные по адресу пользователя2?
Нет, таких проблем быть не должно.
Каждый работает с теми данными временного хранилища, которые есть в его сеансе.
Если у вас табличный документ в обработке большой, то можно еще оптимизировать работу с обработкой, используя вызов сервера без контекста, где это возможно, чтобы не тащить табличный документ в серверные вызовы в составе контекста формы.
(19) Спасибо большое за советы!
По поводу ТабДока и безконтекстных вызовов подумаю, может на досуге переделаю тоже.
В предыдущем сообщении исправила - при заполнении по большому подразделению форма открывалась 1,5 минуты, а стала 1,25 секунд! Еще больше прирост!
По поводу ТабДока и безконтекстных вызовов подумаю, может на досуге переделаю тоже.
В предыдущем сообщении исправила - при заполнении по большому подразделению форма открывалась 1,5 минуты, а стала 1,25 секунд! Еще больше прирост!
(18)
Дополню, второй параметр указывать обязательно, УИД обработки или уникальный идентификатор - решайте сами, в зависимости от необходимости.
Если не указывать, то данные во временном хранилище будут жить только до следующего серверного вызова (любого), а потом удаляются.
ПоместитьВоВременноеХранилище в параметр адрес указать УИД формы обработки
Дополню, второй параметр указывать обязательно, УИД обработки или уникальный идентификатор - решайте сами, в зависимости от необходимости.
Если не указывать, то данные во временном хранилище будут жить только до следующего серверного вызова (любого), а потом удаляются.
Если у вас есть Обработка с ТЧ, то просто выводите эту ТЧ на форму, и все манипуляции с данными делаете в модуле формы...
Все...
Никуда ничего специально не придется передавать дополнительно...
Про вторую форму нужна более подробная информация...
Зачем вам вообще 2 формы с одними данными?
Все...
Никуда ничего специально не придется передавать дополнительно...
Про вторую форму нужна более подробная информация...
Зачем вам вообще 2 формы с одними данными?
(2) Мне не нужна ТЧ на форме. Посмотрите как сделана альтернативная форма табеля в типовой ЗУП 3.1.
Это не 2 формы с одними данными, вторая форма для редактирования данных одного дня (опять же по аналогии с типовой ЗУП).
От типового отличается тем, что у меня строк в ТЧ получается в 2 раза больше, чем при заполнении в стандартном табеле. Поэтому процедура возврата с сервера на клиент происходит в разы дольше.
Это не 2 формы с одними данными, вторая форма для редактирования данных одного дня (опять же по аналогии с типовой ЗУП).
От типового отличается тем, что у меня строк в ТЧ получается в 2 раза больше, чем при заполнении в стандартном табеле. Поэтому процедура возврата с сервера на клиент происходит в разы дольше.
(4) Да, все верно. Сделано по аналогии ЗУП, данные другие.
Тормоза при открытии второй формы, конкретно при неявном возврате с сервера обратно на клиент (с клиента вызываю серверную процедуру, по окончании серверной процедуры платформа автоматически возвращается на клиент - вот этот возврат при большой ТЧ отрабатывает очень долго. Если в ТЧ мало строк, то возврат происходит мгновенно).
Тормоза при открытии второй формы, конкретно при неявном возврате с сервера обратно на клиент (с клиента вызываю серверную процедуру, по окончании серверной процедуры платформа автоматически возвращается на клиент - вот этот возврат при большой ТЧ отрабатывает очень долго. Если в ТЧ мало строк, то возврат происходит мгновенно).
Чтобы контекст (форму) не тащить...разве нет?
как я понимаю если я с клиента вызову процедуру "НаСервере", то в нее автоматом будет передан весь контекст (вся форма) (или не так?)
у меня это все в модуле формы обработки происходит (форма1)
как я понимаю если я с клиента вызову процедуру "НаСервере", то в нее автоматом будет передан весь контекст (вся форма) (или не так?)
у меня это все в модуле формы обработки происходит (форма1)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот