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

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

Как сравнить два объекта в 1С

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

Что значит «сравнить два объекта» в 1С

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

Стандартных кнопок «сравнить два элемента справочника» в типовых конфигурациях обычно нет — сравнение данных выполняется либо встроенными механизмами конкретной конфигурации (например, сопоставление при обмене), либо внешними обработками, либо программным кодом. Зато сравнение конфигураций — штатная функция конфигуратора, доступная в любой базе без доработок.

Важно сразу определить, на каком уровне вы сравниваете: метаданные (структура объектов), данные (содержимое конкретных записей) или файлы (текстовое представление). Смешивание этих уровней — частая причина неверных выводов: например, две конфигурации могут быть идентичны по структуре, но содержать разные данные, и наоборот.

Сравнение конфигураций через конфигуратор

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

После загрузки второй конфигурации платформа строит дерево объектов с отметками о различиях. Объекты, отличающиеся в двух конфигурациях, помечаются специальными значками; по двойному щелчку на объекте открывается детальное сравнение. Для модулей доступно построчное сравнение текстов — видно, какие строки добавлены, удалены или изменены.

Порядок действий при сравнении конфигураций
  1. 1
    Сделайте резервную копию базы (выгрузку .dt) до начала работы
  2. 2
    Откройте конфигуратор и снимите конфигурацию с замка, если планируется объединение
  3. 3
    Выберите Конфигурация → Сравнить, объединить с конфигурацией из файла и укажите файл .cf
  4. 4
    Дождитесь построения дерева различий и снимите флажки с объектов, которые не нужно переносить
  5. 5
    Изучите детальные различия по ключевым объектам двойным щелчком
  6. 6
    Если нужно только сравнение без изменений — закройте окно без нажатия «Выполнить»
  7. 7
    Если нужно объединение — нажмите «Выполнить», затем обновите конфигурацию базы данных (F7)

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

Сравнение конфигурации с конфигурацией базы данных и поставщика

Помимо сравнения с файлом, конфигуратор умеет сравнивать основную конфигурацию с конфигурацией базы данных (меню Конфигурация → Конфигурация базы данных → Сравнить, объединить). Это нужно, чтобы увидеть изменения, которые внесены в конфигурацию, но ещё не применены к базе данных, — типичная ситуация при доработке, когда разработчик изменил объекты, но не выполнил обновление.

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

Сравнение данных двух элементов программно

Когда нужно сравнить содержимое двух элементов справочника или двух документов, штатного интерфейса недостаточно — применяется код на встроенном языке. Базовый подход — обход всех реквизитов объекта через метаданные и попарное сравнение значений. Это универсальный метод, работающий для любых типов объектов без привязки к конкретной конфигурации.

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

Функция СравнитьОбъекты(Ссылка1, Ссылка2)

Расхождения = Новый Массив;

Объект1 = Ссылка1.ПолучитьОбъект();

Объект2 = Ссылка2.ПолучитьОбъект();

Мета = Ссылка1.Метаданные();

Для Каждого Реквизит Из Мета.Реквизиты Цикл

Если Объект1[Реквизит.Имя] <> Объект2[Реквизит.Имя] Тогда

Расхождения.Добавить(Реквизит.Имя);

КонецЕсли;

КонецЦикла;

Возврат Расхождения;

КонецФункции

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

bsl
Если Объект1[Реквизит.Имя] <> Объект2[Реквизит.Имя] Тогда Расхождения.Добавить(Реквизит.Имя); КонецЕсли;

Сравнение через обработки и типовые механизмы

Если писать код не хочется, задачу решают готовые внешние обработки. Наиболее известная категория — обработки сравнения данных, которые берут два объекта (или два списка) и выводят таблицу расхождений по реквизитам. Подобные инструменты входят в состав «Инструментов разработчика» (ИР) и других открытых библиотек, а также встречаются в виде отдельных .epf-файлов.

В типовых конфигурациях есть и встроенные сценарии сравнения, привязанные к обмену данными. Например, при загрузке данных через универсальный формат или при сопоставлении номенклатуры система показывает расхождения между загружаемыми и существующими данными. В «1С:Бухгалтерии» и «1С:Управление торговлей» механизмы сопоставления работают при обмене с другими базами и при загрузке прайсов.

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

