Как исправить ошибку «Не установлено значение одного из следующих свойств: Ссылка» при обмене данными через КД 3.0 и EnterpriseData

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

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

Рассмотрим детально причины возникновения этой проблемы, проанализируем механизм работы формата EnterpriseData и разберем пошаговое решение, которое поможет корректно зарегистрировать новый объект метаданных в системе обмена.

Разбор сути ошибки и механизма валидации XDTO

Когда мы работаем с КД 3.0, обмен происходит через универсальный формат EnterpriseData. В отличие от КД 2.0, где правила хранятся в отдельном XML-файле, в версии 3.0 логика преобразования описывается в модуле менеджера обмена, а структура данных жестко задается в пакетах XDTO. Ошибка Не установлено значение одного из следующих свойств: Ссылка возникает в момент работы метода ПрочитатьXML.

Проанализируем ситуацию: парсер видит в XML-файле начало описания объекта (например, КлючевыеСвойстваОборудования). В схеме XDTO для этого типа указано, что свойство Ссылка (идентификатор объекта) является обязательным (параметр minOccurs="1"). Если по какой-то причине система не смогла сопоставить тип или не выгрузила это поле, валидатор выдает ошибку еще до того, как данные будут переданы в логику поиска или записи объекта.

Шаг 1. Проверка состава XDTO-пакета

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

  1. Откроем конфигуратор и перейдем в ветку Общие -> Пакеты XDTO.
  2. Найдем пакет, соответствующий используемой версии EnterpriseData (например, EnterpriseData_1_6_1 или ваше расширение с измененным пакетом).
  3. Проверим наличие типа для нашего нового справочника. Важно понимать, что для каждого объекта обычно создается два типа: основной тип объекта (со всеми реквизитами) и тип КлючевыеСвойства.
  4. Критический момент: необходимо убедиться, что для нового справочника определен тип СправочникСсылка.НазваниеСправочника. Если в схеме указано использование ссылки, но сам тип Ссылка в пакете не привязан к метаданным или не определен как строка (UUID), система не поймет, как интерпретировать входящий тег Ссылка.

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

Шаг 2. Настройка сопоставления типов в модуле менеджера обмена

Даже если XDTO-пакет настроен верно, система должна знать, как сопоставлять типы объектов 1С с типами XDTO. Для этого проанализируем программный код в общем модуле МенеджерОбменаЧерезУниверсальныйФормат (или соответствующем модуле в расширении).

Найдем функцию ПолучитьСоответствиеТиповОбъектовXDTO. В ней должна быть прописана связь между строковым представлением типа в XDTO и типом метаданных 1С. Пример правильной регистрации выглядит так:


// Добавление соответствия для нового справочника "Оборудование"
Соответствие.Вставить(Тип("СправочникСсылка.Оборудование"), "Справочник.Оборудование");

Если этой записи нет, система выгрузки может проигнорировать формирование ключевых свойств, что и приведет к ошибке отсутствия ссылки в приемнике.

Шаг 3. Реализация ПКО и ПКС

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

Рассмотрим пример настройки ПКО для нового справочника:


Процедура ЗаполнитьПравилаКонверсииОбъектов(ПравилаКонверсии)
    
    Правило = ПравилаКонверсии.Добавить();
    Правило.Имя                   = "Справочник_Оборудование";
    Правило.ОбъектДанных          = "Справочник.Оборудование";
    Правило.ОбъектФормата         = "Справочник.Оборудование";
    Правило.Пример                = "Оборудование";
    
    // Важно: Убедитесь, что поиск по идентификатору разрешен
    Правило.ВариантИдентификации = "ПоУникальномуИдентификатору";
    
КонецПроцедуры

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

Шаг 4. Отладка и анализ XML-файла

Если ошибка сохраняется, воспользуемся методом «точки останова», как советовали участники форума. Нам нужно посмотреть, что на самом деле генерирует система.

  1. Установим точку останова в общем модуле ОбменДаннымиXDTOСервер на вызове метода ПрочитатьXML.
  2. При возникновении ошибки изучим содержимое переменной, содержащей XML-текст.
  3. Проверим узел КлючевыеСвойства. Если тег Ссылка отсутствует — проблема в выгрузке (модуль менеджера или ПКО). Если тег есть, но ошибка возникает — проблема в схеме XDTO (несоответствие типов или пространств имен Namespace).

Посмотрим на пример структуры правильного узла в XML:


<Справочник.Оборудование>
    <КлючевыеСвойства>
        <Ссылка>550e8400-e29b-41d4-a716-446655440000</Ссылка>
        <Наименование>Станок фрезерный</Наименование>
    </КлючевыеСвойства>
    <!-- Остальные реквизиты -->
</Справочник.Оборудование>

Обратите внимание: если в схеме XDTO свойство Наименование стоит первым, а Ссылка — вторым, то при отсутствии ссылки валидатор может выдать ошибку именно на этапе чтения структуры «Ключевые свойства», указывая на следующее за ним или ожидаемое свойство.

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

Подводя итог, выделим ключевые моменты, которые необходимо проверить при возникновении ошибки валидации XDTO в КД 3.0:

Использование КД 3.0 требует строгой дисциплины в описании метаданных. В отличие от более гибкой КД 2.0, здесь любая неточность в схеме XDTO блокирует загрузку всего пакета данных. Тщательная проверка сопоставления типов в модуле менеджера и актуализация XDTO-пакета — залог успешного обмена.

← На главную