Почему при обновлении измененной конфигурации не выставляются флажки объединения для процедур модулей

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

Причины поведения механизма трехстороннего сравнения

Проанализируем, почему платформа не выставляет флажки на все процедуры автоматически. При обновлении конфигурации через поддержку задействуется алгоритм трехстороннего слияния (Three-way merge), в котором одновременно сопоставляются три состояния базы:

  1. Основная конфигурация — текущее состояние рабочей базы с пользовательскими доработками.
  2. Старая конфигурация поставщика — общий базовый предок (версия релиза, на которой ранее находилась база).
  3. Новая конфигурация поставщика — обновленный релиз от разработчика типового решения.

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

Кроме того, флаг в общем дереве объектов конфигурации лишь включает сам объект в процесс обновления, тогда как правила слияния конкретных строк и процедур регулируются на более детальном уровне внутри модуля.

Способы разрешения конфликтов и настройки объединения

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

  1. Настройка правил объединения через параметры окна сравнения. В командной панели окна сравнения и объединения нажмем на кнопку настройки (пиктограмма с шестеренкой или гаечным ключом). В открывшемся окне задаются глобальные правила обработки изменений, включая разрешение на удаление объектов и свойств, отсутствующих в новой конфигурации поставщика. Это позволяет платформе автоматически предлагать удаление устаревших методов.
  2. Смена режима объединения конкретного модуля в дереве. Если в доработанном объекте типовой модуль больше не должен содержать старых доработок и его требуется полностью обновить до типового состояния, в колонке «Режим объединения» изменим значение со структурного (Объединять с приоритетом...) на режим полного замещения — «Взять из новой конфигурации поставщика». В этом случае модуль будет целиком перезаписан типовым кодом без построчного анализа конфликтов.
  3. Пакетное управление флажками в окне слияния текста. Перейдем непосредственно в окно построчного сравнения модуля. Через контекстное меню или командную панель выполним команду установки источника для всех неразрешенных различий, выбрав вариант взятия текста из новой конфигурации поставщика либо объединения с нужным приоритетом.
  4. Использование фильтра дважды измененных свойств. В основном дереве сравнения переключим фильтр отображения в режим «Показывать только дважды измененные свойства». Это скроет объекты, изменения по которым произошли исключительно у поставщика или исключительно у пользователя, и оставит для ручного контроля только реальные конфликты.

Важные правила при обновлении через несколько релизов

Проанализируем риски, возникающие при подготовке результирующего файла поставки (обновление «через версии»):

  1. Контроль удаляемых обработчиков и процедур. Если в процессе обновления удаляется процедура из общего модуля или модуля формы, важно убедиться, что на нее не завязаны элементы интерфейса или оставленный пользовательский код. Автоматическое удаление всех функций поставщика без ручной проверки может привести к ошибкам выполнения при вызове отсутствующих методов.
  2. Накопление структурных различий. При «перепрыгивании» через несколько промежуточных релизов разница между старой и новой конфигурацией поставщика существенно возрастает. Встроенный анализатор платформы чувствителен к переносу процедур между директивами компиляции (&НаСервере, &НаКлиенте) и блоками #Область. Перемещенные методы могут ошибочно определяться как удаленные и созданные заново.
  3. Подключение внешних программ слияния. Для более точного сопоставления сложных модулей перейдем в меню Сервис — Параметры — вкладка Сравнение/Объединение и подключим внешние утилиты трехстороннего сравнения (например, KDiff3, Beyond Compare или DiffMerge). Они обладают более гибкими алгоритмами выравнивания строк и помогают быстрее разрешать конфликты в больших модулях.
← На главную