Разработка и Конфигурация · 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 или файл от конфигурации базы данных. Откройте конфигуратор, перейдите в меню «Конфигурация → Сравнить, объединить с конфигурацией из файла» и укажите второй файл. Платформа построит дерево объектов метаданных и отметит различия: изменённые, добавленные и удалённые объекты.
В окне сравнения каждый объект имеет статус. Двойной щелчок по изменённому модулю открывает построчное сравнение текстов с подсветкой различий. Для объектов, форм и макетов доступен просмотр различий в свойствах. Если цель — только анализ, а не объединение, закройте окно без установки флажков: никакие изменения в базу не попадут.
Учтите ограничение: сравнение показывает различия на уровне метаданных и текстов модулей, но не сравнивает данные информационной базы. Два одинаковых .cf-файла, загруженные в разные базы, могут работать с совершенно разными данными — это сравнение делается другими средствами.
Сравнение текстов модулей и внешних обработок
Для сравнения текстов модулей в конфигураторе есть встроенный инструмент. Откройте модуль, затем через меню «Текст → Сравнить с файлом» (в разных версиях платформы пункт может называться иначе) выберите файл для сравнения. Платформа покажет построчные различия с возможностью переноса изменений из одной стороны в другую.
Внешние обработки и отчёты (.epf, .erf) — бинарные файлы, но их тексты модулей можно сравнить двумя путями. Первый: открыть обе обработки в конфигураторе и использовать сравнение модулей вручную. Второй: выгрузить обработки в исходные файлы через «Конфигурация → Выгрузить внешние обработки в файлы» (или штатную пакетную выгрузку в XML) и сравнить полученные тексты любым diff-инструментом.
// Программное сравнение двух текстовых файлов
Сравнение = Новый СравнениеФайлов;
Сравнение.ПервыйФайл = "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. Ограничение: не сравнивает данные базы
Подходит для автоматических проверок текстовых файлов. Ограничение: только факт различия, без удобного просмотра
Удобны для выгруженных исходников и каталогов. Ограничение: не понимают бинарные форматы 1С (.cf, .epf, .mxl)
Правильный способ для файлов данных. Ограничение: требует написания кода загрузки
Типичные ошибки и риски при сравнении файлов
Самая опасная ошибка — выполнить объединение конфигураций вместо сравнения и потерять доработки. Режим объединения с установленными флажками по умолчанию может заменить изменённые объекты версией из файла. Перед любым объединением делайте выгрузку базы (.dt) и сначала выполняйте объединение в тестовой копии.
Ещё одна частая проблема — сравнение файлов, сохранённых в разных кодировках. Текстовый модуль в UTF-8 и тот же модуль в Windows-1251 при побайтовом сравнении различаются полностью. Перед сравнением приведите оба файла к одной кодировке, а при программном чтении явно указывайте кодировку в объекте «ЧтениеТекста».
Что важно запомнить
Способ сравнения определяется типом файла: .cf — только конфигуратором, тексты модулей — штатным или внешним diff, mxl — визуально или программно, файлы данных — загрузкой в таблицы и сравнением по ключам. Перед объединением конфигураций всегда делайте резервную копию и проверяйте результат на тестовой базе.
Частые вопросы о сравнении файлов в 1С
Можно ли сравнить два .cf-файла без создания базы?
Да. Создайте пустую файловую базу, загрузите в неё первый .cf через «Загрузить конфигурацию из файла», затем выполните «Сравнить, объединить с конфигурацией из файла» и укажите второй .cf. Данные в базе не нужны — сравниваются только метаданные и модули.
Как сравнить два файла Excel из 1С?
Загрузите оба файла в табличные документы или таблицы значений (через COM-объект Excel или сохранение в CSV) и сравните программно по ключевым колонкам. Прямого штатного сравнения xlsx в платформе нет.
Почему текстовое сравнение XML-выгрузок показывает различия, хотя данные одинаковые?
Порядок элементов, служебные идентификаторы узлов и представления ссылок могут отличаться между выгрузками. Сравнивайте загруженные данные по ключевым полям, а не текст XML.
Как сравнить модули двух внешних обработок .epf?
Откройте каждую обработку в конфигураторе и сравните тексты модулей через «Текст → Сравнить», либо выгрузите обработки в исходные файлы и сравните полученные тексты внешним diff-инструментом.
Чем отличается сравнение конфигураций от сравнения конфигурации с базой данных?
Сравнение с файлом показывает различия двух конфигураций между собой. Сравнение «Конфигурация базы данных» и основной конфигурации показывает, какие изменения ещё не обновлены в базе. Это разные механизмы для разных задач.
Можно ли автоматизировать сравнение файлов в регламентном задании?
Да, через объект «СравнениеФайлов» во встроенном языке. Он возвращает факт различия, по которому можно отправить уведомление или записать событие в журнал. Для детального анализа различий потребуется собственный построчный разбор текстов.