Обновление кастомизированных конфигураций 1С:Предприятие, находящихся на поддержке, традиционно считается одной из самых трудоемких задач для разработчика. Когда в типовое решение внесены сотни изменений, стандартное сравнение и объединение в Конфигураторе может занимать часы, а вероятность допустить ошибку при ручном переносе кода крайне высока. Рассмотрим, как современные инструменты и подходы помогают автоматизировать этот процесс, минимизировать рутину и повысить надежность обновлений.
При стандартном обновлении Конфигуратор выполняет так называемое двустороннее сравнение (2-way merge). Он сопоставляет текущую измененную конфигурацию базы данных и новую конфигурацию поставщика. При этом система видит только факт различия в коде, но не знает предыстории:
В результате программисту приходится вручную глазами анализировать каждую строчку кода, чтобы решить, какое изменение приоритетнее. Это приводит к колоссальным затратам времени и высокому риску «затереть» важные доработки.
Чтобы кардинально изменить ситуацию, разработчики используют внешние утилиты трехстороннего сравнения. Одной из самых популярных программ для этого является KDiff3. Начиная с версии платформы 8.3.6, в 1С реализована встроенная интеграция с внешними программами сравнения.
Давайте разберем по шагам, как работает трехстороннее сравнение. В этом процессе участвуют три файла:
Утилита KDiff3 сопоставляет изменения следующим образом:
В практике крупных внедрений такой подход позволяет автоматически и без ошибок разрешить до 95% всех расхождений в модулях.
Проанализируем процесс подключения внешней утилиты к платформе 1С:
KDiff3 на ваш рабочий компьютер.KDiff3 или укажите путь к исполняемому файлу программы вручную. Шаблон автоматически пропишет необходимые параметры командной строки для передачи файлов.После этой простой настройки при попытке сравнения текстовых модулей Конфигуратор будет автоматически запускать интерфейс KDiff3, где вы сможете наглядно видеть структуру изменений и управлять слиянием кода буквально в пару кликов.
Среди разработчиков бытует заблуждение, что в новой среде разработки EDT механизмы обновления измененных конфигураций отсутствуют. Это не так. EDT полностью базируется на работе с распределенной системой контроля версий Git, что выводит процесс обновления на качественно новый уровень.
Рассмотрим стратегию веток, которая применяется при обновлении в EDT:
vanilla или vendor). В эту ветку последовательно коммитятся только официальные релизы от 1С в чистом виде.master или develop.vanilla и делает коммит.vanilla в рабочую ветку master.Инструменты Git используют мощнейшие встроенные алгоритмы трехстороннего сравнения XML-файлов объектов и программного кода. Все конфликты наглядно отображаются в интерактивном редакторе сравнения EDT, где их можно быстро разрешить. Это позволяет полностью отказаться от рутинной работы в Конфигураторе.
Не стоит забывать, что фирма «1С» также развивает встроенные инструменты. В современных версиях платформы 8.3 существенно доработан штатный механизм сравнения:
ПриЗаписи, а поставщик обновил процедуру ПередЗаписью в том же модуле, система сможет корректно объединить эти изменения автоматически.Выясним главную причину сложности обновлений. Она заключается в изменении кода непосредственно внутри типовой конфигурации. Лучший способ облегчить себе жизнь при обновлениях — это минимизировать изменения в основной конфигурации и максимально использовать Расширения конфигурации.
Использование директивы &ИзменениеИКонтроль позволяет переопределять или дополнять поведение типовых методов без физического изменения кода поставщика. Посмотрим на пример использования этой директивы:
&ИзменениеИКонтроль("ЗаполнитьРеквизитыПродажи")
Процедура Мой_ЗаполнитьРеквизитыПродажи(ДанныеДокумента)
// #Вставка
Если ДанныеДокумента.Сумма > 100000 Тогда
ДанныеДокумента.ТребуетсяСогласование = Истина;
КонецЕсли;
// #КонецВставки
ПроанализироватьСтатусДокумента(ДанныеДокумента);
КонецПроцедуры
При таком подходе основная конфигурация остается практически нетронутой (на замке). Платформа сама контролирует соответствие сигнатур методов при обновлении. Если поставщик изменит оригинальный метод в новом релизе, система предупредит вас об этом, и вам потребуется актуализировать код только в расширении, сохранив при этом типовую конфигурацию в чистоте.
Подводя итог, можно составить эффективный чек-лист для организации процесса обновления кастомизированных баз:
KDiff3).1C:EDT и использование Git для управления ветками конфигурации поставщика.