При настройке обмена данными между двумя базами «1С:Управление производственным предприятием 1.3» (УПП), которые кажутся идентичными, разработчики часто сталкиваются с неприятной ситуацией. Документы (например, «Реализация товаров и услуг») переносятся успешно, но в строках табличной части вместо конкретных характеристик отображается надпись «Объект не найден». Это происходит даже в том случае, если в базе-источнике характеристика заполнена корректно. В данной статье мы разберем механизмы работы «Конвертации данных 2.1» (КД), проанализируем причины этой ошибки и найдем способы ее решения.
Ошибка «Объект не найден» (битая ссылка) означает, что в базу-приемник была передана ссылка на объект (его уникальный идентификатор — GUID), но сам объект в справочнике приемника отсутствует. Система «знает», что на этом месте должен быть элемент, но не может прочитать его данные, так как запись в таблице базы данных не была создана. Рассмотрим основные причины, по которым это происходит при переносе характеристик.
Первым делом нам необходимо зайти в конфигурацию «Конвертация данных 2.1» и проверить правила для справочника ХарактеристикиНоменклатуры. Основная проблема часто кроется в одной-единственной галочке в настройках ПКО.
Выясним, не установлен ли в правилах конвертации объекта флаг «Не создавать новые объекты в приемнике». В идентичных базах часто предполагается, что справочники «синхронизированы по умолчанию», и разработчик намеренно или случайно отключает создание новых элементов, чтобы не «мусорить» в приемнике. Однако, если в источнике пользователь создал новую характеристику прямо перед отгрузкой, она обязана быть создана в приемнике в момент загрузки документа.
Проанализируем ситуацию: если флаг установлен, загрузчик находит ссылку в документе, пытается найти соответствующую характеристику в справочнике приемника и, не найдя ее, просто оставляет пустую ссылку. Для решения проблемы снимите этот флаг, если он установлен.
В идентичных базах поиск обычно настроен по Internal ID (GUID). Это надежно, если объекты мигрируют только через обмен. Но если характеристика с одним и тем же наименованием (например, «Красный, XL») была заведена вручную в обеих базах независимо, их GUID будут разными. В этом случае поиск по идентификатору провалится.
Рассмотрим, как правильно настроить поля поиска для характеристик в УПП 1.3. Поскольку характеристики в этой конфигурации всегда подчинены владельцу (справочнику Номенклатура или ВидыНоменклатуры), поиск только по наименованию недопустим — характеристики с одинаковыми именами могут быть у разных товаров. Посмотрим на алгоритм настройки полей поиска:
ХарактеристикиНоменклатуры выберите реквизиты Владелец и Наименование в качестве полей поиска.Владелец также настроены корректные правила конвертации.Разберем пример кода, который можно разместить в обработчике «Поля поиска» в КД 2.1, чтобы гарантировать точность сопоставления:
Если НомерВариантаПоиска = 1 Тогда
// Сначала система автоматически ищет по УИД (GUID)
ИначеЕсли НомерВариантаПоиска = 2 Тогда
// Если по УИД не нашли, пробуем найти по владельцу и наименованию
Если Свойства.Свойство("Владелец") И Свойства.Свойство("Наименование") Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Характеристики.Ссылка
|ИЗ
| Справочник.ХарактеристикиНоменклатуры КАК Характеристики
|ГДЕ
| Характеристики.Владелец = &Владелец
| И Характеристики.Наименование = &Наименование";
Запрос.УстановитьПараметр("Владелец", Свойства["Владелец"]);
Запрос.УстановитьПараметр("Наименование", Свойства["Наименование"]);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
СсылкаНаОбъект = Выборка.Ссылка;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если вы используете обмен через планы обмена, важно понимать, зарегистрированы ли изменения характеристик для узла-приемника. Рассмотрим ситуацию: вы изменили документ, он зарегистрировался к обмену. При выгрузке документа система видит ссылку на характеристику. Если в правилах выгрузки данных (ПВД) для характеристик стоит настройка «Выгружать объект целиком только при наличии регистрации», то система может выгрузить только «скелет» ссылки без реквизитов (наименования, владельца). В итоге приемник получит ссылку, но не сможет создать по ней объект, так как данных недостаточно.
Посмотрим, как это исправить:
ХарактеристикиНоменклатуры должен быть включен в состав обмена с авторегистрацией или программной регистрацией.Владельца. Если Номенклатура не выгружается вместе с характеристикой, запись в приемнике завершится ошибкой.В УПП 1.3 характеристики — это справочник с типом владельца СправочникСсылка.Номенклатура или СправочникСсылка.ВидыНоменклатуры. Это критически важный момент для КД 2.1. Если при переносе документа РеализацияТоваровУслуг система пытается создать характеристику раньше, чем создана Номенклатура-владелец, возникнет ошибка записи объекта.
Проанализируем порядок выгрузки. Обычно КД справляется с этим автоматически, но при сложных правилах стоит проверить приоритеты ПВД. Также убедитесь, что в правилах конвертации свойств (ПКС) для характеристики реквизит Владелец стоит в списке выше, чем остальные значимые поля, и для него разрешен поиск.
Если визуальный анализ правил не помог, воспользуемся инструментами отладки. Разберем шаги для выявления проблемы:
Ref (GUID), но нет Value для наименования и владельца — значит, характеристика выгружается как ссылка, а не как объект. Нужно менять ПВД или настройки ПКО.ПередЗаписью или ПриЗаписи в самой конфигурации УПП.Для того чтобы новые характеристики успешно переносились между идентичными базами УПП 1.3, придерживайтесь следующих правил:
Таким образом, решив проблему на уровне сопоставления объектов и разрешений на запись, вы избавитесь от ошибок «Объект не найден» и обеспечите целостность данных при обмене между базами УПП.