Почему при синхронизации между 1С:УТ и 1С:БП в поступлении появляется битая ссылка на номенклатуру и как это исправить?

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

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

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

Выясним причину, из-за которой элемент справочника Номенклатура не находит свое соответствие или не создается в информационной базе-приемнике:

  1. Нарушение очередности загрузки объектов в пакете обмена. В момент разбора XML-сообщения платформа сначала считывает ссылку на объект по переданному уникальному идентификатору (УИД) через метод ПолучитьСсылку и сразу подставляет ее в табличную часть документа. Если сам элемент справочника расположен в файле обмена позже документа или загружается в отдельном сеансе, документ записывается с еще не существующим в базе УИД.
  2. Скрытый сбой при записи элемента справочника в приемнике. Если в базе 1С:БП в модуле справочника Номенклатура, в подписке на событие ПередЗаписью или ПриЗаписи срабатывает условие Отказ = Истина (например, не заполнены обязательные для бухгалтерии реквизиты: НоменклатурнаяГруппа, СтавкаНДС), запись справочника отменяется. При этом транзакция записи документа может пройти успешно, оставив битую ссылку.
  3. Ошибки в регистре сведений «Соответствия объектов информационных баз». Если ранее для позиции выполнялась ручная синхронизация или изменялся УИД, в регистре сведений СоответствияОбъектовИнформационныхБаз (или в механизмах публичных идентификаторов) могут остаться некорректные записи. Механизм БСП пытается найти соответствие по устаревшему идентификатору и не находит нужный элемент.
  4. Срабатывание фильтров в правилах регистрации объектов (ПРО). При создании предварительных документов (например, ЗаказПоставщику) номенклатура может не зарегистрироваться к обмену из-за алгоритмических ограничений в правилах, а сам документ поступления выгружается безусловно.

Диагностика и поиск источника проблемы

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

  1. Проверка журнала регистрации в базе-приемнике. Отфильтруем события по уровню «Ошибка» и «Предупреждение» во время работы регламентного задания синхронизации. Если при записи справочника возник отказ, стек ошибки будет зафиксирован в журнале.
  2. Анализ подсистемы предупреждений БСП. Перейдем в раздел администрирования синхронизации и откроем форму «Предупреждения при синхронизации данных». Там отображаются незагруженные или конфликтующие объекты.
  3. Перехват сообщения обмена в момент возникновения ошибки. Реализуем в базе-приемнике через расширение проверку табличной части при записи документа поступления. Если обнаружена битая ссылка, сохраним текущее входящее сообщение обмена для детального анализа содержимого пакета.

Способ 1. Автоматическая дорегистрация связанных данных в источнике

Чтобы гарантировать, что вся номенклатура из проводимого документа попадет в тот же сеанс обмена, настроим регистрацию зависимых данных в базе-источнике (1С:УТ). В подписке на событие ПриЗаписи документа ПриобретениеТоваровУслуг принудительно зарегистрируем все позиции номенклатуры на узле обмена.

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


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

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

Способ 2. Автоматическое исправление битых ссылок в приемнике

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

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


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

Если ЕстьБитыеСсылки Тогда
    // Фиксируем информацию для анализа или выполняем повторный запрос данных
    ЗаписьЖурналаРегистрации("Синхронизация.БитыеСсылки", УровеньЖурналаРегистрации.Предупреждение,
        Объект.Метаданные(), Объект.Ссылка, "В документе обнаружены неразрешенные ссылки на номенклатуру.");
КонецЕсли;

Способ 3. Настройка значений по умолчанию в правилах конвертации

Проанализируем обработчики правил конвертации объектов (ПКО) для справочника Номенклатура. Чтобы предотвратить отказ при записи в 1С:БП, в обработчике ПередЗаписьюПолученныхДанных или ПослеЗагрузки обязательно проверим заполнение критически важных реквизитов бухгалтерского учета и подставим значения по умолчанию, если они не были переданы из 1С:УТ.

Посмотрим на пример заполнения реквизитов по умолчанию в базе-приемнике:


Если Не ЗначениеЗаполнено(Объект.НоменклатурнаяГруппа) Тогда
    Объект.НоменклатурнаяГруппа = Справочники.НоменклатурныеГруппы.ОсновнаяНоменклатурнаяГруппа;
КонецЕсли;

Если Не ЗначениеЗаполнено(Объект.СтавкаНДС) Тогда
    Объект.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
КонецЕсли;

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

← На главную