Рассмотрим распространенную задачу: необходимо настроить односторонний обмен данными, при котором документы и справочники (контрагенты, номенклатура, физические лица) из нескольких периферийных баз (например, пяти магазинов) должны регулярно выгружаться в одну сводную центральную базу. При этом конфигурации могут быть идентичными или незначительно различаться.
При попытке использовать стандартную обработку «Выгрузка и загрузка данных XML» часто возникает серьезная проблема: данные из разных баз при загрузке в центральную начинают затирать друг друга. Например, организация из первой базы перезаписывается организацией из второй базы, и все привязанные к ней документы меняют владельца. Выясним причину такого поведения и разберем способы решения этой проблемы.
Главная причина перезаписи элементов справочников (например, «Организации», «Контрагенты») кроется в совпадении уникальных внутренних идентификаторов — GUID. Стандартные обработки выгрузки/загрузки XML строго ориентируются на этот внутренний идентификатор платформы.
Если ваши периферийные базы изначально создавались путем копирования эталонной или друг друга (даже если это была пустая база, в которой уже была создана пара тестовых элементов), GUID этих элементов во всех базах будет идентичен. При импорте в центральную базу платформа считает, что это один и тот же объект, и просто обновляет его реквизиты данными из последнего загруженного файла. Обработка «Выгрузка и загрузка данных XML» концептуально предназначена для создания точных клонов и не умеет искать объекты по реквизитам или обходить совпадения GUID.
Проанализируем самый правильный методологический подход — создание собственных правил обмена с помощью конфигурации «Конвертация данных». Даже если конфигурации баз-источников и приемника одинаковые, КД позволяет гибко настроить логику сопоставления объектов.
В этом случае при загрузке система будет искать объект по ИНН/КПП. Если объект не найден, будет создан новый с новым уникальным идентификатором, и перезаписи не произойдет.
Для регулярного и автоматизированного обмена разовых выгрузок недостаточно. Посмотрим на интеграцию правил обмена с механизмом Планов обмена.
ПланОбмена. Добавьте в него узлы для каждой периферийной базы и один узел для центральной.Дополнительно перед началом обмена рекомендуется ввести префиксы узлов информационных баз. Префиксы будут добавляться к кодам справочников и номерам документов, что поможет избежать нарушения уникальности и сразу покажет, из какой базы пришел документ.
Если нет возможности использовать правила КД, рассмотрим классический подход для сведения данных из независимых баз — использование регистра сведений.
В центральной базе создается независимый регистр сведений (назовем его, например, «СоответствияОбъектовИнформационныхБаз»), в котором хранятся измерения: УзелИсточника, УИДИсточника (строка) и ресурс СсылкаВБазеПриемнике.
При программной загрузке XML-файла алгоритм должен действовать так:
Если проблема только в нескольких корневых справочниках, которые были скопированы вместе с базой, до начала слияния можно провести их нормализацию. С помощью специализированных обработок «Поиск и замена значений» принудительно сгенерируйте новые уникальные GUID для конфликтующих элементов во всех базах-источниках. После этого базы станут независимыми на уровне идентификаторов, и при слиянии элементы гарантированно лягут в центральную базу отдельными строками.
Разберем вариант, когда базы находятся в одной локальной сети. Вместо формирования XML-файлов можно настроить прямой перенос через COM-соединение.
В центральной базе пишется обработка, которая подключается к базам-источникам, например, через V83.COMConnector. Обработка программно перебирает документы за период. Для каждого реквизита (контрагент, организация) прописывается жесткая логика поиска по реквизитам в текущей (центральной) базе. Если элемент найден — он подставляется в новый документ, если нет — создается на основе данных из COM-объекта.
Если вы планируете обновление платформы (решения на базе 8.3), настоятельно рекомендуем посмотреть в сторону формата EnterpriseData и библиотеки стандартных подсистем (БСП). Этот современный формат позволяет обмениваться данными, опираясь исключительно на бизнес-логику поиска по ключевым полям, без жесткой привязки к внутренним идентификаторам платформы. Использование БСП (подсистемы «Обмен данными») даст готовый интерфейс настройки узлов, расписания фоновых заданий и мониторинга ошибок обмена.