Как сравнить данные между различными базами 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Зачастую при сопровождении нескольких информационных баз 1С возникает необходимость выявить расхождения в данных. Сценарии могут быть различными: от сверки идентичных баз в узлах распределенной информационной базы (РИБ) с совпадающими уникальными идентификаторами (UID) до сравнения данных в базах с разной конфигурацией и отличающимися UID объектов.

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

Использование «1С:Конвертация данных» и адаптация логики записи

Один из наиболее гибких способов сверки баз с разной или схожей структурой — применение правил обмена из «1С:Конвертация данных» (КД). Вместо стандартного переноса объектов с их перезаписью в базе-приемнике мы можем переопределить обработку загрузки для выявления разницы (создания дифф-отчета).

Проанализируем декомпозицию такой задачи:

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

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


Если Объект.ЭтоНовый Тогда
    ЗаписатьВДифф(Объект, "Нет в приемнике");
Иначе
    РезультатСравнения = Сравнить(Объект, Объект.Ссылка.ПолучитьОбъект());
    ЗаписатьВДифф(Объект, РезультатСравнения);
КонецЕсли;

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

Сравнение через XML-сериализацию и сравнение файлов

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

Метод основан на последовательном вызове встроенной функции ЗаписатьXML() для объекта из первой базы и его аналога из второй базы. Полученные XML-файлы затем сравниваются платформенным механизмом СравнениеФайлов.

Посмотрим на общую схему применения данного метода:

  1. Сериализуем первый объект в XML-файл с помощью глобального метода ЗаписатьXML().
  2. Аналогично сериализуем сопоставляемый объект из второй базы во второй XML-файл.
  3. Используем объект СравнениеФайлов для автоматического поиска различий в полученных файлах.

Разберем важный нюанс: при сплошной сериализации больших объемов данных в XML или JSON выгрузка всей базы целиком может вызывать переполнение оперативной памяти (Out of Memory). Поэтому обработку и сериализацию данных необходимо проводить порциями (пакетами).

Сверка через COM-соединение и Web/HTTP-сервисы

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

  1. COM-соединение: вызов внешнего соединения через `comcntr.dll` позволяет из одной базы выполнять запросы и обращаться к метаданным другой базы. Однако стоит учитывать ограничения: технология функционирует только в средах под управлением ОС Windows и требует одинаковой разрядности (32-bit или 64-bit) клиента и сервера.
  2. HTTP-сервисы и OData: если сервера баз 1С работают на базе Linux или в разных изолированных сетях, предпочтительно использовать REST API (OData) или собственные HTTP-сервисы. Данные передаются в формате JSON, что полностью исключает привязку к Windows-инфраструктуре.

Алгоритмы поиска расхождений: контрольные суммы и бизнес-ключи

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

Визуальное сравнение отчетов и табличных документов

Для быстрой пользовательской сверки (например, при проверке оборотно-сальдовых ведомостей или реестров документов из двух баз) можно сформировать идентичные отчеты в обеих системах и сохранить их в формате табличных документов .mxl. В платформе «1С:Предприятие» встроен инструмент сравнения файлов, который визуально подсвечивает отличающиеся ячейки табличных документов, позволяя быстро найти расхождения без написания сложного кода.

← На главную