Как найти соответствие объектов при обмене УТ 10.3 — БП 3.0 и почему регистры сведений могут быть пустыми

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

При настройке и поддержке обмена данными между «Управлением торговлей 10.3» (УТ) и «Бухгалтерией предприятия 3.0» (БП) специалисты часто сталкиваются с ситуацией, когда объекты в базах вроде бы синхронизированы, но найти явную связь в регистрах сведений не удается. Особенно это актуально для обменов, работающих через прямое (COM) подключение. Разберем детально, как 1С сопоставляет объекты, где искать таблицы соответствий и как интерпретировать внутренние идентификаторы системы.

Где искать регистры соответствия в разных конфигурациях

Первым делом проанализируем, в каких именно таблицах базы данных хранится информация о связях между объектами источника и приемника. Поскольку УТ 10.3 и БП 3.0 относятся к разным поколениям конфигураций (старая редакция и современная база на БСП), названия регистров различаются:

  1. В «Бухгалтерии предприятия 3.0» (БП): используется стандартный регистр Библиотеки стандартных подсистем — РегистрСведений.СоответствияОбъектовИнформационныхБаз. Здесь хранятся ссылки на объекты текущей базы и их уникальные идентификаторы в другой базе.
  2. В «Управлении торговлей 10.3» (УТ): ситуация сложнее. В зависимости от версии и настроенного механизма обмена данные могут записываться в РегистрСведений.СоответствиеОбъектовДляОбмена (старый механизм) или в РегистрСведений.СоответствияОбъектовИнформационныхБаз (если используется интеграция через универсальный механизм обмена данными).

Если вы открыли регистр в УТ и он кажется пустым, не спешите делать вывод о неисправности обмена. Рассмотрим причины, по которым записи могут отсутствовать.

Почему регистр соответствия может быть пустым

В типовых обменах на базе «Конвертации данных 2.0» запись в регистр соответствия происходит далеко не всегда. Проанализируем основные сценарии:

1. Синхронизация по GUID (UUID). Если объекты в обеих базах имеют идентичный внутренний идентификатор, система не создает запись в регистре. Она сопоставляет их «на лету» по равенству ссылок. Это происходит, если база была создана из копии или если объекты переносились с сохранением идентификаторов при начальной выгрузке. Поиск по GUID — самый быстрый и приоритетный метод.

2. Когда запись в регистр все же создается:

Техническая расшифровка строковых идентификаторов

Иногда для отладки требуется вручную проверить соответствие, имея строковое представление ссылки. Рассмотрим пример из практики. Внутренний формат 1С (XML-сериализация) выглядит следующим образом:

В источнике (УТ): {"#",44a01d39-c2b6-4751-85e6-06fdc2f23043,71:bbb5005056a0b39e11edd8f253fcd87b}
В приемнике (БП): {"#",e18d5670-dd2f-4528-8897-d3f07ca77f21,62:bbb5005056a0b39e11edd8f253fcd87b}

Проанализируем структуру этих строк. Последняя часть (после двоеточия) — это и есть HEX-представление GUID. Обратите внимание, что в обоих примерах она совпадает: bbb5005056a0b39e11edd8f253fcd87b. Чтобы преобразовать это в привычный вид GUID (например, 53fcd87b-d8f2-11ed-bbb5-005056a0b39e), 1С переставляет блоки байтов. Если эти части идентичны, значит, объекты имеют одинаковый GUID, и искать их в регистрах соответствия бессмысленно — они связаны платформенно.

Особенности прямого (COM) подключения

При использовании прямого подключения УТ 10.3 к БП 3.0 алгоритм работы следующий:

  1. УТ выступает инициатором: она подключается к БП через COM-соединение и считывает необходимые метаданные.
  2. Поиск в приемнике: Если в правилах конвертации объектов (ПКО) установлена опция Искать объект в приемнике по внутреннему идентификатору источника, система сначала пытается найти объект по GUID.
  3. Запись соответствия: Если поиск по GUID не дал результата, система ищет объект по «Полям поиска» (например, Код + Наименование). Если объект найден, именно в этот момент в базе приемника (БП) создается запись в регистре соответствия.

Как программно найти объект в приемнике

Если вам нужно найти объект в приемнике, имея ссылку в источнике, но GUID-ы различаются и записи в регистре нет, необходимо повторить логику поиска, заложенную в правилах обмена. Разберем пример кода, который можно использовать для поиска соответствия через GUID, если запись в регистре СоответствияОбъектовИнформационныхБаз все-таки существует:


Функция НайтиСсылкуПоСоответствию(СсылкаИсточника, УзелОбмена)
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	ТвоеИмяРегистра.Объект
        |ИЗ
        |	РегистрСведений.СоответствияОбъектовИнформационныхБаз КАК ТвоеИмяРегистра
        |ГДЕ
        |	ТвоеИмяРегистра.УзелИнформационнойБазы = &УзелОбмена
        |	И ТвоеИмяРегистра.УникальныйИдентификаторИсточника = &УИДИсточника";
    
    // Преобразуем ссылку в строку GUID для поиска
    СтрокаУИД = Строка(СсылкаИсточника.УникальныйИдентификатор());
    
    Запрос.УстановитьПараметр("УзелОбмена", УзелОбмена);
    Запрос.УстановитьПараметр("УИДИсточника", СтрокаУИД);
    
    Результат = Запрос.Выполнить();
    Если Не Результат.Пустой() Тогда
        Выборка = Результат.Выбрать();
        Выборка.Следующий();
        Возврат Выборка.Объект;
    КонецЕсли;
    
    Возврат Неопределено;
    
КонецФункции

Важный момент: в БП 3.0 в регистре соответствия в поле УникальныйИдентификаторИсточника часто хранится не просто GUID, а строковое представление ключа поиска. Если вы не нашли объект по прямому GUID, проверьте, как именно заполнено это поле в регистре для аналогичных объектов.

Подведем итоги

Выясним причину отсутствия записей в вашем случае. Если объекты синхронизируются, но регистры пусты — это штатная работа системы при совпадении идентификаторов (GUID). Если же GUID разные, ищите записи в РегистрСведений.СоответствияОбъектовИнформационныхБаз (в БП 3.0) или РегистрСведений.СоответствиеОбъектовДляОбмена (в УТ 10.3). Помните, что при прямом подключении логика поиска всегда определяется правилами обмена (XML-файлом), которые загружены в узел обмена.

← На главную