При настройке обмена данными между конфигурациями «Управление торговлей» (УТ) и «Розница» через «Конвертацию данных 2.0» (КД 2.0) программисты часто сталкиваются с ситуацией, когда объекты (например, склады или магазины) переносятся, но не сопоставляются должным образом. В этой статье мы подробно разберем, почему поиск по уникальному идентификатору (УИД) может не работать, как функционирует механизм соответствий в типовых решениях 1С и на что обратить внимание при настройке правил выгрузки данных.
Прежде чем искать ошибку в программном коде или настройках ПКО (Правила конвертации объектов), нам необходимо понять, что именно уходит из базы-источника. Рассмотрим рекомендацию опытных разработчиков: выгрузить данные в файл XML и проанализировать его содержимое.
Для этого выполним следующие действия:
<Объект Тип="СправочникСсылка.Склады" ...>.{Ref} — это и есть тот самый УИД (GUID), который передается в приемник.Проанализируем ситуацию: если в файле выгрузки УИД присутствует, но в базе-приемнике объект по этому идентификатору не находится, значит, либо объект не был создан, либо он был сопоставлен с уже существующим объектом, имеющим другой УИД.
Одной из главных причин, почему «поиск по УИД» в КД 2.0 работает не так, как ожидается, является наличие в типовых конфигурациях регистра сведений СоответствияОбъектовИнформационныхБаз. Разберем подробнее, как это работает в связке УТ — Розница.
В типовых обменах алгоритм поиска объекта в приемнике обычно выглядит так:
ПКО на закладке «Поля поиска» (например, поиск по наименованию или коду).Важный вывод: Если ранее склад был сопоставлен вручную или перенесен по другим правилам, в регистре соответствий уже зафиксирована связь. Даже если вы измените УИД в источнике, система все равно будет «подцеплять» старый объект из приемника, основываясь на данных регистра.
Проанализируем структуру справочников. В «Управлении торговлей» склад — это самостоятельная сущность. В «Рознице» логика иная: Склад всегда подчинен Магазину. Это создает определенные трудности при переносе через КД 2.0.
Часто в правилах выгрузки данных (ПВД) настроена выгрузка только Магазинов. Склады же выгружаются «по ссылке» как подчиненные объекты. Если вы пытаетесь найти склад отдельно, но при этом в правилах ПКО для складов не указан правильный владелец (магазин), объект может просто не записаться из-за нарушения логики конфигурации-приемника.
Рассмотрим, как можно решить проблему двойной выгрузки, когда один склад в УТ должен породить и Магазин, и Склад в Рознице:
В КД 2.0 существует механизм, предотвращающий повторную выгрузку одного и того же объекта в рамках одной сессии. Если вы используете два разных ПКО для одного и того же склада-источника, система может выгрузить его только один раз по первому попавшемуся правилу.
Чтобы управлять этим процессом, мы можем использовать свойство КлючВыгружаемыхДанных. Это значение, которое определяет уникальность выгрузки. По умолчанию оно равно ссылке на объект. Если нам нужно выгрузить один объект дважды (по разным правилам), мы должны программно изменить этот ключ в обработчике Перед выгрузкой.
Например, в ПКО для Склада можно прописать:
// В обработчике "Перед выгрузкой" ПКО
КлючВыгружаемыхДанных = Строка(Источник.УникальныйИдентификатор()) + "_Склад";
А в ПКО для Магазина:
// В обработчике "Перед выгрузкой" ПКО
КлючВыгружаемыхДанных = Строка(Источник.УникальныйИдентификатор()) + "_Магазин";
Также не забудем про флаг «Не запоминать выгруженные объекты» в настройках ПКО. Если его установить, система не будет помечать объект как уже обработанный, что позволит выгружать его повторно другими правилами.
Если поиск по УИД показывает, что объект в базе существует, но в списке складов вы его не видите, проанализируем следующие причины:
ПКС) не заполнено поле Магазин для склада, объект в Рознице может быть некорректным и не отображаться в стандартных списках, работающих с фильтром по магазину.Для успешного решения проблемы сопоставления объектов выполним следующие шаги:
СоответствияОбъектовИнформационныхБаз в приемнике. Если связь неверная — удалим запись.ПКО на закладке «Настройки поиска» стоит галочка «Найти объект по уникальному идентификатору».Поля поиска. Если там написан программный код, он может переопределять стандартное поведение поиска по УИД.{Ref} выгружаемого объекта с тем GUID, который мы ищем в приемнике.Помните, что работа с КД 2.0 требует внимательного отношения к деталям, особенно в части обработчиков событий и механизмов синхронизации, заложенных в логику типовых решений 1С.