К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как сравнить два файла в 1С: пошаговые способы для конфигураций, модулей и данных

Как сравнить два файла в 1С: штатное сравнение конфигураций, объекты и модули, табличные документы, внешние инструменты и типичные ошибки при анализе различий.

Под сравнением двух файлов в 1С обычно понимают одну из трёх задач: сравнить файлы конфигураций (.cf), сравнить тексты модулей и внешних обработок (.epf, .erf, .bsl), либо сравнить табличные документы и файлы данных (.mxl, .xml, .csv). Для каждой задачи существует свой инструмент, и ошибка выбора приводит к неверным выводам: например, побайтовое сравнение двух .cf-файлов почти всегда покажет различия даже при идентичных конфигурациях, потому что внутри файла есть служебные метаданные.

Штатные средства платформы 1С:Предприятие закрывают большинство сценариев: конфигуратор умеет сравнивать конфигурации и объединять их, встроенный механизм сравнения текстов показывает различия модулей построчно, а табличные документы можно сопоставить программно. Для файлов произвольного формата, которые 1С не понимает, используются внешние инструменты — Notepad++, WinMerge, KDiff3 или системы контроля версий.

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

Определите, какие именно файлы нужно сравнить

Первый шаг — понять тип файлов, потому что от него зависит весь инструментарий. Файл конфигурации .cf — это бинарный контейнер, который нельзя осмысленно сравнить текстовым diff-инструментом. Модуль, выгруженный в .bsl или .txt, — обычный текст, и его можно сравнивать любым редактором с функцией diff. Табличный документ .mxl — внутренний формат 1С, который внешние программы не откроют корректно.

Частая ситуация: пользователь получил два файла выгрузки (например, XML из разных баз) и хочет понять, чем отличаются данные. Здесь текстовое сравнение даст тысячи ложных различий из-за порядка элементов и служебных идентификаторов. Правильный подход — загрузить оба файла в 1С и сравнить данные по ключевым полям, а не по тексту файла.

Маршрут решения

Как выбрать способ сравнения

Файлы .cf или .cf и конфигурация базыИспользуйте сравнение и объединение конфигураций в конфигураторе
Тексты модулей, .bsl, .txt, внешние обработки .epfШтатное сравнение текстов в конфигураторе или внешний diff-инструмент
Табличные документы .mxl или печатные формыОткройте оба в тонком клиенте и сравните визуально или программно
XML, CSV, файлы обмена даннымиЗагрузите в 1С и сравнивайте данные по ключевым полям, а не текст файлов

Сравнение файлов конфигураций (.cf) в конфигураторе

Штатный механизм сравнения конфигураций — основной способ узнать, чем отличаются два файла .cf или файл от конфигурации базы данных. Откройте конфигуратор, перейдите в меню «Конфигурация → Сравнить, объединить с конфигурацией из файла» и укажите второй файл. Платформа построит дерево объектов метаданных и отметит различия: изменённые, добавленные и удалённые объекты.

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

Учтите ограничение: сравнение показывает различия на уровне метаданных и текстов модулей, но не сравнивает данные информационной базы. Два одинаковых .cf-файла, загруженные в разные базы, могут работать с совершенно разными данными — это сравнение делается другими средствами.

Сравнение текстов модулей и внешних обработок

Для сравнения текстов модулей в конфигураторе есть встроенный инструмент. Откройте модуль, затем через меню «Текст → Сравнить с файлом» (в разных версиях платформы пункт может называться иначе) выберите файл для сравнения. Платформа покажет построчные различия с возможностью переноса изменений из одной стороны в другую.

Внешние обработки и отчёты (.epf, .erf) — бинарные файлы, но их тексты модулей можно сравнить двумя путями. Первый: открыть обе обработки в конфигураторе и использовать сравнение модулей вручную. Второй: выгрузить обработки в исходные файлы через «Конфигурация → Выгрузить внешние обработки в файлы» (или штатную пакетную выгрузку в XML) и сравнить полученные тексты любым diff-инструментом.

bsl
// Программное сравнение двух текстовых файлов
Сравнение = Новый СравнениеФайлов;
Сравнение.ПервыйФайл = "C:\temp\Модуль_стар.txt";
Сравнение.ВторойФайл = "C:\temp\Модуль_нов.txt";
Сравнение.СпособСравнения = СпособСравненияФайлов.ТекстовыйДокумент;
Различны = НЕ Сравнение.Сравнить();
Сообщить("Файлы различаются: " + Различны);

Объект «СравнениеФайлов» во встроенном языке позволяет автоматизировать проверку: например, в скрипте регламентного контроля убедиться, что файл эталона совпадает с рабочей копией. Для текстовых файлов используйте способ сравнения «ТекстовыйДокумент», для произвольных — двоичный, но помните, что двоичное сравнение чувствительно к любым служебным байтам.

Сравнение табличных документов и печатных форм

Табличные документы (.mxl) сравнивают, когда нужно проверить, изменилась ли печатная форма или выгрузка отчёта. Простейший способ — открыть оба файла в тонком клиенте и сопоставить визуально. Для больших документов это непрактично, поэтому применяют программное сравнение: обойти области обоих документов циклом и сравнить тексты ячеек.

Готовые обработки сравнения табличных документов есть в типовых инструментах разработчика (например, в подсистеме инструментов разработчика и на Infostart). Они выводят различающиеся строки и ячейки. При сравнении отчётов, построенных на СКД, надёжнее сравнивать не mxl-результат, а сами данные: выгрузить результат в таблицу значений и сопоставить по ключевым колонкам.

