При настройке обмена данными между 1С:Управление торговлей 10.3 и 1С:Розница (или другими конфигурациями на базе «1С:Предприятие 8») одной из самых досадных проблем является появление надписи «Объект не найден» (битых ссылок) в документах базы-приемника. Рассмотрим ситуацию, когда документ успешно переносится, но в его строках вместо номенклатуры или другого справочника мы видим лишь уникальный идентификатор (GUID) в угловых скобках. Разберем по шагам, почему это происходит и как это исправить, используя инструменты «Конвертации данных» и механизмы регистрации изменений.
Прежде всего, нам необходимо понять механику возникновения этой ошибки. Надпись <Объект не найден> (170:80c38c89...) означает, что в базе-приемнике (Розница) создана ссылка на объект, но самого объекта (записи в таблице справочника) физически не существует. Это происходит в трех случаях:
Рассмотрим логику работы типового обмена. Проанализируем ситуацию: если мы регистрируем только документ, система 1С при выгрузке должна «подтянуть» все связанные с ним объекты. Однако во многих правилах обмена стоит ограничение на выгрузку связанных данных, чтобы не передавать лишнюю информацию.
Проверим, зарегистрированы ли элементы справочника к обмену. Для этого выполним следующие действия:
Если справочника нет в списке регистрации, это не всегда ошибка. Но если мы хотим убедиться, что проблема именно в правилах, попробуем зарегистрировать один проблемный элемент вручную и запустить обмен. Если после этого в Рознице объект «оживет», значит, правила обмена настроены так, что они не выгружают данные справочников «по ссылке» из документа.
Если ручная регистрация не помогает или мы хотим автоматизировать процесс, нам нужно заглянуть «под капот» правил обмена (обычно это файл XML, который загружается в настройку обмена). Разберем настройки в конфигурации «Конвертация данных 2.0»:
Проанализируем ПКС (Правила конвертации свойств) для табличной части документа. Часто там установлена галочка «Выгружать объект только по ссылке». Если она стоит, то при выгрузке документа система запишет в файл обмена только GUID номенклатуры. Она будет надеяться, что этот объект уже есть в Рознице или придет отдельным сообщением. Если его там нет — мы получим «Объект не найден».
Решение: Снимите галочку «Выгружать объект только по ссылке», чтобы данные объекта выгружались вместе с документом.
Ситуация осложняется, если у справочника в базе-приемнике есть Владелец (например, Характеристики номенклатуры или Единицы измерения). Выясним, почему это критично. В 1С нельзя записать объект, у которого не заполнен обязательный реквизит Владелец.
Рассмотрим алгоритм поиска:
Проанализируем настройки ПКО для такого справочника. В поле «Поля поиска» обязательно должен быть указан владелец. Также убедитесь, что в правилах выгрузки владельца (например, самой Номенклатуры) не стоит запрет на выгрузку.
Самый надежный способ диагностики — посмотреть, что реально уходит из УТ 10. Выгрузите данные в файл и откройте его любым текстовым редактором (Notepad++ отлично подходит). Найдем блок нашего документа и посмотрим на узел нужного справочника:
<Свойство Имя="Номенклатура" Тип="СправочникСсылка.Номенклатура">
<Ссылка>
<Номенклатура>
<УИД>80c38c89-a57c-6056-11ed-9c7cb771d33a</УИД>
<!-- Если здесь нет Наименования и других реквизитов, значит объект выгружен ПО ССЫЛКЕ -->
</Номенклатура>
</Ссылка>
</Свойство>
Если в файле внутри тега <Ссылка> присутствуют только идентификаторы, значит, нужно менять настройки выгрузки в ПКО или ПКС, чтобы данные объекта включались в пакет.
Иногда типовая логика обмена «заставляет» нас регистрировать справочники, но мы этого не хотим, чтобы не перегружать обмен. В этом случае в правилах конвертации (ПКО) в обработчике «При выгрузке» можно прописать принудительное включение объекта в файл. Посмотрим на пример логики:
// В обработчике ПКС (Правила конвертации свойств) для реквизита "Номенклатура"
// Мы можем управлять выгрузкой объекта целиком
ВыгрузитьОбъект = Истина;
Однако помните, что это может замедлить обмен, если справочников очень много. Проанализируем ситуацию с фильтрами: если в Узле обмена стоит отбор по складу, убедитесь, что связанные справочники не отсекаются этим фильтром. В некоторых конфигурациях логика такая: если номенклатура не входит в разрешенную группу для магазина, она не выгрузится даже как часть документа.
Для окончательного решения проблемы «Объект не найден» выполните следующие действия:
НайтиОбъектПоВладельцу = Истина или проверьте приоритет выгрузки владельца в дереве ПКС.Таким образом, мы выяснили, что причина кроется либо в неполной передаче данных (настройка «выгружать только по ссылке»), либо в невозможности создать объект в приемнике из-за отсутствия ключевых реквизитов, таких как Владелец.