Чем отличаются две версии внешней обработки: способы сравнения в 1С 8.3

· 9 мин

Содержание

Сравнить 2 обработки в 1С быстрее всего в Конфигураторе: Файл → Сравнить файлы, указать два файла .epf и получить дерево отличий по реквизитам, формам, макетам и модулю. Если нужна построчная разница кода или история правок, обработку выгружают в XML-файлы и сравнивают текстовым инструментом — WinMerge, git diff или утилитой вроде sncompare и RabbitCompare.

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

Когда нужно сравнивать обработки и что подготовить

Типичные поводы сравнить две обработки:

  • 🔧 подрядчик прислал «исправленную» версию, а список изменений не приложил;
  • 📂 в папке лежат Загрузка_v2.epf и Загрузка_новая.epf, и непонятно, какая из них рабочая;
  • 🔄 обновилась типовая конфигурация, а внешняя печатная форма или обработка заполнения перестала работать — нужно найти, что поменяли в последней версии;
  • 🧩 нужно перенести свою доработку в свежую версию обработки от поставщика;
  • 🔍 перед подключением в рабочую базу хочется убедиться, что в коде нет ничего лишнего.

Перед сравнением сделайте три вещи.

  1. Скопируйте оба файла в отдельную папку, например C:\Diff\old.epf и C:\Diff\new.epf. Работайте с копиями: при случайном сохранении в Конфигураторе оригинал не пострадает.
  2. Проверьте, что исходный код есть. Если обработку сохранили без исходных текстов, модуль не откроется — сравнить можно будет только состав реквизитов, форм и макетов.
  3. Откройте файлы платформой той же или более новой версии, чем та, в которой их сохраняли. Обработка из 8.3.24 может не открыться в 8.3.18 — и сравнение не начнётся вовсе.

Для Конфигуратора нужна любая информационная база. Заводить отдельную пустую файловую базу удобно: сравнение не трогает рабочие данные, а базу не жалко.

Сравнение двух обработок средствами Конфигуратора

Встроенный способ не требует ничего ставить. Работает в любой редакции платформы 8.3.

Пошагово

  1. Запустите Конфигуратор любой базы.
  2. Откройте меню Файл → Сравнить файлы.
  3. В поле первого файла укажите старую версию обработки, во втором — новую.
  4. Нажмите «Сравнить».
  5. Откроется окно с деревом объектов обработки. Отличающиеся ветки подсвечены, одинаковые можно скрыть флажком показа только отличий.

В дереве сравниваются:

  • 📋 реквизиты и табличные части — добавленные, удалённые, сменившие тип;
  • 🖼 формы — состав элементов, их свойства и модуль формы;
  • 📄 макеты — табличные и текстовые;
  • 💻 модуль объекта.

Как читать результат

Дойдите до отличающегося модуля и откройте его сравнение двойным щелчком. Конфигуратор покажет два текста рядом: изменённые строки выделены цветом, кнопками на панели можно переходить между отличиями.

С формами сложнее. Отличие «изменено» у формы часто означает сдвиг элемента на пару пикселей или смену порядка. Раскройте ветку формы: внутри видно, менялись элементы, реквизиты формы или её модуль. Смотрите прежде всего модуль — там логика.

Окно сравнения файлов только показывает отличия. Чтобы перенести изменения из одной обработки в другую, откройте целевую обработку через Файл → Открыть, внесите правки и сохраните её под новым именем. Не перезаписывайте исходный файл, пока не проверили результат на копии базы.

Ограничения

  • Нет истории: видно, чем отличаются два файла, но не когда и почему.
  • Нельзя сравнить больше двух версий за раз.
  • Результат не выгрузить отчётом — для протокола изменений придётся копировать фрагменты вручную.

Выгрузка обработки в XML и сравнение текстом

Начиная с платформы 8.3.8 внешнюю обработку можно разобрать на файлы: модули становятся текстовыми .bsl, формы и метаданные — .xml. Дальше подходит любой инструмент сравнения папок.

