Редактирование обычной формы НаКлиенте НаСервере
При открытии (событие может быть ПередОткрытием и ПриОткрытии) любой обычной формы происходит его настройка в соответствии с теми или иными условиями. Фактически происходит полное редактирование свойств самой формы и всех элементов. Для этого в указанных событиях вызывается процедура. Т.к. клиентские машины слабые, то обработка происходит достаточно долго и формы открываются с зависанием. Можно ли перенести изменение свойств обычной формы и всех элементов, хотя бы частично, на сервер? Проблема в том, что сама форма не сериализуемая и есть элементы которые тоже не передаются на сервер, например, отбор. Есть варианты переноса обработки на сервер или же выход в увеличении мощности клиента и оптимизации кода обработки на клиенте?
По теме из базы знаний
Найденные решения
(3) частичный перевод на УФ в данном случае не поможет. Эффект будет только в тонком клиенте, а он не работает с ОФ.
А в толстом клиенте даже УФ выполняются полностью на клиенте.
Смотря что за затратные операции. Если это получение данных, или другие не связанные с формой действия, то их можно перенести на выполнение в общий серверный модуль, через промежуточный общий модуль с вызовом сервера.
Схема следующая:
ПередОткрытием - ОщийМодульВызовСервера - ОбщийМодульСервер.
Но это будет заметно, если таких переходов будет минимум. Т.е. желательно все действия выполнять за один вызов.
Но опять же, все зависит от операций, которые необходимо делать.
А в толстом клиенте даже УФ выполняются полностью на клиенте.
Смотря что за затратные операции. Если это получение данных, или другие не связанные с формой действия, то их можно перенести на выполнение в общий серверный модуль, через промежуточный общий модуль с вызовом сервера.
Схема следующая:
ПередОткрытием - ОщийМодульВызовСервера - ОбщийМодульСервер.
Но это будет заметно, если таких переходов будет минимум. Т.е. желательно все действия выполнять за один вызов.
Но опять же, все зависит от операций, которые необходимо делать.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)выход я вижу в переходе на управляемые формы.
В обычных формах нет разделения на клиент и сервер, там нет директив где и что выполнять, обычные формы это работа под толстым клиентом.
Вы не совсем до конца понимаете события и процесс открытия обычной формы, мне так кажется.
В обычных формах нет разделения на клиент и сервер, там нет директив где и что выполнять, обычные формы это работа под толстым клиентом.
Вы не совсем до конца понимаете события и процесс открытия обычной формы, мне так кажется.
(2) Переписывать все на УФ никто не будет. Переход будет постепенный. А редактировать формы надо сейчас. Как вариант, выполнять не имеющие прямого обращения к форме и затратные по времени операции в общем модуле на сервере.
По поводу управляемых форм тоже не совсем понятно. Получить форму на сервере нельзя, передать тоже, какие-то изменения свойств требует обращения на сервер. Но сформировать/отредактировать управляемую форму на сервере так, чтобы на клиенте только результат (т.е. саму форму) показать не получится? Как правильно редактировать управляемые формы тогда, подскажите, пожалуйста?
По поводу управляемых форм тоже не совсем понятно. Получить форму на сервере нельзя, передать тоже, какие-то изменения свойств требует обращения на сервер. Но сформировать/отредактировать управляемую форму на сервере так, чтобы на клиенте только результат (т.е. саму форму) показать не получится? Как правильно редактировать управляемые формы тогда, подскажите, пожалуйста?
(3) частичный перевод на УФ в данном случае не поможет. Эффект будет только в тонком клиенте, а он не работает с ОФ.
А в толстом клиенте даже УФ выполняются полностью на клиенте.
Смотря что за затратные операции. Если это получение данных, или другие не связанные с формой действия, то их можно перенести на выполнение в общий серверный модуль, через промежуточный общий модуль с вызовом сервера.
Схема следующая:
ПередОткрытием - ОщийМодульВызовСервера - ОбщийМодульСервер.
Но это будет заметно, если таких переходов будет минимум. Т.е. желательно все действия выполнять за один вызов.
Но опять же, все зависит от операций, которые необходимо делать.
А в толстом клиенте даже УФ выполняются полностью на клиенте.
Смотря что за затратные операции. Если это получение данных, или другие не связанные с формой действия, то их можно перенести на выполнение в общий серверный модуль, через промежуточный общий модуль с вызовом сервера.
Схема следующая:
ПередОткрытием - ОщийМодульВызовСервера - ОбщийМодульСервер.
Но это будет заметно, если таких переходов будет минимум. Т.е. желательно все действия выполнять за один вызов.
Но опять же, все зависит от операций, которые необходимо делать.
(6) на УФ существует два разных контекста формы. Серверный и клиентский. Сначала форма строится на сервере. Создание формы УФ это декларативный принцип. После создания серверного контекста формы выполняется серверная процедура модуля формы ПриСозданииНаСервере. В ней можно внести коррективы в созданную форму, в том числе перестроить программно.
Затем серверный контекст формы сериализуется и передается на клиента. Где строится клиентский контекст формы, который заполняется полученными данными с сервера. Серверный контекст формы в этот момент удаляется.
В последующем, при каждом серверном вызове в модуле формы с клиента, происходит сериализация клиентского контекста формы и создание серверного контекста формы, с последующем заполнением полученных данных. Поэтому и не рекомендуются частые контекстные серверные вызовы.
Все это работает полноценно на тонком клиенте. В толстом клиенте последовательность в основном та жа, но все выполняется на клиенте.
Затем серверный контекст формы сериализуется и передается на клиента. Где строится клиентский контекст формы, который заполняется полученными данными с сервера. Серверный контекст формы в этот момент удаляется.
В последующем, при каждом серверном вызове в модуле формы с клиента, происходит сериализация клиентского контекста формы и создание серверного контекста формы, с последующем заполнением полученных данных. Поэтому и не рекомендуются частые контекстные серверные вызовы.
Все это работает полноценно на тонком клиенте. В толстом клиенте последовательность в основном та жа, но все выполняется на клиенте.
(11) вот вам для размышления. Код модуля формы справочника:
ОбщийМодульКлиент это общий модуль с флагом Клиент (управляемое приложение).
И этот код работает. Ответите, почему он работает?
#Если ТолстыйКлиентУправляемоеПриложение Тогда
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ОбщийМодульКлиент.КлиенскаяПроцедура();
КонецПроцедуры
#КонецЕсли
ПоказатьОбщийМодульКлиент это общий модуль с флагом Клиент (управляемое приложение).
И этот код работает. Ответите, почему он работает?
(13) Мы сейчас про клиент-серверную базу говорим? На файловой могут быть различия.
В защиту моей версии: при замере производительности указывает явное разделение на клиент и сервер; при отключении серверного предмета отладки и при оставлении предмета отладки толстого клиента остановки на серверных модулях УФ не происходит.
Проверил ваш код
не выполняется он на клиент-сервере.
В защиту моей версии: при замере производительности указывает явное разделение на клиент и сервер; при отключении серверного предмета отладки и при оставлении предмета отладки толстого клиента остановки на серверных модулях УФ не происходит.
Проверил ваш код
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
#Если ТолстыйКлиентУправляемоеПриложение Тогда
Сообщить("плплп");
#КонецЕсли
(20) в тонком клиенте (файловый вариант) сервер эмулируется. И выполнение по директивам отрабатывает. И тут два варианта:
1. Прямое подключение к файлу базы тонким клиентом. Сервер эмулируется на клиенте. Просто разделение кода в рамках одной программы на одном компьютере.
2. Подключение тонким клиентом через web-сервер. Сервер эмулируется на web-сервере. Разделение кода похожее на настоящий клиент-сервер, хоть и несколько упрощенное.
1. Прямое подключение к файлу базы тонким клиентом. Сервер эмулируется на клиенте. Просто разделение кода в рамках одной программы на одном компьютере.
2. Подключение тонким клиентом через web-сервер. Сервер эмулируется на web-сервере. Разделение кода похожее на настоящий клиент-сервер, хоть и несколько упрощенное.
(3)эк вы ее лихо так. Форма на сервере бесполезная сущность - это сущность для отражения представлений базы на клиенте. Уф вообще может не создаваться, ее создаст система при открытии списка или элемента или документа. Как правильно их редактировать - а зачем их редактировать? Форму надо создать и использовать для управления элементами в базе. Как то так, наверно.
(5)
а зачем их редактировать?
было решено реализовать "Вариант запуска" и что-то вроде "ограничение доступа" помимо ролей. Поэтому перед тем как пользователь откроет форму ее полностью редактируем: видимость, доступность, толькопросмотр, отбор, сортировка, настройки отбора и сортировки и т.д.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот