Как эффективно обновлять измененные конфигурации 1С на поддержке с использованием KDiff3 и современных инструментов

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

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

В чем проблема стандартного объединения в Конфигураторе?

При стандартном обновлении Конфигуратор выполняет так называемое двустороннее сравнение (2-way merge). Он сопоставляет текущую измененную конфигурацию базы данных и новую конфигурацию поставщика. При этом система видит только факт различия в коде, но не знает предыстории:

  1. Был ли этот кусок кода изменен разработчиком в процессе кастомизации?
  2. Или это новое изменение, пришедшее от поставщика в свежем релизе?

В результате программисту приходится вручную глазами анализировать каждую строчку кода, чтобы решить, какое изменение приоритетнее. Это приводит к колоссальным затратам времени и высокому риску «затереть» важные доработки.

Решение проблемы: Трехстороннее сравнение (3-way merge) и KDiff3

Чтобы кардинально изменить ситуацию, разработчики используют внешние утилиты трехстороннего сравнения. Одной из самых популярных программ для этого является KDiff3. Начиная с версии платформы 8.3.6, в 1С реализована встроенная интеграция с внешними программами сравнения.

Давайте разберем по шагам, как работает трехстороннее сравнение. В этом процессе участвуют три файла:

  1. Базовый файл (Base / Ancestor): Старая конфигурация поставщика (предыдущий релиз, на котором базируется ваша текущая рабочая база).
  2. Ваш файл (Mine): Ваша текущая измененная рабочая конфигурация.
  3. Файл поставщика (Theirs): Новая конфигурация поставщика (обновление).

Утилита KDiff3 сопоставляет изменения следующим образом:

В практике крупных внедрений такой подход позволяет автоматически и без ошибок разрешить до 95% всех расхождений в модулях.

Настройка интеграции KDiff3 с Конфигуратором 1С

Проанализируем процесс подключения внешней утилиты к платформе 1С:

  1. Скачайте и установите программу KDiff3 на ваш рабочий компьютер.
  2. Откройте Конфигуратор вашей базы данных.
  3. Перейдите в меню Сервис — Параметры, далее выберите вкладку Сравнение/объединение.
  4. Установите флаг Использовать внешнюю программу для сравнения и объединения.
  5. В выпадающем списке выберите готовый шаблон для KDiff3 или укажите путь к исполняемому файлу программы вручную. Шаблон автоматически пропишет необходимые параметры командной строки для передачи файлов.

После этой простой настройки при попытке сравнения текстовых модулей Конфигуратор будет автоматически запускать интерфейс KDiff3, где вы сможете наглядно видеть структуру изменений и управлять слиянием кода буквально в пару кликов.

Как процесс обновления реализован в 1C:Enterprise Development Tools (EDT)

Среди разработчиков бытует заблуждение, что в новой среде разработки EDT механизмы обновления измененных конфигураций отсутствуют. Это не так. EDT полностью базируется на работе с распределенной системой контроля версий Git, что выводит процесс обновления на качественно новый уровень.

Рассмотрим стратегию веток, которая применяется при обновлении в EDT:

  1. Создается так называемая «чистая» ветка поставщика (ее часто называют vanilla или vendor). В эту ветку последовательно коммитятся только официальные релизы от 1С в чистом виде.
  2. Вся собственная доработка и кастомизация ведется в ветке master или develop.
  3. Когда выходит новый релиз, разработчик загружает его файлы в ветку vanilla и делает коммит.
  4. Затем выполняется стандартная операция слияния (Git merge) ветки vanilla в рабочую ветку master.

Инструменты Git используют мощнейшие встроенные алгоритмы трехстороннего сравнения XML-файлов объектов и программного кода. Все конфликты наглядно отображаются в интерактивном редакторе сравнения EDT, где их можно быстро разрешить. Это позволяет полностью отказаться от рутинной работы в Конфигураторе.

Современные встроенные механизмы платформы 1С

Не стоит забывать, что фирма «1С» также развивает встроенные инструменты. В современных версиях платформы 8.3 существенно доработан штатный механизм сравнения:

Современная парадигма: Перенос доработок в Расширения

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

Использование директивы &ИзменениеИКонтроль позволяет переопределять или дополнять поведение типовых методов без физического изменения кода поставщика. Посмотрим на пример использования этой директивы:


&ИзменениеИКонтроль("ЗаполнитьРеквизитыПродажи")
Процедура Мой_ЗаполнитьРеквизитыПродажи(ДанныеДокумента)
    // #Вставка
    Если ДанныеДокумента.Сумма > 100000 Тогда
        ДанныеДокумента.ТребуетсяСогласование = Истина;
    КонецЕсли;
    // #КонецВставки
    ПроанализироватьСтатусДокумента(ДанныеДокумента);
КонецПроцедуры

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

Выводы и рекомендации

Подводя итог, можно составить эффективный чек-лист для организации процесса обновления кастомизированных баз:

  1. Для быстрого слияния больших текстовых модулей обязательно настройте интеграцию Конфигуратора с внешней утилитой трехстороннего сравнения (например, KDiff3).
  2. Если вы ведете разработку в команде, рассмотрите переход на 1C:EDT и использование Git для управления ветками конфигурации поставщика.
  3. Все новые доработки старайтесь выносить в расширения конфигурации с использованием механизмов аннотаций, чтобы основная конфигурация оставалась на поддержке без возможности изменения.
← На главную