Как настроить односторонний обмен из нескольких баз 1С в одну и избежать перезаписи данных?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

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

При попытке использовать стандартную обработку «Выгрузка и загрузка данных XML» часто возникает серьезная проблема: данные из разных баз при загрузке в центральную начинают затирать друг друга. Например, организация из первой базы перезаписывается организацией из второй базы, и все привязанные к ней документы меняют владельца. Выясним причину такого поведения и разберем способы решения этой проблемы.

Почему происходит затирание объектов?

Главная причина перезаписи элементов справочников (например, «Организации», «Контрагенты») кроется в совпадении уникальных внутренних идентификаторов — GUID. Стандартные обработки выгрузки/загрузки XML строго ориентируются на этот внутренний идентификатор платформы.

Если ваши периферийные базы изначально создавались путем копирования эталонной или друг друга (даже если это была пустая база, в которой уже была создана пара тестовых элементов), GUID этих элементов во всех базах будет идентичен. При импорте в центральную базу платформа считает, что это один и тот же объект, и просто обновляет его реквизиты данными из последнего загруженного файла. Обработка «Выгрузка и загрузка данных XML» концептуально предназначена для создания точных клонов и не умеет искать объекты по реквизитам или обходить совпадения GUID.

Решение 1: Использование конфигурации «Конвертация данных» (КД)

Проанализируем самый правильный методологический подход — создание собственных правил обмена с помощью конфигурации «Конвертация данных». Даже если конфигурации баз-источников и приемника одинаковые, КД позволяет гибко настроить логику сопоставления объектов.

  1. Создайте правила обмена в КД.
  2. В правилах конвертации объектов (ПКО) для проблемных справочников обязательно отключите поиск по внутреннему идентификатору (УИД).
  3. Настройте поиск по ключевым бизнес-реквизитам: для организаций и контрагентов это ИНН и КПП, для номенклатуры — артикул или код.
  4. Используйте типовую обработку «Универсальный обмен данными в формате XML», указав созданный файл правил.

В этом случае при загрузке система будет искать объект по ИНН/КПП. Если объект не найден, будет создан новый с новым уникальным идентификатором, и перезаписи не произойдет.

Решение 2: Настройка планов обмена

Для регулярного и автоматизированного обмена разовых выгрузок недостаточно. Посмотрим на интеграцию правил обмена с механизмом Планов обмена.

  1. Создайте в конфигурации объект ПланОбмена. Добавьте в него узлы для каждой периферийной базы и один узел для центральной.
  2. Включите в состав плана обмена те объекты (документы, справочники), которые нужно передавать. Можно использовать авторегистрацию или прописать правила регистрации программно.
  3. При проведении обмена программно собирайте зарегистрированные объекты и выгружайте их в XML с применением правил, созданных в «Конвертации данных».
  4. После успешной загрузки в центральную базу необходимо сформировать ответное сообщение для баз-источников, чтобы очистить таблицы регистрации изменений (сбросить регистрацию успешно переданных объектов).

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

Решение 3: Регистр соответствий объектов

Если нет возможности использовать правила КД, рассмотрим классический подход для сведения данных из независимых баз — использование регистра сведений.

В центральной базе создается независимый регистр сведений (назовем его, например, «СоответствияОбъектовИнформационныхБаз»), в котором хранятся измерения: УзелИсточника, УИДИсточника (строка) и ресурс СсылкаВБазеПриемнике.

При программной загрузке XML-файла алгоритм должен действовать так:

  1. Прочитать УИД пришедшего объекта.
  2. Выполнить поиск в регистре соответствий по связке «Узел-источник + УИД».
  3. Если соответствие найдено — подставить в документ или справочник локальную ссылку центральной базы.
  4. Если не найдено — создать новый объект в центральной базе, записать его и добавить новую запись в регистр соответствий, связав УИД источника с созданной ссылкой.

Решение 4: Предварительная нормализация баз

Если проблема только в нескольких корневых справочниках, которые были скопированы вместе с базой, до начала слияния можно провести их нормализацию. С помощью специализированных обработок «Поиск и замена значений» принудительно сгенерируйте новые уникальные GUID для конфликтующих элементов во всех базах-источниках. После этого базы станут независимыми на уровне идентификаторов, и при слиянии элементы гарантированно лягут в центральную базу отдельными строками.

Решение 5: Прямое подключение через COM-соединение

Разберем вариант, когда базы находятся в одной локальной сети. Вместо формирования XML-файлов можно настроить прямой перенос через COM-соединение.

В центральной базе пишется обработка, которая подключается к базам-источникам, например, через V83.COMConnector. Обработка программно перебирает документы за период. Для каждого реквизита (контрагент, организация) прописывается жесткая логика поиска по реквизитам в текущей (центральной) базе. Если элемент найден — он подставляется в новый документ, если нет — создается на основе данных из COM-объекта.

Решение 6: Переход на формат EnterpriseData

Если вы планируете обновление платформы (решения на базе 8.3), настоятельно рекомендуем посмотреть в сторону формата EnterpriseData и библиотеки стандартных подсистем (БСП). Этот современный формат позволяет обмениваться данными, опираясь исключительно на бизнес-логику поиска по ключевым полям, без жесткой привязки к внутренним идентификаторам платформы. Использование БСП (подсистемы «Обмен данными») даст готовый интерфейс настройки узлов, расписания фоновых заданий и мониторинга ошибок обмена.

← На главную