Часто в процессе разработки возникает задача обеспечить строгий контроль: если определенное расширение конфигурации не подключилось по техническим причинам, работа пользователя в системе должна быть заблокирована. Давайте разберемся, почему платформа 1С не имеет «железобетонной» кнопки для такой настройки и как реализовать надежный механизм защиты самостоятельно.
Важно понимать архитектурную особенность: механизм расширений спроектирован так, чтобы приоритет отдавался целостности основной конфигурации. Если расширение содержит ошибку, платформа его отключает, чтобы пользователь мог продолжить работу. Поэтому код, который должен «запретить» запуск, не может находиться внутри самого проверяемого расширения — если расширение не подключится, ваш код просто не выполнится.
Это один из самых надежных методов, так как внешняя обработка не зависит от статуса конкретных расширений. Мы можем настроить ее выполнение при каждом входе пользователя в систему.
РасширенияКонфигурации, чтобы убедиться, что все обязательные элементы системы активны.Рассмотрим пример кода, который можно поместить в событие ПриОткрытии вашей обработки:
Процедура ПриОткрытии()
ОбязательныеРасширения = Новый Массив;
ОбязательныеРасширения.Добавить("ИмяВашегоКритическогоРасширения");
Для Каждого ИмяРасширения Из ОбязательныеРасширения Цикл
Найден = РасширенияКонфигурации.Получить(ИмяРасширения);
Если Найден = Неопределено Или Не Найден.Активен Тогда
Предупреждение("Критическое расширение не подключено. Работа невозможна!");
ЗавершитьРаботуСистемы(Ложь);
Возврат;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Иногда проверка наличия расширения в коллекции РасширенияКонфигурации бывает недостаточной. Надежным способом является проверка наличия объекта, который это расширение добавляет. Это гарантирует не только подключение, но и корректную работу логики.
Создайте в каждом критическом расширении общий модуль с экспортной функцией, которая просто возвращает Истина. В «главном» контрольном расширении (или основной конфигурации) попробуйте вызвать эту функцию через Попытка...Исключение.
// В критическом расширении
Функция ПроверкаАктивности() Экспорт
Возврат Истина;
КонецФункции
// В контрольном механизме
Попытка
Результат = Вычислить("ИмяРасширения.ПроверкаАктивности()");
Исключение
ЗавершитьРаботуСистемы(Ложь);
КонецПопытки;
Для более гибкого управления можно завести в основной конфигурации Константу (например, типа Строка), в которой перечислить через запятую имена всех расширений, наличие которых является обязательным. В событии ПриНачалеРаботыСистемы модуля управляемого приложения мы напишем цикл, который проверяет каждое имя из константы.
Такой подход позволяет администратору быстро изменять список обязательных компонентов без изменения программного кода, просто отредактировав значение константы.
ЗавершитьРаботуСистемы (например, из-за ошибки в коде проверки), вы можете полностью заблокировать доступ к базе. Используйте проверку параметров запуска или наличия файла-флага, чтобы в экстренных ситуациях администратор мог зайти в программу и исправить проблему.РасширенияКонфигурации.Получить(Имя).Версия, чтобы гарантировать, что у пользователя установлена актуальная сборка.Проанализировав все варианты, мы видим, что наиболее устойчивым решением является комбинация из внешней обработки-контролера и проверки объектов метаданных. Это позволяет избежать критических ошибок при обновлении системы и обеспечивает стабильный контроль над окружением 1С.