Синхронизация данных между конфигурациями «Управление торговлей 11» (УТ) и «Бухгалтерия предприятия 3.0» (БП) через универсальный формат EnterpriseData — это мощный инструмент, который, однако, часто преподносит сюрпризы в виде дублей номенклатуры. Типичная ситуация: программист настраивает поля поиска (например, по коду), но система упорно создает новые карточки товаров, особенно если в документах фигурируют упаковки. Разберем детально механизмы этой проблемы и способы ее окончательного искоренения.
Прежде чем приступать к правке кода или правил, нам необходимо четко осознать, как именно система ищет объект при поступлении данных в базу-приемник (БП). В формате EnterpriseData порядок сопоставления жестко детерминирован. Проанализируем эти этапы по порядку:
Код, Наименование, ЭтоГруппа, ИНН для контрагентов и так далее).Важный вывод: если вы изменили поля поиска (например, оставили только Код), но в регистре ПубличныеИдентификаторы уже «застряла» неверная связь или битая ссылка, ваши настройки полей поиска просто не будут задействованы. Система «споткнется» на первом этапе.
Рассмотрим ситуацию, когда в базе БП объект был удален и создан заново, либо произошел сбой при первой синхронизации. В регистре ПубличныеИдентификаторы может образоваться запись, указывающая на «Объект не найден». При следующем обмене система видит, что связь есть, пытается обратиться к объекту, получает пустую ссылку и, не переходя к поиску по коду, создает дубль. Чтобы исправить это, выполним следующие действия:
ПубличныеИдентификаторы (через «Все функции» или «Функции для технического специалиста»).СправочникСсылка.Номенклатура.Одной из самых частых причин появления дублей является различие в структуре метаданных НСИ. В УТ 11 реализована сложная иерархия: у товара есть Базовая единица измерения (хранится в карточке) и Упаковки (отдельный справочник или табличная часть). В БП 3.0 понятие «упаковка» в документах отсутствует — там используется только единица измерения из классификатора ОКЕИ.
Разберем, как происходит трансформация данных:
При выгрузке документа из УТ (например, «Приобретение товаров и услуг»), менеджер обмена должен конвертировать количество из упаковок (кг, паллеты, пачки) в базовую единицу хранения (шт). Если в документе УТ указана упаковка «кг», а базовая единица — «шт», в БП должно прийти поступление в «шт» с пересчитанным количеством.
Дубль возникает в тот момент, когда алгоритм обмена пытается передать УИД упаковки вместо УИД базовой единицы. Если в правилах поиска номенклатуры косвенно участвует единица измерения, система не находит товар с «неправильной» единицей и создает новую карточку. Выясним причину через диагностику состава данных:
UnitOfMeasure. Если там передается идентификатор упаковки, а не базовой единицы, значит, проблема в логике выгрузки менеджера обмена.Рассмотрим решение автора темы — оставить поиск только по коду и признаку группы. Это кажется логичным, но таит в себе опасности. Во-первых, префиксы. Если УТ имеет префикс «УТ», а БП — «БП», код товара 00001 при миграции может превратиться в УТ-00001. Если в БП уже есть товар с кодом 00001 (без префикса), поиск по коду не сработает.
Во-вторых, иерархия. Если вы переместили номенклатуру из одной группы в другую в УТ, система при поиске по полям Код + ЭтоГруппа + Родитель может создать дубль, так как «старый» товар в «старой» группе уже не соответствует условиям поиска.
Чтобы окончательно искоренить дубли, рекомендуем придерживаться следующей методики:
Шаг 1: Ручное сопоставление. Самый надежный способ. В окне синхронизации данных воспользуйтесь кнопкой «Сопоставить данные». Если система выводит список несопоставленных объектов номенклатуры, свяжите их вручную. После этого в регистре ПубличныеИдентификаторы создастся жесткая связь, и поиск по полям (кодам/наименованиям) больше не будет играть роли — система всегда будет находить нужный объект по ссылке.
Шаг 2: Очистка регистра связей. Если сопоставление не помогает, попробуйте очистить записи в регистре ПубличныеИдентификаторы для проблемных позиций и запустить обмен повторно, внимательно контролируя процесс через помощник сопоставления.
Шаг 3: Модификация правил (для продвинутых). Если вы используете доработанные правила, проверьте модуль менеджера обмена. Убедитесь, что при передаче номенклатуры в составе документов всегда выгружается именно БазоваяЕдиницаИзмерения. В коде это может выглядеть примерно так:
// Пример логики в менеджере обмена (условный код)
Если ТипЗнч(ДанныеОбъекта.Упаковка) = Тип("СправочникСсылка.УпаковкиНоменклатуры") Тогда
ПередаваемаяЕдиница = ДанныеОбъекта.Номенклатура.ЕдиницаИзмерения; // Берем базовую единицу
КоличествоБП = ДанныеОбъекта.Количество * ДанныеОбъекта.Упаковка.Коэффициент;
КонецЕсли;
Для устранения дублей при обмене УТ 11 — БП 3.0 не ограничивайтесь только настройкой полей поиска. Основное внимание уделите регистру Публичные идентификаторы и проверке того, как система обрабатывает упаковки. Помните, что ручное сопоставление данных через стандартный помощник синхронизации один раз — это гораздо эффективнее и безопаснее, чем постоянная правка правил поиска в конфигураторе.