Как устранить дублирование номенклатуры при обмене между УТ 11 и БП 3.0?

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

Синхронизация данных между конфигурациями «Управление торговлей 11» (УТ) и «Бухгалтерия предприятия 3.0» (БП) через универсальный формат EnterpriseData — это мощный инструмент, который, однако, часто преподносит сюрпризы в виде дублей номенклатуры. Типичная ситуация: программист настраивает поля поиска (например, по коду), но система упорно создает новые карточки товаров, особенно если в документах фигурируют упаковки. Разберем детально механизмы этой проблемы и способы ее окончательного искоренения.

Понимаем приоритеты поиска в EnterpriseData

Прежде чем приступать к правке кода или правил, нам необходимо четко осознать, как именно система ищет объект при поступлении данных в базу-приемник (БП). В формате EnterpriseData порядок сопоставления жестко детерминирован. Проанализируем эти этапы по порядку:

  1. Регистр сведений «Публичные идентификаторы»: Это первый и самый главный рубеж. Система проверяет наличие записи в этом регистре. Если там найдено соответствие между идентификатором из УТ и ссылкой на объект в БП, поиск завершается успехом.
  2. Уникальный идентификатор (GUID/УИД): Если в регистре записей нет, система пытается найти объект по внутреннему УИД-у. Это работает только в том случае, если базы изначально создавались копированием или объекты переносились с сохранением идентификаторов.
  3. Поля поиска: Только если первые два шага не дали результата, в дело вступают настроенные поля поиска (например, Код, Наименование, ЭтоГруппа, ИНН для контрагентов и так далее).

Важный вывод: если вы изменили поля поиска (например, оставили только Код), но в регистре ПубличныеИдентификаторы уже «застряла» неверная связь или битая ссылка, ваши настройки полей поиска просто не будут задействованы. Система «споткнется» на первом этапе.

Проблема «битых» публичных идентификаторов

Рассмотрим ситуацию, когда в базе БП объект был удален и создан заново, либо произошел сбой при первой синхронизации. В регистре ПубличныеИдентификаторы может образоваться запись, указывающая на «Объект не найден». При следующем обмене система видит, что связь есть, пытается обратиться к объекту, получает пустую ссылку и, не переходя к поиску по коду, создает дубль. Чтобы исправить это, выполним следующие действия:

  1. Откроем в БП регистр сведений ПубличныеИдентификаторы (через «Все функции» или «Функции для технического специалиста»).
  2. Найдем записи, относящиеся к типу СправочникСсылка.Номенклатура.
  3. Если мы видим дублирующиеся записи для одного и того же товара или записи с битыми ссылками, их необходимо удалить.

Коллизия «Упаковка vs Единица измерения»

Одной из самых частых причин появления дублей является различие в структуре метаданных НСИ. В УТ 11 реализована сложная иерархия: у товара есть Базовая единица измерения (хранится в карточке) и Упаковки (отдельный справочник или табличная часть). В БП 3.0 понятие «упаковка» в документах отсутствует — там используется только единица измерения из классификатора ОКЕИ.

Разберем, как происходит трансформация данных:

При выгрузке документа из УТ (например, «Приобретение товаров и услуг»), менеджер обмена должен конвертировать количество из упаковок (кг, паллеты, пачки) в базовую единицу хранения (шт). Если в документе УТ указана упаковка «кг», а базовая единица — «шт», в БП должно прийти поступление в «шт» с пересчитанным количеством.

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

  1. В УТ перейдем в настройки синхронизации и выберем пункт «Состав отправляемых данных».
  2. Найдем проблемный документ и откроем его XML-просмотр (или выгрузим в файл).
  3. Проанализируем блок UnitOfMeasure. Если там передается идентификатор упаковки, а не базовой единицы, значит, проблема в логике выгрузки менеджера обмена.

Риски поиска по полям «Код + ЭтоГруппа»

Рассмотрим решение автора темы — оставить поиск только по коду и признаку группы. Это кажется логичным, но таит в себе опасности. Во-первых, префиксы. Если УТ имеет префикс «УТ», а БП — «БП», код товара 00001 при миграции может превратиться в УТ-00001. Если в БП уже есть товар с кодом 00001 (без префикса), поиск по коду не сработает.

Во-вторых, иерархия. Если вы переместили номенклатуру из одной группы в другую в УТ, система при поиске по полям Код + ЭтоГруппа + Родитель может создать дубль, так как «старый» товар в «старой» группе уже не соответствует условиям поиска.

Пошаговый алгоритм решения проблемы

Чтобы окончательно искоренить дубли, рекомендуем придерживаться следующей методики:

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

Шаг 2: Очистка регистра связей. Если сопоставление не помогает, попробуйте очистить записи в регистре ПубличныеИдентификаторы для проблемных позиций и запустить обмен повторно, внимательно контролируя процесс через помощник сопоставления.

Шаг 3: Модификация правил (для продвинутых). Если вы используете доработанные правила, проверьте модуль менеджера обмена. Убедитесь, что при передаче номенклатуры в составе документов всегда выгружается именно БазоваяЕдиницаИзмерения. В коде это может выглядеть примерно так:


// Пример логики в менеджере обмена (условный код)
Если ТипЗнч(ДанныеОбъекта.Упаковка) = Тип("СправочникСсылка.УпаковкиНоменклатуры") Тогда
    ПередаваемаяЕдиница = ДанныеОбъекта.Номенклатура.ЕдиницаИзмерения; // Берем базовую единицу
    КоличествоБП = ДанныеОбъекта.Количество * ДанныеОбъекта.Упаковка.Коэффициент;
КонецЕсли;

Резюме

Для устранения дублей при обмене УТ 11 — БП 3.0 не ограничивайтесь только настройкой полей поиска. Основное внимание уделите регистру Публичные идентификаторы и проверке того, как система обрабатывает упаковки. Помните, что ручное сопоставление данных через стандартный помощник синхронизации один раз — это гораздо эффективнее и безопаснее, чем постоянная правка правил поиска в конфигураторе.

← На главную