При настройке обмена данными в конфигурации «Конвертация данных 3.0» (КД 3.0) разработчики часто сталкиваются с ситуацией, когда добавление нового справочника в существующий поток обмена вызывает критическую ошибку на этапе анализа данных. Ошибка выглядит как «Ошибка преобразования данных XDTO» и указывает на то, что в структуре объекта не установлено значение одного из обязательных свойств, чаще всего — Ссылка.
Рассмотрим детально причины возникновения этой проблемы, проанализируем механизм работы формата EnterpriseData и разберем пошаговое решение, которое поможет корректно зарегистрировать новый объект метаданных в системе обмена.
Когда мы работаем с КД 3.0, обмен происходит через универсальный формат EnterpriseData. В отличие от КД 2.0, где правила хранятся в отдельном XML-файле, в версии 3.0 логика преобразования описывается в модуле менеджера обмена, а структура данных жестко задается в пакетах XDTO. Ошибка Не установлено значение одного из следующих свойств: Ссылка возникает в момент работы метода ПрочитатьXML.
Проанализируем ситуацию: парсер видит в XML-файле начало описания объекта (например, КлючевыеСвойстваОборудования). В схеме XDTO для этого типа указано, что свойство Ссылка (идентификатор объекта) является обязательным (параметр minOccurs="1"). Если по какой-то причине система не смогла сопоставить тип или не выгрузила это поле, валидатор выдает ошибку еще до того, как данные будут переданы в логику поиска или записи объекта.
Основная причина, с которой столкнулся автор темы, заключается в неполном определении типов в пакете XDTO. Разберем, что именно нужно проверить в первую очередь:
EnterpriseData (например, EnterpriseData_1_6_1 или ваше расширение с измененным пакетом).КлючевыеСвойства.СправочникСсылка.НазваниеСправочника. Если в схеме указано использование ссылки, но сам тип Ссылка в пакете не привязан к метаданным или не определен как строка (UUID), система не поймет, как интерпретировать входящий тег Ссылка.Как выяснилось в ходе обсуждения, автор пропустил именно определение типа СправочникСсылка.Оборудования в пакете. Без этого сопоставления механизм 1С не может корректно десериализовать данные из XML в объект базы данных.
Даже если XDTO-пакет настроен верно, система должна знать, как сопоставлять типы объектов 1С с типами XDTO. Для этого проанализируем программный код в общем модуле МенеджерОбменаЧерезУниверсальныйФормат (или соответствующем модуле в расширении).
Найдем функцию ПолучитьСоответствиеТиповОбъектовXDTO. В ней должна быть прописана связь между строковым представлением типа в XDTO и типом метаданных 1С. Пример правильной регистрации выглядит так:
// Добавление соответствия для нового справочника "Оборудование"
Соответствие.Вставить(Тип("СправочникСсылка.Оборудование"), "Справочник.Оборудование");
Если этой записи нет, система выгрузки может проигнорировать формирование ключевых свойств, что и приведет к ошибке отсутствия ссылки в приемнике.
Выясним причину возможного отсутствия данных в правилах конверсии. В КД 3.0 правила описываются в процедурах ЗаполнитьПравилаКонверсииОбъектов (ПКО) и ЗаполнитьПравилаКонверсииСвойств (ПКС).
Рассмотрим пример настройки ПКО для нового справочника:
Процедура ЗаполнитьПравилаКонверсииОбъектов(ПравилаКонверсии)
Правило = ПравилаКонверсии.Добавить();
Правило.Имя = "Справочник_Оборудование";
Правило.ОбъектДанных = "Справочник.Оборудование";
Правило.ОбъектФормата = "Справочник.Оборудование";
Правило.Пример = "Оборудование";
// Важно: Убедитесь, что поиск по идентификатору разрешен
Правило.ВариантИдентификации = "ПоУникальномуИдентификатору";
КонецПроцедуры
Если в правилах не указан способ идентификации или не заполнены правила для ключевых свойств, тег Ссылка может просто не попасть в исходящий файл обмена.
Если ошибка сохраняется, воспользуемся методом «точки останова», как советовали участники форума. Нам нужно посмотреть, что на самом деле генерирует система.
ОбменДаннымиXDTOСервер на вызове метода ПрочитатьXML.КлючевыеСвойства. Если тег Ссылка отсутствует — проблема в выгрузке (модуль менеджера или ПКО). Если тег есть, но ошибка возникает — проблема в схеме XDTO (несоответствие типов или пространств имен Namespace).Посмотрим на пример структуры правильного узла в XML:
<Справочник.Оборудование>
<КлючевыеСвойства>
<Ссылка>550e8400-e29b-41d4-a716-446655440000</Ссылка>
<Наименование>Станок фрезерный</Наименование>
</КлючевыеСвойства>
<!-- Остальные реквизиты -->
</Справочник.Оборудование>
Обратите внимание: если в схеме XDTO свойство Наименование стоит первым, а Ссылка — вторым, то при отсутствии ссылки валидатор может выдать ошибку именно на этапе чтения структуры «Ключевые свойства», указывая на следующее за ним или ожидаемое свойство.
Подводя итог, выделим ключевые моменты, которые необходимо проверить при возникновении ошибки валидации XDTO в КД 3.0:
СправочникСсылка.Использование КД 3.0 требует строгой дисциплины в описании метаданных. В отличие от более гибкой КД 2.0, здесь любая неточность в схеме XDTO блокирует загрузку всего пакета данных. Тщательная проверка сопоставления типов в модуле менеджера и актуализация XDTO-пакета — залог успешного обмена.