При работе с ЕГАИС (Единая государственная автоматизированная информационная система) специалисты часто сталкиваются с ситуацией, когда сформированный 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>
Разберем основные поля, в которых чаще всего допускаются ошибки:
DDMMYYHHMM. Любое отклонение (например, использование секунд или другого разделителя) приведет к невалидности.FSRAR_ID. Для индивидуальных предпринимателей (ИП) поле kpp обычно отсутствует или должно быть пустым.Одной из наиболее скрытых причин ошибки является кодировка текстового файла. УТМ ЕГАИС требует строгого соблюдения формата UTF-8. Однако существует важный нюанс — BOM (Byte Order Mark).
Разберем ситуацию подробнее: многие текстовые редакторы (включая стандартный Блокнот Windows) при сохранении в UTF-8 добавляют в начало файла невидимую метку (BOM). Для большинства программ это не проблема, но УТМ может воспринять эти скрытые байты как некорректные символы в начале XML-декларации, что приведет к ошибке валидации еще до начала чтения тегов.
Проанализируем шаги для проверки кодировки:
encoding самого XML-документа было указано UTF-8 (как в нашем примере выше).&. Если они есть, их нужно экранировать: &.Часто пользователи пытаются отправить сформированный XML-файл через «домашнюю страницу» УТМ (обычно доступную по адресу localhost:8080). Разберем, почему это может не работать для чеков.
Встроенная функция загрузки файлов на главной странице УТМ предназначена в первую очередь для документов документооборота (накладных ТТН, актов постановки на баланс и т.д.). Розничные чеки обрабатываются УТМ через другой шлюз (endpoint). При попытке отправить чек через стандартную форму браузера может нарушаться заголовок Content-Type, или же файл отправляется не на тот внутренний адрес модуля, из-за чего система выдает общую ошибку невалидности.
Посмотрим на правильное решение — использование утилиты curl. Это стандартный способ взаимодействия с УТМ, описанный в документации производителя. Для отправки файла чека необходимо выполнить команду в командной строке:
curl -F "xml_file=@cheque.xml" http://localhost:8080/xml
Здесь cheque.xml — это имя вашего файла. Обратите внимание, что адрес /xml предназначен именно для обработки розничных чеков. Использование этого метода гарантирует, что данные будут переданы в «чистом» виде без искажений, вносимых браузерными формами.
ЕГАИС регулярно обновляет требования к форматам документов. В примере выше представлен формат Cheque версии 1. В современных условиях ФСРАР требует использования более новых версий схем (V2, V3 или V4), которые поддерживают поштучный учет алкогольной продукции.
Рассмотрим ситуацию: если ваш УТМ обновлен до последней версии, он может ожидать структуру, соответствующую ChequeV3, а вы отправляете ChequeV1. В этом случае документ будет структурно правильным XML-файлом, но с точки зрения логики УТМ он будет «невалидным», так как не соответствует актуальной XSD-схеме.
Выясним причину через логи. Если после всех исправлений ошибка сохраняется, нам необходимо заглянуть внутрь процессов УТМ. Для этого проанализируем файл лога transport_info.log, который обычно находится в папке C:\UTM\transporter\logs.
В логах можно встретить конкретные подсказки, например:
Для успешной отправки чека в ЕГАИС и устранения ошибки невалидности, выполним следующую последовательность действий:
<, >, &, " без их предварительного экранирования.datetime и длину штрихкодов barcode.curl или программные методы 1С, использующие HTTPСоединение).transport_info.log — это самый надежный способ узнать истинную причину отказа системы.Соблюдение этих технических регламентов позволит вам избежать ошибок при обмене данными с ЕГАИС и обеспечит корректную регистрацию розничных продаж алкогольной продукции.