При работе с платформой 1С:Предприятие специалисты часто сталкиваются с необходимостью переноса данных между базами. Одним из самых быстрых инструментов для этого является типовая обработка «Выгрузка и загрузка данных XML», а также её модификации, например, Выгрузка и загрузка данных XML с дополнительными опциями, позволяющая делать отборы по подсистемам и независимым регистрам. Однако при использовании подобных инструментов нередко возникает критическая ошибка: Ошибка преобразования данных XDTO: НачалоСвойства. В данной статье мы подробно разберем, почему возникает эта проблема, как проанализировать структуру XML и что нужно сделать для успешной загрузки данных.
Для начала проанализируем ситуацию. Ошибка обычно локализуется в модуле объекта обработки на строке, где вызывается метод Сериализатор.ПрочитатьXML(ЧтениеXML). Рассмотрим типичный фрагмент кода, который вызывает сбой:
// Фрагмент кода обработки, где происходит ошибка
ЗаписанноеЗначение = Сериализатор.ПрочитатьXML(ЧтениеXML);
Этот метод использует механизм XDTO (XML Data Transfer Objects). Его особенность заключается в том, что он требует практически полной идентичности метаданных в базе-источнике и базе-приемнике. Если в файле XML присутствует описание свойства (реквизита), которого нет в целевой конфигурации, или если типы этих свойств различаются, система не сможет сопоставить данные и выдаст ошибку НачалоСвойства или КонецСвойства.
Самая распространенная причина — несовпадение версий (релизов) программ. Даже если разница в версиях кажется незначительной, разработчики 1С могли добавить новый реквизит в справочник или документ. Рассмотрим пример из практики: в справочнике ВидыКонтактнойИнформации в новом релизе появился реквизит Используется. Если вы выгружаете данные из обновленной базы в старую, загрузка прервется, так как приемник «не знает» о существовании такого поля. Чтобы увидеть разницу наглядно, можно провести анализ изменений конфигурации, который покажет список измененных объектов.
Что мы можем сделать:
Справочник.Сотрудники) полностью совпадает.В современных реалиях 1С активно используются расширения. Проанализируем их влияние на процесс обмена. Если расширение в базе-источнике добавляет реквизит в объект метаданных, этот реквизит будет включен в файл выгрузки. Если в базе-приемнике этого расширения нет, СериализаторXDTO столкнется с неизвестным свойством. Для профилактики рекомендуется выполнить анализ конфигураций и состава расширений, чтобы заранее выявить возможные несовпадения и ошибки.
Рекомендуемый порядок действий:
Иногда пользователи пытаются использовать эту обработку для переноса данных между разными программными продуктами, например, из ЗУП в Документооборот. Это в корне неверно. Рассмотрим, почему это не работает: данные в XML-файле привязаны к конкретным именам типов метаданных. Если вы пытаетесь загрузить СправочникСсылка.Сотрудники в конфигурацию, где структура этого справочника иная (другие реквизиты, типы), XDTO-пакет не пройдет валидацию. Однако, если конфигурации отличаются незначительно (например, для разработки), может помочь адаптивная выгрузка и загрузка данных XML, специально созданная для обмена между не полностью идентичными базами.
Как поступить в этом случае:
Для обмена между совсем разными конфигурациями следует использовать другие инструменты:
ЧтениеXML и ручное создание объектов.Если визуально реквизиты кажутся одинаковыми, но ошибка сохраняется, выясним причину с помощью небольшого эксперимента. Выполним следующие шаги:
Часто бывает, что в одной базе реквизит имеет тип Строка, а в другой — ЛюбаяСсылка. Даже такое различие блокирует работу Сериализатор.ПрочитатьXML.
Стоит обратить внимание и на версию платформы 1С:Предприятие. В некоторых релизах (в частности, ветки 8.3.21 и 8.3.22) фиксировались ошибки платформенного механизма XDTO при работе с определенными типами данных. Если вы столкнулись с необъяснимым поведением на этих версиях, попробуйте обновить платформу до актуальных стабильных релизов (например, 8.3.23.2040 и выше).
Если нам необходимо срочно загрузить данные, а обновить конфигурации нет возможности, можно прибегнуть к редактированию XML-файла.
В тексте ошибки 1С обычно указывает, на каком именно свойстве произошел сбой (например, НачалоСвойства: Используется). Мы можем открыть файл выгрузки и с помощью поиска и замены удалить упоминания этого реквизита. Однако будьте осторожны: удаление должно касаться и открывающего, и закрывающего тегов вместе со значением. Этот метод подходит только для опытных разработчиков и только для разовых операций.
Итоговая стратегия решения:
Соблюдение этих правил позволит избежать ошибок преобразования XDTO и обеспечит корректную миграцию данных между базами 1С.