При настройке обмена данными между двумя независимыми информационными базами 1С мы часто сталкиваемся с вопросом: как система понимает, что один и тот же контрагент или товар в Базе 1 и Базе 2 — это один и тот же объект? Внутренние ссылки (GUID) в разных базах могут отличаться или совпадать случайно, но указывать на разные записи — выявить их поможет обработка поиска расхождений после обмена. Именно здесь на помощь приходят публичные идентификаторы синхронизируемых объектов, сокращенно ПИСО.
Многие начинающие разработчики совершают ошибку, пытаясь реализовать «перекрестные» ссылки. Они думают, что в Базе 1 нужно хранить ссылку на локальный объект и GUID из Базы 2, а в Базе 2 — наоборот. Однако это ведет к путанице и нарушению целостности данных.
Давайте проанализируем, как это работает на самом деле:
ПИСО выступает в роли «транслятора». Мы не пытаемся связать объект Базы 1 с объектом Базы 2 напрямую через их внутренние GUID. Вместо этого мы используем промежуточное звено — общий публичный идентификатор.GUID), система при синхронизации найдет этот ключ в таблице соответствий и автоматически «сопоставит» объекты.Чтобы успешно настроить обмен данными, придерживайтесь следующего алгоритма:
Шаг 1. Определение ключа. Выберите атрибут, который будет служить идентификатором. Это может быть уникальный GUID, сгенерированный специально для синхронизации, либо бизнес-ключ (например, ИНН+КПП для контрагента).
Шаг 2. Фиксация в обеих базах. Вы должны программно обеспечить, чтобы для одного и того же физического объекта в Базе 1 и Базе 2 в поле публичного идентификатора было записано идентичное значение.
Шаг 3. Использование механизма ПИСО. Когда система начинает процесс обмена, она обращается к таблице соответствий. Рассмотрим, как выглядит этот процесс в коде (концептуально):
// Псевдокод логики поиска объекта через ПИСО
Функция НайтиОбъектПоИдентификатору(ИдентификаторОбъекта)
// Система ищет запись, где внешний ключ равен переданному идентификатору
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ СсылкаИЗБазы1 ИЗ РегистрСведений.ПИСО ГДЕ ПубличныйКлюч = &Ключ";
Запрос.УстановитьПараметр("Ключ", ИдентификаторОбъекта);
Результат = Запрос.Выполнить().Выгрузить();
Если Результат.Количество() > 0 Тогда
Возврат Результат[0].СсылкаИЗБазы1;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Важно понять, что внутри типовых конфигураций 1С нет никакой «магии» в виде четвертого GUID. Существуют лишь правила обмена, которые интерпретируют внешние данные. GUID1 (идентификатор источника) и GUID2 (идентификатор приемника) в таблице ПИСО должны быть приведены к общему знаменателю.
Когда вы обеспечиваете идентичность ключа в обеих базах, механизм обмена 1С сам подбирает соответствующую ссылку в приемнике. Если вы видите, что GUID совпадают в обеих базах, значит, система уже настроена на использование идентичных ключей. Если же вы столкнулись с проблемой дублирования, значит, где-то в цепочке передается разный идентификатор для одного и того же объекта — поможет обработка удаления дублей и исправления синхронизации.
Если синхронизация работает некорректно, мы рекомендуем выполнить следующие действия:
ПИСО — ускоряет процесс инструмент редактирования записей регистров и GUID.Конвертацию данных) передают именно тот самый публичный ключ, а не внутреннюю ссылку ССылка объекта.GUID объектов в обеих базах, чтобы выявить расхождения в ключах — для этого подойдет готовая обработка сравнения данных и ссылочных объектов.Таким образом, суть работы с ПИСО заключается не в поиске «недоступной магии», а в дисциплине поддержания одинаковых внешних идентификаторов для синхронизируемых объектов. Как только вы обеспечите это соответствие, механизм обмена будет работать стабильно и без дублирования данных. Для очистки уже возникших ошибок есть обработка поиска и удаления дублей объектов.