При настройке и поддержке обмена данными между «Управлением торговлей 10.3» (УТ) и «Бухгалтерией предприятия 3.0» (БП) специалисты часто сталкиваются с ситуацией, когда объекты в базах вроде бы синхронизированы, но найти явную связь в регистрах сведений не удается. Особенно это актуально для обменов, работающих через прямое (COM) подключение. Разберем детально, как 1С сопоставляет объекты, где искать таблицы соответствий и как интерпретировать внутренние идентификаторы системы.
Первым делом проанализируем, в каких именно таблицах базы данных хранится информация о связях между объектами источника и приемника. Поскольку УТ 10.3 и БП 3.0 относятся к разным поколениям конфигураций (старая редакция и современная база на БСП), названия регистров различаются:
РегистрСведений.СоответствияОбъектовИнформационныхБаз. Здесь хранятся ссылки на объекты текущей базы и их уникальные идентификаторы в другой базе.РегистрСведений.СоответствиеОбъектовДляОбмена (старый механизм) или в РегистрСведений.СоответствияОбъектовИнформационныхБаз (если используется интеграция через универсальный механизм обмена данными).Если вы открыли регистр в УТ и он кажется пустым, не спешите делать вывод о неисправности обмена. Рассмотрим причины, по которым записи могут отсутствовать.
В типовых обменах на базе «Конвертации данных 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, и искать их в регистрах соответствия бессмысленно — они связаны платформенно.
При использовании прямого подключения УТ 10.3 к БП 3.0 алгоритм работы следующий:
Искать объект в приемнике по внутреннему идентификатору источника, система сначала пытается найти объект по GUID.Если вам нужно найти объект в приемнике, имея ссылку в источнике, но GUID-ы различаются и записи в регистре нет, необходимо повторить логику поиска, заложенную в правилах обмена. Разберем пример кода, который можно использовать для поиска соответствия через GUID, если запись в регистре СоответствияОбъектовИнформационныхБаз все-таки существует:
Функция НайтиСсылкуПоСоответствию(СсылкаИсточника, УзелОбмена)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТвоеИмяРегистра.Объект
|ИЗ
| РегистрСведений.СоответствияОбъектовИнформационныхБаз КАК ТвоеИмяРегистра
|ГДЕ
| ТвоеИмяРегистра.УзелИнформационнойБазы = &УзелОбмена
| И ТвоеИмяРегистра.УникальныйИдентификаторИсточника = &УИДИсточника";
// Преобразуем ссылку в строку GUID для поиска
СтрокаУИД = Строка(СсылкаИсточника.УникальныйИдентификатор());
Запрос.УстановитьПараметр("УзелОбмена", УзелОбмена);
Запрос.УстановитьПараметр("УИДИсточника", СтрокаУИД);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.Объект;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Важный момент: в БП 3.0 в регистре соответствия в поле УникальныйИдентификаторИсточника часто хранится не просто GUID, а строковое представление ключа поиска. Если вы не нашли объект по прямому GUID, проверьте, как именно заполнено это поле в регистре для аналогичных объектов.
Выясним причину отсутствия записей в вашем случае. Если объекты синхронизируются, но регистры пусты — это штатная работа системы при совпадении идентификаторов (GUID). Если же GUID разные, ищите записи в РегистрСведений.СоответствияОбъектовИнформационныхБаз (в БП 3.0) или РегистрСведений.СоответствиеОбъектовДляОбмена (в УТ 10.3). Помните, что при прямом подключении логика поиска всегда определяется правилами обмена (XML-файлом), которые загружены в узел обмена.