При обновлении конфигурации «1С:Бухгалтерия Предприятия 3.0» (начиная с релизов 3.0.53 и выше) регулярно возникает ситуация, когда Библиотека Стандартных Подсистем (БСП) перестает поддерживать устаревшие версии формата EnterpriseData (например, 1.1 и 1.2). Если база-источник («1С:Розница 2.2» или «1С:Управление Торговлей 11») осталась на старом релизе и не может быть оперативно обновлена, стандартный механизм обмена данными прерывается с ошибкой XDTO-сериализации.
Рассмотрим причину возникновения этой проблемы и разберем по шагам доступные способы её устранения.
При попытке передать данные из старой базы-источника в новом формате (например, 1.4) через доработку кода или параметров выгрузки, платформа выбрасывает исключение следующего вида:
{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(800)}: Ошибка формирования объекта XDTO: Тип свойства <КлючевыеСвойства>. Имя свойства: <КлючевыеСвойства>.
{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(800)}: Ошибка формирования объекта XDTO: Тип свойства <ОбычноеСвойство>. Имя свойства: <Ссылка>.
{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(721)}: Ошибка при вызове метода контекста (Создать)
ЗначениеXDTO = ФабрикаXDTO.Создать(Свойство.Тип, ЗначениеСвойства);
по причине:
Ошибка отображения типов:
Отображение типа 'ДокументСсылка.ОтчетОРозничныхПродажах' в тип '{http://www.w3.org/2001/XMLSchema}anySimpleType'
Выясним причину такого поведения системы:
ФабрикаXDTO.Создать() не производит автоматическое неявное приведение ссылочных типов 1С (например, ДокументСсылка.ОтчетОРозничныхПродажах или СправочникСсылка.Номенклатура) к простым типам XML Schema. Если в схеме XDTO свойство Ссылка описано как простой тип (anySimpleType или string), передача объекта ссылочного типа напрямую вызывает ошибку.ДанныеИБ.Ссылка или объект типа УникальныйИдентификатор без явного приведения к строковому типу через Строка(), Фабрика XDTO отказывается корректно обработать данный элемент.ДанныеXDTO.КлючевыеСвойства не делает выгрузку валидной. В формате EnterpriseData 1.4 изменились не только ключевые свойства объектов, но и требования к структуре XDTO-пакетов и правилам конвертации.Если вы дорабатываете программный код выгрузки вручную в базе-источнике, важно правильно приводить ссылочные данные к строке. В XDTO-свойства типа anySimpleType необходимо передавать строковое представление уникального идентификатора с помощью функции Строка().
Разберем пример кода доработки ключевых свойств:
// Неправильно: передача ссылки напрямую вызывает ошибку отображения типов
// ДанныеXDTO.КлючевыеСвойства.Вставить("Ссылка", ДанныеИБ.Ссылка);
// Правильно: явное приведение УИД объекта к строковому значению
СтрокаУИД = Строка(ДанныеИБ.Ссылка.УникальныйИдентификатор());
ДанныеXDTO.КлючевыеСвойства.Вставить("Ссылка", СтрокаУИД);
Использование явного вызова функции Строка() для получения текстового представления УникальныйИдентификатор гарантирует, что Фабрика XDTO получит базовый строковый тип, соответствующий anySimpleType.
Наиболее корректный способ решения проблемы без полного обновления конфигурации «1С:Розница 2.2» — это обновление модуля правил конвертации с помощью конфигурации «1С:Конвертация данных 3.0» (или 3.1).
Рассмотрим порядок действий по шагам:
МенеджерОбменаЧерезУниверсальныйФормат.Если внесение изменений в базу-источник («1С:Розница 2.2») невозможно по организационным или техническим причинам, доработку можно выполнить на стороне базы-приемника.
Проанализируем доступные варианты доработки приемника:
КлючевыеСвойства под требования новой схемы.В случаях, когда адаптация обмена EnterpriseData требует слишком больших трудозатрат из-за сильной разницы в версиях БСП, универсальным альтернативным решением является настройка обмена через классическую «1С:Конвертацию данных 2.1».
С помощью универсальной обработки выгрузки и загрузки данных XML (ВыгрузкаЗагрузкаДанныхXML) вы можете переносить документы и справочники напрямую, полностью обходя ограничения версий формата EnterpriseData и Фабрики XDTO.