Во время активного рабочего дня разработчикам иногда приходится применять небольшие правки в рабочей базе. При выполнении динамического обновления конфигурации Библиотека стандартных подсистем (БСП) начинает регулярно выводить всем активным пользователям диалоговое окно с предложением перезапустить программу. Разберем, как устроен этот механизм, где именно его можно переопределить или отключить, а также оценим риски и рассмотрим более безопасные альтернативы.
Проанализируем архитектуру контроля обновлений. В платформе 1С:Предприятие 8.3 существует метод глобального контекста КонфигурацияБазыДанныхИзмененаДинамически(). Этот метод возвращает значение Истина, если структура или код метаданных были обновлены «на лету» уже после того, как текущий пользователь открыл свой сеанс.
В типовых конфигурациях на базе БСП задействована специальная подсистема контроля, включающая в себя следующие объекты:
ОбщийМодуль.КонтрольДинамическогоОбновленияКонфигурацииВызовСервера — выполняет проверку состояния базы на стороне сервера.ОбщийМодуль.КонтрольДинамическогоОбновленияКонфигурацииСлужебный — содержит серверную служебную логику анализа изменений.ОбщийМодуль.КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент — осуществляет периодический опрос сервера на стороне клиентского приложения и выводит диалоговое окно пользователю.В клиентском модуле механизм подключен к стандартным периодическим фоновым проверкам, которые запускаются с интервалом в несколько минут.
Наиболее корректным способом отключения или модификации всплывающего окна без изменения типовой конфигурации является использование расширения. Посмотрим на процедуру, отвечающую за проверку:
КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент.ПриВыполненииСтандартныхПериодическихПроверок
Разберем по шагам, как заглушить вызов или изменить поведение окна:
КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент.&Вместо или изменим логику оповещения.Рассмотрим пример кода в расширении для полного отключения навязчивого диалога:
&Вместо("ПриВыполненииСтандартныхПериодическихПроверок")
Процедура Расш1_ПриВыполненииСтандартныхПериодическихПроверок(Параметры, ОбработкаПродолжения)
// Полностью глушим опрос динамического обновления,
// чтобы не прерывать работу пользователей диалоговыми окнами.
Возврат;
КонецПроцедуры
Если требуется не отключать проверку полностью, а заменить навязчивое модальное окно на тихое уведомление в углу экрана, можно переписать логику оповещения через метод ПоказатьОповещениеПользователя, либо показывать предупреждение исключительно пользователям с административными правами.
Если база данных уже снята с поддержки поставщика и дорабатывается напрямую, найдем процедуру ПриВыполненииСтандартныхПериодическихПроверок в общем модуле КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент и закомментируем тело метода или вызов опроса сервера.
Однако внесение изменений напрямую в модуль БСП усложнит последующие обновления конфигурации, поэтому вариант с расширением остается предпочтительным.
Выясним причину, по которой разработчики платформы и БСП заложили обязательное требование перезапуска сеансов. Динамическое обновление несет в себе скрытые риски для стабильности системы:
Недостаточно фактических параметров или Метод объекта не обнаружен.rphost): сервер вынужден одновременно поддерживать старые версии сборок для уже запущенных сеансов и новые сборки для входящих подключений. Это приводит к разрастанию кэша, утечкам памяти и потенциальным ошибкам формата потока в таблицах Config и ConfigSave.Чтобы избежать необходимости перезапуска пользователей посреди рабочего дня и предотвратить сбои в базе, рассмотрим альтернативные подходы к обновлению:
ДополнительныеОтчетыИОбработки. Обновление внешнего файла в справочнике применяется мгновенно для всех пользователей без изменения конфигурации.