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

В этой статье разберём 5 рабочих методов сравнения — от встроенных механизмов платформы до сторонних решений, включая нюансы для 1С:Бухгалтерии 3.0, 1С:УТ 11 и 1С:ERP 2. Особое внимание уделим сравнению данных с учётом иерархии справочников и версионирования объектов, что критично для корректной синхронизации.

Если вы работаете с распределёнными базами или ведёте параллельный учёт в разных системах, умение быстро выявлять расхождения сэкономит часы на сверку. А для разработчиков приведём примеры кода на 1С:Предприятие 8.3, которые автоматизируют процесс.

📊 С какой целью вы сравниваете базы 1С?
Миграция данных
Аудит и контроль
Синхронизация распределённых систем
Поиск ошибок после обновления
Другое

1. Встроенные инструменты платформы 1С

Платформа 1С:Предприятие 8.3 предлагает несколько базовых механизмов для сравнения данных без установки дополнительных модулей. Их достаточно для разовых проверок или небольших объёмов данных.

Самый простой способ — использование отчёта "Сравнение данных", доступного в большинстве типовых конфигураций. Например, в 1С:Бухгалтерии 3.0 он находится в разделе Отчёты → Стандартные → Сравнение данных. Инструмент позволяет:

  • 📋 Выбрать два источника данных (текущую базу и внешнюю через Файл → Открыть)
  • 🔍 Сравнивать справочники, документы и регистры по ключевым реквизитам
  • 📊 Формировать отчёт с выделением расхождений цветом

Ограничение метода — сравнение только однотипных объектов (например, справочник "Номенклатура" с таким же справочником). Для сложных структур (например, документы с табличными частями) потребуется предварительная настройка правил сравнения.

💡

Если отчёт "Сравнение данных" отсутствует в вашей конфигурации, проверьте наличие подсистемы "СравнениеДанных" в дереве метаданных. При необходимости подключите её через Конфигуратор → Подсистемы

2. Сравнение через выгрузку/загрузку в XML

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

Алгоритм действий:

  1. В исходной базе выполните выгрузку нужных объектов через Файл → Сохранить как... (формат XML).
  2. Повторите шаг для целевой базы.
  3. Сравните полученные файлы с помощью специализированных инструментов (например, Beyond Compare, WinMerge или онлайн-сервисов вроде Diffchecker).

Для автоматизации процесса можно использовать следующий код на встроенном языке:

// Выгрузка справочника "Номенклатура" в XML

Процедура ВыгрузитьСправочникВXML(КаталогВыгрузки)

Объект = Справочники.Номенклатура;

ИмяФайла = КаталогВыгрузки + "Номенклатура.xml";

ЗаписьXML = Новый ЗаписьXML;

ЗаписьXML.ОткрытьФайл(ИмяФайла);

ЗаписьXML.ЗаписатьОбъект(Объект);

ЗаписьXML.Закрыть();

КонецПроцедуры

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

Как сравнить XML-файлы без сторонних программ?

В Windows можно использовать встроенную утилиту fc (File Compare). Откройте командную строку и выполните:

fc /L "путь\к\файлу1.xml" "путь\к\файлу2.xml" > результат.txt

Ключ /L сравнивает файлы как текстовые, а результат сохраняется в результат.txt.

3. Использование обработки "ВыгрузкаЗагрузкаДанныхXML"

Типовая обработка ВыгрузкаЗагрузкаДанныхXML.epf (поставляется с платформой) позволяет гибко настраивать правила сравнения. Она поддерживает:

  • 🔄 Выборочную выгрузку объектов по типам (справочники, документы, регистры)
  • 📌 Сохранение связей между объектами (например, документы и их табличные части)
  • 🔧 Настройку правил преобразования данных при загрузке

Чтобы сравнить базы с её помощью:

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

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

Выбрать каталог для временных файлов|Проверить права доступа к папке|Создать резервную копию баз|Определить список сравниваемых объектов|Настроить фильтры (период, организации и т.д.)

-->

4. Сравнение через запросы и временные таблицы

Для опытных пользователей и разработчиков самый мощный инструмент — язык запросов 1С. Он позволяет сравнивать данные на уровне SQL-подобных конструкций, включая агрегацию и joins.

Пример запроса для сравнения остатков номенклатуры в двух базах (предполагается, что базы подключены через COM-соединение или OLEDB):

ВЫБРАТЬ

Товары1.Ссылка КАК Ссылка,

Товары1.Количество КАК КоличествоБаза1,

Товары2.Количество КАК КоличествоБаза2,

Товары1.Количество - Товары2.Количество КАК Разница

ИЗ

РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКонтроля,) КАК Товары1

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКонтроля,) КАК Товары2

ПО Товары1.Номенклатура = Товары2.Номенклатура И Товары1.Склад = Товары2.Склад

ГДЕ

