Как оформить возврат алкогольной продукции через ЕГАИС (УТМ) и расшифровать ошибки ответа

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

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

Разбор структуры XML-файла для оформления возврата

Для начала проанализируем структуру документа, который необходимо отправить в УТМ. В системе ЕГАИС возврат в рознице оформляется через схему «Чеки». Основным отличием возврата от продажи в старых версиях протокола является использование отрицательного значения в поле цены. Рассмотрим пример корректно сформированного файла vozvrat.xml:


<?xml version="1.0" encoding="UTF-8"?>
<Cheque inn="XXXXXXXXX" kpp="XXXXXXXXX" datetime="0507181607" kassa="00106200708053" address="Адрес магазина" name="ООО Название организации" number="4346" shift="71">
<Bottle barcode="22N00000API84HY2F390U7K70118001008021SSMXHZFQ7VLTWIL6MNDA24VB9WQM1PY" ean="4680020410308" price="-390.0" />
</Cheque>

Разберем ключевые атрибуты тега Cheque:

Внутри тега Bottle крайне важно правильно указать barcode (акцизную марку) и price. Обратите внимание, что цена -390.0 со знаком «минус» сигнализирует системе о том, что это операция сторнирования (возврата).

Отправка запроса в УТМ через curl

Для взаимодействия с УТМ мы используем командную строку и утилиту curl. Команда для отправки файла выглядит следующим образом:

curl -F "xml_file=@vozvrat.xml" http://192.168.0.12:8080/xml

Здесь параметр -F указывает на отправку данных формы, где xml_file — имя параметра, ожидаемого УТМ, а префикс @ перед именем файла сообщает curl, что нужно считать содержимое файла с диска.

Решение проблемы с нечитаемой кодировкой ответа

Часто после выполнения команды в консоли Windows вместо понятного ответа (например, об успешной регистрации или тексте ошибки) отображаются «кракозябры». Это происходит из-за несовпадения кодировки UTF-8, в которой отвечает УТМ, и кодировки OEM (CP866), используемой в командной строке Windows по умолчанию. Выясним, как это исправить.

Способ 1: Перенаправление вывода в файл

Самый простой и надежный способ — сохранить ответ сервера в текстовый файл и открыть его редактором, поддерживающим UTF-8 (например, Notepad++). Модернизируем нашу команду:

curl -F "xml_file=@vozvrat.xml" http://192.168.0.12:8080/xml > result.txt

После выполнения команды откройте файл result.txt. Вы увидите XML-ответ от УТМ, в котором будет содержаться либо идентификатор принятого чека, либо детальное описание ошибки на русском языке.

Способ 2: Смена кодовой страницы консоли

Если вы хотите видеть текст ошибки прямо в окне командной строки, перед запуском curl выполните команду смены кодировки на UTF-8:

chcp 65001

После этого консоль начнет корректно отображать кириллицу в кодировке UTF-8, и вы сможете прочитать ответ системы без дополнительных манипуляций с файлами.

Важные технические нюансы и современные требования

Рассмотрим дополнительные факторы, которые могут влиять на успешность возврата, основываясь на развитии системы ЕГАИС:

  1. Версия УТМ и веб-интерфейс. Начиная с версии 2.1.6 и выше, разработчики добавили возможность отправлять документы непосредственно через домашнюю страницу УТМ (обычно доступна по адресу http://localhost:8080). Это позволяет избежать «извращений» с командной строкой и визуально контролировать процесс загрузки.
  2. Проверка статуса марки. Система не примет возврат, если марка не числится в статусе «Продано». Перед оформлением документа убедитесь, что именно эта бутылка была ранее реализована через ваш УТМ.
  3. Формат UTF-8 без BOM. При создании XML-файла в текстовых редакторах следите, чтобы файл был сохранен в кодировке UTF-8 без BOM. Наличие байтовой метки (BOM) в начале файла может привести к ошибке парсинга XML на стороне УТМ.
  4. Логирование. Если ответ от curl все равно не дает ясности, проанализируйте лог-файлы самого транспортного модуля. Они находятся в директории установки УТМ, в папке transporter/logs/transport_info.log. Там фиксируются все входящие запросы и детальные причины их отклонения.

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

← На главную