Как исправить ошибку преобразования данных XDTO со свойством scale при сравнении и объединении конфигураций 1С

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

При обновлении нетиповых или доработанных конфигураций, работающих под управлением платформы 1С:Предприятие 8.2 (например, Управление производственным предприятием 1.3), разработчики нередко сталкиваются со сбоем на этапе сравнения и объединения. В процессе сопоставления объектов конфигуратор аварийно прерывает операцию с сообщением об ошибке десериализации XDTO, указывающим на цепочку свойств: template, tableCell, item, value и scale.

Проанализируем техническую причину этой проблемы, выясним, почему прямая загрузка файла конфигурации (cf) проходит успешно, а интерактивное сравнение завершается аварийно, и разберем по шагам проверенные способы обхода и устранения данной ошибки.

Типичный текст ошибки в окне сообщений выглядит следующим образом:


Ошибка загрузки документа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: template    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: tableCell    Форма: Элемент    Тип: {http://v8.1c.ru/8.1/data-composition-system/area-template}TableCell по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: item    Форма: Элемент    Тип: {http://v8.1c.ru/8.1/data-composition-system/core}ParameterValue по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: value    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: scale    Форма: Атрибут    Тип: {http://www.w3.org/2001/XMLSchema}anySimpleType

Почему возникает ошибка: технический анализ

Выясним причину сбоя, рассмотрев структуру сериализации схемы компоновки данных (СКД). Пространство имен http://v8.1c.ru/8.1/data-composition-system/area-template относится к макетам оформления областей СКД, а именно к ячейкам таблиц макета (TableCell) и значениям их параметров (ParameterValue).

Начиная с версии платформы 8.3.9 (в частности, 8.3.9.2170 и новее), внутренний сериализатор XDTO платформы 1С при сохранении метаданных начал записывать дополнительный XML-атрибут scale для числовых значений оформления ячеек макета СКД. Этот атрибут задает масштаб или разрядность числа.

Когда выгруженный файл конфигурации (cf) или файл обновления (cfu), подготовленный или пересохраненный в среде платформы 8.3.9+, открывается в Конфигураторе линейки 8.2 (например, 8.2.19.90 или 8.2.19.130), внутренний парсер XDTO платформы 8.2 встречает незнакомый атрибут scale. Поскольку во встроенной схеме XDTO платформы 8.2 такой атрибут отсутствует, механизм валидации вызывает критическую ошибку десериализации.

Важно понимать разницу между операциями Конфигуратора:

  1. Загрузить конфигурацию из файла: операция выполняет низкоуровневую замену внутренних двоичных структур метаданных. При этом поэлементный парсинг макетов через XML/XDTO не производится, поэтому операция проходит без ошибок.
  2. Сравнить и объединить с конфигурацией из файла: Конфигуратор выполняет детальный разбор каждого объекта метаданных через XDTO для построения дерева сопоставления, что и приводит к падению на объектах с новыми атрибутами.
  3. Режим совместимости: установка свойства конфигурации Режим совместимости в значение Версия 8.2.13 влияет только на поведение объектов и встроенного языка в рантайме, но не обеспечивает полную обратную совместимость внутренних схем сериализации при сохранении файлов в новых релизах Конфигуратора 8.3.

Способ 1. Проведение сравнения и объединения под платформой 8.3

Рассмотрим основной и наиболее надежный способ решения проблемы. Если рабочая база работает в режиме совместимости с версией 8.2.13, всю процедуру сравнения и объединения можно выполнить с помощью Конфигуратора 8.3.

  1. Создадим резервную копию информационной базы (выгрузка информационной базы в dt или создание копии файла базы данных 1Cv8.1CD / бэкапа СУБД).
  2. Запустим базу данных в Конфигураторе платформы 8.3 (версии 8.3.9 или выше).
  3. Откроем конфигурацию и перейдем в меню Конфигурация — Сравнить, объединить с конфигурацией из файла....
  4. Выберем целевой файл релиза конфигурации. Поскольку платформа 8.3 содержит в схеме XDTO определение атрибута scale, построение дерева сравнения завершится штатно без ошибок.
  5. Выполним объединение, снимем или выставим нужные флажки сопоставления доработок и сохраним конфигурацию.
  6. Обновим конфигурацию базы данных (клавиша F7). Если среда эксплуатации требует дальнейшей работы пользователей на клиентах 8.2, база данных с сохраненным режимом совместимости 8.2.13 продолжит функционировать в штатном режиме.

Способ 2. Подготовка объединенной конфигурации в промежуточной базе

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

  1. Выгрузим текущую конфигурацию рабочей базы в файл через меню Конфигурация — Сохранить конфигурацию в файл... (получаем файл Work_Current.cf).
  2. Создадим чистую файловую информационную базу и откроем ее в Конфигураторе платформы 8.3.
  3. Загрузим туда текущую конфигурацию через команду Конфигурация — Загрузить конфигурацию из файла..., выбрав Work_Current.cf.
  4. В этой же промежуточной базе выполним команду Конфигурация — Сравнить, объединить с конфигурацией из файла... и накатим обновленный релиз (например, УПП 1.3.90.1). В среде 8.3 объединение пройдет успешно.
  5. После завершения объединения выгрузим итоговое состояние конфигурации через команду Конфигурация — Сохранить конфигурацию в файл... (получаем файл Work_Merged.cf).
  6. Вернемся в рабочую базу на платформе 8.2. Обязательно убедимся в наличии актуальной резервной копии.
  7. Выполним команду Конфигурация — Загрузить конфигурацию из файла... и укажем файл Work_Merged.cf. Поскольку загрузка не валидирует структуры через XDTO, она применится без ошибок, после чего останется только обновить конфигурацию базы данных по клавише F7.

Способ 3. Пересохранение файла поставки на платформе 8.3.8

Проанализируем альтернативный вариант, если необходимо сохранить возможность выполнять сравнение и объединение именно в среде 8.2.

Так как атрибут scale начал генерироваться в платформе ветки 8.3.9, файлы конфигураций, сохраненные в версиях 8.3.8 (например, 8.3.8.2054) и более ранних, еще не содержат этого новшества в XML-структурах СКД.

  1. Развернем эталонный релиз поставщика в Конфигураторе платформы 8.3.8.2054.
  2. Выгрузим конфигурацию поставщика в файл cf из Конфигуратора 8.3.8.
  3. Полученный файл используем для операции сравнения и объединения в рабочей базе под управлением Конфигуратора 8.2.19.90 или 8.2.19.130. Ошибка scale при этом не возникнет.

Способ 4. Локализация проблемного объекта при частичном обновлении

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

  1. Ошибка вызвана конкретными отчетами или обработками, содержащими макеты компоновки данных с переопределенным оформлением ячеек. В типовых конфигурациях таких объектов единицы.
  2. При интерактивном сравнении можно снять флажки со всего дерева объектов и включать ветки метаданных поочередно (документы, справочники, регистры).
  3. Все объекты, не содержащие макетов СКД с пользовательскими шаблонами областей, объединятся без ошибок.
  4. Для найденного проблемного отчета или обработки обновление макета можно пропустить либо перенести код и структуру схемы вручную.

Таким образом, переход на выполнение операций сравнения под актуальной версией платформы 8.3 или пересохранение файла конфигурации полностью устраняют конфликт десериализации XDTO.

← На главную