Найти в Дзене
Будни одинэсника | 1С

Как вывести блокирующее окно при входе в 1С?

В статье расскажу, как можно написать расширение которое при запуске 1С:Предприятие выведет блокирующее окно с вопросом, и в зависимости от ответа запустит программу или нет.

Мы знаем, что есть обработчик — ПередНачаломРаботыСистемы, который расположен в модуле управляемого приложения. В "старых" программах, которые написаны не на Библиотеке Стандартных подсистем (БСП) все было достаточно просто. Можно было добавить свой программный код в обработчик ПередНачаломРаботыСистемы, который бы блокировал окно приложения и ждал ответа пользователя.

В программах на БСП, такой фокус не пройдет. Во-первых нужно использовать асинхронные вызовы, во-вторых механизмы БСП все равно запустят программу и не дадут сделать блокировку интерфейса.

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

Давайте сделаем все по порядку:

1. Создаем новое расширение;

2. Добавляем в расширение метод — ПередНачаломРаботыСистемы из общего модуля — ОбщегоНазначенияКлиентПереопределяемый

-2

3. Тип вызова устанавливаем — Вызывать после

-3

4. В расширение будет добавлена соответствующая процедура

-4

5. Следующий код открывает окно вопроса, блокирующее вход в программу. Если пользователь нажмет — Нет, то программа завершит работу.

-5

Переменная Параметры, которая передается в процедуру ПередНачаломРаботыСистемы имеет тип данных Структура со слеющими свойствами:

  • Отказ — Булево - возвращаемое значение. Если установить Истина, то работа программы будет прекращена;
  • Перезапустить — Булево - возвращаемое значение. Если установить Истина, и параметр Отказ тоже установлен в Истина, то выполняется перезапуск программы;
  • ДополнительныеПараметрыКоманднойСтроки — Строка - возвращаемое значение. Имеет смысл, когда Отказ и Перезапустить установлены Истина;
  • ИнтерактивнаяОбработка — ОписаниеОповещения - возвращаемое значение. Для открытия окна, блокирующего вход в программу, следует присвоить в этот параметр описание обработчика оповещения, который открывает окно;
  • ОбработкаПродолжения — ОписаниеОповещения - если открывается окно, блокирующее вход в программу, то в обработке закрытия этого окна необходимо выполнить оповещение ОбработкаПродолжения.
  • Модули — Массив - ссылки на модули, в которых нужно вызвать эту же процедуру после возврата. Модули можно добавлять только в рамках вызова в процедуру переопределяемого модуля. Используется для упрощения реализации нескольких последовательных асинхронных вызовов в разные подсистемы;