Товары1.Количество <> Товары2.Количество ИЛИ Товары2.Ссылка Есть NULL

Для автоматизации сравнения можно создать внешнюю обработку, которая:

  1. Подключается к обеим базам.
  2. Выполняет одинаковые запросы в каждой.
  3. Сравнивает результаты и выводит отчёт.

Такой подход требует знаний языка запросов 1С, но даёт максимальную гибкость. Например, можно сравнивать не только значения, но и историю изменений (кто и когда редактировал объект).

💡

Запросы 1С позволяют сравнивать данные даже в базах с разной структурой метаданных, если совпадают ключевые реквизиты (например, код номенклатуры или ИНН контрагента).

5. Сторонние решения для сравнения баз

Для регулярного сравнения или работы с большими объёмами данных целесообразно использовать специализированные инструменты. Ниже — обзор популярных решений с их особенностями:

Инструмент Тип лицензии Поддерживаемые объекты Особенности
1С:Конвертация данных 3.0 Платная (входит в ИТС) Справочники, документы, регистры, планы обмена Встроенные правила сравнения, поддержка распределённых баз
EDT (1С:Enterprise Development Tools) Платная Все объекты метаданных Сравнение на уровне конфигурации и данных, интеграция с Git
Vanessa-ADD Условно-бесплатная Произвольные объекты Автотесты для сравнения, генерация отчётов в Excel
DBComparer Бесплатная Таблицы SQL (для файловых баз) Сравнение на уровне физических таблиц, без учёта логики 1С

Например, 1С:Конвертация данных 3.0 позволяет настроить правила соответствия объектов между базами, если их структуры отличаются. Это актуально при миграции с 1С:УПП на 1С:ERP, где названия справочников или реквизитов могут различаться.

Vanessa-ADD подходит для автоматизированного тестирования: можно создать сценарий, который будет ежедневно сравнивать критические данные (например, остатки по складам) и отправлять отчёт на почту при расхождениях.

💡

Перед использованием сторонних инструментов проверьте их совместимость с вашей версией платформы. Например, EDT требует 1С:Предприятие 8.3.15+ и отдельной установки.

Сравнение регистров накопления и бухгалтерии

Особенный случай — сравнение движений по регистрам, так как они хранят не только текущие остатки, но и историю изменений. Встроенные инструменты 1С часто ограничиваются сравнением остатков на дату, что недостаточно для аудита.

Для детального анализа движений используйте следующий подход:

  1. Экспортируйте движения регистра в Табличный документ через запрос:
ВЫБРАТЬ

ДвижениеРегистра.Период КАК Дата,

ДвижениеРегистра.Регистратор КАК Документ,

ДвижениеРегистра.Номенклатура КАК Номенклатура,

ДвижениеРегистра.Количество КАК Количество,

ДвижениеРегистра.Склад КАК Склад

ИЗ

РегистрНакопления.ТоварыНаСкладах.Движения(&НачалоПериода, &КонецПериода,) КАК ДвижениеРегистра

УПОРЯДОЧИТЬ ПО

Дата, Номенклатура

  1. Сравните полученные таблицы в Excel с помощью функции ВПР или инструмента Power Query.
  2. Обратите внимание на документы-регистраторы: расхождения могут быть вызваны разными датами проведения или статусами (например, один документ проведён, а другой — нет).

Для бухгалтерских регистров (РегистрБухгалтерии) добавьте в запрос проверку корреспонденций и сумм по дебету/кредиту. Например:

ВЫБРАТЬ

Движения.Период КАК Дата,

Движения.Регистратор КАК Документ,

Движения.СчетДт КАК СчетДт,

Движения.СчетКт КАК СчетКт,

Движения.Сумма КАК Сумма

ИЗ

РегистрБухгалтерии.ХозРасчетный.Движения(&НачалоПериода, &КонецПериода,) КАК Движения

Как сравнить обороты по счёту между базами?

Используйте запрос с группировкой по счёту и периоду:

ВЫБРАТЬ

Движения.Счет КАК Счет,

Движения.Период КАК Период,

СУММА(Движения.Сумма) КАК Оборот

ИЗ

РегистрБухгалтерии.ХозРасчетный.Движения(&НачалоПериода, &КонецПериода,) КАК Движения

СГРУППИРОВАТЬ ПО

Движения.Счет,

Движения.Период

Сравните результаты с аналогичным запросом во второй базе.

Типичные ошибки и как их избежать

При сравнении баз 1С пользователи часто сталкиваются с ложными расхождениями, вызванными не учтенными нюансами. Вот наиболее распространённые случаи:

  • Разные периоды актуальности: одна база обновлена на текущую дату, а другая — на конец прошлого месяца. Всегда синхронизируйте ДатаАктуальности в запросах.
  • 🔄 Неучтённые обмены данными: если базы участвуют в распределённой информационной базе (РИБ), расхождения могут быть вызваны неполной синхронизацией.
  • 🔑 Разные права доступа: пользователь в одной базе видит все документы, а в другой — только свои. Сравнивайте данные под одной ролью (например, "Полные права").
  • 📝 Служебные реквизиты: поля вроде ЭтоГруппа, ПометкаУдаления или Владелец могут отличаться, но не влияют на бизнес-логику.

