Зачастую при сопровождении нескольких информационных баз 1С возникает необходимость выявить расхождения в данных. Сценарии могут быть различными: от сверки идентичных баз в узлах распределенной информационной базы (РИБ) с совпадающими уникальными идентификаторами (UID) до сравнения данных в базах с разной конфигурацией и отличающимися UID объектов.
Разберем основные практические подходы и алгоритмы, которые позволяют реализовать сверку справочников, документов и движений по регистрам.
Один из наиболее гибких способов сверки баз с разной или схожей структурой — применение правил обмена из «1С:Конвертация данных» (КД). Вместо стандартного переноса объектов с их перезаписью в базе-приемнике мы можем переопределить обработку загрузки для выявления разницы (создания дифф-отчета).
Проанализируем декомпозицию такой задачи:
Рассмотрим пример кода, который можно вставить в алгоритм обработки загрузки объекта вместо стандартного вызова Объект.Записать():
Если Объект.ЭтоНовый Тогда
ЗаписатьВДифф(Объект, "Нет в приемнике");
Иначе
РезультатСравнения = Сравнить(Объект, Объект.Ссылка.ПолучитьОбъект());
ЗаписатьВДифф(Объект, РезультатСравнения);
КонецЕсли;
При таком подходе мы не меняем данные в целевой базе, а фиксируем статус: отсутствует ли объект в приемнике или в каких конкретно реквизитах найдены расхождения.
Если требуется быстро проверить соответствие двух объектов в одной или разных базах, выгрузив их в текстовом представлении, эффективным решением будет сериализация в XML.
Метод основан на последовательном вызове встроенной функции ЗаписатьXML() для объекта из первой базы и его аналога из второй базы. Полученные XML-файлы затем сравниваются платформенным механизмом СравнениеФайлов.
Посмотрим на общую схему применения данного метода:
ЗаписатьXML().СравнениеФайлов для автоматического поиска различий в полученных файлах.Разберем важный нюанс: при сплошной сериализации больших объемов данных в XML или JSON выгрузка всей базы целиком может вызывать переполнение оперативной памяти (Out of Memory). Поэтому обработку и сериализацию данных необходимо проводить порциями (пакетами).
Для программной сверки в режиме реального времени широко применяется прямая связь между базами. Рассмотрим основные технологии информационного обмена:
При работе с большими объемами информации передачи всех реквизитов по сети следует избегать. Рассмотрим методики оптимизации сверки:
ИНН + КПП, для номенклатуры — Артикул + Производитель).Для быстрой пользовательской сверки (например, при проверке оборотно-сальдовых ведомостей или реестров документов из двух баз) можно сформировать идентичные отчеты в обеих системах и сохранить их в формате табличных документов .mxl. В платформе «1С:Предприятие» встроен инструмент сравнения файлов, который визуально подсвечивает отличающиеся ячейки табличных документов, позволяя быстро найти расхождения без написания сложного кода.