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