Чем отличаются две версии внешней обработки: способы сравнения в 1С 8.3
Содержание
Сравнить 2 обработки в 1С быстрее всего в Конфигураторе: Файл → Сравнить файлы, указать два файла .epf и получить дерево отличий по реквизитам, формам, макетам и модулю. Если нужна построчная разница кода или история правок, обработку выгружают в XML-файлы и сравнивают текстовым инструментом — WinMerge, git diff или утилитой вроде sncompare и RabbitCompare.
Выбор метода зависит от задачи. Разово понять, что поменял подрядчик, — хватит Конфигуратора. Сравнивать версии каждую неделю и видеть, кто и когда правил, — нужен Git. Сторонние утилиты удобны, когда Конфигуратор под рукой не всегда, а разбирать файлы руками не хочется.
Когда нужно сравнивать обработки и что подготовить
Типичные поводы сравнить две обработки:
- 🔧 подрядчик прислал «исправленную» версию, а список изменений не приложил;
- 📂 в папке лежат
Загрузка_v2.epfиЗагрузка_новая.epf, и непонятно, какая из них рабочая; - 🔄 обновилась типовая конфигурация, а внешняя печатная форма или обработка заполнения перестала работать — нужно найти, что поменяли в последней версии;
- 🧩 нужно перенести свою доработку в свежую версию обработки от поставщика;
- 🔍 перед подключением в рабочую базу хочется убедиться, что в коде нет ничего лишнего.
Перед сравнением сделайте три вещи.
- Скопируйте оба файла в отдельную папку, например
C:\Diff\old.epfиC:\Diff\new.epf. Работайте с копиями: при случайном сохранении в Конфигураторе оригинал не пострадает. - Проверьте, что исходный код есть. Если обработку сохранили без исходных текстов, модуль не откроется — сравнить можно будет только состав реквизитов, форм и макетов.
- Откройте файлы платформой той же или более новой версии, чем та, в которой их сохраняли. Обработка из 8.3.24 может не открыться в 8.3.18 — и сравнение не начнётся вовсе.
Для Конфигуратора нужна любая информационная база. Заводить отдельную пустую файловую базу удобно: сравнение не трогает рабочие данные, а базу не жалко.
Сравнение двух обработок средствами Конфигуратора
Встроенный способ не требует ничего ставить. Работает в любой редакции платформы 8.3.
Пошагово
- Запустите Конфигуратор любой базы.
- Откройте меню
Файл → Сравнить файлы. - В поле первого файла укажите старую версию обработки, во втором — новую.
- Нажмите «Сравнить».
- Откроется окно с деревом объектов обработки. Отличающиеся ветки подсвечены, одинаковые можно скрыть флажком показа только отличий.
В дереве сравниваются:
- 📋 реквизиты и табличные части — добавленные, удалённые, сменившие тип;
- 🖼 формы — состав элементов, их свойства и модуль формы;
- 📄 макеты — табличные и текстовые;
- 💻 модуль объекта.
Как читать результат
Дойдите до отличающегося модуля и откройте его сравнение двойным щелчком. Конфигуратор покажет два текста рядом: изменённые строки выделены цветом, кнопками на панели можно переходить между отличиями.
С формами сложнее. Отличие «изменено» у формы часто означает сдвиг элемента на пару пикселей или смену порядка. Раскройте ветку формы: внутри видно, менялись элементы, реквизиты формы или её модуль. Смотрите прежде всего модуль — там логика.
Окно сравнения файлов только показывает отличия. Чтобы перенести изменения из одной обработки в другую, откройте целевую обработку через Файл → Открыть, внесите правки и сохраните её под новым именем. Не перезаписывайте исходный файл, пока не проверили результат на копии базы.
Ограничения
- Нет истории: видно, чем отличаются два файла, но не когда и почему.
- Нельзя сравнить больше двух версий за раз.
- Результат не выгрузить отчётом — для протокола изменений придётся копировать фрагменты вручную.
Выгрузка обработки в XML и сравнение текстом
Начиная с платформы 8.3.8 внешнюю обработку
можно разобрать на файлы: модули становятся текстовыми .bsl, формы и метаданные — .xml. Дальше подходит любой инструмент сравнения папок.
Выгрузка вручную
- Откройте обработку в Конфигураторе:
Файл → Открыть. - Щёлкните правой кнопкой по корню дерева обработки и выберите выгрузку в файлы.
- Укажите пустой каталог, например
C:\Diff\old. - Повторите для второй обработки в каталог
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С распространяются на сторонних площадках, их возможности и поддержка версий платформы меняются от сборки к сборке. Прежде чем доверить такой программе рабочие обработки, проверьте её по списку:
Файл обработки — исполняемый код. Утилита, которая его разбирает, получает к нему полный доступ. Не запускайте непроверенные программы на компьютере, где открыта рабочая база или хранится ключ электронной подписи.
Git: история версий обработки вместо разовых сравнений
Если обработку дорабатывают постоянно, сравнивать пары файлов вручную надоедает. Git хранит каждую версию и показывает отличия между любыми двумя из них.
Простая схема без дополнительных программ
- Создайте репозиторий:
git init C:\Repo\Zagruzka. - После каждой правки выгружайте обработку в XML в папку репозитория — командой из раздела выше.
- Фиксируйте версию:
git add .иgit commit -m "Добавлена загрузка цен из Excel". - Чтобы сравнить любые две версии, найдите их в
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?
Нужна ли лицензия, чтобы запустить Конфигуратор для сравнения?
Как сравнить две обработки, если Конфигуратора нет под рукой?
git diff --no-index. Платформа для этого не нужна.