При переходе с механизмов обмена данными на базе Конвертации данных 2.0 (КД2) на обмен через универсальный формат EnterpriseData (КД3) разработчики сталкиваются с заменой привычного регистра сведений СоответствияОбъектовИнформационныхБаз на новый регистр — ПубличныеИдентификаторыСинхронизируемыхОбъектов. Разберем детально архитектуру этого регистра, логику поиска и сопоставления ссылок, а также ответим на ключевые вопросы его практического применения.
Проанализируем вопрос сохранения старого регистра СоответствияОбъектовИнформационныхБаз. В типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП) старый регистр не удаляется и продолжит существовать параллельно с новым. Причина заключается в необходимости поддержки правил обмена КД2 со старыми или нетиповыми конфигурациями, не поддерживающими обмен через формат EnterpriseData. Оба регистра сосуществуют независимо: механизмы КД2 обращаются к старому регистру, а подсистема обмена через универсальный формат работает исключительно с регистром ПубличныеИдентификаторыСинхронизируемыхОбъектов.
Выясним, как разрешается ситуация, если в базе присутствуют разнотипные объекты с одинаковым внутренним идентификатором или когда внешняя система присылает один и тот же GUID для сущностей разного назначения. Например, когда из одной входящей накладной формируются два связанных объекта или исторически справочник физических лиц и контрагентов содержат элементы с одинаковым УникальныйИдентификатор().
Кажется, что отсутствие отдельного измерения типа данных должно приводить к коллизиям, однако это не так. Рассмотрим структуру хранения данных в регистре:
УзелИнформационнойБазы — ссылка на узел плана обмена.Идентификатор — строковое представление публичного идентификатора (GUID).Ссылка — составной тип (ЛюбаяСсылка).ОбъектФормата — строка, содержащая имя сущности в формате EnterpriseData.Основной — булево, определяющее приоритетное соответствие.На уровне СУБД поле составного типа Ссылка физически раскладывается на три колонки: тип данных, код таблицы метаданных и бинарный идентификатор ссылки. Таким образом, ссылка на СправочникСсылка.Сотрудники и ссылка на ДокументСсылка.РеализацияТоваровУслуг с абсолютно одинаковыми GUID — это две совершенно разные записи в регистре. Поскольку первичный ключ формируется тройкой Узел + Идентификатор + Ссылка, конфликта уникальности записей не возникает.
Посмотрим, как отрабатывает типовой алгоритм поиска при загрузке данных:
Узел и Идентификатор. При этом ресурс ОбъектФормата должен совпадать с типом входящей сущности либо быть пустым.
Если ТипЗнч(СсылкаИзРегистра) <> ТипОбъектаИБ Тогда
Продолжить;
КонецЕсли;
Если в регистре сопоставления ничего не найдено, поиск выполняется напрямую через менеджер требуемого объекта методом ПолучитьСсылку(ГУИД), где тип метаданных также строго зафиксирован правилом конвертации.
Разберем ситуации, при которых сопоставление не фиксируется в регистре:
УникальныйИдентификатор(), что и у источника, запись в регистр не создается. Платформа штатно находит объект через прямое обращение к таблице метаданных без привлечения вспомогательных регистров.Проанализируем поведение системы при удалении данных:
ПубличныеИдентификаторыСинхронизируемыхОбъектов средствами СУБД не происходит. В поле Ссылка образуется «битая ссылка» (<Объект не найден>). Очистка таких записей выполняется типовыми механизмами БСП: либо регламентными процедурами обслуживания, либо автоматически при следующем сеансе синхронизации, когда отбор отсеивает отсутствующую ссылку и зачищает запись регистра.Рассмотрим возможность использования произвольных строковых ID (например, цифровых или текстовых кодов из CRM) в качестве идентификатора в регистре. В типовом механизме EnterpriseData поле Идентификатор строго ожидает строку формата UUID (36 символов, стандартизированных по RFC 4122).
Если передать произвольную строку и попытаться сгенерировать новую ссылку через вызов конструктора:
НовыйУИД = Новый УникальныйИдентификатор(СтрокаИдентификатора);
платформа вызовет фатальное исключение «Недопустимый формат». Для интеграции со сторонними сервисами применяются следующие подходы:
XML_ID. При выгрузке из 1С туда помещается внутренний GUID системы, который затем возвращается обратно без необходимости преобразовывать внутренние числовые ID сайта.AdditionalInfo), с последующим сопоставлением в алгоритме поиска ПКО по отдельному нетиповому регистру сведений.Перевод рабочей синхронизации со старых правил на формат EnterpriseData требует внимания, так как автоматического переноса записей из СоответствияОбъектовИнформационныхБаз в новый регистр платформа не выполняет. Если внутренние GUID объектов в базах не совпадали и связь держалась исключительно на таблице старого регистра, переход на новый обмен «с нуля» приведет к массовому дублированию данных.
Разберем по шагам безопасный порядок миграции:
СоответствияОбъектовИнформационныхБаз по нужному узлу и создаст эквивалентные записи в ПубличныеИдентификаторыСинхронизируемыхОбъектов, заполнив корректный ОбъектФормата.