При настройке синхронизации данных через универсальный формат (EnterpriseData) с использованием конфигурации «Конвертация данных 3.0» разработчики нередко сталкиваются с ситуацией, когда требуется передать справочник или документ, отсутствующий в стандартной схеме XDTO текущей версии формата. При попытке настроить ПКО (правило конвертации объекта) и ПОД (правило обработки данных) для такого объекта процедура выгрузки аварийно завершается с ошибкой в общем модуле ОбменДаннымиXDTOСервер:
«Значение не является значением объектного типа (ЭтоСсылочныйТип) Если ПравилоКонвертации.ЭтоСсылочныйТип Тогда»
Проанализируем природу данной неполадки и подробно разберем все способы ее корректного решения.
Механизм обмена на базе EnterpriseData жестко опирается на XDTO-пакеты. Во время работы алгоритмов выгрузки в общем модуле ОбменДаннымиXDTOСервер выполняется сопоставление метаданных конфигурации с типами XDTO, зарегистрированными в правилах конвертации. Если разработчик добавил ПКО для прикладного объекта (например, справочника НаправленияДеятельности), но соответствующий XDTO-тип отсутствует в используемой схеме пакета EnterpriseData (например, версии 1.1), менеджер обмена не находит правила конвертации для типа формата и возвращает значение Неопределено.
При дальнейшем обращении к реквизиту ПравилоКонвертации.ЭтоСсылочныйТип платформа пытается прочитать свойство у значения Неопределено, что и приводит к падению сеанса синхронизации.
Если требуется полноценная передача справочника как самостоятельной сущности формата, необходимо расширить схему XDTO. Разберем этот процесс по шагам:
XDTO-пакеты, найти пакет формата обмена и добавить в него новый тип объекта (например, Справочник.НаправленияДеятельности), описав требуемые свойства (Ссылка, Наименование, Код и другие реквизиты). Если конфигурация находится на поддержке, расширение пакета XDTO можно выполнить через механизм расширений (начиная с платформы 8.3.14+).НаправленияДеятельности с созданным типом XDTO, и создаем соответствующее правило обработки данных.МенеджерОбменаЧерезУниверсальныйФормат обеих баз.Важно: структура XDTO-пакета в источнике и приемнике должна быть абсолютно идентичной, иначе база-приемник выдаст ошибку валидации XML при разборе входящего сообщения.
Формат версии 1.1 содержит базовый набор сущностей. В более поздних версиях EnterpriseData состав документов, справочников и аналитических разрезов существенно расширен. Проверим, поддерживают ли обе конфигурации более новую версию формата. Если более свежая версия доступна в обеих базах, целесообразно переключить обмен на нее, где требуемый справочник уже описан разработчиками платформы.
Если внесение изменений в структуру метаданных и XDTO-пакеты нежелательно, можно передавать данные справочника внутри существующих типов данных через механизм дополнительных свойств или обработчики событий.
Рассмотрим передачу значения через табличную часть ДополнительныеРеквизиты / ДополнительныеСвойства целевого документа:
ПослеЗагрузкиВсехДанных или ПриКонвертацииДанныхXDTO для поиска и сопоставления элемента в базе данных:
// Пример обработки значения на стороне приемника в обработчике загрузки
Если Объект.Свойства.Свойство("ДополнительныеРеквизиты") Тогда
Для Каждого СтрРеквизит Из Объект.ДополнительныеРеквизиты Цикл
Если СтрРеквизит.Свойство = "НаправлениеДеятельности" Тогда
НайденнаяСсылка = Справочники.НаправленияДеятельности.НайтиПоНаименованию(СтрРеквизит.Значение);
Если ЗначениеЗаполнено(НайденнаяСсылка) Тогда
Объект.НаправлениеДеятельности = НайденнаяСсылка;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Такой подход позволяет передавать аналитику без модификации типовых схем XDTO и снятия конфигурации с поддержки.