Сравнение способов

Сравнение конфигураций в конфигураторе

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

Программное сравнение объектов

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

Внешние обработки (ИР и аналоги)

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

Сравнение файлов выгрузок и отчётов

Подходит для сверки данных между двумя базами. Ограничение: сравнивается текстовое представление, а не сами объекты, поэтому возможны ложные различия из-за порядка строк.

Риски и ограничения при сравнении и объединении

Главный риск связан не со сравнением, а с объединением: кнопка «Выполнить» в окне сравнения конфигураций переносит изменения в рабочую конфигурацию. Если случайно оставить лишние флажки, можно затереть доработки или получить конфликт с динамическим обновлением. Поэтому перед объединением всегда делается выгрузка .dt, а само обновление желательно выполнять в монопольном режиме в нерабочее время.

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

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

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

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

После программного сравнения данных убедитесь, что метод не даёт ложных срабатываний: прогоните его на двух заведомо одинаковых объектах (например, скопируйте элемент и сравните копию с собой до изменений). Результат должен быть пустым списком расхождений. Если расхождения есть — в коде не учтены служебные поля или сравниваются значения разных типов.

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

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

Прогон сравнения на идентичных объектах
Норма

Список расхождений пуст

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

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

Различия конфигураций после доработки
Норма

Изменены только те объекты, которые правили

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

Различия в незнакомых объектах — возможно, сравниваются разные релизы

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

Обновление конфигурации базы данных прошло без ошибок, база открывается

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

Ошибки реструктуризации или неработающие доработки — восстановите копию и разберитесь в причинах

Типичные ошибки
01
Нажатие «Выполнить» в окне сравнения вместо простого анализа — изменения применяются к конфигурации, и без резервной копии откат затруднён
02
Сравнение объектов по представлению (наименованию) вместо ссылок и реквизитов — одинаковые названия не означают одинаковые объекты
03
Игнорирование табличных частей при сравнении документов — шапки совпадают, а содержимое строк различается
04
Сравнение выгрузок .dt как текстовых файлов — формат выгрузки не предназначен для построчного сравнения, используйте XML-выгрузки или конфигуратор

Частые вопросы

Можно ли сравнить две базы 1С целиком?

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

Как сравнить два документа в 1С без программирования?

Откройте оба документа и визуально сверьте реквизиты — это приемлемо для разовой проверки. Для регулярной сверки используйте внешние обработки сравнения объектов (например, из состава Инструментов разработчика) или настройте вывод обоих документов в печатные формы и сравните полученные файлы.

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

Сравнение с конфигурацией базы данных показывает изменения, внесённые разработчиком, но ещё не применённые к базе (не выполнено обновление). Сравнение с конфигурацией поставщика показывает все доработки относительно типовой поставки вендора и используется при подготовке к обновлению типового решения.

Почему при сравнении файлов выгрузок всё показывается разным?

Файлы .dt — бинарный формат, они не предназначены для текстового сравнения. Даже XML-выгрузки могут отличаться порядком следования объектов и служебными атрибутами. Для сравнения данных выгружайте конкретные таблицы в упорядоченном виде или используйте отчёты с одинаковыми настройками и отбором.

Безопасно ли открывать режим сравнения конфигураций в рабочей базе?

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

Как сравнить модули двух конфигураций построчно?

В окне сравнения конфигураций выделите нужный объект и откройте детальное сравнение — для модулей платформа покажет построчные различия с подсветкой добавленных, удалённых и изменённых строк. Альтернатива — выгрузить тексты модулей в файлы и сравнить их через «Файл → Сравнить файлы» или любой внешний инструмент сравнения текстов.

Итог

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

Сравнение конфигураций выполняется штатно в конфигураторе, сравнение данных — программно или внешними обработками. Само окно сравнения безопасно, изменения применяет только кнопка «Выполнить». Перед объединением всегда делайте выгрузку .dt, а метод сравнения данных проверяйте на заведомо одинаковых объектах.