Как сравнить и объединить две внешние обработки в 1С?

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

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

Использование штатного функционала Конфигуратора

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

  1. Запустим Конфигуратор любой информационной базы (состав объектов базы не имеет значения, так как мы работаем с внешними файлами).
  2. Откроем первую внешнюю обработку (которую мы берем за основу) через меню Файл — Открыть.
  3. Теперь, когда окно основной обработки активно, обратим внимание на главное меню в верхней части экрана. Нам нужен пункт Конфигурация.
  4. В выпадающем меню выберем команду Сравнить, объединить с внешней обработкой, отчетом....
  5. В открывшемся диалоговом окне выберем второй файл .epf или .erf, с которым необходимо произвести сравнение.

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

Важный нюанс: После того как мы отметим все нужные изменения и нажмем кнопку Выполнить, изменения будут внесены в ту обработку, которую мы открыли первой. Не забудем сохранить результат нажатием Ctrl + S.

Особенности объединения управляемых форм

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

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

  1. Сначала объединим Реквизиты формы.
  2. Затем перейдем к объединению Элементов формы (визуальное дерево).
  3. В последнюю очередь объединяем Модуль формы.

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

Альтернативный метод: Использование 1C:Enterprise Development Tools (EDT)

Посмотрим на более современный подход, который используют крупные команды разработки. 1C:EDT — это среда разработки на базе Eclipse, которая работает с объектами 1С в виде набора текстовых и XML-файлов. Если мы добавим наши внешние обработки в проекты EDT, мы получим принципиально иные возможности:

В EDT внешняя обработка — это не бинарный файл, а папка с исходным кодом. Это позволяет использовать стандартные системы контроля версий, такие как Git. Проанализируем преимущества:

Для объединения двух .epf через EDT нам потребуется импортировать обе обработки как проекты, настроить удаленный репозиторий или просто скопировать файлы одной в папку другой и запустить механизм сравнения ресурсов проекта.

Использование внешних утилит (V8Unpack и аналоги)

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

С помощью утилит типа V8Unpack или скриптов на базе v8reader можно распаковать .epf файл. В результате мы получим структуру папок, где:

После распаковки мы можем использовать профессиональные инструменты сравнения текстов, такие как Beyond Compare или WinMerge. Рассмотрим пример ситуации, когда это полезно: если в модуле на 10 000 строк кода функции были просто поменяны местами. Штатный механизм 1С может воспринять это как удаление и добавление текста, в то время как Beyond Compare поймет, что блоки кода просто переместились, и поможет сопоставить их правильно.

Сравнение через временную конфигурацию

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

  1. Создадим пустую информационную базу.
  2. Добавим первую обработку в дерево метаданных (в ветку Обработки).
  3. Запустим сравнение/объединение основной конфигурации с внешней обработкой (вторым файлом).

Этот метод дает более широкую картину зависимостей и позволяет использовать все инструменты сравнения конфигураций, включая отчеты о сравнении в формате html или txt.

Резюме и практические советы

Мы проанализировали основные способы сопоставления файлов. Выбор метода зависит от сложности задачи:

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Важно проверить, не затираются ли параметры заполнения
    Если Параметры.Свойство("ЗначениеЗаполнения") Тогда
        // Логика объединения
    КонецЕсли;
КонецПроцедуры

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

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

← На главную