Почему не выгружается номенклатура по ссылке в 1С и как это исправить

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

При организации обмена данными между конфигурациями на базе Библиотеки стандартных подсистем (БСП) разработчики часто сталкиваются с ситуацией, когда документ переносится корректно, но вместо номенклатуры или контрагентов в базе-приемнике отображается надпись «Объект не найден». Это происходит из-за того, что система выгружает только ссылку (УИД), но не сами данные связанного справочника. Давайте подробно разберем, почему так происходит и как настроить правила обмена, чтобы данные передавались в полном объеме.

Разберем причину возникновения пустых ссылок

В стандартном механизме обмена по правилам конвертации (XML) существует два принципиально разных подхода к выгрузке связанных объектов. Рассмотрим их подробнее:

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

Когда мы используем планы обмена, БСП старается минимизировать объем передаваемых данных. По умолчанию выгружаются только те объекты, на которые зарегистрированы изменения. Если вы изменили документ, он попадет в обмен, но если сама номенклатура не менялась и не была зарегистрирована на узле плана обмена, БСП может проигнорировать ее полную выгрузку, даже если это указано в правилах конвертации.

Шаг 1. Проверка настроек в Конвертации данных 2.0

Первым делом проанализируем настройки Правил конвертации свойств (ПКС). Откроем наши правила в конфигурации «Конвертация данных» и найдем ПКО документа, в котором не выгружается номенклатура.

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

Шаг 2. Настройка правил регистрации объектов (ПРО)

Для корректной работы обмена через БСП недостаточно настроить только ПКО и ПКС. Проанализируем Правила регистрации объектов. Выясним причину, по которой номенклатура не попадает в пакет данных.

Рекомендуется использовать стратегию зависимой регистрации. Это означает, что при регистрации документа в плане обмена система должна автоматически регистрировать и все объекты, на которые он ссылается. Рассмотрим пример кода в обработчике ПередОбработкой или ПриРегистрации правила регистрации документа:


// Пример регистрации номенклатуры из табличной части документа
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
    ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, СтрокаТЧ.Номенклатура);
КонецЦикла;

Такой подход гарантирует, что к моменту формирования файла обмена номенклатура уже будет числиться в списке объектов на выгрузку, и БСП обработает ее полностью.

Шаг 3. Анализ регистра «Соответствия объектов информационных баз»

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

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

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

Шаг 4. Использование принудительной выгрузки в обработчиках

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

Посмотрим на пример кода:


// В обработчике ПередВыгрузкой ПКС Номенклатура
Значение = Объект.Номенклатура;
ВыгрузитьОбъект(Значение);

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

Шаг 5. Проверка версии БСП и глобальных настроек

В современных версиях БСП в настройках синхронизации данных (в пользовательском интерфейсе) могут быть установлены фильтры. Рассмотрим внимательно настройки в узле плана обмена:

Подводя итог, можно сказать, что проблема «Объект не найден» — это всегда следствие рассинхронизации между правилами конвертации и логикой работы плана обмена БСП. Комбинируя правильную настройку ПКС с регистрацией зависимых объектов, вы добьетесь стабильной и полной передачи данных между вашими базами.

← На главную