В статье расскажу, как можно написать расширение которое при запуске 1С:Предприятие выведет блокирующее окно с вопросом, и в зависимости от ответа запустит программу или нет.
Мы знаем, что есть обработчик — ПередНачаломРаботыСистемы, который расположен в модуле управляемого приложения. В "старых" программах, которые написаны не на Библиотеке Стандартных подсистем (БСП) все было достаточно просто. Можно было добавить свой программный код в обработчик ПередНачаломРаботыСистемы, который бы блокировал окно приложения и ждал ответа пользователя.
В программах на БСП, такой фокус не пройдет. Во-первых нужно использовать асинхронные вызовы, во-вторых механизмы БСП все равно запустят программу и не дадут сделать блокировку интерфейса.
Для решения этой задачи нужно делать вставки своего кода в специальных переопределяемых методах БСП.
Давайте сделаем все по порядку:
1. Создаем новое расширение;
2. Добавляем в расширение метод — ПередНачаломРаботыСистемы из общего модуля — ОбщегоНазначенияКлиентПереопределяемый
3. Тип вызова устанавливаем — Вызывать после
4. В расширение будет добавлена соответствующая процедура
5. Следующий код открывает окно вопроса, блокирующее вход в программу. Если пользователь нажмет — Нет, то программа завершит работу.
Переменная Параметры, которая передается в процедуру ПередНачаломРаботыСистемы имеет тип данных Структура со слеющими свойствами:
- Отказ — Булево - возвращаемое значение. Если установить Истина, то работа программы будет прекращена;
- Перезапустить — Булево - возвращаемое значение. Если установить Истина, и параметр Отказ тоже установлен в Истина, то выполняется перезапуск программы;
- ДополнительныеПараметрыКоманднойСтроки — Строка - возвращаемое значение. Имеет смысл, когда Отказ и Перезапустить установлены Истина;
- ИнтерактивнаяОбработка — ОписаниеОповещения - возвращаемое значение. Для открытия окна, блокирующего вход в программу, следует присвоить в этот параметр описание обработчика оповещения, который открывает окно;
- ОбработкаПродолжения — ОписаниеОповещения - если открывается окно, блокирующее вход в программу, то в обработке закрытия этого окна необходимо выполнить оповещение ОбработкаПродолжения.
- Модули — Массив - ссылки на модули, в которых нужно вызвать эту же процедуру после возврата. Модули можно добавлять только в рамках вызова в процедуру переопределяемого модуля. Используется для упрощения реализации нескольких последовательных асинхронных вызовов в разные подсистемы;