Перейти к содержимому

❓ 6.3 Модуль приложения рекомендуется использовать


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

Платформа использует этот модуль при запуске конфигурации в следующих режимах:

  • тонкий клиент;
  • веб-клиент;
  • толстый клиент в режиме управляемого приложения.

Модуль инициализируется отдельно для каждого запущенного клиентского приложения. Он не является серверным модулем и не выполняется в серверных процедурах, фоновых заданиях или внешнем соединении.

Модуль управляемого приложения используется для обработки событий уровня клиентского приложения, прежде всего:

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

Основные обработчики начала и завершения работы:

ОбработчикКогда вызывается
ПередНачаломРаботыСистемыПеред началом работы клиентского приложения
ПриНачалеРаботыСистемыПосле начала работы клиентского приложения
ПередЗавершениемРаботыСистемыПеред завершением работы; завершение можно отменить
ПриЗавершенииРаботыСистемыНа заключительном этапе завершения работы

Например, в ПередЗавершениемРаботыСистемы можно проверить наличие незавершённых действий и при необходимости установить параметр Отказ.

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

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

Процедура ПриНачалеРаботыСистемы()
ИнициализацияПриложенияКлиент.Выполнить();
КонецПроцедуры

Такой подход позволяет:

  • не перегружать модуль приложения;
  • повторно использовать процедуры;
  • отделять обработку события от прикладной логики;
  • упрощать сопровождение и тестирование кода.

Модуль управляемого приложения может содержать все три раздела программного модуля:

  1. раздел определения переменных;
  2. раздел процедур и функций;
  3. раздел основной программы.

В этом разделе объявляются переменные модуля:

Перем НачальнаяСтраница;
Перем ПриложениеИнициализировано Экспорт;

Переменные существуют в контексте текущего экземпляра клиентского приложения.

Переменная с ключевым словом Экспорт может быть доступна из предусмотренных платформой клиентских(неглобальных) программных модулей. Наличие Экспорт не делает переменную доступной в серверном контексте.

Использовать переменные модуля приложения как универсальное глобальное хранилище состояния не рекомендуется: это усложняет зависимости между программными модулями.

Здесь размещаются:

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

Пример обработчика события:

Процедура ПередНачаломРаботыСистемы(Отказ)
Отказ = Не ПроверитьВозможностьНачалаРаботы();
КонецПроцедуры

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

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

ПриложениеИнициализировано = Ложь;

Основная программа выполняется при инициализации модуля управляемого приложения.

В ней можно присваивать начальные значения переменным модуля и выполнять другой код инициализации.

Модуль управляемого приложения выполняется на клиенте. В его контексте доступны:

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

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

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