Сравнение объектов между разными базами 1С:Предприятие — типичная задача при миграции данных, синхронизации систем или аудите. Чаще всего требуется выявить расхождения в справочниках (номенклатура, контрагенты), документах (реализации, поступления) или регистрах (остатки, движения). Без правильного инструментария процесс превращается в рутинную проверку каждого элемента, чреватую ошибками и потерянным временем.
В этой статье разберём 5 рабочих методов сравнения — от встроенных механизмов платформы до сторонних решений, включая нюансы для 1С:Бухгалтерии 3.0, 1С:УТ 11 и 1С:ERP 2. Особое внимание уделим сравнению данных с учётом иерархии справочников и версионирования объектов, что критично для корректной синхронизации.
Если вы работаете с распределёнными базами или ведёте параллельный учёт в разных системах, умение быстро выявлять расхождения сэкономит часы на сверку. А для разработчиков приведём примеры кода на 1С:Предприятие 8.3, которые автоматизируют процесс.
1. Встроенные инструменты платформы 1С
Платформа 1С:Предприятие 8.3 предлагает несколько базовых механизмов для сравнения данных без установки дополнительных модулей. Их достаточно для разовых проверок или небольших объёмов данных.
Самый простой способ — использование отчёта "Сравнение данных", доступного в большинстве типовых конфигураций. Например, в 1С:Бухгалтерии 3.0 он находится в разделе Отчёты → Стандартные → Сравнение данных. Инструмент позволяет:
- 📋 Выбрать два источника данных (текущую базу и внешнюю через
Файл → Открыть) - 🔍 Сравнивать справочники, документы и регистры по ключевым реквизитам
- 📊 Формировать отчёт с выделением расхождений цветом
Ограничение метода — сравнение только однотипных объектов (например, справочник "Номенклатура" с таким же справочником). Для сложных структур (например, документы с табличными частями) потребуется предварительная настройка правил сравнения.
Если отчёт "Сравнение данных" отсутствует в вашей конфигурации, проверьте наличие подсистемы "СравнениеДанных" в дереве метаданных. При необходимости подключите её через Конфигуратор → Подсистемы
2. Сравнение через выгрузку/загрузку в XML
Универсальный метод, работающий во всех версиях платформы — экспорт данных в XML с последующим сравнением файлов. Подходит для объектов, которые поддерживают выгрузку (справочники, документы, планы видов характеристик).
Алгоритм действий:
- В исходной базе выполните выгрузку нужных объектов через
Файл → Сохранить как...(форматXML). - Повторите шаг для целевой базы.
- Сравните полученные файлы с помощью специализированных инструментов (например, Beyond Compare, WinMerge или онлайн-сервисов вроде Diffchecker).
Для автоматизации процесса можно использовать следующий код на встроенном языке:
// Выгрузка справочника "Номенклатура" в XML
Процедура ВыгрузитьСправочникВXML(КаталогВыгрузки)
Объект = Справочники.Номенклатура;
ИмяФайла = КаталогВыгрузки + "Номенклатура.xml";
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ИмяФайла);
ЗаписьXML.ЗаписатьОбъект(Объект);
ЗаписьXML.Закрыть();
КонецПроцедуры
Преимущество метода — полный контроль над структурой выгружаемых данных. Например, можно исключить служебные реквизиты или добавить фильтрацию по дате. Однако для больших баз процесс может занять значительное время.
В Windows можно использовать встроенную утилиту Как сравнить XML-файлы без сторонних программ?
fc (File Compare). Откройте командную строку и выполните:fc /L "путь\к\файлу1.xml" "путь\к\файлу2.xml" > результат.txt
Ключ /L сравнивает файлы как текстовые, а результат сохраняется в результат.txt.
3. Использование обработки "ВыгрузкаЗагрузкаДанныхXML"
Типовая обработка ВыгрузкаЗагрузкаДанныхXML.epf (поставляется с платформой) позволяет гибко настраивать правила сравнения. Она поддерживает:
- 🔄 Выборочную выгрузку объектов по типам (справочники, документы, регистры)
- 📌 Сохранение связей между объектами (например, документы и их табличные части)
- 🔧 Настройку правил преобразования данных при загрузке
Чтобы сравнить базы с её помощью:
- Выгрузите данные из первой базы в XML-файл через обработку.
- Загрузите этот файл во вторую базу в режиме сравнения (опция "Сравнить данные перед загрузкой").
- Платформа сформирует отчёт с расхождениями, где можно будет принять решение о синхронизации.
Обратите внимание: обработка не сравнивает регистры накопления и бухгалтерии на уровне движений — только остатки. Для детального анализа движений потребуются другие инструменты.
Выбрать каталог для временных файлов|Проверить права доступа к папке|Создать резервную копию баз|Определить список сравниваемых объектов|Настроить фильтры (период, организации и т.д.)
-->
4. Сравнение через запросы и временные таблицы
Для опытных пользователей и разработчиков самый мощный инструмент — язык запросов 1С. Он позволяет сравнивать данные на уровне SQL-подобных конструкций, включая агрегацию и joins.
Пример запроса для сравнения остатков номенклатуры в двух базах (предполагается, что базы подключены через COM-соединение или OLEDB):
ВЫБРАТЬ
Товары1.Ссылка КАК Ссылка,
Товары1.Количество КАК КоличествоБаза1,
Товары2.Количество КАК КоличествоБаза2,
Товары1.Количество - Товары2.Количество КАК Разница
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКонтроля,) КАК Товары1
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКонтроля,) КАК Товары2
ПО Товары1.Номенклатура = Товары2.Номенклатура И Товары1.Склад = Товары2.Склад
ГДЕ
Товары1.Количество <> Товары2.Количество ИЛИ Товары2.Ссылка Есть NULL
Для автоматизации сравнения можно создать внешнюю обработку, которая:
- Подключается к обеим базам.
- Выполняет одинаковые запросы в каждой.
- Сравнивает результаты и выводит отчёт.
Такой подход требует знаний языка запросов 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С часто ограничиваются сравнением остатков на дату, что недостаточно для аудита.
Для детального анализа движений используйте следующий подход:
- Экспортируйте движения регистра в
Табличный документчерез запрос:
ВЫБРАТЬ
ДвижениеРегистра.Период КАК Дата,
ДвижениеРегистра.Регистратор КАК Документ,
ДвижениеРегистра.Номенклатура КАК Номенклатура,
ДвижениеРегистра.Количество КАК Количество,
ДвижениеРегистра.Склад КАК Склад
ИЗ
РегистрНакопления.ТоварыНаСкладах.Движения(&НачалоПериода, &КонецПериода,) КАК ДвижениеРегистра
УПОРЯДОЧИТЬ ПО
Дата, Номенклатура
- Сравните полученные таблицы в Excel с помощью функции
ВПРили инструментаPower Query. - Обратите внимание на документы-регистраторы: расхождения могут быть вызваны разными датами проведения или статусами (например, один документ проведён, а другой — нет).
Для бухгалтерских регистров (РегистрБухгалтерии) добавьте в запрос проверку корреспонденций и сумм по дебету/кредиту. Например:
ВЫБРАТЬ
Движения.Период КАК Дата,
Движения.Регистратор КАК Документ,
Движения.СчетДт КАК СчетДт,
Движения.СчетКт КАК СчетКт,
Движения.Сумма КАК Сумма
ИЗ
РегистрБухгалтерии.ХозРасчетный.Движения(&НачалоПериода, &КонецПериода,) КАК Движения
Как сравнить обороты по счёту между базами?
Используйте запрос с группировкой по счёту и периоду:
ВЫБРАТЬ
Движения.Счет КАК Счет,
Движения.Период КАК Период,
СУММА(Движения.Сумма) КАК Оборот
ИЗ
РегистрБухгалтерии.ХозРасчетный.Движения(&НачалоПериода, &КонецПериода,) КАК Движения
СГРУППИРОВАТЬ ПО
Движения.Счет,
Движения.Период
Сравните результаты с аналогичным запросом во второй базе.
Типичные ошибки и как их избежать
При сравнении баз 1С пользователи часто сталкиваются с ложными расхождениями, вызванными не учтенными нюансами. Вот наиболее распространённые случаи:
- ⏳ Разные периоды актуальности: одна база обновлена на текущую дату, а другая — на конец прошлого месяца. Всегда синхронизируйте
ДатаАктуальностив запросах. - 🔄 Неучтённые обмены данными: если базы участвуют в распределённой информационной базе (РИБ), расхождения могут быть вызваны неполной синхронизацией.
- 🔑 Разные права доступа: пользователь в одной базе видит все документы, а в другой — только свои. Сравнивайте данные под одной ролью (например, "Полные права").
- 📝 Служебные реквизиты: поля вроде
ЭтоГруппа,ПометкаУдаленияилиВладелецмогут отличаться, но не влияют на бизнес-логику.
Чтобы минимизировать ошибки:
- Перед сравнением синхронизируйте справочники (например, "Организации", "Склады"), так как расхождения в них приведут к каскадным ошибкам.
- Используйте одинаковые настройки округления в обеих базах (проверьте в
Администрирование → Настройки программы). - Для регистров накопления сравнивайте данные на одну и ту же дату и время, так как движения могут фиксироваться с точностью до секунды.
Если расхождения найдены в регистрах бухгалтерии, сначала проверьте проведение документов. Часто причина — в непроведённых или проведенных с ошибками операциях.
⚠️ Внимание
При сравнении баз с разными релизами конфигурации (например, 1С:Бухгалтерия 3.0.80.74 и 3.0.82.47) расхождения в метаданных могут привести к ошибкам при загрузке данных. Перед сравнением обновляйте конфигурации до одинаковой версии или используйте инструменты вроде 1С:Конвертация данных, которые поддерживают кросс-версионные правила обмена.
FAQ: Ответы на частые вопросы
Можно ли сравнить базы 1С разных версий (например, 8.2 и 8.3)?
Да, но с оговорками. Платформа 1С:Предприятие 8.2 и 8.3 имеют разный формат хранения данных, поэтому прямое сравнение через XML или запросы может не сработать. Рекомендуемые способы:
- Использовать 1С:Конвертация данных с настройкой правил преобразования.
- Выгрузить данные в универсальный формат (например,
CSV) и сравнить внешними инструментами. - Для баз на SQL Server сравнить таблицы напрямую через SQL Management Studio.
Учтите, что некоторые объекты (например, динамические списки или управляемые формы) в 8.2 и 8.3 имеют принципиальные различия.
Как сравнить базы, если одна из них файловая, а другая — клиент-серверная?
Формат хранения данных не влияет на логику сравнения, но есть нюансы производительности:
- Для файловых баз (
.1CD) используйте локальные инструменты (например, обработкуВыгрузкаЗагрузкаДанныхXML), так как сетевой доступ к файловой базе может быть медленным. - Для клиент-серверных баз (SQL Server, PostgreSQL) можно сравнивать данные напрямую через запросы к СУБД, что быстрее для больших объёмов.
Если обе базы подключены к одной СУБД, сравните их на уровне SQL-таблиц (например, _1SJOURN для документов или _1SCAT для справочников).
Что делать, если при сравнении находит расхождения в справочниках, которых нет?
Ложные расхождения обычно вызваны:
- Разными настройками отображения: например, в одной базе включено отображение помеченных на удаление объектов, а в другой — нет. Проверьте настройки в
Сервис → Параметры → Отображение. - Служебными реквизитами: поля вроде
Предыдущий(для иерархических справочников) илиРодительмогут отличаться, но не влияют на бизнес-логику. Исключите их из сравнения. - Кэшированием данных: обновите представление справочника (
F5) или переоткройте базу.
Чтобы точно определить причину, экспортируйте проблемные объекты в XML и сравните файлы построчно.
Как автоматизировать сравнение баз по расписанию?
Для регулярного сравнения настройте:
- Регламентное задание в 1С (раздел
Администрирование → Регламентные задания), которое будет запускать обработку сравнения и отправлять отчёт на почту. - Внешний скрипт на PowerShell или Python, который:
- Подключается к базам через COM-соединение.
- Выполняет сравнение (например, через
ВыгрузкаЗагрузкаДанныхXML). - Сохраняет лог расхождений в файл или базу данных.
Пример кода для автоматического запуска обработки из командной строки:
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С в
ExcelчерезФайл → Сохранить как...или обработкуВыгрузкаВExcel. - Используйте функции
ВПР,СЧЁТЕСЛИили Power Query для сравнения с вашим файлом. - Для автоматизации создайте макрос VBA, который будет подключаться к 1С через OLEDB и тянуть актуальные данные.
Пример строки подключения для OLEDB:
Provider=V83.OleDB.8.3;Data Source="Сервер\База";User ID=Пользователь;Password=пароль;
Обратите внимание: при таком сравнении теряется информация о ссылках между объектами (например, связь документа с контрагентом).