На практике часто возникает задача разового переноса данных (например, документов) из одной информационной базы 1С в другую. Конфигурации при этом могут быть абсолютно идентичными (аутентичными), как, например, две одинаковые базы 1С:Зарплата и Управление Персоналом. Основная сложность заключается в том, что справочники в базах уже заполнены, и нам категорически нельзя создавать их дубликаты в базе-приемнике или перетирать существующие данные. Рассмотрим подробнее, как решить эту проблему, какие инструменты 1С нам в этом помогут, и проанализируем нюансы каждого подхода.
Первый инструмент, который мы разберем — это стандартная типовая обработка ВыгрузкаИЗагрузкаДанныхXML. Она отлично подходит для переноса данных между конфигурациями с одинаковой структурой.
Чтобы перенести документы, но не выгружать целиком все справочники, мы можем воспользоваться специальными настройками в интерфейсе обработки:
Важный нюанс: сопоставление по GUID
Проанализируем ситуацию глубже. Данная обработка сопоставляет объекты исключительно по их внутреннему уникальному идентификатору — GUID. Если элементы справочников (сотрудники, подразделения, должности) заводились в базах вручную и независимо друг от друга, их уникальные идентификаторы будут отличаться, даже если наименования и коды полностью совпадают!
Если мы попытаемся загрузить данные стандартной обработкой, а нужного GUID в базе-приемнике не окажется, система либо оставит "битую ссылку", либо (если стоят соответствующие настройки) создаст новые элементы — те самые нежелательные дубли. Поэтому данный способ идеально работает только в том случае, если базы являются узлами РИБ или справочники первоначально переносились с сохранением ссылок.
Если мы хотим использовать именно штатную выгрузку XML, но GUID в наших базах различаются, выясним причину и применим альтернативный трюк. Мы можем предварительно синхронизировать уникальные идентификаторы!
Для этого пишется небольшая внешняя обработка, которая программно подключается к базе-приемнику, ищет элементы справочников по логическим ключам (ИНН, Код, Наименование) и принудительно перезаписывает их GUID на те, что используются в базе-источнике. После того как идентификаторы станут идентичными, стандартная ВыгрузкаИЗагрузкаДанныхXML отработает идеально: перенесет документы и свяжет их с существующими справочниками без создания новых записей.
Разберем по шагам самый надежный и гибкий метод — использование конфигурации 1С:Конвертация данных 2.x. Это именно тот инструмент, который "вылечит" проблему с разными GUID и позволит провести нормальный обмен.
Поскольку наши конфигурации идентичны, правила обмена создадутся автоматически в несколько кликов. Нам нужно лишь точечно настроить Правила Конвертации Объектов (ПКО) для тех справочников, которые мы не хотим дублировать.
В настройках ПКО для справочников мы должны установить следующие критически важные флаги:
Также в Конвертации данных мы настраиваем Поля поиска. В отличие от стандартной XML-выгрузки, здесь мы отказываемся от жесткого поиска по GUID. Мы можем указать, что система должна искать сотрудника по связке реквизитов ИНН и СНИЛС, а подразделение — по реквизитам Код и Наименование. Это полностью решает проблему рассинхронизированных баз.
Если задача разовая, а базы находятся в одной локальной сети, рассмотрим использование прямого подключения через COM-объект. Мы используем класс V83.COMConnector для подключения к базе-приемнику прямо из базы-источника.
Мы можем написать свою обработку, которая будет читать документы, находить программно нужные справочники в соседней базе (по кодам или наименованиям) и записывать скопированный документ. Этот метод позволяет полностью контролировать процесс записи и поиска на уровне программного кода 1С, исключая этап создания промежуточных XML-файлов.
Посмотрим на современные подходы. Если мы понимаем, что наша "разовая" задача может перерасти в регулярный периодический обмен, лучше сразу смотреть в сторону универсального формата Enterprise Data. В современных типовых конфигурациях (таких как ЗУП 3.1) уже встроены механизмы синхронизации через этот формат.
В узлах синхронизации мы сможем настроить правила сопоставления объектов и указать приоритеты баз. Если данные не будут сопоставлены автоматически, система предложит удобный помощник интерактивного сопоставления, где пользователь вручную сможет указать, какой элемент из базы А соответствует элементу из базы Б, тем самым избежав появления дублей.