Выгрузка вручную

  1. Откройте обработку в Конфигураторе: Файл → Открыть.
  2. Щёлкните правой кнопкой по корню дерева обработки и выберите выгрузку в файлы.
  3. Укажите пустой каталог, например C:\Diff\old.
  4. Повторите для второй обработки в каталог C:\Diff\new.

Выгрузка из командной строки

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

@echo off
rem Путь к 1cv8.exe — замените версию на установленную у вас
set V8="C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe"
set BASE=C:\Bases\Empty

rem Один раз: создать пустую файловую базу
rem %V8% CREATEINFOBASE File="%BASE%"

%V8% DESIGNER /F "%BASE%" /DisableStartupDialogs ^
  /DumpExternalDataProcessorOrReportToFiles "C:\Diff\old" "C:\Diff\old.epf" ^
  /Out "C:\Diff\dump_old.log"

%V8% DESIGNER /F "%BASE%" /DisableStartupDialogs ^
  /DumpExternalDataProcessorOrReportToFiles "C:\Diff\new" "C:\Diff\new.epf" ^
  /Out "C:\Diff\dump_new.log"

Если что-то пошло не так, причина будет в файлах dump_old.log и dump_new.log. Обратная операция — сборка .epf из файлов — выполняется ключом /LoadExternalDataProcessorOrReportFromFiles.

Сравнение папок

Две папки удобно сравнить в WinMerge: «Файл → Открыть», указать обе папки, включить рекурсивное сравнение. Если установлен Git, хватит одной команды, даже без репозитория:

git diff --no-index --stat C:\Diff\old C:\Diff\new
git diff --no-index C:\Diff\old C:\Diff\new > C:\Diff\changes.diff

Первая команда покажет список изменённых файлов, вторая сохранит построчную разницу в файл — его можно отправить коллеге или приложить к задаче.

В XML форм много служебных идентификаторов и координат. Начинайте с файлов .bsl: в них код модулей объекта и форм. XML форм смотрите, только если поведение формы изменилось, а в коде отличий нет.

На что смотреть в разнице кода

Когда список изменённых .bsl перед глазами, проверьте в первую очередь места, где обработка трогает данные или внешний мир:

  • 💾 вызовы Записать() и Удалить() — новая версия может менять больше объектов, чем старая;
  • 🌐 обращения к интернету и файлам: HTTPСоединение, ЗаписьТекста, КопироватьФайл;
  • 🔑 привилегированный режим и выполнение произвольного кода: УстановитьПривилегированныйРежим, Выполнить, Вычислить;
  • 📝 тексты запросов — новое условие или соединение меняет состав выборки без единой ошибки.

Такие строки стоит дочитать целиком, даже если правка заявлена как «косметическая».

Сторонние утилиты: sncompare, RabbitCompare и аналоги

Кроме Конфигуратора, для сравнения обработок используют отдельные программы. Их три типа:

Тип инструментаПримерыЧто умеет
Утилиты под форматы 1Сsncompare, RabbitCompareОткрывают файлы 1С и показывают отличия без Конфигуратора
Распаковщики контейнераv8unpackРазбирают .epf и .cf на составные части для текстового сравнения
Универсальные сравнителиWinMerge, KDiff3, Beyond CompareСравнивают текст и папки после выгрузки

v8unpack — открытый проект, разбирает файл без установленной платформы:

v8unpack -parse C:\Diff\old.epf C:\Diff\old_src
v8unpack -parse C:\Diff\new.epf C:\Diff\new_src

Полученные папки сравнивают тем же WinMerge. Структура у v8unpack своя и отличается от штатной выгрузки в XML, поэтому не смешивайте два способа в одном сравнении.

Утилиты под форматы 1С распространяются на сторонних площадках, их возможности и поддержка версий платформы меняются от сборки к сборке. Прежде чем доверить такой программе рабочие обработки, проверьте её по списку:

Проверка сторонней утилиты сравнения
Выполнено: 0 / 6

