Разработка и Конфигурация · 10 мин
Как сравнить обработки в 1С
Как сравнить две обработки 1С по коду и функционалу: конфигуратор, EDT, сравнение файлов, типовые инструменты. Пошаговые инструкции, риски и проверка результата.
Сравнение обработок в 1С — типовая задача, когда нужно понять, чем отличаются две версии внешней обработки (.epf), какой файл новее, какие изменения внес подрядчик или безопасно ли заменить текущую обработку новой. В зависимости от цели применяются разные инструменты: штатное сравнение конфигураций, сравнение текстов модулей, сторонние diff-утилиты и EDT.
Важно понимать ограничение: внешняя обработка — это бинарный контейнер, внутри которого лежат модули, формы, макеты и метаданные. Просто открыть два файла .epf в текстовом редакторе и сравнить их «как текст» нельзя — результат будет нечитаемым. Поэтому сравнение всегда сводится либо к извлечению исходников, либо к использованию инструментов, которые умеют разбирать формат обработки.
Ниже разобраны рабочие способы: от штатного сравнения через конфигуратор до выгрузки исходников и построчного diff. Для каждого способа указаны условия применения, ограничения и признаки корректного результата.
Определите, что именно нужно сравнить
Под «сравнением обработок» обычно понимают три разные задачи, и инструмент зависит от задачи. Первая — сравнение кода: какие процедуры и функции изменились в модуле объекта или модулях форм. Вторая — сравнение структуры: реквизиты, формы, макеты, команды. Третья — функциональное сравнение: две обработки делают одно и то же, и нужно выбрать, какую оставить.
Для сравнения кода достаточно текстового diff. Для сравнения структуры нужна выгрузка в исходники или EDT-проект. Для функционального сравнения инструменты diff не помогут — потребуется тестовый запуск обеих обработок на одинаковых данных и сверка результатов.
Как выбрать способ
Способ 1: выгрузка в исходные файлы и сравнение каталогов
Самый полный способ — разложить обе обработки в исходные файлы и сравнить полученные каталоги. В конфигураторе для этого откройте обработку через Файл → Открыть, затем используйте механизм выгрузки в файлы: для внешних обработок доступна команда выгрузки в XML-исходники (в свежих версиях платформы — через пункт выгрузки в файлы в меню обработки либо через пакетный режим конфигуратора с ключом DumpExternalDataProcessorOrReportToFiles).
После выгрузки вы получите два каталога с XML-файлами: модули форм, модуль объекта, макеты, описание метаданных. Дальше каталоги сравниваются любым diff-инструментом, поддерживающим сравнение папок: WinMerge, Beyond Compare, KDiff3 или встроенное сравнение в VS Code. Различия в коде будут видны построчно, различия в формах и макетах — как изменения соответствующих XML-файлов.
"C:\Program Files\1cv8\<версия>\bin\1cv8.exe" DESIGNER /F"C:\base" /DumpExternalDataProcessorOrReportToFiles "C:\src\obrabotka1" "C:\files\Obrabotka1.epf"Проверка результата: после выгрузки убедитесь, что в каталоге появились файлы модулей (ObjectModule или аналогичная структура) и папки форм. Если каталог пуст или содержит только один XML без модулей — выгрузка не выполнилась, чаще всего из-за неверного пути к платформе или отсутствия прав на запись.
Способ 2: сравнение текстов модулей вручную
Если интересует только код, есть быстрый путь без выгрузки исходников. Откройте обе обработки в конфигураторе (два окна), откройте модуль объекта в каждой, выделите весь текст (Ctrl+A), скопируйте и вставьте в два файла. Затем сравните файлы в любом diff-редакторе.
То же самое повторите для модулей форм — именно там в управляемых обработках часто находится основная логика. Способ трудоёмкий при большом числе форм, но не требует никаких настроек и работает на любой версии платформы, включая старые.
- 1Откройте первую обработку в конфигураторе и скопируйте текст модуля объекта в файл module1.txt
- 2Откройте вторую обработку, скопируйте её модуль в module2.txt
- 3Повторите для модулей форм, если они есть
- 4Откройте оба файла в diff-редакторе и изучите различия
- 5Проверьте, что различия касаются логики, а не только форматирования и комментариев
Способ 3: сравнение обработок, встроенных в конфигурацию
Когда обработки находятся внутри конфигурации (а не внешние файлы), используется штатный механизм: Конфигурация → Сравнить, объединить с конфигурацией из файла. В диалоге сравнения платформа покажет дерево различий по всем объектам, включая обработки, с детализацией до модулей и форм.
Для построчного просмотра кода в окне сравнения выберите объект и откройте детальное сравнение модуля — платформа покажет изменённые, добавленные и удалённые строки. Это удобно при переносе обработки из одной конфигурации в другую или при проверке обновления от поставщика.
Способ 4: сравнение в 1C:EDT
В EDT внешние обработки импортируются в проект, после чего становится доступным встроенное сравнение: выделите два объекта в навигаторе, вызовите контекстное меню Compare With → Each Other. EDT покажет структурное сравнение с возможностью перейти к различиям в коде.
Дополнительное преимущество EDT — интеграция с Git. Если обработки хранятся в репозитории как исходники, различия между версиями видны через историю коммитов и стандартный diff Git, что удобно при командной разработке и ревью изменений.
Функциональное сравнение: когда код не главное
Иногда задача — не найти различия в файлах, а выбрать одну из двух обработок, решающих одну задачу (например, две загрузки прайсов от разных разработчиков). Здесь diff бесполезен: код может быть полностью разным при одинаковом результате. Сравнивать нужно по критериям: поддерживаемая версия платформы и конфигурации, тип клиента (тонкий/толстый, веб), наличие серверных вызовов, права, скорость работы на реальном объёме данных, обработка ошибок.
Практический подход: запустите обе обработки на копии базы с одинаковыми тестовыми данными и сверьте результат — количество созданных документов, заполненность полей, время выполнения. Расхождения в результате важнее расхождений в коде.
Сравнение способов
Самый полный охват: код, формы, макеты. Требует настройки и diff-инструмента, дольше по времени
Быстро и без настройки, но виден только код, формы и макеты остаются за кадром
Штатно и наглядно, но работает только для объектов внутри конфигурации
Удобно для регулярной работы и истории версий, требует перехода на EDT и хранение исходников
Риски и ограничения
Главный риск при сравнении — не само сравнение, а последующая замена обработки в рабочей базе. Перед заменой всегда сохраняйте текущую версию файла .epf и делайте резервную копию информационной базы, если обработка изменяет данные. Проверяйте новую обработку сначала на копии базы.
Учтите ограничения формата: обработки, сохранённые в новой версии платформы, могут не открыться в старой. Обработки с защищённым (поставляемым без исходников) модулем сравнить по коду невозможно — доступна только структура метаданных. Также бинарное сравнение файлов .epf напрямую бессмысленно: даже идентичные по логике обработки почти всегда различаются побайтово.
Как проверить результат сравнения
После сравнения полезно зафиксировать выводы: какие процедуры изменены, добавлены или удалены реквизиты, есть ли различия в формах. Если сравнение делалось для обновления — составьте короткий список изменений и проверьте каждое при тестовом запуске.
Как проверить результат
Есть файлы модулей и папки форм обеих обработок
Каталог пуст или содержит только один файл описания
Различия читаемы построчно, понятно, что изменилось
Сплошные различия из-за разной кодировки или переносов строк — нормализуйте файлы и повторите
Работает на копии базы, результат совпадает с ожидаемым
Ошибки при открытии или выполнении — откат на прежнюю версию
Что важно запомнить
Файлы .epf нельзя сравнивать как текст — сначала выгрузите исходники или извлеките модули. Полное сравнение даёт diff каталогов исходников, быстрое — сравнение текстов модулей. Любую новую обработку проверяйте на копии базы до замены рабочей версии.
Частые вопросы
Можно ли сравнить два файла .epf напрямую, без конфигуратора?
Осмысленно — нет. .epf — бинарный контейнер, и побайтовое сравнение покажет различия даже у идентичных по логике обработок. Нужно либо выгрузить исходники штатными средствами платформы, либо использовать сторонние разборщики формата (например, инструменты на базе OneScript), которые преобразуют обработку в читаемые файлы.
Как сравнить обработки, если модуль защищён паролем?
Если модуль поставляется без исходного текста (скрыт поставщиком), сравнить код штатными средствами нельзя. Доступно только сравнение структуры: реквизитов, форм, макетов — через выгрузку в исходники. Для полного сравнения запросите у поставщика версию с открытым кодом или описание изменений.
Чем сравнить каталоги исходников, если нет платных инструментов?
Подойдут бесплатные WinMerge и KDiff3, а также VS Code: в нём можно выделить две папки и вызвать сравнение, а для отдельных файлов работает встроенный diff. Для XML-файлов форм полезно включить игнорирование пробельных различий, чтобы не тонуть в незначащих отличиях.
Как понять, какая из двух обработок новее?
Надёжного признака версии внутри .epf нет, если разработчик не указал её в коде или в синониме. Ориентируйтесь на дату изменения файла, комментарии в модуле и историю хранения файлов. Если обработки ведутся в Git, версия определяется историей коммитов — это ещё один аргумент за хранение исходников в репозитории.
Обработки отличаются только форматированием кода. Это нормально?
Да, такое бывает после пересохранения в другой версии платформы или правки в другом редакторе. В diff-инструменте включите игнорирование пробелов и пустых строк: если после этого различий нет, обработки функционально эквивалентны по коду. Окончательно убедиться помогает тестовый запуск обеих на одинаковых данных.
Можно ли автоматизировать сравнение при регулярных обновлениях?
Да. Настройте пакетную выгрузку обеих обработок в исходники через командную строку конфигуратора и сравнение каталогов скриптом (например, git diff --no-index). Такую связку удобно запускать при каждом получении новой версии от поставщика, чтобы сразу видеть список изменений.