Почему не сопоставляются склады при переносе из УТ в Розницу через КД 2.0

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

При настройке обмена данными между конфигурациями «Управление торговлей» (УТ) и «Розница» через «Конвертацию данных 2.0» (КД 2.0) программисты часто сталкиваются с ситуацией, когда объекты (например, склады или магазины) переносятся, но не сопоставляются должным образом. В этой статье мы подробно разберем, почему поиск по уникальному идентификатору (УИД) может не работать, как функционирует механизм соответствий в типовых решениях 1С и на что обратить внимание при настройке правил выгрузки данных.

Анализ структуры выгрузки: первый и самый важный шаг

Прежде чем искать ошибку в программном коде или настройках ПКО (Правила конвертации объектов), нам необходимо понять, что именно уходит из базы-источника. Рассмотрим рекомендацию опытных разработчиков: выгрузить данные в файл XML и проанализировать его содержимое.

Для этого выполним следующие действия:

  1. Запустим выгрузку данных в файл.
  2. Откроем полученный XML-файл любым текстовым редактором (например, Notepad++ или встроенным текстовым редактором 1С).
  3. Найдем узел, соответствующий нашему складу. В структуре XML это будет выглядеть примерно так: <Объект Тип="СправочникСсылка.Склады" ...>.
  4. Обратим внимание на атрибут {Ref} — это и есть тот самый УИД (GUID), который передается в приемник.

Проанализируем ситуацию: если в файле выгрузки УИД присутствует, но в базе-приемнике объект по этому идентификатору не находится, значит, либо объект не был создан, либо он был сопоставлен с уже существующим объектом, имеющим другой УИД.

Механизм поиска и регистр соответствий объектов

Одной из главных причин, почему «поиск по УИД» в КД 2.0 работает не так, как ожидается, является наличие в типовых конфигурациях регистра сведений СоответствияОбъектовИнформационныхБаз. Разберем подробнее, как это работает в связке УТ — Розница.

В типовых обменах алгоритм поиска объекта в приемнике обычно выглядит так:

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

Важный вывод: Если ранее склад был сопоставлен вручную или перенесен по другим правилам, в регистре соответствий уже зафиксирована связь. Даже если вы измените УИД в источнике, система все равно будет «подцеплять» старый объект из приемника, основываясь на данных регистра.

Особенности иерархии в 1С:Розница (Склады vs Магазины)

Проанализируем структуру справочников. В «Управлении торговлей» склад — это самостоятельная сущность. В «Рознице» логика иная: Склад всегда подчинен Магазину. Это создает определенные трудности при переносе через КД 2.0.

Часто в правилах выгрузки данных (ПВД) настроена выгрузка только Магазинов. Склады же выгружаются «по ссылке» как подчиненные объекты. Если вы пытаетесь найти склад отдельно, но при этом в правилах ПКО для складов не указан правильный владелец (магазин), объект может просто не записаться из-за нарушения логики конфигурации-приемника.

Рассмотрим, как можно решить проблему двойной выгрузки, когда один склад в УТ должен породить и Магазин, и Склад в Рознице:

Использование Ключа Выгружаемых Данных

В КД 2.0 существует механизм, предотвращающий повторную выгрузку одного и того же объекта в рамках одной сессии. Если вы используете два разных ПКО для одного и того же склада-источника, система может выгрузить его только один раз по первому попавшемуся правилу.

Чтобы управлять этим процессом, мы можем использовать свойство КлючВыгружаемыхДанных. Это значение, которое определяет уникальность выгрузки. По умолчанию оно равно ссылке на объект. Если нам нужно выгрузить один объект дважды (по разным правилам), мы должны программно изменить этот ключ в обработчике Перед выгрузкой.

Например, в ПКО для Склада можно прописать:


// В обработчике "Перед выгрузкой" ПКО
КлючВыгружаемыхДанных = Строка(Источник.УникальныйИдентификатор()) + "_Склад";

А в ПКО для Магазина:


// В обработчике "Перед выгрузкой" ПКО
КлючВыгружаемыхДанных = Строка(Источник.УникальныйИдентификатор()) + "_Магазин";

Также не забудем про флаг «Не запоминать выгруженные объекты» в настройках ПКО. Если его установить, система не будет помечать объект как уже обработанный, что позволит выгружать его повторно другими правилами.

Почему объект не виден в интерфейсе после переноса?

Если поиск по УИД показывает, что объект в базе существует, но в списке складов вы его не видите, проанализируем следующие причины:

Итоги и рекомендации

Для успешного решения проблемы сопоставления объектов выполним следующие шаги:

  1. Проверим наличие объекта в регистре СоответствияОбъектовИнформационныхБаз в приемнике. Если связь неверная — удалим запись.
  2. Убедимся, что в ПКО на закладке «Настройки поиска» стоит галочка «Найти объект по уникальному идентификатору».
  3. Проверим обработчик Поля поиска. Если там написан программный код, он может переопределять стандартное поведение поиска по УИД.
  4. Проанализируем XML-файл: совпадает ли {Ref} выгружаемого объекта с тем GUID, который мы ищем в приемнике.
  5. Если используется современная версия конфигураций, рассмотрим возможность перехода на КД 3.0 (технология XDTO), которая работает более стабильно в типовых обменах через универсальный формат.

Помните, что работа с КД 2.0 требует внимательного отношения к деталям, особенно в части обработчиков событий и механизмов синхронизации, заложенных в логику типовых решений 1С.

← На главную