Файл обработки — исполняемый код. Утилита, которая его разбирает, получает к нему полный доступ. Не запускайте непроверенные программы на компьютере, где открыта рабочая база или хранится ключ электронной подписи.

Git: история версий обработки вместо разовых сравнений

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

Простая схема без дополнительных программ

  1. Создайте репозиторий: git init C:\Repo\Zagruzka.
  2. После каждой правки выгружайте обработку в XML в папку репозитория — командой из раздела выше.
  3. Фиксируйте версию: git add . и git commit -m "Добавлена загрузка цен из Excel".
  4. Чтобы сравнить любые две версии, найдите их в git log и выполните git diff <хеш1> <хеш2>.

Сам файл .epf в Git тоже можно хранить, но сравнивать его Git не умеет: для него это двоичный файл, и diff покажет только «файл изменён».

Автоматизация

Выгрузку при каждом коммите автоматизируют хуки Git. Известный вариант — precommit1c на OneScript: перед коммитом он сам разбирает добавленные .epf и .erf на исходники и кладёт их рядом. Разработчик продолжает работать с обычными файлами обработок, а в истории появляется читаемый код.

Если команда работает в 1С:EDT, внешнюю обработку можно импортировать в проект EDT. Тогда сравнение и история доступны прямо в среде разработки через встроенную поддержку Git.

Что даёт Git сверх разового сравнения

  • 🕓 видно, кто и когда внёс изменение и с каким комментарием;
  • ↩️ можно вернуть любую прошлую версию и собрать из неё .epf;
  • 🔀 две доработки одной обработки сливаются с подсветкой конфликтов;
  • 📝 описание изменений для заказчика собирается из истории коммитов.

Какой способ выбрать

ЗадачаСпособЧем рискуете
Разово понять, что поменялиКонфигуратор, Файл → Сравнить файлыПочти ничем, нужен только доступ к любой базе
Получить построчный отчёт об измененияхВыгрузка в XML + git diff --no-index или WinMergeШум в XML форм
Сравнить без установленной платформыv8unpack, утилиты под форматы 1СНепроверенный софт, неполная поддержка новых версий
Вести историю и сливать доработкиGit + выгрузка в XML или precommit1cВремя на настройку, дисциплина коммитов

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

Ошибки при сравнении обработок и как их избежать

Диагностика: выберите симптом

Ещё две частые ловушки, которые не видны по сообщениям:

  • 🔁 Перепутаны «старая» и «новая». Добавленная строка выглядит как удалённая — и вывод получается обратным. Называйте файлы по дате или номеру версии, а не «новая» и «последняя».
  • 🧪 Сравнение без проверки. Найденные отличия ещё не доказывают, что обработка работает. Перед подключением новой версии в рабочую базу запустите её в копии базы на тех же данных.

Частые вопросы

Можно ли сравнить внешнюю обработку с обработкой внутри конфигурации?
Да. Выгрузите конфигурацию в файлы командой /DumpConfigToFiles, внешнюю обработку — в XML, и сравните папку нужной обработки из выгрузки с папкой внешней. Структура файлов у них совпадает.
Подходит ли этот способ для внешних отчётов .erf?
Да. Конфигуратор сравнивает отчёты так же, как обработки, а ключ пакетной выгрузки один для обоих типов файлов.
Нужна ли лицензия, чтобы запустить Конфигуратор для сравнения?
Для запуска Конфигуратора нужна лицензия, как и для любого запуска платформы. Пакетный режим DESIGNER тоже использует платформу.
Как сравнить две обработки, если Конфигуратора нет под рукой?
Разберите оба файла v8unpack и сравните папки в WinMerge или через git diff --no-index. Платформа для этого не нужна.
Видно ли при сравнении, что поменялось в макете печатной формы?
Конфигуратор отмечает изменённый макет в дереве. Подробности по ячейкам надёжнее смотреть, открыв оба макета рядом, — XML макета для глаз почти нечитаем.