Сравнение файлов данных: XML, CSV, файлы обмена

Файлы выгрузок данных (XML из «ВыгрузкаЗагрузкаДанныхXML», файлы обмена, CSV из Excel) нельзя надёжно сравнивать как текст. Порядок элементов, служебные идентификаторы и ссылки-представления меняются от выгрузки к выгрузке, и текстовый diff покажет массу ложных различий. Правильный подход — загрузить оба файла в таблицы значений и сравнить по ключевым полям: код, артикул, ИНН, номер документа и дата.

Для CSV удобно использовать обработку загрузки в табличный документ или таблицу значений, затем соединить две таблицы запросом через полное соединение и вывести строки, где одна из сторон пуста или значения полей различаются. Для XML-файлов обмена универсального формата (EnterpriseData) сравнивайте сами объекты после загрузки в тестовую базу, а не файлы.

Контрольные точки

Как проверить результат сравнения

Количество строк в обеих таблицах
Норма

Совпадает или разница объяснима отбором

Тревожный признак

Разница без причины — проверьте фильтры загрузки

Ключевые поля (код, артикул, номер)
Норма

Ключи уникальны в каждой таблице

Тревожный признак

Дубли ключей — сравнение даст ложные совпадения

Различающиеся записи
Норма

Каждое различие подтверждается реальным отличием данных

Тревожный признак

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

Внешние инструменты и контроль версий

Когда файлы представляют собой текст (выгруженные модули, исходники конфигурации в формате EDT, XML-выгрузки конфигуратора), внешние diff-инструменты удобнее штатных: WinMerge и KDiff3 сравнивают каталоги целиком, Notepad++ с плагином Compare — отдельные файлы, а Git показывает историю изменений. Для работы с исходниками конфигурации рекомендуется выгрузка в файлы конфигуратором или 1C:EDT и хранение в Git — тогда сравнение любых двух версий становится штатной операцией.

Сравнение инструментов

Конфигуратор (сравнение конфигураций)

Единственный корректный способ для .cf. Ограничение: не сравнивает данные базы

Объект СравнениеФайлов

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

WinMerge / KDiff3 / Git

Удобны для выгруженных исходников и каталогов. Ограничение: не понимают бинарные форматы 1С (.cf, .epf, .mxl)

Загрузка в таблицы значений + запрос

Правильный способ для файлов данных. Ограничение: требует написания кода загрузки

Типичные ошибки и риски при сравнении файлов

Самая опасная ошибка — выполнить объединение конфигураций вместо сравнения и потерять доработки. Режим объединения с установленными флажками по умолчанию может заменить изменённые объекты версией из файла. Перед любым объединением делайте выгрузку базы (.dt) и сначала выполняйте объединение в тестовой копии.

Типичные ошибки
01
Сравнение .cf-файлов текстовым diff-инструментом — бинарный формат всегда покажет различия, выводы будут неверными
02
Сравнение XML-выгрузок как текста — ложные различия из-за порядка элементов и служебных идентификаторов
03
Объединение конфигураций вместо сравнения — потеря доработок в рабочей базе
04
Сравнение табличных документов без нормализации форматов — различия в пробелах и форматах принимаются за различия данных
05
Сравнение файлов с дублями ключевых полей — соединение таблиц даёт ложные совпадения и пропуски

Ещё одна частая проблема — сравнение файлов, сохранённых в разных кодировках. Текстовый модуль в UTF-8 и тот же модуль в Windows-1251 при побайтовом сравнении различаются полностью. Перед сравнением приведите оба файла к одной кодировке, а при программном чтении явно указывайте кодировку в объекте «ЧтениеТекста».

Итог

Что важно запомнить

Способ сравнения определяется типом файла: .cf — только конфигуратором, тексты модулей — штатным или внешним diff, mxl — визуально или программно, файлы данных — загрузкой в таблицы и сравнением по ключам. Перед объединением конфигураций всегда делайте резервную копию и проверяйте результат на тестовой базе.

Частые вопросы о сравнении файлов в 1С

Можно ли сравнить два .cf-файла без создания базы?

Да. Создайте пустую файловую базу, загрузите в неё первый .cf через «Загрузить конфигурацию из файла», затем выполните «Сравнить, объединить с конфигурацией из файла» и укажите второй .cf. Данные в базе не нужны — сравниваются только метаданные и модули.

Как сравнить два файла Excel из 1С?

Загрузите оба файла в табличные документы или таблицы значений (через COM-объект Excel или сохранение в CSV) и сравните программно по ключевым колонкам. Прямого штатного сравнения xlsx в платформе нет.

Почему текстовое сравнение XML-выгрузок показывает различия, хотя данные одинаковые?

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

Как сравнить модули двух внешних обработок .epf?

Откройте каждую обработку в конфигураторе и сравните тексты модулей через «Текст → Сравнить», либо выгрузите обработки в исходные файлы и сравните полученные тексты внешним diff-инструментом.

Чем отличается сравнение конфигураций от сравнения конфигурации с базой данных?

Сравнение с файлом показывает различия двух конфигураций между собой. Сравнение «Конфигурация базы данных» и основной конфигурации показывает, какие изменения ещё не обновлены в базе. Это разные механизмы для разных задач.

Можно ли автоматизировать сравнение файлов в регламентном задании?

Да, через объект «СравнениеФайлов» во встроенном языке. Он возвращает факт различия, по которому можно отправить уведомление или записать событие в журнал. Для детального анализа различий потребуется собственный построчный разбор текстов.