Чтобы минимизировать ошибки:

  1. Перед сравнением синхронизируйте справочники (например, "Организации", "Склады"), так как расхождения в них приведут к каскадным ошибкам.
  2. Используйте одинаковые настройки округления в обеих базах (проверьте в Администрирование → Настройки программы).
  3. Для регистров накопления сравнивайте данные на одну и ту же дату и время, так как движения могут фиксироваться с точностью до секунды.
💡

Если расхождения найдены в регистрах бухгалтерии, сначала проверьте проведение документов. Часто причина — в непроведённых или проведенных с ошибками операциях.

⚠️ Внимание

При сравнении баз с разными релизами конфигурации (например, 1С:Бухгалтерия 3.0.80.74 и 3.0.82.47) расхождения в метаданных могут привести к ошибкам при загрузке данных. Перед сравнением обновляйте конфигурации до одинаковой версии или используйте инструменты вроде 1С:Конвертация данных, которые поддерживают кросс-версионные правила обмена.

FAQ: Ответы на частые вопросы

Можно ли сравнить базы 1С разных версий (например, 8.2 и 8.3)?

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

  1. Использовать 1С:Конвертация данных с настройкой правил преобразования.
  2. Выгрузить данные в универсальный формат (например, CSV) и сравнить внешними инструментами.
  3. Для баз на SQL Server сравнить таблицы напрямую через SQL Management Studio.

Учтите, что некоторые объекты (например, динамические списки или управляемые формы) в 8.2 и 8.3 имеют принципиальные различия.

Как сравнить базы, если одна из них файловая, а другая — клиент-серверная?

Формат хранения данных не влияет на логику сравнения, но есть нюансы производительности:

  • Для файловых баз (.1CD) используйте локальные инструменты (например, обработку ВыгрузкаЗагрузкаДанныхXML), так как сетевой доступ к файловой базе может быть медленным.
  • Для клиент-серверных баз (SQL Server, PostgreSQL) можно сравнивать данные напрямую через запросы к СУБД, что быстрее для больших объёмов.

Если обе базы подключены к одной СУБД, сравните их на уровне SQL-таблиц (например, _1SJOURN для документов или _1SCAT для справочников).

Что делать, если при сравнении находит расхождения в справочниках, которых нет?

Ложные расхождения обычно вызваны:

  1. Разными настройками отображения: например, в одной базе включено отображение помеченных на удаление объектов, а в другой — нет. Проверьте настройки в Сервис → Параметры → Отображение.
  2. Служебными реквизитами: поля вроде Предыдущий (для иерархических справочников) или Родитель могут отличаться, но не влияют на бизнес-логику. Исключите их из сравнения.
  3. Кэшированием данных: обновите представление справочника (F5) или переоткройте базу.

Чтобы точно определить причину, экспортируйте проблемные объекты в XML и сравните файлы построчно.

Как автоматизировать сравнение баз по расписанию?

Для регулярного сравнения настройте:

  1. Регламентное задание в 1С (раздел Администрирование → Регламентные задания), которое будет запускать обработку сравнения и отправлять отчёт на почту.
  2. Внешний скрипт на PowerShell или Python, который:
    • Подключается к базам через COM-соединение.
    • Выполняет сравнение (например, через ВыгрузкаЗагрузкаДанныхXML).
    • Сохраняет лог расхождений в файл или базу данных.
  • Инструменты мониторинга вроде Zabbix или Grafana, если нужно визуализировать результаты сравнения на дашборде.
  • Пример кода для автоматического запуска обработки из командной строки:

    start "" "C:\Program Files\1cv8\8.3.20.1500\bin\1cv8.exe" DESIGNER /S"Сервер\База1" /N"Администратор" /P"пароль" /Execute"C:\Сравнение.epf" /Out"C:\Логи\сравнение_$(date +%Y%m%d).log"
    Можно ли сравнить базы 1С с базой в Excel?

    Да, но для этого потребуется промежуточный этап:

    1. Выгрузите данные из 1С в Excel через Файл → Сохранить как... или обработку ВыгрузкаВExcel.
    2. Используйте функции ВПР, СЧЁТЕСЛИ или Power Query для сравнения с вашим файлом.
    3. Для автоматизации создайте макрос VBA, который будет подключаться к 1С через OLEDB и тянуть актуальные данные.

    Пример строки подключения для OLEDB:

    Provider=V83.OleDB.8.3;Data Source="Сервер\База";User ID=Пользователь;Password=пароль;

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