#std680

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

1.

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

2.

В конфигурациях для управляемого приложения обычно предполагается, что в клиент-серверном режиме код модулей:

  • менеджера;
  • объекта;
  • сеанса;

компилируется и выполняется только на сервере.

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

Однако в толстом клиенте (управляемое приложение, клиент-сервер) эти модули могут компилироваться и выполняться на клиенте. Например:

  • при явном создании объекта в клиентском коде;
  • при неявных вызовах платформой обработчиков модулей менеджера и модуля сеанса на клиенте.

Из-за этого возникают ошибки и лишние сообщения проверки конфигурации.

Чтобы исключить незапланированную компиляцию и выполнение на клиенте:

  • в модулях объектов полностью исключайте клиентский контекст инструкцией препроцессора;
  • в модуле сеанса полностью исключайте клиентский контекст инструкцией препроцессора;
  • в модулях менеджеров всех объектов метаданных полностью исключайте клиентский контекст инструкцией препроцессора.

Пример для модуля объекта

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

Пример для модуля сеанса

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

Пример для модуля менеджера

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

Если в модуле менеджера формируется представление через обработчики ОбработкаПолученияПредставления и ОбработкаПолученияПолейПредставления, то в толстом клиенте (управляемое приложение, клиент-сервер) представление будет формироваться по умолчанию, без вызова этих обработчиков.

Обработчики ОбработкаПолученияДанныхВыбора и ОбработкаПолученияФормы вызываются только на сервере, и это ограничение на них не распространяется.

Проверки

#v8cs:module-accessibility-at-client

3.

Если это ограничение нужно снять, обеспечьте работу на клиенте:

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

Для этого:

  • вынесите код обработчиков за инструкции препроцессора из п. 2;
  • разместите обработчики подписок в клиент-серверных модулях;
  • при переходе на сервер используйте общие модули с признаком Вызов сервера;
  • не передавайте мутабельные типы (СправочникОбъект, ДокументОбъект и т.п.) через параметры и возвращаемые значения.

Не устанавливайте признак Вызов сервера всем модулям с признаком Сервер. См. #std679: Ограничение на установку признака «Вызов сервера» у общих модулей.

Неправильно

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

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

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

Правильно

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

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

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

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

См. также
Проверки

#acc:256 #acc:361 #acc:362

Источник

https://its.1c.ru/db/v8std#content:680