Top.Mail.Ru

Как отключить уведомления "Расширение конфигурации неактивно"

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

Но довольно часто мы хотим, чтобы какие-то расширения были отключены, но не сообщать об этом, чтобы это не вызывало у пользователей лишних вопросов. Решить эту проблему можно с помощью небольшого расширения, перехватывающего системные сообщения на стороне сервера до того, как они будут отправлены на клиент.

Ниже представлен универсальный программный код для решения этой задачи и описание принципа его работы.

Программный код (Модуль сеанса расширения)

Разместить данный код необходимо в Модуле сеанса вашего расширения. Для этого заимствуйте стандартную процедуру УстановкаПараметровСеанса с аннотацией &После.

&После("УстановкаПараметровСеанса")
Процедура Д_УстановкаПараметровСеанса(ТребуемыеПараметры)
	
	Перем ПриЗапуске;    
    
	// Проверяем, что это первичная инициализация сеанса пользователем (не фоновое задание)
	ПриЗапуске = ТребуемыеПараметры = Неопределено И ПолучитьТекущийСеансИнформационнойБазы().ИмяПриложения <> "BackgroundJob";
	
	Если ПриЗапуске Тогда 
		Д_ОтключитьОповещенияОНеактивныхРасширениях();
	КонецЕсли;
	
КонецПроцедуры

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

Как это работает

  • Точка подключения: Использование события УстановкаПараметровСеанса обусловлено тем, что оно вызывается на самом раннем этапе инициализации сеанса на сервере. К этому моменту платформа уже сформировала сообщения об ошибках или неактивности расширений и поместила их в серверный буфер, но пользователю они еще не отправлены.

  • Фильтрация контекста: Проверка ТребуемыеПараметры = Неопределено гарантирует, что очистка сработает только один раз при старте программы (когда инициализируются все параметры сеанса сразу). Дополнительное условие ИмяПриложения <> "BackgroundJob" предотвращает лишний анализ очереди в фоновых заданиях, где интерактивный вывод сообщений отсутствует.

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

Заключение

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

Чувствуете, что застряли в основах 1С?

Информация в интернете кажется обрывочной, а на решение простых задач уходят часы? Вы не одиноки. Я запустил Клуб для 1С разработчиков Alexcode.PRO. Внутри - продвинутые статьи, видео, материалы для скачивания, закрытый чат для резидентов и возможность влиять на контент.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *