При переносе данных между базами 1С с помощью универсальной обработки «Выгрузка и загрузка данных XML 8.3» пользователи часто сталкиваются с критической ошибкой: «Ошибка преобразования данных XDTO: НачалоСвойства: ... ЭлементТип: { ... }». На первый взгляд проблема кажется нелогичной, так как конфигурации баз могут быть одного релиза, а типы реквизитов — идентичными. В рамках данной статьи мы подробно разберем причины возникновения этой ошибки, проанализируем механизмы работы XDTO-сериализации и найдем надежные способы решения проблемы.
Для начала проанализируем, что именно происходит в момент возникновения ошибки. Обработка Выгрузка и загрузка данных XML использует механизм XDTO-сериализации платформы 1С. Этот механизм преобразует объекты базы данных в текстовый формат XML и обратно. Важно понимать, что для XDTO критически важна не только идентичность имен реквизитов и их типов (например, String или Decimal), но и строгая последовательность расположения этих реквизитов в дереве метаданных.
Рассмотрим ситуацию: в базе-источнике в справочнике Сотрудники реквизит Код расположен выше реквизита Наименование. Если в базе-приемнике эти реквизиты по какой-то причине (например, после ручного редактирования или некорректного объединения) поменялись местами, парсер XDTO при чтении файла выдаст ошибку. Он ожидает встретить описание одного свойства, а получает другое. Именно это описывается в тексте ошибки как НачалоСвойства.
Даже если программные продукты имеют одинаковый номер релиза (например, Зарплата и управление персоналом КОРП 3.1.10.444), структуры метаданных могут различаться. Рассмотрим основные факторы, влияющие на это:
ОКПДТРКод, в разных версиях или при разных настройках могут иметь тип Строка (string) или Число (decimal). Если в одной базе тип данных был изменен вручную, загрузка прервется.Прежде чем приступать к сложным манипуляциям, нам необходимо убедиться, что конфигурации баз действительно идентичны «байт в байт». Проанализируем состояние баз с помощью стандартных средств платформы. Мы рекомендуем выполнить Сравнение конфигураций:
.cf..cf источника.Как показала практика обсуждения проблемы, наиболее быстрым и надежным способом решения является полное выравнивание структур. Рассмотрим, как это сделать:
Внимание! Перед выполнением этих действий обязательно создайте резервную копию базы данных.
1cv8.cf.Этот метод гарантирует, что все объекты метаданных, их последовательность и внутренние идентификаторы станут абсолютно одинаковыми в обеих информационных базах. После этого обработка Выгрузка и загрузка данных XML должна отработать без ошибок НачалоСвойства.
Если вы не можете обновить конфигурацию целиком, попробуем локализовать проблему. Проанализируем настройки обработки выгрузки:
ОКПДТР).Рассмотрим пример настройки отбора при выгрузке данных в коде (если бы мы писали свою выгрузку):
// Пример программной настройки выгрузки через XDTO
Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Temp\Data.xml");
ЗаписьXML.ЗаписатьОбъявлениеXML();
Выборка = Справочники.ОКПДТР.Выбрать();
Пока Выборка.Следующий() Цикл
// Важно, чтобы структура типа в ФабрикаXDTO совпадала в обеих базах
Сериализатор.ЗаписатьXML(ЗаписьXML, Выборка.ПолучитьОбъект());
КонецЦикла;
ЗаписьXML.Закрыть();
Иногда корень проблемы кроется в программном окружении. Посмотрим, на что стоит обратить внимание:
Версия обработки: Убедитесь, что вы используете актуальную версию обработки ВыгрузкаЗагрузкаДанныхXML.epf. Версии, выпущенные для платформы 8.3.10, могут некорректно работать на 8.3.16 и выше из-за изменений в логике работы XDTO-пакетов. Рекомендуется брать обработку из состава последнего дистрибутива ИТС.
Версия платформы: Если база-источник работает на версии 8.3.16.1224, а база-приемник на более старой или значительно более новой (например, 8.3.20), механизм сериализации может по-разному интерпретировать пустые значения или системные перечисления. Постарайтесь запускать обе базы на одинаковом релизе платформы.
В ходе обсуждения часто поднимается вопрос появления дублей. Важно помнить: обработка Выгрузка и загрузка данных XML сопоставляет объекты только по уникальному идентификатору (GUID).
Если в базе-приемнике уже есть элемент справочника ОКПДТР с кодом "123", но созданный вручную, у него будет другой GUID. При загрузке программа не найдет совпадения по идентификатору и создаст новый элемент. В результате вы получите два элемента с одинаковыми кодами и наименованиями. Чтобы этого избежать, используйте механизмы синхронизации данных (Обмен данными) с настройкой правил сопоставления по полям «Код» или «Наименование».
Проанализировав ситуацию с ошибкой преобразования XDTO, мы пришли к следующим выводам:
.cf файла.Следуя этим шагам, мы сможем обеспечить стабильный перенос данных между базами 1С, избегая прерываний процесса и повреждения структуры данных.