Как сделать так, чтобы 1С не запускалась при ошибке подключения расширения?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Часто в процессе разработки возникает задача обеспечить строгий контроль: если определенное расширение конфигурации не подключилось по техническим причинам, работа пользователя в системе должна быть заблокирована. Давайте разберемся, почему платформа 1С не имеет «железобетонной» кнопки для такой настройки и как реализовать надежный механизм защиты самостоятельно.

Почему это сложно реализовать?

Важно понимать архитектурную особенность: механизм расширений спроектирован так, чтобы приоритет отдавался целостности основной конфигурации. Если расширение содержит ошибку, платформа его отключает, чтобы пользователь мог продолжить работу. Поэтому код, который должен «запретить» запуск, не может находиться внутри самого проверяемого расширения — если расширение не подключится, ваш код просто не выполнится.

Способ 1: Использование внешней обработки с автозапуском

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

  1. Создайте внешнюю обработку, которая при открытии выполняет проверку состава подключенных расширений.
  2. Добавьте эту обработку в список дополнительных отчетов и обработок с настройкой автозапуска для нужных пользователей.
  3. В коде проверки используйте коллекцию РасширенияКонфигурации, чтобы убедиться, что все обязательные элементы системы активны.

Рассмотрим пример кода, который можно поместить в событие ПриОткрытии вашей обработки:


Процедура ПриОткрытии()
    ОбязательныеРасширения = Новый Массив;
    ОбязательныеРасширения.Добавить("ИмяВашегоКритическогоРасширения");
    
    Для Каждого ИмяРасширения Из ОбязательныеРасширения Цикл
        Найден = РасширенияКонфигурации.Получить(ИмяРасширения);
        Если Найден = Неопределено Или Не Найден.Активен Тогда
            Предупреждение("Критическое расширение не подключено. Работа невозможна!");
            ЗавершитьРаботуСистемы(Ложь);
            Возврат;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Способ 2: Контроль через уникальные объекты метаданных

Иногда проверка наличия расширения в коллекции РасширенияКонфигурации бывает недостаточной. Надежным способом является проверка наличия объекта, который это расширение добавляет. Это гарантирует не только подключение, но и корректную работу логики.

Создайте в каждом критическом расширении общий модуль с экспортной функцией, которая просто возвращает Истина. В «главном» контрольном расширении (или основной конфигурации) попробуйте вызвать эту функцию через Попытка...Исключение.


// В критическом расширении
Функция ПроверкаАктивности() Экспорт
    Возврат Истина;
КонецФункции

// В контрольном механизме
Попытка
    Результат = Вычислить("ИмяРасширения.ПроверкаАктивности()");
Исключение
    ЗавершитьРаботуСистемы(Ложь);
КонецПопытки;

Способ 3: Использование константы для списка расширений

Для более гибкого управления можно завести в основной конфигурации Константу (например, типа Строка), в которой перечислить через запятую имена всех расширений, наличие которых является обязательным. В событии ПриНачалеРаботыСистемы модуля управляемого приложения мы напишем цикл, который проверяет каждое имя из константы.

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

Важные советы по реализации

Проанализировав все варианты, мы видим, что наиболее устойчивым решением является комбинация из внешней обработки-контролера и проверки объектов метаданных. Это позволяет избежать критических ошибок при обновлении системы и обеспечивает стабильный контроль над окружением 1С.

← На главную