Многие разработчики и администраторы 1С сталкиваются с ситуацией, когда необходимо временно отключить расширение конфигурации, но не удалять его. При этом платформа 1С:Предприятие при каждом старте начинает выводить назойливое уведомление в центре оповещений: "Расширение конфигурации не активно".
Это сообщение является системным механизмом защиты: платформа предупреждает нас о том, что структуры данных или логика, вынесенные в расширение, сейчас не работают, что может привести к ошибкам. Однако, если расширение содержит данные (например, добавленные справочники или реквизиты), удалять его нельзя — данные исчезнут. Просто отключить галочку "Активно" приводит к появлению надоедливого окна.
Разберем детально, почему это происходит и какие существуют способы решения этой проблемы без потери данных.
Сообщение "Расширение конфигурации не активно" генерируется на уровне ядра платформы. На текущий момент (включая актуальные версии платформы 8.3) штатной настройки (галочки в параметрах или конфигурационном файле), позволяющей подавить это конкретное уведомление, не существует.
Проанализируем поведение системы:
Исходя из этого, рассмотрим единственно верный способ решения задачи средствами конфигуратора.
Самый действенный способ избавиться от уведомления и при этом не потерять данные — это оставить расширение активным для платформы, но "выключить" его логику вручную. Это позволит нам обмануть механизм проверки платформы.
Рассмотрим пошаговый алгоритм действий:
Для этого мы должны удалить или закомментировать весь исполняемый код, но оставить структуру метаданных.
Разберем подробнее, что именно нужно сделать внутри расширения:
Шаг 1. Отключение программных модулей
Просмотрим все заимствованные объекты. Если в расширении есть модули форм, модули объектов или общие модули с аннотациями перехвата (&Вместо, &Перед, &После), этот код нужно исключить (предварительно можно проверить наличие ошибок в расширениях).
Вы можете либо полностью удалить текст процедур, либо закомментировать их. Пример того, как превратить активный код в "невидимый":
// &Вместо("ПриСозданииНаСервере")
// Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// // Весь код закомментирован
// // Выполнение логики остановлено
// КонецПроцедуры
Если расширение содержит собственные общие модули, можно просто очистить их содержимое.
Шаг 2. Сохранение данных
Это самый важный момент. Мы НЕ удаляем объекты метаданных, которые хранят данные. Если ваше расширение добавляет:
Эти объекты должны остаться в дереве метаданных расширения в неизменном виде. Поскольку в них нет исполняемого кода, они не помешают работе конфигурации, но будут хранить информацию в базе данных SQL (или файловой).
Шаг 3. Очистка интерфейса (опционально)
Иногда расширения добавляют элементы в командный интерфейс (подсистемы). Если расширение должно быть "выключено", проверим свойства корня конфигурации расширения и заимствованных подсистем, чтобы убрать лишние кнопки из пользовательского интерфейса.
В ходе обсуждения проблемы было замечено интересное поведение платформы, связанное с режимом запуска интерфейса. Проанализируем это наблюдение.
Сообщение о неактивном расширении "зашито" в механизмы инициализации интерфейса "Такси". Если в свойствах конфигурации изменить режим совместимости интерфейса, поведение может меняться:
Однако, мы не рекомендуем использовать переключение интерфейса как метод решения проблемы. Перевод современной конфигурации (например, ERP или Бухгалтерии 3.0) на старый режим интерфейса приведет к полной неработоспособности форм и визуальному хаосу. Этот факт полезен лишь для понимания того, что уведомление является частью механизма рендеринга современного UI платформы.
Рассмотрим еще один теоретический вариант, который часто обсуждается — "Расширение для скрытия уведомления".
Идея заключается в создании второго расширения, которое программно закрывало бы всплывающие окна. Однако, на практике это труднореализуемо средствами встроенного языка 1С, так как:
Поэтому единственным надежным способом (кроме внешних скриптов автоматизации, нажимающих кнопки мыши, что является "костылем") остается метод активации расширения с удалением его логики.
Если вам нужно временно отключить функционал расширения, но вы боитесь потерять данные:
Таким образом, для платформы расширение будет "работающим" (уведомления не будет), а для пользователей функционал будет фактически отключен.