В процессе разработки на платформе 1С:Предприятие часто возникает ситуация, когда одна и та же внешняя обработка .epf или внешний отчет .erf редактируются несколькими программистами или в разных информационных базах. В какой-то момент встает задача: как объединить изменения из двух разных файлов в один, не прибегая к ручному копированию кода и элементов форм? Многие разработчики ошибочно полагают, что штатный механизм сравнения и объединения работает только для объектов основной конфигурации, однако это не так. Разберем подробно все способы решения этой задачи.
Рассмотрим стандартный и самый надежный метод, который встроен в платформу 1С. Часто пользователи пытаются использовать команду Файл — Сравнить файлы..., но этот инструмент предназначен для сравнения текстовых или двоичных данных. Для полноценного объединения метаданных, модулей и форм нам понадобится другой алгоритм. Разберем его по шагам:
.epf или .erf, с которым необходимо произвести сравнение.После выполнения этих действий откроется стандартное окно сравнения и объединения, хорошо знакомое каждому, кто хоть раз обновлял конфигурацию. Проанализируем возможности этого окна:
МодульОбъекта), откроется окно построчного сравнения кода. Здесь мы можем детально изучить изменения и выбрать, какие куски кода оставить.Важный нюанс: После того как мы отметим все нужные изменения и нажмем кнопку Выполнить, изменения будут внесены в ту обработку, которую мы открыли первой. Не забудем сохранить результат нажатием Ctrl + S.
Проанализируем ситуацию, когда в двух обработках менялись формы. При объединении управляемых форм 1С сравнивает не только программный код (Модуль формы), но и дерево элементов, а также реквизиты формы. Выясним причину возможных сложностей:
Если в одной форме был добавлен элемент и ему назначено событие, а в другой форме этот элемент отсутствует, при автоматическом объединении может нарушиться структура UUID элементов. Поэтому при работе с формами рекомендуем следующий порядок действий:
Если изменения в визуальной части слишком критичны, иногда надежнее перенести код модуля через текстовое сравнение, а элементы формы добавить вручную в режиме конфигуратора, чтобы сохранить строгий контроль над логикой событий.
Посмотрим на более современный подход, который используют крупные команды разработки. 1C:EDT — это среда разработки на базе Eclipse, которая работает с объектами 1С в виде набора текстовых и XML-файлов. Если мы добавим наши внешние обработки в проекты EDT, мы получим принципиально иные возможности:
В EDT внешняя обработка — это не бинарный файл, а папка с исходным кодом. Это позволяет использовать стандартные системы контроля версий, такие как Git. Проанализируем преимущества:
git merge для автоматического слияния правок от разных разработчиков.Для объединения двух .epf через EDT нам потребуется импортировать обе обработки как проекты, настроить удаленный репозиторий или просто скопировать файлы одной в папку другой и запустить механизм сравнения ресурсов проекта.
Выясним, что делать, если штатное сравнение в Конфигураторе кажется неудобным или медленным. Существуют инструменты для «разборки» бинарных файлов 1С на исходные составляющие. Разберем этот процесс:
С помощью утилит типа V8Unpack или скриптов на базе v8reader можно распаковать .epf файл. В результате мы получим структуру папок, где:
XML или внутреннем формате 1С (текстовом).После распаковки мы можем использовать профессиональные инструменты сравнения текстов, такие как Beyond Compare или WinMerge. Рассмотрим пример ситуации, когда это полезно: если в модуле на 10 000 строк кода функции были просто поменяны местами. Штатный механизм 1С может воспринять это как удаление и добавление текста, в то время как Beyond Compare поймет, что блоки кода просто переместились, и поможет сопоставить их правильно.
Иногда возникают задачи повышенной сложности, например, когда внешняя обработка тесно связана с объектами метаданных конкретной конфигурации. В этом случае полезно применить метод «буферной базы»:
Этот метод дает более широкую картину зависимостей и позволяет использовать все инструменты сравнения конфигураций, включая отчеты о сравнении в формате html или txt.
Мы проанализировали основные способы сопоставления файлов. Выбор метода зависит от сложности задачи:
Для быстрого объединения двух версий кода идеально подходит штатный механизм: Конфигурация — Сравнить, объединить с внешней обработкой.... Рассмотрим пример типичного кода, который часто требует внимания при объединении — это обработчики команд:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Важно проверить, не затираются ли параметры заполнения
Если Параметры.Свойство("ЗначениеЗаполнения") Тогда
// Логика объединения
КонецЕсли;
КонецПроцедуры
При объединении модулей всегда обращайте внимание на директивы компиляции (&НаКлиенте, &НаСервере). Окно сравнения 1С корректно их распознает, но ручная проверка никогда не будет лишней. Помните, что после завершения процесса объединения обработку необходимо обязательно протестировать в режиме Предприятия, так как логические связи между элементами формы и их обработчиками в коде могут быть нарушены, если UUID объектов разошлись.
Используя приведенные выше инструкции, вы сможете эффективно управлять версиями своих разработок и избегать потери кода при совместной работе.