6.3 Модуль приложения рекомендуется использовать
❓ 6.3 Модуль приложения рекомендуется использовать
📚 Документация
Заголовок раздела «📚 Документация»- ИТС: Руководство разработчика — 4.2.3.1. Модуль управляемого приложения https://its.1c.ru/db/v854doc#bookmark:dev:TI000000124
🧠 Краткая теория
Заголовок раздела «🧠 Краткая теория»Модуль управляемого приложения относится ко всей конфигурации и выполняется на стороне клиентского приложения. Он предназначен для обработки событий, связанных с запуском, работой и завершением интерактивного сеанса пользователя.
Платформа использует этот модуль при запуске конфигурации в следующих режимах:
- тонкий клиент;
- веб-клиент;
- толстый клиент в режиме управляемого приложения.
Модуль инициализируется отдельно для каждого запущенного клиентского приложения. Он не является серверным модулем и не выполняется в серверных процедурах, фоновых заданиях или внешнем соединении.
Назначение модуля
Заголовок раздела «Назначение модуля»Модуль управляемого приложения используется для обработки событий уровня клиентского приложения, прежде всего:
- подготовки приложения к началу работы;
- выполнения действий после запуска приложения;
- проверки возможности завершения работы;
- выполнения действий при завершении работы.
Основные обработчики начала и завершения работы:
| Обработчик | Когда вызывается |
|---|---|
ПередНачаломРаботыСистемы | Перед началом работы клиентского приложения |
ПриНачалеРаботыСистемы | После начала работы клиентского приложения |
ПередЗавершениемРаботыСистемы | Перед завершением работы; завершение можно отменить |
ПриЗавершенииРаботыСистемы | На заключительном этапе завершения работы |
Например, в ПередЗавершениемРаботыСистемы можно проверить наличие незавершённых действий и при необходимости установить параметр Отказ.
Рекомендации по размещению кода
Заголовок раздела «Рекомендации по размещению кода»Документация рекомендует реализовывать в модуле управляемого приложения прежде всего обработчики событий приложения.
Основную прикладную логику целесообразно размещать в общих модулях, а из обработчиков событий вызывать соответствующие процедуры:
Процедура ПриНачалеРаботыСистемы()
ИнициализацияПриложенияКлиент.Выполнить();
КонецПроцедурыТакой подход позволяет:
- не перегружать модуль приложения;
- повторно использовать процедуры;
- отделять обработку события от прикладной логики;
- упрощать сопровождение и тестирование кода.
Разделы модуля управляемого приложения
Заголовок раздела «Разделы модуля управляемого приложения»Модуль управляемого приложения может содержать все три раздела программного модуля:
- раздел определения переменных;
- раздел процедур и функций;
- раздел основной программы.
Раздел определения переменных
Заголовок раздела «Раздел определения переменных»В этом разделе объявляются переменные модуля:
Перем НачальнаяСтраница;Перем ПриложениеИнициализировано Экспорт;Переменные существуют в контексте текущего экземпляра клиентского приложения.
Переменная с ключевым словом Экспорт может быть доступна из предусмотренных платформой клиентских(неглобальных) программных модулей. Наличие Экспорт не делает переменную доступной в серверном контексте.
Использовать переменные модуля приложения как универсальное глобальное хранилище состояния не рекомендуется: это усложняет зависимости между программными модулями.
Раздел процедур и функций
Заголовок раздела «Раздел процедур и функций»Здесь размещаются:
- обработчики событий приложения;
- экспортные процедуры и функции;
- внутренние вспомогательные процедуры и функции.
Пример обработчика события:
Процедура ПередНачаломРаботыСистемы(Отказ)
Отказ = Не ПроверитьВозможностьНачалаРаботы();
КонецПроцедурыТехнически модуль может содержать вспомогательные методы, однако значительную прикладную логику рекомендуется переносить в общие модули.
Раздел основной программы
Заголовок раздела «Раздел основной программы»К основной программе относятся операторы, расположенные вне процедур и функций:
ПриложениеИнициализировано = Ложь;Основная программа выполняется при инициализации модуля управляемого приложения.
В ней можно присваивать начальные значения переменным модуля и выполнять другой код инициализации.
Клиентский контекст
Заголовок раздела «Клиентский контекст»Модуль управляемого приложения выполняется на клиенте. В его контексте доступны:
- клиентская часть глобального контекста;
- экспортные процедуры и функции клиентских общих модулей;
- экспортные процедуры и функции серверных неглобальных общих модулей, для которых разрешён вызов сервера.
Вызов серверного общего модуля приводит к переходу из клиентского контекста в серверный. При этом серверные процедуры не могут обращаться к переменным и методам модуля управляемого приложения.
🧠 Ключевая мысль
Заголовок раздела «🧠 Ключевая мысль»Модуль управляемого приложения является клиентским модулем и обрабатывает события текущего интерактивного сеанса пользователя. Технически он может включать переменные, процедуры и функции, а также основную программу, но документация рекомендует использовать в нём обработчики событий приложения, передавая основную прикладную логику в общие модули.