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

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

На практике часто возникает задача разового переноса данных (например, документов) из одной информационной базы 1С в другую. Конфигурации при этом могут быть абсолютно идентичными (аутентичными), как, например, две одинаковые базы 1С:Зарплата и Управление Персоналом. Основная сложность заключается в том, что справочники в базах уже заполнены, и нам категорически нельзя создавать их дубликаты в базе-приемнике или перетирать существующие данные. Рассмотрим подробнее, как решить эту проблему, какие инструменты 1С нам в этом помогут, и проанализируем нюансы каждого подхода.

Способ 1: Использование обработки "Выгрузка и загрузка данных XML"

Первый инструмент, который мы разберем — это стандартная типовая обработка ВыгрузкаИЗагрузкаДанныхXML. Она отлично подходит для переноса данных между конфигурациями с одинаковой структурой.

Чтобы перенести документы, но не выгружать целиком все справочники, мы можем воспользоваться специальными настройками в интерфейсе обработки:

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

Важный нюанс: сопоставление по GUID

Проанализируем ситуацию глубже. Данная обработка сопоставляет объекты исключительно по их внутреннему уникальному идентификатору — GUID. Если элементы справочников (сотрудники, подразделения, должности) заводились в базах вручную и независимо друг от друга, их уникальные идентификаторы будут отличаться, даже если наименования и коды полностью совпадают!

Если мы попытаемся загрузить данные стандартной обработкой, а нужного GUID в базе-приемнике не окажется, система либо оставит "битую ссылку", либо (если стоят соответствующие настройки) создаст новые элементы — те самые нежелательные дубли. Поэтому данный способ идеально работает только в том случае, если базы являются узлами РИБ или справочники первоначально переносились с сохранением ссылок.

Способ 2: Предварительная синхронизация GUID

Если мы хотим использовать именно штатную выгрузку XML, но GUID в наших базах различаются, выясним причину и применим альтернативный трюк. Мы можем предварительно синхронизировать уникальные идентификаторы!

Для этого пишется небольшая внешняя обработка, которая программно подключается к базе-приемнику, ищет элементы справочников по логическим ключам (ИНН, Код, Наименование) и принудительно перезаписывает их GUID на те, что используются в базе-источнике. После того как идентификаторы станут идентичными, стандартная ВыгрузкаИЗагрузкаДанныхXML отработает идеально: перенесет документы и свяжет их с существующими справочниками без создания новых записей.

Способ 3: Написание правил в "Конвертация данных 2.х" (КД 2)

Разберем по шагам самый надежный и гибкий метод — использование конфигурации 1С:Конвертация данных 2.x. Это именно тот инструмент, который "вылечит" проблему с разными GUID и позволит провести нормальный обмен.

Поскольку наши конфигурации идентичны, правила обмена создадутся автоматически в несколько кликов. Нам нужно лишь точечно настроить Правила Конвертации Объектов (ПКО) для тех справочников, которые мы не хотим дублировать.

В настройках ПКО для справочников мы должны установить следующие критически важные флаги:

  1. Не создавать новый объект в приемнике, если он не найден — благодаря этой галочке система проигнорирует объект при загрузке, если не сможет найти соответствие в базе-приемнике, и не будет создавать мусор.
  2. Не замещать существующие объекты в приемнике при загрузке — этот флаг защитит текущие данные базы-приемника от случайной перезаписи реквизитов из базы-источника.

Также в Конвертации данных мы настраиваем Поля поиска. В отличие от стандартной XML-выгрузки, здесь мы отказываемся от жесткого поиска по GUID. Мы можем указать, что система должна искать сотрудника по связке реквизитов ИНН и СНИЛС, а подразделение — по реквизитам Код и Наименование. Это полностью решает проблему рассинхронизированных баз.

Способ 4: Перенос через прямое COM-соединение (OLE)

Если задача разовая, а базы находятся в одной локальной сети, рассмотрим использование прямого подключения через COM-объект. Мы используем класс V83.COMConnector для подключения к базе-приемнику прямо из базы-источника.

Мы можем написать свою обработку, которая будет читать документы, находить программно нужные справочники в соседней базе (по кодам или наименованиям) и записывать скопированный документ. Этот метод позволяет полностью контролировать процесс записи и поиска на уровне программного кода 1С, исключая этап создания промежуточных XML-файлов.

Способ 5: Формат Enterprise Data (Конвертация данных 3.0)

Посмотрим на современные подходы. Если мы понимаем, что наша "разовая" задача может перерасти в регулярный периодический обмен, лучше сразу смотреть в сторону универсального формата Enterprise Data. В современных типовых конфигурациях (таких как ЗУП 3.1) уже встроены механизмы синхронизации через этот формат.

В узлах синхронизации мы сможем настроить правила сопоставления объектов и указать приоритеты баз. Если данные не будут сопоставлены автоматически, система предложит удобный помощник интерактивного сопоставления, где пользователь вручную сможет указать, какой элемент из базы А соответствует элементу из базы Б, тем самым избежав появления дублей.

← На главную