Что делать, если при отправке XML-чека в ЕГАИС через УТМ возникает ошибка «Невалидный xml документ»

Программист 1С:Розница Торговля и дистрибуция
← На главную

При работе с ЕГАИС (Единая государственная автоматизированная информационная система) специалисты часто сталкиваются с ситуацией, когда сформированный XML-файл чека не принимается Универсальным транспортным модулем (УТМ). Ошибка «Невалидный xml документ» является одной из самых распространенных и в то же время неинформативных, так как УТМ не всегда указывает на конкретную строку или символ, вызвавший проблему. В этой статье мы подробно разберем причины возникновения данной ошибки, проанализируем структуру чека и определим правильные способы передачи данных.

Анализируем структуру XML-документа

Для начала рассмотрим типовой пример XML-файла чека, который часто используется в качестве шаблона. Проанализируем структуру элементов и атрибутов, чтобы понять, какие данные являются критически важными для валидации:


<?xml version="1.0" encoding="UTF-8"?>
<Cheque
inn="7726015994"
datetime="1211151723"
kpp="772401001"
kassa="45664"
address="г. Москва, ул. Никопольская, 4"
name="Гармония"
number="45"
shift="1"
>
<Bottle barcode="16N00001CJPFO4450G71NSP20905004004797o326811691897119682191882211821"
ean="177736216338" price="150.00" volume="1.0000"/>
<Bottle
barcode="19N00000XOPN13MM66T0HVF311220130003476539219152175585956302712947109"
ean="177736216338" price="123.45" volume="0.7500" />
</Cheque>

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

  1. datetime — дата и время должны строго соответствовать формату DDMMYYHHMM. Любое отклонение (например, использование секунд или другого разделителя) приведет к невалидности.
  2. inn и kpp — должны соответствовать данным, зарегистрированным в ФСРАР для вашего FSRAR_ID. Для индивидуальных предпринимателей (ИП) поле kpp обычно отсутствует или должно быть пустым.
  3. barcode — это один из самых чувствительных параметров. Длина марки должна быть строго 68 символов для старых образцов или соответствовать формату DataMatrix для новых. Попадание лишнего пробела или скрытого символа переноса строки при копировании мгновенно делает документ «невалидным».
  4. price — цена должна быть указана через точку.

Выясняем причины: кодировка и BOM

Одной из наиболее скрытых причин ошибки является кодировка текстового файла. УТМ ЕГАИС требует строгого соблюдения формата UTF-8. Однако существует важный нюанс — BOM (Byte Order Mark).

Разберем ситуацию подробнее: многие текстовые редакторы (включая стандартный Блокнот Windows) при сохранении в UTF-8 добавляют в начало файла невидимую метку (BOM). Для большинства программ это не проблема, но УТМ может воспринять эти скрытые байты как некорректные символы в начале XML-декларации, что приведет к ошибке валидации еще до начала чтения тегов.

Проанализируем шаги для проверки кодировки:

Проблема способа отправки: почему веб-интерфейс не подходит

Часто пользователи пытаются отправить сформированный XML-файл через «домашнюю страницу» УТМ (обычно доступную по адресу localhost:8080). Разберем, почему это может не работать для чеков.

Встроенная функция загрузки файлов на главной странице УТМ предназначена в первую очередь для документов документооборота (накладных ТТН, актов постановки на баланс и т.д.). Розничные чеки обрабатываются УТМ через другой шлюз (endpoint). При попытке отправить чек через стандартную форму браузера может нарушаться заголовок Content-Type, или же файл отправляется не на тот внутренний адрес модуля, из-за чего система выдает общую ошибку невалидности.

Посмотрим на правильное решение — использование утилиты curl. Это стандартный способ взаимодействия с УТМ, описанный в документации производителя. Для отправки файла чека необходимо выполнить команду в командной строке:

curl -F "xml_file=@cheque.xml" http://localhost:8080/xml

Здесь cheque.xml — это имя вашего файла. Обратите внимание, что адрес /xml предназначен именно для обработки розничных чеков. Использование этого метода гарантирует, что данные будут переданы в «чистом» виде без искажений, вносимых браузерными формами.

Проверяем актуальность версий XSD-схем

ЕГАИС регулярно обновляет требования к форматам документов. В примере выше представлен формат Cheque версии 1. В современных условиях ФСРАР требует использования более новых версий схем (V2, V3 или V4), которые поддерживают поштучный учет алкогольной продукции.

Рассмотрим ситуацию: если ваш УТМ обновлен до последней версии, он может ожидать структуру, соответствующую ChequeV3, а вы отправляете ChequeV1. В этом случае документ будет структурно правильным XML-файлом, но с точки зрения логики УТМ он будет «невалидным», так как не соответствует актуальной XSD-схеме.

Выясним причину через логи. Если после всех исправлений ошибка сохраняется, нам необходимо заглянуть внутрь процессов УТМ. Для этого проанализируем файл лога transport_info.log, который обычно находится в папке C:\UTM\transporter\logs.

В логах можно встретить конкретные подсказки, например:

Итоги и рекомендации

Для успешной отправки чека в ЕГАИС и устранения ошибки невалидности, выполним следующую последовательность действий:

  1. Проверяем кодировку файла: только UTF-8 без BOM.
  2. Убеждаемся, что в текстовых полях (адрес, название) нет запрещенных символов <, >, &, " без их предварительного экранирования.
  3. Сверяем формат даты datetime и длину штрихкодов barcode.
  4. Отправляем файл не через браузер, а через специализированные средства (утилиту curl или программные методы 1С, использующие HTTPСоединение).
  5. В случае неудачи всегда анализируем transport_info.log — это самый надежный способ узнать истинную причину отказа системы.

Соблюдение этих технических регламентов позволит вам избежать ошибок при обмене данными с ЕГАИС и обеспечит корректную регистрацию розничных продаж алкогольной продукции.

← На главную