Поддержка толстого клиента, управляемое приложение, клиент-сервер

#std680

Область применения: управляемое приложение, обычное приложение.

1. В управляемом режиме из-за ряда ограничений тонкого клиента может возникнуть необходимость поддержки запуска толстого клиента (в режиме управляемого приложения). Подробнее см. Функциональность обычного приложения, отсутствующая в управляемом приложении.

2. При этом разработка конфигураций, рассчитанных на режим управляемого приложения, как правило, ведется исходя из того, что в клиент-серверной архитектуре код следующих модулей компилируется и выполняется только на сервере

В частности, в указанных модулях может встречаться обращение к общим модулям, доступным только на сервере.

Однако в толстом клиенте, в режиме управляемого приложения, клиент-сервер, возможны ситуации, когда указанные модули могут начать компилироваться и выполняться на стороне клиента, в частности:

Компиляция и выполнение таких модулей на клиенте могут приводить к ошибкам. По этой причине режим проверки конфигурации для режима толстый клиент, управляемое приложение, может находить ошибки в указанных модулях.

Для того чтобы избежать незапланированной компиляции и исполнения указанных модулей на клиенте, а также чтобы избежать лишних сообщений режима проверки конфигурации, следует:

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
  …
#Иначе
  ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
  …
#КонецЕсли

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#КонецЕсли

В последнем случае также будет действовать следующее ограничение: если представление объектов формируется обработчиками событий модуля менеджера ОбработкаПолученияПредставления и ОбработкаПолученияПолейПредставления, то в толстом клиенте, в режиме управляемого приложения, клиент-сервер, представление будет формироваться по умолчанию, без вызова этих обработчиков, и тем самым будет отличаться от остальных режимов работы. (При этом оставшиеся два обработчика модуля менеджера ОбработкаПолученияДанныхВыбора и ОбработкаПолученияФормы вызываются всегда только на сервере, поэтому указанное ограничение на них не распространяется.)

Методическая рекомендация (полезный совет)

3. В тех случаях, когда требуется снять указанное выше ограничение, необходимо дополнительно обеспечить работу на клиенте следующих фрагментов серверного кода:

  • обработчиков событий модулей менеджеров ОбработкаПолученияПредставления и ОбработкаПолученияПолейПредставления
  • а также код подписок на эти события модулей менеджеров.

Для этого код перечисленных обработчиков событий следует вынести за инструкции препроцессора, указанные в п.2, а обработчики подписок разместить в клиент-серверных модулях.

При необходимости вызова серверных процедур (и функций) из клиентского кода следует размещать вызываемые процедуры в серверных общих модулях с признаком Вызов сервера. При этом нужно убедиться, что в параметры процедур (и в возвращаемые значения функций) не передаются значения мутабельных типов (СправочникОбъект, ДокументОбъект и пр.)

Важно: не следует для этих целей всем общим модулям с признаком Сервер принудительно устанавливать флажок Вызов сервера. Подробнее см. Ограничение на установку признака «Вызов сервера» у общих модулей.

Например, обработчик события ОбработкаПолученияПредставления вызывает общий модуль, который не доступен на клиенте:

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
 
  Взаимодействия.ОбработкаПолученияПредставления(Данные, Представление);
  СтандартнаяОбработка = Ложь;
 
КонецПроцедуры

правильно выполнить переход на сервер (и при этом не передавать на клиент значения мутабельных типов):

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)

  ВзаимодействияВызовСервера.ОбработкаПолученияПредставления(Данные, Представление);
  СтандартнаяОбработка = Ложь;

КонецПроцедуры

4. Для расстановки фрагментов кода с инструкциями препроцессора можно воспользоваться приложенной обработкой.