Почему при переносе характеристик номенклатуры в УПП 1.3 возникает ошибка «Объект не найден»?

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

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

Разберем механизм возникновения ошибки

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

Проанализируем настройки ПКО (Правила конвертации объектов)

Первым делом нам необходимо зайти в конфигурацию «Конвертация данных 2.1» и проверить правила для справочника ХарактеристикиНоменклатуры. Основная проблема часто кроется в одной-единственной галочке в настройках ПКО.

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

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

Настройка поиска по полям: GUID против реквизитов

В идентичных базах поиск обычно настроен по Internal ID (GUID). Это надежно, если объекты мигрируют только через обмен. Но если характеристика с одним и тем же наименованием (например, «Красный, XL») была заведена вручную в обеих базах независимо, их GUID будут разными. В этом случае поиск по идентификатору провалится.

Рассмотрим, как правильно настроить поля поиска для характеристик в УПП 1.3. Поскольку характеристики в этой конфигурации всегда подчинены владельцу (справочнику Номенклатура или ВидыНоменклатуры), поиск только по наименованию недопустим — характеристики с одинаковыми именами могут быть у разных товаров. Посмотрим на алгоритм настройки полей поиска:

  1. В ПКО ХарактеристикиНоменклатуры выберите реквизиты Владелец и Наименование в качестве полей поиска.
  2. Убедитесь, что установлен флаг «Продолжить поиск по полям поиска, если по идентификатору объект не найден».
  3. Проверьте, что для реквизита Владелец также настроены корректные правила конвертации.

Разберем пример кода, который можно разместить в обработчике «Поля поиска» в КД 2.1, чтобы гарантировать точность сопоставления:


Если НомерВариантаПоиска = 1 Тогда
    // Сначала система автоматически ищет по УИД (GUID)
ИначеЕсли НомерВариантаПоиска = 2 Тогда
    // Если по УИД не нашли, пробуем найти по владельцу и наименованию
    Если Свойства.Свойство("Владелец") И Свойства.Свойство("Наименование") Тогда
        Запрос = Новый Запрос;
        Запрос.Текст = 
        "ВЫБРАТЬ
        |   Характеристики.Ссылка
        |ИЗ
        |   Справочник.ХарактеристикиНоменклатуры КАК Характеристики
        |ГДЕ
        |   Характеристики.Владелец = &Владелец
        |   И Характеристики.Наименование = &Наименование";
        
        Запрос.УстановитьПараметр("Владелец", Свойства["Владелец"]);
        Запрос.УстановитьПараметр("Наименование", Свойства["Наименование"]);
        
        РезультатЗапроса = Запрос.Выполнить();
        Если Не РезультатЗапроса.Пустой() Тогда
            Выборка = РезультатЗапроса.Выбрать();
            Выборка.Следующий();
            СсылкаНаОбъект = Выборка.Ссылка;
        КонецЕсли;
    КонецЕсли;
КонецЕсли;

Проверим регистрацию в плане обмена

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

Посмотрим, как это исправить:

  1. В плане обмена проверьте состав. Справочник ХарактеристикиНоменклатуры должен быть включен в состав обмена с авторегистрацией или программной регистрацией.
  2. В настройках выгрузки КД 2.1 убедитесь, что включена опция выгрузки объектов по ссылкам. Однако помните, что характеристика не может быть записана в базу без Владельца. Если Номенклатура не выгружается вместе с характеристикой, запись в приемнике завершится ошибкой.

Особенности выгрузки характеристик в УПП 1.3

В УПП 1.3 характеристики — это справочник с типом владельца СправочникСсылка.Номенклатура или СправочникСсылка.ВидыНоменклатуры. Это критически важный момент для КД 2.1. Если при переносе документа РеализацияТоваровУслуг система пытается создать характеристику раньше, чем создана Номенклатура-владелец, возникнет ошибка записи объекта.

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

Выясним причину через отладку правил

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

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

Резюме и рекомендации

Для того чтобы новые характеристики успешно переносились между идентичными базами УПП 1.3, придерживайтесь следующих правил:

Таким образом, решив проблему на уровне сопоставления объектов и разрешений на запись, вы избавитесь от ошибок «Объект не найден» и обеспечите целостность данных при обмене между базами УПП.

← На главную