Сравнение двух обработок 1С: модули, формы и автоматизация
Содержание
Пришли две версии одной обработки .epf — от подрядчика и своя доработанная, — и нужно понять, что в них разошлось. Напрямую файлы не сравнишь: .epf это бинарный контейнер, и любой текстовый диф покажет только «файлы различны».
Рабочий путь: выгрузить каждую обработку в набор текстовых файлов (Файл → Выгрузить в файлы… в Конфигураторе) и сравнить получившиеся каталоги — тексты модулей .bsl и XML форм — обычным инструментом сравнения. Для одного модуля быстрее открыть оба и свести их через Файл → Сравнить файлы….
Ниже разберём все способы сравнить две обработки в 1С 8.3: штатные средства Конфигуратора, внешние диф-утилиты, сравнение форм и команд, а также как поставить обработки на версионный контроль, чтобы различия считались автоматически.
Что внутри обработки и что имеет смысл сравнивать
Обработка 1С это не один файл с кодом, а структура из нескольких частей. При сравнении двух .epf расхождения ищут в:
- 🧩 модуле объекта — основной код обработки;
- 🪟 формах — реквизиты формы, элементы, их свойства и модули форм;
- ⚙️ командах — список команд и их модули;
- 📑 реквизитах и табличных частях — состав, типы, порядок;
- 🖼 макетах — печатные формы, схемы компоновки данных;
- 🔧 свойствах самой обработки — имя, синоним, настройки.
Поэтому «сравнить обработки» почти всегда означает сравнить их выгруженное содержимое по этим узлам, а не один кусок кода. Отсюда и выбор инструмента: для кода хватит текстового дифа, для всей структуры нужна выгрузка в файлы.
Сравнение текстов модулей в Конфигураторе
Если расхождения нужно увидеть только в коде — например, в модуле объекта, — проще всего остаться в Конфигураторе.
- Откройте первую обработку через
Файл → Открытьи выберите.epf. - Откройте её модуль объекта или модуль формы.
- Сохраните текст модуля в файл (скопируйте содержимое в текстовый редактор либо выгрузите обработку в файлы — см. следующий раздел).
- То же проделайте со второй обработкой.
- Вызовите
Файл → Сравнить файлы…, укажите два сохранённых текста — Конфигуратор покажет построчные различия с подсветкой.
Инструмент Сравнить файлы работает с любыми текстовыми файлами и подсвечивает добавленные, удалённые и изменённые строки. Для одного-двух модулей этого достаточно, отдельные утилиты ставить не нужно.
Встроенное сравнение не понимает структуру обработки: оно видит просто текст. Если в двух версиях код одинаковый, но по-разному отформатирован (отступы, переносы), диф покажет расхождения там, где логики они не меняют.
Выгрузка обработки в файлы: сравниваем всё содержимое
Чтобы сравнить обработки целиком, а не только код, выгрузите каждую в иерархию файлов.
- Откройте обработку в Конфигураторе.
- Выберите
Файл → Выгрузить в файлы…(в части релизов пункт может называться близко по смыслу — суть в выгрузке объекта в каталог). - Укажите пустой каталог — например,
C:\compare\v1. - Повторите для второй обработки в каталог
C:\compare\v2.
На выходе получите дерево: тексты модулей в файлах .bsl (или .txt с модулями в старых релизах), описание форм и реквизитов в .xml, макеты отдельными файлами. Модуль объекта, модули форм, каждая форма со своим описанием, список реквизитов и табличных частей — всё раскладывается по вложенным папкам с говорящими именами. Теперь две папки сравниваются как обычные каталоги — любой диф-инструмент покажет, какие файлы добавились, исчезли или изменились, и по каждому файлу даст построчную разницу.
Преимущество способа — наглядная карта изменений. Вы сразу видите не только «код поменялся», но и в какой именно форме, в каком модуле и в каком реквизите. Для разбора доработок от стороннего разработчика это обычно единственный способ понять полный объём правок, а не только то, что бросается в глаза при запуске.
Этот способ закрывает сразу всё: и код, и формы, и состав реквизитов видны в одном сравнении. Это основной метод, когда обработки заметно разошлись и нужно свести изменения.
Выгрузка в файлы обратима: отредактированный каталог загружается назад командой Файл → Загрузить из файлов…. Так можно не просто сравнить, но и перенести отдельные правки из одной версии в другую.
Внешние утилиты для сравнения текстов и каталогов
Штатное Сравнить файлы сравнивает по одному файлу. Для дерева выгрузки удобнее специализированные диф-программы:
- 🔵 WinMerge — бесплатная, сравнивает и файлы, и папки целиком, подсвечивает различия, умеет объединять изменения.
- 🟢 Beyond Compare — платная, с трёхсторонним сравнением и правилами игнорирования (пробелы, регистр).
- 🟡 KDiff3, Meld — бесплатные кроссплатформенные аналоги.
- 🟣 Notepad++ с плагином Compare — для быстрого сравнения двух открытых текстов.
Порядок тот же: выгрузите обе обработки в файлы, затем в диф-программе откройте сравнение двух каталогов v1 и v2. Инструмент построит список различающихся файлов, а по каждому покажет изменённые строки.
Внешние утилиты не знают про структуру 1С: они сравнивают текст. Ложные расхождения из-за разных окончаний строк (CRLF и LF) или кодировки убираются в настройках сравнения — включите игнорирование пробелов и приведение переносов.
Как сравнить формы, команды и реквизиты
Код — не единственное, что меняется. Часто правят именно формы: добавляют поле, меняют свойство элемента, переписывают обработчик.
После выгрузки в файлы каждая форма представлена своим XML (описание элементов и реквизитов) и отдельным текстом модуля формы. Сравнение этих файлов между каталогами v1 и v2 покажет:
- добавленные или удалённые элементы и реквизиты формы;
- изменённые свойства (видимость, доступность, привязки);
- расхождения в модуле формы — построчно, как обычный код;
- различия в списке команд и их модулях.
На практике именно в формах прячется большая часть расхождений. Простой пример: в одной версии у поля ввода выставлена Доступность = Ложь, в другой — Истина. В XML формы это одна строка, и диф подсветит её сразу; визуально же, не открывая обе формы рядом, такую разницу легко пропустить. То же с добавленным обработчиком события: он виден в модуле формы как новый метод и как привязка в описании элемента.
Для командной разработки и наглядного сравнения форм удобна среда 1C:EDT: она хранит всю конфигурацию и внешние обработки как текстовые файлы проекта, поэтому различия версий видны штатными средствами редактора и системы контроля версий без ручной выгрузки.
Если нужно сравнить не две версии, а обработку с тем, что лежит в общем хранилище или репозитории, — об этом в разделе про автоматизацию ниже: там сравнение берёт на себя система версий.
Какой способ выбрать: таблица методов
| Способ | Что сравнивает | Когда удобен | Ограничения |
|---|---|---|---|
Файл → Сравнить файлы в Конфигураторе | два текста (модули) | быстрый взгляд на код | по одному файлу, только текст |
| Выгрузка в файлы + диф каталогов | всё: модули, формы, реквизиты, макеты | полное сравнение двух версий | нужен внешний диф для дерева |
| Внешние утилиты (WinMerge, Beyond Compare) | тексты и целые каталоги | наглядно, можно объединять правки | не понимают структуру 1С |
| 1C:EDT | проект целиком как текст | командная работа, сравнение с веткой | требует установки и импорта |
| Git / CI + выгрузка | история версий во времени | команда, автоматизация | нужна первичная настройка |
Файл → Сравнить файлы… либо в WinMerge.Автоматизация: версионирование обработок и CI/CD
Ручная выгрузка хороша для разового сравнения. Если обработки меняются постоянно, их ставят под контроль версий, и тогда сравнить любые две ревизии можно одной командой.
Схема такая:
- Обработку при каждом изменении выгружают в файлы — вручную или пакетно.
- Выгрузку коммитят в Git. Текстовые
.bslи.xmlотлично версионируются: diff между коммитами и есть сравнение версий. - На сервере CI (GitLab CI, Jenkins и подобные) шаг автоматически собирает
.epfиз файлов и, при необходимости, прогоняет проверки.
Пакетная выгрузка и сборка выполняются Конфигуратором из командной строки. Разворачивание обработки в файлы и обратная сборка делаются параметрами пакетного режима DESIGNER:
"C:\Program Files\1cv8\...\1cv8.exe" DESIGNER /F"C:\base" /N"user" /P"pass" ^
/DumpExternalDataProcessorOrReportToFiles "C:\compare\v1" "C:\proc\v1.epf"
Обратная операция — сборка .epf из каталога — выполняется парным параметром загрузки из файлов. Точный синтаксис и полный список параметров всегда сверяйте в справке: запустите 1cv8 /? или откройте раздел по пакетному запуску Конфигуратора, не полагаясь на память по одному примеру.
Для командной работы пригождаются утилиты сообщества (например, precommit1c, gitsync), которые автоматизируют выгрузку обработок в текст при коммите. А 1C:EDT изначально держит проект в текстовом виде, поэтому вписывается в Git и CI без промежуточной выгрузки.
Что имеет смысл класть в репозиторий по каждой обработке:
- 📂 выгрузку в файлы — тексты модулей и XML форм как источник правды;
- 📝 короткое описание изменения в сообщении коммита — зачем правили;
- 🏷 тег или ветку на версию, которую отдали в продуктив, чтобы потом сравнить с ней доработки.
Как только обработки живут в репозитории, вопрос «чем отличаются две версии» закрывается командой git diff между коммитами или ветками — отдельные инструменты сравнения уже не нужны.
Нюансы интерпретации различий и частые ошибки
Сравнение показывает строки, а понять, что из них важно, — отдельная задача. На что смотреть:
- 🧷 Бинарный
.epfне сравнивается напрямую. Попытка открыть два.epfв текстовом дифе даёт «файлы различны» без деталей. Сначала выгрузка в файлы — потом сравнение. - 🔁 Разный порядок после пересохранения. После открытия и сохранения в разных релизах платформы XML может отличаться порядком узлов или служебными идентификаторами. Такие расхождения часто «ложные» — логика не менялась.
- ↩️ Окончания строк и кодировка. CRLF против LF или разная кодировка подсвечивают файл как полностью изменённый. Включите в дифе игнорирование переносов и пробелов.
- 🧮 Служебные идентификаторы (GUID). Внутренние идентификаторы объектов могут различаться, хотя смысла не несут. Не принимайте их за содержательную правку.
- 📦 Версия платформы влияет на формат выгрузки. Выгружайте обе обработки одной версией платформы — иначе часть различий окажется в формате файлов, а не в вашем коде. Сравнивайте, когда номер платформы у обеих выгрузок одинаков.
- 🧾 Обработка и отчёт. Для отчётов
.erfвсё работает так же, меняется только тип файла.
Прежде чем переносить правки из одной версии в другую через загрузку из файлов, сохраните исходный .epf отдельно. Загрузка из файлов перезаписывает содержимое, и откатиться без копии не выйдет.
Частые вопросы
Можно ли сравнить два файла `.epf` напрямую, не выгружая в файлы?
.epf это бинарный контейнер, и текстовый диф покажет только факт различия без деталей. Для построчного сравнения обработку сначала выгружают в файлы либо сравнивают тексты модулей через Файл → Сравнить файлы.Чем сравнение обработок отличается от сравнения конфигураций?
Конфигурация → Сравнить, объединить…. Для внешней обработки её нет — поэтому сравнивают либо тексты модулей, либо каталоги, полученные выгрузкой в файлы.Как сравнить обработку с её версией из хранилища или Git?
git diff между коммитами, в 1C:EDT — сравнение с базовой ревизией. Отдельно выгружать и сводить файлы не нужно.