Как исправить ошибку отображения типов XDTO при обмене EnterpriseData между 1С:Розница 2.2 и 1С:Бухгалтерия Предприятия 3.0?

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

При обновлении конфигурации «1С:Бухгалтерия Предприятия 3.0» (начиная с релизов 3.0.53 и выше) регулярно возникает ситуация, когда Библиотека Стандартных Подсистем (БСП) перестает поддерживать устаревшие версии формата EnterpriseData (например, 1.1 и 1.2). Если база-источник («1С:Розница 2.2» или «1С:Управление Торговлей 11») осталась на старом релизе и не может быть оперативно обновлена, стандартный механизм обмена данными прерывается с ошибкой XDTO-сериализации.

Рассмотрим причину возникновения этой проблемы и разберем по шагам доступные способы её устранения.

Анализ ошибки XDTO и причины её возникновения

При попытке передать данные из старой базы-источника в новом формате (например, 1.4) через доработку кода или параметров выгрузки, платформа выбрасывает исключение следующего вида:


{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(800)}: Ошибка формирования объекта XDTO: Тип свойства <КлючевыеСвойства>. Имя свойства: <КлючевыеСвойства>.
{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(800)}: Ошибка формирования объекта XDTO: Тип свойства <ОбычноеСвойство>. Имя свойства: <Ссылка>.
{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(721)}: Ошибка при вызове метода контекста (Создать)
ЗначениеXDTO = ФабрикаXDTO.Создать(Свойство.Тип, ЗначениеСвойства);
по причине:
Ошибка отображения типов:
Отображение типа 'ДокументСсылка.ОтчетОРозничныхПродажах' в тип '{http://www.w3.org/2001/XMLSchema}anySimpleType'

Выясним причину такого поведения системы:

  1. Строгая типизация Фабрики XDTO: Метод ФабрикаXDTO.Создать() не производит автоматическое неявное приведение ссылочных типов 1С (например, ДокументСсылка.ОтчетОРозничныхПродажах или СправочникСсылка.Номенклатура) к простым типам XML Schema. Если в схеме XDTO свойство Ссылка описано как простой тип (anySimpleType или string), передача объекта ссылочного типа напрямую вызывает ошибку.
  2. Некорректная передача идентификатора: Если разработчик пытался передать в структуру ключевых свойств ссылку ДанныеИБ.Ссылка или объект типа УникальныйИдентификатор без явного приведения к строковому типу через Строка(), Фабрика XDTO отказывается корректно обработать данный элемент.
  3. Несоответствие схемы и правил формата: Простая подмена значения в структуре ДанныеXDTO.КлючевыеСвойства не делает выгрузку валидной. В формате EnterpriseData 1.4 изменились не только ключевые свойства объектов, но и требования к структуре XDTO-пакетов и правилам конвертации.

Способ 1. Корректное преобразование ссылки в строковый УИД

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

Разберем пример кода доработки ключевых свойств:


// Неправильно: передача ссылки напрямую вызывает ошибку отображения типов
// ДанныеXDTO.КлючевыеСвойства.Вставить("Ссылка", ДанныеИБ.Ссылка);

// Правильно: явное приведение УИД объекта к строковому значению
СтрокаУИД = Строка(ДанныеИБ.Ссылка.УникальныйИдентификатор());
ДанныеXDTO.КлючевыеСвойства.Вставить("Ссылка", СтрокаУИД);

Использование явного вызова функции Строка() для получения текстового представления УникальныйИдентификатор гарантирует, что Фабрика XDTO получит базовый строковый тип, соответствующий anySimpleType.

Способ 2. Обновление правил обмена через Конвертацию Данных 3.0 и расширения

Наиболее корректный способ решения проблемы без полного обновления конфигурации «1С:Розница 2.2» — это обновление модуля правил конвертации с помощью конфигурации «1С:Конвертация данных 3.0» (или 3.1).

Рассмотрим порядок действий по шагам:

  1. Возьмите актуальную версию конфигурации «1С:Розница» или открытые правила обмена для актуального релиза.
  2. Выгрузите правила конвертации объектов (ПКО) и правил конвертации свойств (ПКС) для формата EnterpriseData версии 1.4 (или более новой).
  3. Сформируйте обновленный модуль МенеджерОбменаЧерезУниверсальныйФормат.
  4. Подключите новый XDTO-пакет нужной версии формата и модуль правил в базу-источник через расширение конфигурации. Это позволит не снимать типовую конфигурацию с поддержки.

Способ 3. Доработка приемника («1С:Бухгалтерия Предприятия 3.0»)

Если внесение изменений в базу-источник («1С:Розница 2.2») невозможно по организационным или техническим причинам, доработку можно выполнить на стороне базы-приемника.

Проанализируем доступные варианты доработки приемника:

  1. Добавление поддержки старого формата: С помощью расширения конфигурации в БП 3.0 переопределяется модуль обмена данными и восстанавливаются правила обработчиков для старой версии формата EnterpriseData (1.1 или 1.2).
  2. Промежуточная трансформация XML-файла: Перед вызовом стандартного метода загрузки БСП выполняются программная подмена пространства имен XML в файле обмена с версии 1.2 на 1.4 и трансформация ключевых узлов КлючевыеСвойства под требования новой схемы.

Способ 4. Переход на обмен по правилам КД 2.1

В случаях, когда адаптация обмена EnterpriseData требует слишком больших трудозатрат из-за сильной разницы в версиях БСП, универсальным альтернативным решением является настройка обмена через классическую «1С:Конвертацию данных 2.1».

С помощью универсальной обработки выгрузки и загрузки данных XML (ВыгрузкаЗагрузкаДанныхXML) вы можете переносить документы и справочники напрямую, полностью обходя ограничения версий формата EnterpriseData и Фабрики XDTO.

← На главную