Как исправить ошибку «Неверный формат файла выгрузки» при переносе данных XML в 1С?

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

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

В этом материале мы подробно разберем причины возникновения этой ошибки, выясним, почему размер файла играет критическую роль, и проанализируем пошаговый алгоритм решения проблемы.

Основные причины возникновения ошибки

Проанализируем технические особенности работы обработки Выгрузка и загрузка данных XML. Данный инструмент осуществляет прямой перенос данных на основе считывания метаданных и XDTO-сериализации. В отличие от правил конвертации (используемых в «Конвертации данных»), эта обработка требует абсолютной идентичности структуры базовых объектов. Ошибка формата выгрузки обычно вызывается следующими факторами:

  1. Скрытые различия в структуре метаданных. Одинаковый номер релиза (например, 3.0.58.41) не гарантирует 100% совпадение метаданных. В одной из баз могли быть созданы дополнительные реквизиты, удалены объекты поддержки, установлены расширения или не завершены процессы обновления. При попытке прочитать XML-тег объекта, отсутствующего в целевой базе, считыватель выдает ошибку формата.
  2. Превышение лимита оперативной памяти (2 ГБ). При использовании 32-битной платформы 1С или 32-битного клиента адресное пространство процесса ограничено 2 гигабайтами. Если итоговый XML-файл приближается к объему 2 ГБ, платформа не может полностью поместить дерево элементов XML в память, из-за чего происходит обрыв чтения файла или аварийный сбой.
  3. Рекурсивная выгрузка связанных объектов по ссылкам. Флаг выгрузки зависимых объектов заставляет обработку тянуть за одним документом контрагентов, договоры, номенклатуру и все исторические документы, где они упоминались. Это приводит к экспорту огромного объема лишней информации и экспоненциальному росту файла.
  4. Незавершенная структура XML-документа. Если процесс выгрузки прервался из-за недостатка памяти или сбоя системы, файл оказывается «незакрытым» (отсутствует итоговый тег </Данные>). Такой файл автоматически определяется синтаксическим анализатором XML как файл неверного формата.

Шаг 1. Полное выравнивание метаданных конфигураций

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

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

После выравнивания структуры метаданных обе базы становятся полностью идентичными на уровне типов и реквизитов.

Шаг 2. Разделение выгрузки на поэтапные порции

Чтобы избежать превышения лимитов памяти и некорректного формирования гигантских XML-файлов объемом 2 ГБ и выше, перейдем к порционному переносу информации. Проанализируем правильную последовательность выгрузки объектов:

  1. Выгрузка нормативно-справочной информации (НСИ). В обработке Выгрузка и загрузка данных XML отметим только блок Справочники, Константы и Планы видов характеристик. Выгрузим и загрузим их в целевую базу.
  2. Выгрузка документов по периодам. Установим отбор по нужной организации и дате (например, за один месяц или квартал). Снимем флаги со справочников и выгрузим только документы выбранного интервала.
  3. Выгрузка регистров сведений и накоплений. Перенесем движения и регистры последней очередью, при необходимости задав аналогичный интервал дат.

Шаг 3. Настройка параметров выгрузки по ссылкам

При формировании выгрузки обратим внимание на настройки обработки. Снимем флажок Выгружать логически связанные объекты (или «Выгружать по ссылкам»). Это предотвратит рекурсивный захват исторической информации, не относящейся к выбранному периоду, и снизит размер файла выгрузки в несколько раз.

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


ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Data\ExportData.xml", "UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML();

Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);

// Начинаем запись корневого элемента
ЗаписьXML.ЗаписатьНачалоЭлемента("ВыгрузкаДанных");

// Выгрузка выборки без рекурсивного обхода связанных ссылок
Выборка = Справочники.Контрагенты.Выбрать();
Пока Выборка.Следующий() Цикл
    ОбъектСсылка = Выборка.ПолучитьОбъект();
    // Сериализуем только конкретный объект
    Сериализатор.ЗаписатьXML(ЗаписьXML, ОбъектСсылка);
КонецЦикла;

ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.Закрыть();

Шаг 4. Проверка прав доступа и загрузка данных

Перед выполнением загрузки в целевую базу необходимо убедиться в корректности прав пользователя, под которым запускается сеанс 1С:

  1. В целевой базе должен быть создан пользователь с полными административными правами (роли Администратор системы и Полные права).
  2. Необходимо убедиться, что у пользователя отключены или не препятствуют ограничению прав на уровне записей (RLS).
  3. Загрузку следует производить, запустив обработку Выгрузка и загрузка данных XML непосредственно под созданным администратором.

Последовательное выполнение выравнивания конфигураций через .cf файл и разделение данных на логические порции позволяет полностью избавиться от ошибки «Неверный формат файла выгрузки» и успешно перенести любой объем информации между базами 1С.

← На главную