Две версии внешней обработки: как найти каждое отличие в коде, формах и макетах
Содержание
Сравнить две обработки в 1С 8.3 быстрее всего прямо в Конфигураторе: меню Файл → Сравнить файлы, указать два файла .epf (или .erf для отчётов) — платформа покажет дерево объектов с отличиями, а по двойному щелчку откроет сравнение модулей построчно. Для регулярной работы надёжнее другой путь: выгрузить обе обработки в файлы XML и BSL и сравнивать их любым diff-инструментом или через git.
Частое заблуждение — открыть два файла .epf в WinMerge или Total Commander и смотреть на результат. Внешняя обработка хранится в двоичном контейнере, поэтому такое сравнение скажет только «файлы разные». Где именно и что поменялось, оно не покажет. Даже одна и та же обработка, пересохранённая без правок, может дать другой набор байтов.
Когда сравнивать обработки и что именно вы ищете
Задача «сравнить» бывает разной, и от неё зависит инструмент. Перед стартом определите, какой у вас случай.
- 🔍 Подрядчик прислал новую версию. Нужно понять, что он изменил, и не сломал ли рабочее.
- 🧩 Две копии без истории. В папке лежат
Загрузка_v2.epfиЗагрузка_final.epf, и никто не помнит, какая актуальная. - 🛡️ Проверка перед запуском. Обработку скачали или получили по почте, и надо убедиться, что внутри нет лишнего кода.
- 🔁 Перенос доработки. Свою правку нужно повторить в свежей версии обработки от поставщика.
- 📦 Контроль целостности. Надо подтвердить, что файл на сервере тот же, что прошёл проверку.
В первых четырёх случаях нужно содержательное сравнение кода, форм и макетов. В пятом достаточно контрольной суммы — открывать обработку не нужно вовсе.
Быстрая оценка: хеш файла и визуальный осмотр
Самый быстрый ответ на вопрос «это одна и та же обработка?» — контрольная сумма. В Windows она считается встроенными средствами, без 1С.
В PowerShell:
Get-FileHash "C:\Обработки\Загрузка_v2.epf" -Algorithm SHA256
Get-FileHash "C:\Обработки\Загрузка_final.epf" -Algorithm SHA256
В обычной командной строке:
certutil -hashfile "C:\Обработки\Загрузка_v2.epf" SHA256
Если суммы совпали, файлы одинаковые, дальше сравнивать нечего. Если разные — это ещё не значит, что изменился код. Обработку могли просто открыть и сохранить в Конфигураторе другой версии платформы.
Храните хеш проверенной версии рядом с ней — например, в файле Загрузка.epf.sha256. Через полгода не придётся вспоминать, ту ли обработку вы проверяли.
Визуальный осмотр — второй быстрый способ. Откройте обе обработки в Конфигураторе через Файл → Открыть и сравните дерево: реквизиты, табличные части, формы, макеты, команды. Добавленная форма или новый макет видны сразу. Правку внутри модуля так не найти — для этого нужен следующий шаг.
Сравнение обработок в Конфигураторе
Встроенный механизм Конфигуратора — основной способ для разового сравнения. Он работает и с внешними обработками, и с внешними отчётами.
Пошагово
- Запустите Конфигуратор любой информационной базы. Подойдёт даже пустая учебная — сама обработка к базе не привязана.
- Откройте меню
Файл → Сравнить файлы. - Укажите первый и второй файл
.epf(или.erf). - Платформа покажет окно сравнения в виде дерева, похожее на сравнение конфигураций. Отличающиеся объекты подсвечены.
- Включите отбор, чтобы видеть только различия, — в длинной обработке это экономит прокрутку.
- Двойной щелчок по модулю открывает построчное сравнение текста. По форме — сравнение элементов, реквизитов и модуля формы.
Механизм Сравнить файлы понимает и обычные текстовые файлы, и табличные документы .mxl. Удобно, когда нужно сравнить выгруженный макет печатной формы.
Что видно, а что нет
| Что сравнивается | Видно в Конфигураторе | Комментарий |
|---|---|---|
| Модуль объекта | Да, построчно | Основное место логики |
| Модули форм | Да, построчно | Обработчики кнопок и событий формы |
| Элементы формы | Да | Добавленные и удалённые поля, группы, кнопки |
| Реквизиты и табличные части | Да | Новые реквизиты, смена типа |
| Макеты | Частично | Табличный макет можно открыть и сравнить отдельно |
| Защищённый паролем модуль | Нет | Без пароля текст недоступен |
Сравнение в Конфигураторе — это просмотр. Ничего не объединяйте и не сохраняйте поверх рабочего файла, пока не решили, какая версия правильная. Сначала сделайте копию обоих .epf.
Минус способа: результат нельзя сохранить в виде понятного отчёта и нельзя прогнать автоматически. Для этого обработку разбирают на файлы.
Выгрузка обработки в файлы и сравнение diff-инструментом
С платформы 8.3.8 внешнюю обработку
можно выгрузить в набор файлов: XML-описания объектов и модули .bsl в виде обычного текста. После этого две версии сравниваются как две папки — любым инструментом: WinMerge, KDiff3, Beyond Compare, встроенным diff в VS Code или git.
Выгрузка через Конфигуратор вручную
Откройте обработку в Конфигураторе. В меню Файл есть команда выгрузки во внешние файлы (в контекстном меню корневого элемента обработки — тоже). Укажите пустую папку. Повторите для второй версии в другую папку.
Выгрузка из командной строки
Пакетный режим Конфигуратора позволяет сделать то же без открытия окна. Нужна любая информационная база — например, пустая файловая:
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /F "C:\Bases\Empty" /DisableStartupDialogs ^
/DumpExternalDataProcessorOrReportToFiles "C:\Diff\v2\Загрузка.xml" "C:\Обработки\Загрузка_v2.epf" ^
/Out "C:\Diff\dump_v2.log"
Подставьте свой номер платформы в путь к 1cv8.exe. Первый параметр команды — путь к корневому XML-файлу выгрузки, второй — сама обработка. Обратная команда /LoadExternalDataProcessorOrReportFromFiles собирает .epf из файлов.
Выгружайте обе версии одной и той же версией платформы. Иначе в XML появятся отличия в служебных атрибутах формата, и полезные изменения утонут в шуме.
Что получится в папке
Выгрузка в иерархическом формате выглядит примерно так:
Загрузка.xml— описание обработки: реквизиты, табличные части, ссылки на формы и макеты;Загрузка\Ext\ObjectModule.bsl— модуль объекта;Загрузка\Forms\Форма\Ext\Form.xml— состав элементов формы;Загрузка\Forms\Форма\Ext\Form\Module.bsl— модуль формы;Загрузка\Templates\...— макеты.
Теперь откройте обе папки в WinMerge (Файл → Открыть, обе папки, флажок «Включить вложенные папки»). Программа покажет, какие файлы различаются, а внутри — построчно.
Утилиты без Конфигуратора
Если Конфигуратора под рукой нет, контейнер можно разобрать сторонними открытыми утилитами. Самая известная — v8unpack: она распаковывает .epf в папку с модулями. Формат её результата отличается от официальной выгрузки, поэтому сравнивайте только версии, разобранные одним инструментом. Точные ключи запуска смотрите в справке утилиты (v8unpack без параметров выводит список).
Как сравнить формы, реквизиты и макеты
Код — только часть обработки. Часто отличие прячется в форме: добавили поле, поменяли тип реквизита, скрыли кнопку. В выгрузке это видно в XML.
Форма
Файл Form.xml описывает элементы, их порядок, свойства и привязку к реквизитам. При сравнении ищите:
- 🧱 новые и удалённые элементы — поля, группы, кнопки командной панели;
- 🔗 смену
DataPath— поле теперь показывает другой реквизит; - 👁️ свойства видимости и доступности;
- ⚙️ назначенные обработчики событий — по ним видно, какая процедура модуля срабатывает на кнопку.
Каждому элементу формы платформа присваивает числовой идентификатор. Если разработчик пересобрал форму, идентификаторы сдвинутся, и diff покажет «изменилось всё». Смотрите на имена и свойства элементов, а не на номера.
Реквизиты и табличные части
Они описаны в корневом XML. Самые опасные изменения — смена типа реквизита и удаление колонки табличной части. Обработка с такой правкой может перестать открывать сохранённые настройки пользователей.
Макеты
Табличные макеты сравнивайте не через XML, а в самой платформе. Сохраните макет из каждой версии в файл .mxl и откройте оба через Файл → Сравнить файлы в Конфигураторе. Так видно отличия по ячейкам и областям, а не в разметке.
Проверка чужой обработки перед запуском
Отдельный сценарий — проверить, что внутри обработки, полученной со стороны. Здесь сравнение идёт не с другой версией, а с ожиданием: что обработка должна делать.
Не запускайте незнакомую обработку в рабочей базе, пока не прочитали код. Открытие через Файл → Открыть в режиме 1С:Предприятие выполняет код формы. Открытие в Конфигураторе — нет, это безопасный просмотр.
Что искать в выгруженных модулях поиском по папке:
| Что найти | Зачем |
|---|---|
УдалитьОбъекты, .Удалить() | Массовое удаление данных |
ЗапуститьПриложение, КомандаСистемы | Запуск внешних программ |
HTTPСоединение, FTPСоединение | Передача данных наружу |
ПривилегированныйРежим | Обход прав пользователя |
Выполнить(, Вычислить( | Код, который собирается на лету и не виден при чтении |
ПользователиИнформационнойБазы | Создание пользователей, смена паролей |
Сами по себе эти слова не значат вредоносность: загрузка из банка легально ходит по HTTP. Но каждое такое место надо прочитать и понять, зачем оно там.
Как поставить сравнение на поток: git и автоматическая выгрузка
Когда обработок десятки и правят их несколько человек, ручное сравнение перестаёт работать. Решение — хранить исходники в git и смотреть изменения как в любом другом проекте.
Схема работы
- Заведите репозиторий, где каждая обработка лежит выгруженной в свою папку.
- Перед коммитом выгружайте
.epfв файлы — вручную, bat-скриптом или хуком git. - Изменения смотрите через
git diff, в веб-интерфейсе GitLab или Gitea, либо в VS Code. - Для сборки рабочего файла используйте обратную команду
/LoadExternalDataProcessorOrReportFromFiles.
Простой скрипт для выгрузки всех обработок из папки:
@echo off
set V8="C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe"
set IB=C:\Bases\Empty
for %%f in (C:\Обработки\*.epf) do (
%V8% DESIGNER /F "%IB%" /DisableStartupDialogs ^
/DumpExternalDataProcessorOrReportToFiles "C:\Repo\src\%%~nf\%%~nf.xml" "%%f" ^
/Out "C:\Repo\dump.log" -NoTruncate
)
Строка с -NoTruncate дописывает лог, а не перезаписывает его на каждой обработке. Конфигуратор в пакетном режиме запускается заново для каждого файла, поэтому на 50 обработок уйдёт несколько минут.
Готовые инструменты
- 🛠️ 1C:EDT — среда разработки на Eclipse, работает с исходниками в файлах и с git напрямую.
- 🧰 vanessa-runner (OneScript) — набор команд для сборки и разборки обработок в CI. Список команд выдаёт
vrunner help. - 🔧 Хуки git на OneScript — при коммите автоматически раскладывают
.epfв исходники, чтобы diff был виден без ручных действий.
Добавьте в репозиторий файл .gitattributes и задайте единый перевод строк для *.bsl и *.xml. Иначе после правки на другом компьютере git покажет изменёнными все строки модуля.
Из-за чего сравнение врёт: шум и ложные отличия
Большинство «странных» результатов сравнения объясняются техническими причинами, а не правками кода.
- 🔢 Разные версии платформы при выгрузке. XML отличается служебными атрибутами формата. Выгружайте одной версией.
- ↩️ Перевод строк и кодировка. Один файл в CRLF, другой в LF — и весь модуль «изменён». В WinMerge включите игнорирование различий в переводах строк, в git —
.gitattributes. - 🆔 Идентификаторы элементов формы. После пересборки формы номера сдвигаются. Сравнивайте имена.
- 🔒 Пароль на модуль. Защищённый модуль не выгружается в текст. Нужен пароль от автора, без него доступно только сравнение структуры.
- 📄 Разные форматы выгрузки. Иерархический и плоский формат дают разную структуру папок. Выбирайте один и придерживайтесь его.
- 🧪 Сравнение разных инструментов. Папка от
v8unpackи папка от Конфигуратора не совпадут даже для одного файла.
Если после всех настроек diff всё равно показывает изменённым каждый файл — проверьте пробелы в начале строк. Табуляция против пробелов тоже даёт сплошную подсветку. В WinMerge и KDiff3 есть опция игнорировать пробельные символы.
Частые вопросы
Можно ли сравнить внешнюю обработку с обработкой внутри конфигурации?
.epf обычным способом.Почему хеш разный, а Конфигуратор отличий не показывает?
Нужна ли лицензия, чтобы сравнивать обработки в Конфигураторе?
Как сравнить внешние отчёты?
.erf поддерживаются и в Файл → Сравнить файлы, и в пакетной выгрузке той же командой.Можно ли объединить две версии обработки?
.epf обратной командой. Готовый файл обязательно откройте в Конфигураторе и проверьте синтаксис модулей.