Каждый разработчик «1С:Предприятие» при обновлении нетиповых конфигураций сталкивался со странным поведением окна сравнения и объединения. Представьте ситуацию: вы запускаете процесс обновления, перед вами открывается дерево изменений, и вы видите, что на корневом объекте (например, на конкретном документе или справочнике) установлен зеленый флажок. Однако, развернув ветку этого объекта, вы обнаруживаете, что абсолютно все флажки на подчиненных элементах — реквизитах, табличных частях, формах и модулях — сняты. При этом подробный отчет о сравнении показывает, что в объекте изменен только, к примеру, Модуль объекта.
В этой статье мы подробно разберем, что станет результатом обновления в такой ситуации, почему платформа 1С ведет себя подобным образом и как правильно действовать разработчику, чтобы избежать ошибок и лишней работы при поддержке измененных конфигураций.
Для начала давайте детально проанализируем механику работы дерева объектов метаданных в окне сравнения и объединения конфигураций. Платформа использует сложную иерархическую структуру флажков, где состояние родительского элемента напрямую связано с состоянием его дочерних элементов, но при этом имеет и свое собственное, независимое значение.
Выделим три основных состояния флажков, с которыми мы постоянно сталкиваемся при обновлении:
К собственным свойствам родительского объекта метаданных (например, для объекта Документ или Справочник) относятся следующие параметры:
Имя), его представление для пользователя (Синоним) и техническое описание (Комментарий);Если вы оставите флажок только на родительском объекте и снимите со всех подчиненных элементов, а затем нажмете кнопку «Выполнить», система попытается перезаписать именно эти свойства. Если эти свойства в вашей основной конфигурации и в конфигурации обновления абсолютно идентичны, то физически никаких изменений записано не будет. Результатом выполнения этой операции станет нулевое изменение. Платформа просто зафиксирует факт прохождения шага объединения для этого объекта, но структура базы данных и программный код останутся прежними.
Выясним причину, почему конфигуратор превентивно выставляет флажки на объектах, свойства которых на первый взгляд кажутся неизмененными. Это поведение заложено в глубоких алгоритмах работы механизма поддержки конфигурации 1С. Рассмотрим основные причины возникновения этой «странности».
Когда объект находится на поддержке с возможностью редактирования (статус «Редактируется с сохранением поддержки»), платформа при запуске сравнения пытается применить стандартные правила обновления. Для объектов, которые были изменены вами или поставщиком, стандартное правило по умолчанию — «Взять из конфигурации поставщика». Платформа видит, что объект отличается от чистой конфигурации поставщика, и автоматически выставляет флажок на корневом элементе, чтобы применить правила обновления к общим свойствам родителя.
Очень часто платформа фиксирует различия там, где разработчик визуально их не обнаруживает. Классический пример — свойство Справка (встроенная справочная информация объекта). Справка хранится во внутреннем формате HTML. Если конфигурация поставщика собиралась на компьютере с одной версией операционной системы или Internet Explorer (компоненты MSHTML), а ваше локальное обновление происходит на другой машине, то при сравнении файлов платформа обнаружит разницу в служебных тегах (например, в мета-теге генератора справки <meta name="GENERATOR" content="MSHTML...">). Для платформы это реальное изменение бинарных данных свойства Справка, которое относится к самому родителю, поэтому объект отмечается как измененный, хотя текст справки остался прежним.
Если объект был добавлен в новую общую подсистему в конфигурации обновления или у него изменились права для определенных ролей, эти изменения позиционируются платформой как изменения свойств самого объекта метаданных. При этом в дереве сравнения подчиненные объекты (реквизиты, формы) будут выглядеть нетронутыми, а родительский объект будет помечен флажком.
Иногда в процессе многократных или некорректно завершенных обновлений могут сбиваться внутренние идентификаторы (GUID) объектов или версии метаданных в кэше. Платформа сопоставляет объекты по именам, но из-за различий в служебных идентификаторах считает, что свойства объекта изменились, требуя их перезаписи.
Разберем ситуацию, когда детальный отчет о сравнении утверждает, что изменился только Модуль объекта, хотя на самом объекте стоит флажок, а на модуле — нет. Дело в разнице между анализом текстовых файлов и сравнением структуры метаданных.
Детальный отчет анализирует текстовое содержимое модулей и находит там реальные различия (например, доработанный вами код). Но если в дереве объединения флажок с Модуль объекта был снят (вручную вами или автоматическими правилами фильтрации), то код модуля объединяться не будет. На самом же объекте (родителе) флажок остался. Детальный отчет по свойствам самого родителя (синонимы, длина кода) не показывает различий, так как их нет. В итоге получается диссонанс: отчет указывает на разницу в модуле, но настройки объединения заставляют платформу обрабатывать только пустые метаданные родителя. Результат — пустая операция без изменений в конфигурации.
Чтобы не тратить время на анализ «фантомных» изменений и сделать процесс обновления максимально прозрачным, рекомендуем придерживаться следующего алгоритма действий:
Справка или детально сравните свойства через контекстное меню, обращая внимание на системные настройки метаданных.Понимание этих внутренних механизмов работы платформы «1С:Предприятие» убережет вас от ошибок при обновлениях и позволит точно контролировать процесс переноса изменений в любых, даже самых сложных и сильно кастомизированных базах данных.