Разработка и Конфигурация · 12 мин
Как сравнить два объекта в 1С
Способы сравнить два объекта в 1С: сравнение конфигураций в конфигураторе, внешние обработки для данных, программные методы. Пошаговые инструкции, риски и FAQ.
Что значит «сравнить два объекта» в 1С
Под сравнением двух объектов в 1С понимают три разные задачи, и от того, какая именно стоит перед вами, зависит выбор инструмента. Первая задача — сравнение двух конфигураций, например рабочей базы и файла поставки .cf, чтобы увидеть, какие объекты метаданных изменились. Вторая — сравнение данных: двух элементов справочника, двух документов или двух таблиц значений программно. Третья — сравнение файлов выгрузки, когда нужно понять, чем отличаются две выгрузки информационной базы или два XML-файла.
Стандартных кнопок «сравнить два элемента справочника» в типовых конфигурациях обычно нет — сравнение данных выполняется либо встроенными механизмами конкретной конфигурации (например, сопоставление при обмене), либо внешними обработками, либо программным кодом. Зато сравнение конфигураций — штатная функция конфигуратора, доступная в любой базе без доработок.
Важно сразу определить, на каком уровне вы сравниваете: метаданные (структура объектов), данные (содержимое конкретных записей) или файлы (текстовое представление). Смешивание этих уровней — частая причина неверных выводов: например, две конфигурации могут быть идентичны по структуре, но содержать разные данные, и наоборот.
Сравнение конфигураций через конфигуратор
Основной штатный инструмент — режим сравнения и объединения конфигураций. Он показывает различия по всем объектам метаданных: справочникам, документам, регистрам, ролям, формам, макетам и модулям. Открывается через меню Конфигурация → Сравнить, объединить с конфигурацией из файла. В качестве источника можно указать файл .cf, файл выгрузки .dt или другую базу.
После загрузки второй конфигурации платформа строит дерево объектов с отметками о различиях. Объекты, отличающиеся в двух конфигурациях, помечаются специальными значками; по двойному щелчку на объекте открывается детальное сравнение. Для модулей доступно построчное сравнение текстов — видно, какие строки добавлены, удалены или изменены.
- 1Сделайте резервную копию базы (выгрузку .dt) до начала работы
- 2Откройте конфигуратор и снимите конфигурацию с замка, если планируется объединение
- 3Выберите Конфигурация → Сравнить, объединить с конфигурацией из файла и укажите файл .cf
- 4Дождитесь построения дерева различий и снимите флажки с объектов, которые не нужно переносить
- 5Изучите детальные различия по ключевым объектам двойным щелчком
- 6Если нужно только сравнение без изменений — закройте окно без нажатия «Выполнить»
- 7Если нужно объединение — нажмите «Выполнить», затем обновите конфигурацию базы данных (F7)
Критически важно: само окно сравнения не изменяет базу, пока вы не нажмёте «Выполнить». Поэтому режим безопасно использовать просто как инструмент анализа различий — например, чтобы понять, какие доработки внесены в типовую конфигурацию по сравнению с поставкой вендора.
Сравнение конфигурации с конфигурацией базы данных и поставщика
Помимо сравнения с файлом, конфигуратор умеет сравнивать основную конфигурацию с конфигурацией базы данных (меню Конфигурация → Конфигурация базы данных → Сравнить, объединить). Это нужно, чтобы увидеть изменения, которые внесены в конфигурацию, но ещё не применены к базе данных, — типичная ситуация при доработке, когда разработчик изменил объекты, но не выполнил обновление.
Третий вариант — сравнение с конфигурацией поставщика. Если база на поддержке, платформа хранит эталонную конфигурацию поставщика, и сравнение с ней показывает все доработки, внесённые в типовое решение. Это стандартный приём перед обновлением типовой конфигурации: сначала смотрят, что изменено относительно поставки, чтобы оценить объём переноса доработок.
Сравнение данных двух элементов программно
Когда нужно сравнить содержимое двух элементов справочника или двух документов, штатного интерфейса недостаточно — применяется код на встроенном языке. Базовый подход — обход всех реквизитов объекта через метаданные и попарное сравнение значений. Это универсальный метод, работающий для любых типов объектов без привязки к конкретной конфигурации.
Типовой фрагмент кода для сравнения двух ссылочных объектов выглядит так: получаем объекты по ссылкам, перебираем реквизиты из Метаданные, сравниваем значения и собираем список расхождений. Отдельно обходятся табличные части — их сравнивают по количеству строк и по значениям в каждой строке.
Функция СравнитьОбъекты(Ссылка1, Ссылка2)
Расхождения = Новый Массив;
Объект1 = Ссылка1.ПолучитьОбъект();
Объект2 = Ссылка2.ПолучитьОбъект();
Мета = Ссылка1.Метаданные();
Для Каждого Реквизит Из Мета.Реквизиты Цикл
Если Объект1[Реквизит.Имя] <> Объект2[Реквизит.Имя] Тогда
Расхождения.Добавить(Реквизит.Имя);
КонецЕсли;
КонецЦикла;
Возврат Расхождения;
КонецФункции
Для сравнения таблиц значений используется другой подход: таблицы сортируются или сворачиваются по ключевым колонкам, затем построчно сопоставляются. Если таблицы большие, эффективнее выгрузить их в запрос и сравнить через полное соединение — это быстрее, чем цикл по строкам.
Если Объект1[Реквизит.Имя] <> Объект2[Реквизит.Имя] Тогда Расхождения.Добавить(Реквизит.Имя); КонецЕсли;Сравнение через обработки и типовые механизмы
Если писать код не хочется, задачу решают готовые внешние обработки. Наиболее известная категория — обработки сравнения данных, которые берут два объекта (или два списка) и выводят таблицу расхождений по реквизитам. Подобные инструменты входят в состав «Инструментов разработчика» (ИР) и других открытых библиотек, а также встречаются в виде отдельных .epf-файлов.
В типовых конфигурациях есть и встроенные сценарии сравнения, привязанные к обмену данными. Например, при загрузке данных через универсальный формат или при сопоставлении номенклатуры система показывает расхождения между загружаемыми и существующими данными. В «1С:Бухгалтерии» и «1С:Управление торговлей» механизмы сопоставления работают при обмене с другими базами и при загрузке прайсов.
Ещё один практический приём — сравнение через отчёты. Если нужно сравнить остатки или обороты двух баз, формируют одинаковый отчёт в каждой, выгружают в табличный документ и сравнивают файлы. Для табличных документов платформа умеет сравнение файлов: в конфигураторе через Файл → Сравнить файлы можно сопоставить два mxl или два текстовых файла с построчной подсветкой различий.
Сравнение способов
Подходит для анализа различий метаданных и модулей. Ограничение: не сравнивает данные, только структуру и код.
Подходит для точного сравнения реквизитов и табличных частей любых объектов. Ограничение: требует навыков разработки и доступа к коду.
Подходят для разового сравнения данных без доработки конфигурации. Ограничение: нужно проверять совместимость с версией платформы и режимом безопасности.
Подходит для сверки данных между двумя базами. Ограничение: сравнивается текстовое представление, а не сами объекты, поэтому возможны ложные различия из-за порядка строк.
Риски и ограничения при сравнении и объединении
Главный риск связан не со сравнением, а с объединением: кнопка «Выполнить» в окне сравнения конфигураций переносит изменения в рабочую конфигурацию. Если случайно оставить лишние флажки, можно затереть доработки или получить конфликт с динамическим обновлением. Поэтому перед объединением всегда делается выгрузка .dt, а само обновление желательно выполнять в монопольном режиме в нерабочее время.
Второй риск — ложные выводы при сравнении данных. Различие значений не всегда означает ошибку: объекты могут отличаться служебными реквизитами (дата изменения, номер версии данных), которые меняются автоматически. При программном сравнении такие поля стоит исключать из проверки, иначе отчёт о расхождениях будет бесполезен.
Третье ограничение — производительность. Сравнение больших таблиц значений в цикле или полное сравнение конфигураций может занимать заметное время и потреблять память. Для массовых сверок данных предпочтительнее запросы и сверка на стороне СУБД, а не построчный обход в коде.
Как проверить результат сравнения
После сравнения конфигураций проверьте, что список различий соответствует ожиданиям: если вы меняли один модуль, а различия показаны в десятках объектов, значит, конфигурации разошлись сильнее, чем предполагалось, либо сравниваются разные релизы. Полезно сверить номера версий конфигураций в свойствах корневого объекта.
После программного сравнения данных убедитесь, что метод не даёт ложных срабатываний: прогоните его на двух заведомо одинаковых объектах (например, скопируйте элемент и сравните копию с собой до изменений). Результат должен быть пустым списком расхождений. Если расхождения есть — в коде не учтены служебные поля или сравниваются значения разных типов.
Как проверить результат
Список расхождений пуст
Появляются различия — метод сравнивает служебные поля или типы значений
Изменены только те объекты, которые правили
Различия в незнакомых объектах — возможно, сравниваются разные релизы
Обновление конфигурации базы данных прошло без ошибок, база открывается
Ошибки реструктуризации или неработающие доработки — восстановите копию и разберитесь в причинах
Частые вопросы
Можно ли сравнить две базы 1С целиком?
Полного штатного сравнения двух баз по данным нет. Сравнивают конфигурации через конфигуратор, а данные — выборочно: одинаковыми отчётами в обеих базах с последующим сравнением выгрузок, либо специализированными обработками сверки, которые сопоставляют объекты по ссылкам или ключевым полям.
Как сравнить два документа в 1С без программирования?
Откройте оба документа и визуально сверьте реквизиты — это приемлемо для разовой проверки. Для регулярной сверки используйте внешние обработки сравнения объектов (например, из состава Инструментов разработчика) или настройте вывод обоих документов в печатные формы и сравните полученные файлы.
Чем отличается сравнение с конфигурацией базы данных от сравнения с конфигурацией поставщика?
Сравнение с конфигурацией базы данных показывает изменения, внесённые разработчиком, но ещё не применённые к базе (не выполнено обновление). Сравнение с конфигурацией поставщика показывает все доработки относительно типовой поставки вендора и используется при подготовке к обновлению типового решения.
Почему при сравнении файлов выгрузок всё показывается разным?
Файлы .dt — бинарный формат, они не предназначены для текстового сравнения. Даже XML-выгрузки могут отличаться порядком следования объектов и служебными атрибутами. Для сравнения данных выгружайте конкретные таблицы в упорядоченном виде или используйте отчёты с одинаковыми настройками и отбором.
Безопасно ли открывать режим сравнения конфигураций в рабочей базе?
Да, само построение дерева различий ничего не изменяет. Опасна только кнопка «Выполнить», запускающая объединение. Тем не менее работать в конфигураторе рабочей базы стоит аккуратно: не снимайте объекты с замка и не сохраняйте конфигурацию без необходимости.
Как сравнить модули двух конфигураций построчно?
В окне сравнения конфигураций выделите нужный объект и откройте детальное сравнение — для модулей платформа покажет построчные различия с подсветкой добавленных, удалённых и изменённых строк. Альтернатива — выгрузить тексты модулей в файлы и сравнить их через «Файл → Сравнить файлы» или любой внешний инструмент сравнения текстов.
Что важно запомнить
Сравнение конфигураций выполняется штатно в конфигураторе, сравнение данных — программно или внешними обработками. Само окно сравнения безопасно, изменения применяет только кнопка «Выполнить». Перед объединением всегда делайте выгрузку .dt, а метод сравнения данных проверяйте на заведомо одинаковых объектах.