Что делать, если от УТМ ЕГАИС не приходит ответ с QR-кодом, а при повторной отправке марка блокируется?

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

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

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

Механика возникновения сбоя

Для понимания корня проблемы проанализируем логику взаимодействия кассового узла и транспортного модуля:

  1. Кассовое приложение формирует XML-пакет с алкогольным чеком и отправляет его методом POST по адресу локальной службы УТМ (обычно порт 8080).
  2. Получив запрос, УТМ запускает сразу два ресурсоемких процесса: отправку онлайн-запроса на серверы Росалкогольрегулирования для проверки марок на дублирование и аппаратное подписание чека криптографическим ключом на носителе.
  3. Если связь с сервером ЕГАИС замедлена либо криптографический токен долго формирует цифровую подпись, время выполнения операции возрастает до 10–20 секунд.
  4. Если в кассовой программе таймаут ожидания HTTP-ответа задан слишком маленьким (например, стандартные 3–5 секунд), учетная система считает запрос аварийно завершенным и разрывает сетевое соединение.
  5. Служба УТМ при этом не прерывает начатую процедуру. Она успешно подписывает документ, отправляет его в систему, списывает акцизные марки и сохраняет готовый URL для QR-кода в своих журналах. Но отдать этот ответ кассе модуль уже не может — клиент разорвал соединение.
  6. Кассир пробует пробить чек заново: программа генерирует новый запрос с теми же марками, на что сервер ЕГАИС справедливо отвечает отказом, расценивая продажу как повторную реализацию уже зафиксированной марки.

Решение 1. Настройка таймаутов HTTP-соединения в кассовом ПО

Главный способ предотвратить возникновение подобных «зависших» чеков — исключить принудительный разрыв связи со стороны кассы до завершения ответа УТМ.

В типовых конфигурациях или самописных модулях на платформе 1С для взаимодействия с транспортным модулем используется объект HTTPСоединение. Параметр времени ожидания (таймаут) по умолчанию часто равен 0 (системное ожидание) либо зашит небольшим значением.

Установим при инициализации соединения таймаут не менее 30–60 секунд. Этого времени гарантированно хватит на формирование подписи аппаратным ключом и обмен с серверами ведомства:


// Создаем соединение с явным указанием таймаута в 60 секунд
ТаймаутСоединения = 60;
HTTPСоединение = Новый HTTPСоединение(
    СерверУТМ,
    ПортУТМ,
    ,
    ,
    ,
    ,
    ,
    ТаймаутСоединения
);

Если для отправки запросов к УТМ используется внешняя консольная утилита cURL (как это часто реализуется на платформе 1С v7.7), обязательно увеличим параметры максимального времени работы утилиты с помощью ключей --max-time и --connect-timeout до значений не менее 45–60 секунд, исключив фиксированные короткие паузы в 3 секунды между вызовами.

Решение 2. Устранение аппаратных задержек и настройка ОС

Часто медленная работа УТМ вызвана аппаратными задержками при обращении к смарт-картам и токенам (JaCarta, Рутокен ЭЦП). Проанализируем системные параметры операционной системы Windows:

  1. Отключение энергосбережения USB-портов. Откроем «Диспетчер устройств», найдем раздел «Контроллеры USB», для каждого корневого USB-концентратора и составного устройства откроем свойства и на вкладке «Управление электропитанием» снимем флажок «Разрешить отключение этого устройства для экономии энергии». При активном энергосбережении ключ «засыпает», и при запросе чека первые 5–7 секунд уходят только на инициализацию криптографического чипа.
  2. Подключение токена напрямую. Категорически исключим использование внешних USB-хабов, разветвителей и удлинителей. Носитель с ключом должен быть подключен непосредственно к материнской плате компьютера в разъем USB 2.0 на задней панели.
  3. Исключения антивирусного ПО. Добавим каталог установки УТМ и исполняемые файлы его служб в список доверенных программ антивируса и Защитника Windows. Постоянное сканирование журнала транзакций на локальном диске способно задерживать запись логов и отдачу ответов.

Как пробить «зависший» чек без повторного запроса в ЕГАИС

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

  1. Извлечение ссылки для QR-кода из журналов УТМ. Перейдем в каталог установки транспортного модуля в папку с логами службы транспорта. Откроем файлы transport_transaction.log и transport_info.log текстовым редактором. Найдем запись по времени инцидента или номеру чека. В теле зафиксированного ответа будет содержаться сформированный URL-адрес для чека и значение криптографической подписи.
  2. Фискализация чека на ККМ. Вручную или через служебную обработку подставим извлеченный адрес QR-кода и цифровой идентификатор в параметры закрытия чека фискального регистратора. После этого пробьем чек на ККМ в штатном режиме без повторного обращения к УТМ.
  3. Смена статуса в учетной системе. В программе 1С переведем статус документа продажи в состояние «Пробит» / «Зафиксирован в ЕГАИС», чтобы система не пыталась отправить его повторно при закрытии смены.

Что делать, если покупатель ушел и чек пробивать не нужно?

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

В этом случае сформируем и отправим в УТМ документ «Чек возврата» (возврат алкогольной продукции), содержащий данную акцизную марку, но без последующей печати бумажного чека возврата на кассе. Это действие восстановит остаток марки в регистрах ЕГАИС и предотвратит расхождение остатков.

← На главную