Почему не загружается XML с заказом в 1С через модуль обмена и как исправить ошибку чтения

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

При интеграции интернет-магазинов с 1С:Предприятие (например, 1С:Управление торговлей 11) обмен данными часто реализуется на базе стандарта CommerceML 2. Если файл формируется сторонним скриптом или внешней CMS, в журнале регистрации и логах модуля интеграции можно встретить сообщение: «Не удалось прочитать XML». При этом локально файл успешно открывается текстовым редактором, что затрудняет поиск причины.

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

Причина 1. Синтаксические ошибки в объявлении пространств имен XML

Платформенные механизмы 1С (такие как ЧтениеXML и ФабрикаXDTO) строго следуют спецификации W3C XML. Любое отклонение от стандарта делает документ невалидным, из-за чего разбор файла аварийно прекращается в момент инициализации.

Посмотрим на распространенную ошибку в корневом теге, возникающую при генерации файла внешними скриптами:


<КоммерческаяИнформация ДатаФормирования="2017-12-21T19:41:52" ВерсияСхемы="2.09" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns="urn:1C.ru:commerceml_2">

Обратим внимание на точки с запятой ; в конце значений атрибутов xmlns:xsi и xmlns:xs. Подобный синтаксис недопустим в XML-разметке. Атрибуты должны разделяться исключительно пробелами, а их значения не должны содержать посторонних разделителей.

Исправим заголовок файла в соответствии со стандартом:


<КоммерческаяИнформация ДатаФормирования="2017-12-21T19:41:52" ВерсияСхемы="2.09" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="urn:1C.ru:commerceml_2">

Причина 2. Несоответствие структуры пакета XDTO и проверка тега Контейнер

Модуль обмена с сайтом («1С-Битрикс» или типовой обмен) считывает файл через фабрику XDTO конфигурации. Если версия схемы, переданная в заголовке (например, ВерсияСхемы="2.09"), не совпадает с логикой обработки в модуле, процедура импорта завершается отказом.

В модуле Б_ОбменССайтомСервер проверка наличия обязательных узлов документа выполняется следующим образом:


ИначеЕсли НЕ Б_ОбменССайтомСервер.ОбъектXDTOСодержитСвойство(ДокументыXDTO, "Контейнер") Тогда
    
    Б_ОбменССайтомСервер.СообщитьПодробно("Нет документов для обработки", ПараметрыОбмена);
    Возврат Ложь;
    
КонецЕсли;

В зависимости от версии формата CommerceML и настроек обмена модуль может ожидать группировку документов внутри тега <Контейнер> либо прямое перечисление узлов <Документ>. Если структура пакета XDTO в конфигурации не находит ожидаемого корневого свойства или типов данных, генерируется исключение.

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

  1. Проверка валидности XML: Проверим файл через валидатор XML или откроем его в браузере. Если в коде присутствуют некорректные символы, незакрытые теги или лишняя пунктуация в атрибутах, браузер сразу укажет точную строку и позицию ошибки.
  2. Диагностика через внешнюю обработку в 1С: Чтобы увидеть детальный текст системной ошибки платформы, перехватим исключение вручную. Напишем тестовый код:
    
    Чтение = Новый ЧтениеXML;
    Попытка
        Чтение.ОткрытьФайл("C:\exchange\orders.xml");
        ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(Чтение);
        Чтение.Закрыть();
    Исключение
        Сообщить(ОписаниеОшибки());
        Если Чтение <> Неопределено Тогда
            Чтение.Закрыть();
        КонецЕсли;
    КонецПопытки;
    
    Объект ОписаниеОшибки() выдаст точную причину — отсутствие типа в пакете XDTO, некорректный символ или нарушение структуры схемы.
  3. Контроль кодировки и спецсимволов: Убедимся, что файл сохранен в кодировке UTF-8 (предпочтительно без BOM). При формировании строк внешними скриптами необходимо экранировать служебные символы XML (&amp;, &lt;, &gt;) и исключать непечатные управляющие символы ASCII.
  4. Использование библиотек генерации XML: Если файл формируется сторонним кодом (например, на Python), откажемся от конкатенации текстовых строк вручную в пользу специализированных библиотек (таких как xml.etree.ElementTree или lxml), которые гарантируют корректность синтаксиса и структуры.
← На главную