Как исправить ошибку разбора XML при обновлении информационной базы 1С:УПП?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При обновлении информационной базы в режиме «1С:Предприятие» (в частности, конфигурации «1С:Управление производственным предприятием» редакции 1.3) процесс может аварийно прерваться со следующим сообщением:

{Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта}: Ошибка при вызове метода контекста (Прочитать)
ПравилаОбмена.Прочитать();
по причине:
Ошибка разбора XML: - [1,1] Фатальная ошибка: Extra content at the end of the document

Ниже детально разберем, почему возникает этот сбой, как устроен механизм обновления правил и как поэтапно решить проблему.

Причины возникновения ошибки

Координаты ошибки [1,1] (первая строка, первый символ) указывают на то, что штатный XML-парсер платформы не смог прочесть даже заголовок XML-документа. В контексте работы подсистемы обмена данными это означает одно из следующих состояний:

  1. Файл правил пуст (0 байт). Процедура обновления пытается прочитать правила из макета метаданных или из регистра, формирует временный файл на диске в каталоге %TEMP%, но в источнике данных ничего нет.
  2. Повреждение структуры правил. В макете или регистре записан невалидный текст, присутствуют мусорные байты, нарушен BOM-маркер или перед тегом <?xml ...> находятся невидимые служебные символы.
  3. Некорректное объединение конфигураций. Ошибка часто возникает, если конфигурация переносилась через сравнение и объединение со старшего или младшего релиза без полного обновления поставщика, в результате чего макеты планов обмена затерлись или очистились.
  4. Битые записи в регистре сведений. В существующей базе в регистре ПравилаДляОбменаДанными сохранены поврежденные данные в ресурсе с типом ХранилищеЗначения.

Механизм работы обновления правил

Проанализируем логику работы типовых обработчиков обновления. При переходе на новый релиз в процедурах обновления выполняется синхронизация версий правил конвертации и регистрации:

  1. Подсистема обращается к общему модулю ОбменДаннымиПереопределяемый и запрашивает перечень планов обмена.
  2. Для каждого используемого плана обмена из метаданных считываются макеты: ПравилаОбмена, ПравилаОбменаКорреспондента и ПравилаРегистрации.
  3. Макет выгружается во временный файл, после чего обработка КонвертацияОбъектовИнформационныхБаз выполняет вызов метода ПравилаОбмена.Прочитать().
  4. Если макет оказался пустым или поврежденным, парсер выбрасывает исключение и останавливает все процедуры обновления базы данных.

Пошаговая локализация сбойных правил через отладчик

Чтобы точно определить, какой именно план обмена или макет вызвал сбой, выполним пошаговую отладку в Конфигураторе:

  1. Откроем дерево метаданных конфигурации и найдем объект Обработка.КонвертацияОбъектовИнформационныхБаз.
  2. Перейдем в модуль объекта обработки к строке, указанной в тексте ошибки (в районе вызова метода ПравилаОбмена.Прочитать()).
  3. Установим точку останова на этой строке.
  4. Запустим базу в режиме отладки («1С:Предприятие»). Система автоматически начнет выполнение регламентных процедур обновления и остановится на нашей точке.
  5. В окне «Табло» или «Вычислить выражение» проверим имя временного файла, путь к нему и сопутствующие переменные контекста:
    
    // В табло проверяем путь к выгруженному файлу
    ИмяФайлаПравил;
    // Проверяем имя плана обмена или узла, который сейчас обрабатывается
    ПланОбменаСсылка;
    
  6. Пока открыто окно отладчика, перейдем в проводнике операционной системы по пути временного файла (например, в каталог AppData\Local\Temp\...) и откроем сгенерированный XML-файл в текстовом редакторе. Если файл имеет нулевой размер или содержит поврежденный заголовок, мы сразу увидим источник сбоя.

Способы устранения проблемы

После выявления конкретного плана обмена разберем варианты восстановления его работоспособности.

Вариант 1. Восстановление макетов из эталонной конфигурации

Если временный файл оказался пустым из-за поврежденного макета в конфигурации:

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

Вариант 2. Очистка и перезапись регистра сведений «ПравилаДляОбменаДанными»

Если макеты в метаданных валидны, но ошибка вызвана повреждением сохраненных настроек в информационной базе:

  1. Откроем базу в режиме «1С:Предприятие», отменив или обойдя остановку на ошибке, либо через функции технического специалиста откроем регистр сведений ПравилаДляОбменаДанными.
  2. Найдем запись, соответствующую проблемному плану обмена.
  3. Если настроен обмен с другой базой, вручную перезапишем правила через форму настройки обмена, загрузив корректный файл правил обмена.
  4. Если правила типовые и берутся из конфигурации, удалим поврежденную запись из регистра ПравилаДляОбменаДанными. При повторном запуске обновления механизм БСП заново корректно считает правила из метаданных и пересоздаст запись регистра.

Вариант 3. Временное отключение нетипового плана обмена

Если сбой вызывает нетиповой или самописный план обмена, добавленный разработчиками, у которого макеты правил были созданы пустыми «про запас»:

  1. Откроем общий модуль ОбменДаннымиПереопределяемый.
  2. Найдем процедуру ПолучитьПланыОбмена.
  3. Временно закомментируем строку добавления проблемного плана обмена в массив планов: // ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.НашСамописныйОбмен);
  4. Сохраним конфигурацию и выполним запуск обновления в режиме «1С:Предприятие». Процедуры обновления остальных подсистем успешно завершатся.
  5. После завершения обновления вернем регистрацию плана обмена, предварительно наполнив его макеты корректными правилами конвертации, выгруженными из конфигурации «Конвертация данных».
← На главную