Ошибка при переносе справочника Номенклатура через XML в 1С:Бухгалтерия 8.3: как исправить?

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

Перенос данных между информационными базами — задача, с которой рано или поздно сталкивается любой специалист 1С. Казалось бы, использование стандартной обработки Выгрузка и загрузка данных в XML должно гарантировать быстрый результат, но на практике часто возникает неприятная ошибка. Проанализируем ситуацию: при попытке загрузки данных в копию базы система выдает исключение в модуле обработки, ссылаясь на метод ПрочитатьXML. Выясним причину этой проблемы и разберем по шагам все доступные способы её решения.

Почему возникает ошибка преобразования XML?

Разберем природу возникновения ошибки. Как правило, текст ошибки выглядит следующим образом:


{ВнешняяОбработка.ВыгрузкаЗагрузкаДанныхXML.МодульОбъекта(128)}: Ошибка при вызове метода контекста (ПрочитатьXML)
ЗаписанноеЗначение = ПрочитатьXML(ЧтениеXML);
по причине: Ошибка преобразования данных XML

Основная причина кроется в самой архитектуре обработки Выгрузка и загрузка данных в XML. Этот инструмент предназначен исключительно для обмена данными между идентичными конфигурациями. Он использует механизм жесткой сериализации объектов. Рассмотрим подробнее, что происходит «под капотом»: когда мы выгружаем справочник СправочникСсылка.Номенклатура, в XML-файл записывается вся его структура — все реквизиты, их типы и порядок.

В рассматриваемом случае базы имеют разные релизы: 3.0.57.17 и 3.0.60.44. Между этими версиями разработчики фирмы «1С» внесли изменения в структуру метаданных. Например, могли добавиться новые реквизиты, связанные с прослеживаемостью товаров, маркировкой или кодами ТН ВЭД. Когда метод ПрочитатьXML в базе-приемнике встречает структуру, которая не совпадает с его текущим описанием в Метаданные, он не может корректно сопоставить поля и прерывает работу. Координаты в ошибке (например, [27,12]) указывают на конкретную строку и позицию в файле, где парсер обнаружил неизвестный тег или несоответствие типа данных.

Способ №1. Выравнивание релизов конфигураций

Это самый очевидный и «чистый» способ решения проблемы, если мы хотим продолжить работу именно с обработкой XML. Рассмотрим алгоритм действий:

  1. Проанализируем текущие версии обеих баз через меню «Справка» — «О программе».
  2. Выясним, какая база является более актуальной (в нашем примере это 3.0.60.44).
  3. Обновим исходную базу (версию 3.0.57.17) до релиза 3.0.60.44. Важно добиться полного совпадения номеров версий, так как даже небольшое различие в патчах иногда может влиять на состав реквизитов.
  4. После обновления выполним повторную выгрузку справочника Номенклатура.
  5. Загрузим полученный файл в целевую базу.

Важный нюанс: Перед обновлением рабочей базы обязательно создайте резервную копию! Если обновление по каким-то причинам невозможно (например, база сильно доработана и нетиповая), этот способ нам не подойдет, и следует рассмотреть альтернативы.

Способ №2. Использование «Конвертации данных» (КД)

Если релизы баз должны оставаться разными, нам поможет инструмент 1С:Конвертация данных 2.0. В отличие от простой выгрузки XML, КД позволяет создать правила обмена, в которых мы явно укажем, какие поля нужно переносить, а какие можно игнорировать.

Разберем процесс упрощенно:

  1. Выгрузим описания метаданных из обеих конфигураций с помощью обработки MD83Exp.epf.
  2. Загрузим эти описания в конфигурацию «Конвертация данных».
  3. Создадим «План обмена» и «Правила конвертации объектов» (ПКО) для справочника Номенклатура.
  4. Настроим «Правила выгрузки данных» (ПВД).
  5. При настройке правил поиска выберем ЭтоГруппа, Наименование или Артикул (в зависимости от задачи), либо оставим поиск по УникальныйИдентификатор (GUID).

Использование обработки Универсальный обмен данными в формате XML вместе с созданными правилами позволит успешно обойти различия в метаданных, так как система будет переносить только те реквизиты, которые мы сопоставили вручную.

Способ №3. Загрузка данных из файла (Excel)

Посмотрим на более простой вариант, который не требует навыков программирования или работы с КД. В современных версиях «1С:Бухгалтерия 3.0» встроен мощный механизм Загрузка данных из файла. Он находится в разделе Администрирование — Обслуживание.

Выполним следующие шаги вместе:

  1. В исходной базе (3.0.57) откроем справочник Номенклатура.
  2. Нажмем кнопку Еще — Вывести список. Выберем необходимые колонки (Наименование, Артикул, Вид номенклатуры, Единица хранения и т.д.).
  3. Сохраним полученную таблицу в формате Excel.
  4. В базе-приемнике (3.0.60) перейдем в Загрузку из файла.
  5. Выберем наш файл и на этапе сопоставления колонок укажем системе, какому реквизиту справочника соответствует каждая колонка из таблицы.
  6. Нажмем кнопку «Загрузить».

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

Особенности переноса связанных данных

Проанализируем ситуацию глубже: справочник Номенклатура редко существует изолированно. При переносе важно учитывать ссылки на другие объекты. Посмотрим, что обязательно должно быть в базе-приемнике или переноситься вместе с основным справочником:

Для сохранения ссылочной целостности (чтобы документы, которые вы, возможно, будете переносить позже, «увидели» эту номенклатуру), лучше всего использовать перенос через GUID (Уникальный идентификатор). Это возможно только при использовании XML-обработок или специальных настроек в «Конвертации данных».

Резюме и рекомендации

Выясним краткий итог нашего разбора. Ошибка ПрочитатьXML — это всегда сигнал о том, что структуры баз не идентичны.

Для решения проблемы мы рекомендуем:

  1. Если есть возможность: Обновить базы до одного релиза. Это самый надежный способ сохранить все связи и системные данные.
  2. Если базы разные и нужно быстро перенести только справочник: Используйте загрузку через Excel.
  3. Если требуется регулярный перенос или перенос с сохранением связей: Используйте Конвертацию данных 2.0.

Помните, что перед любыми массовыми манипуляциями с данными необходимо проверять результат в тестовой базе. Проанализируйте после загрузки несколько карточек номенклатуры, проверьте заполнение реквизитов и корректность иерархии групп. Это позволит избежать ошибок в будущем бухгалтерском и налоговом учете.

← На главную