Перенос данных между информационными базами — задача, с которой рано или поздно сталкивается любой специалист 1С. Казалось бы, использование стандартной обработки Выгрузка и загрузка данных в XML должно гарантировать быстрый результат, но на практике часто возникает неприятная ошибка. Проанализируем ситуацию: при попытке загрузки данных в копию базы система выдает исключение в модуле обработки, ссылаясь на метод ПрочитатьXML. Выясним причину этой проблемы и разберем по шагам все доступные способы её решения.
Разберем природу возникновения ошибки. Как правило, текст ошибки выглядит следующим образом:
{ВнешняяОбработка.ВыгрузкаЗагрузкаДанныхXML.МодульОбъекта(128)}: Ошибка при вызове метода контекста (ПрочитатьXML)
ЗаписанноеЗначение = ПрочитатьXML(ЧтениеXML);
по причине: Ошибка преобразования данных XML
Основная причина кроется в самой архитектуре обработки Выгрузка и загрузка данных в XML. Этот инструмент предназначен исключительно для обмена данными между идентичными конфигурациями. Он использует механизм жесткой сериализации объектов. Рассмотрим подробнее, что происходит «под капотом»: когда мы выгружаем справочник СправочникСсылка.Номенклатура, в XML-файл записывается вся его структура — все реквизиты, их типы и порядок.
В рассматриваемом случае базы имеют разные релизы: 3.0.57.17 и 3.0.60.44. Между этими версиями разработчики фирмы «1С» внесли изменения в структуру метаданных. Например, могли добавиться новые реквизиты, связанные с прослеживаемостью товаров, маркировкой или кодами ТН ВЭД. Когда метод ПрочитатьXML в базе-приемнике встречает структуру, которая не совпадает с его текущим описанием в Метаданные, он не может корректно сопоставить поля и прерывает работу. Координаты в ошибке (например, [27,12]) указывают на конкретную строку и позицию в файле, где парсер обнаружил неизвестный тег или несоответствие типа данных.
Это самый очевидный и «чистый» способ решения проблемы, если мы хотим продолжить работу именно с обработкой XML. Рассмотрим алгоритм действий:
Номенклатура.Важный нюанс: Перед обновлением рабочей базы обязательно создайте резервную копию! Если обновление по каким-то причинам невозможно (например, база сильно доработана и нетиповая), этот способ нам не подойдет, и следует рассмотреть альтернативы.
Если релизы баз должны оставаться разными, нам поможет инструмент 1С:Конвертация данных 2.0. В отличие от простой выгрузки XML, КД позволяет создать правила обмена, в которых мы явно укажем, какие поля нужно переносить, а какие можно игнорировать.
Разберем процесс упрощенно:
MD83Exp.epf.Номенклатура.ЭтоГруппа, Наименование или Артикул (в зависимости от задачи), либо оставим поиск по УникальныйИдентификатор (GUID).Использование обработки Универсальный обмен данными в формате XML вместе с созданными правилами позволит успешно обойти различия в метаданных, так как система будет переносить только те реквизиты, которые мы сопоставили вручную.
Посмотрим на более простой вариант, который не требует навыков программирования или работы с КД. В современных версиях «1С:Бухгалтерия 3.0» встроен мощный механизм Загрузка данных из файла. Он находится в разделе Администрирование — Обслуживание.
Выполним следующие шаги вместе:
Номенклатура.Excel.Этот метод полностью игнорирует различия в версиях конфигураций, так как работает на уровне текстовых и числовых данных, а не программных структур XML.
Проанализируем ситуацию глубже: справочник Номенклатура редко существует изолированно. При переносе важно учитывать ссылки на другие объекты. Посмотрим, что обязательно должно быть в базе-приемнике или переноситься вместе с основным справочником:
Для сохранения ссылочной целостности (чтобы документы, которые вы, возможно, будете переносить позже, «увидели» эту номенклатуру), лучше всего использовать перенос через GUID (Уникальный идентификатор). Это возможно только при использовании XML-обработок или специальных настроек в «Конвертации данных».
Выясним краткий итог нашего разбора. Ошибка ПрочитатьXML — это всегда сигнал о том, что структуры баз не идентичны.
Для решения проблемы мы рекомендуем:
Excel.Конвертацию данных 2.0.Помните, что перед любыми массовыми манипуляциями с данными необходимо проверять результат в тестовой базе. Проанализируйте после загрузки несколько карточек номенклатуры, проверьте заполнение реквизитов и корректность иерархии групп. Это позволит избежать ошибок в будущем бухгалтерском и налоговом учете.