В процессе работы с алкогольной продукцией участники рынка часто сталкиваются с крайне неприятной ситуацией: при попытке оформить возврат алкоголя через кассу УТМ (Универсальный транспортный модуль) выдает ошибку, однако в системе ЕГАИС операция проходит успешно. Это приводит к рассинхронизации данных между учетной системой (например, 1С:Розница), локальной базой УТМ и серверами ФСРАР. Рассмотрим причины возникновения этой проблемы и разберем по шагам алгоритмы ее решения.
Для начала разберем, почему возникает ситуация, когда «УТМ отказал, но в ЕГАИС возвращено». Основная причина кроется в архитектуре УТМ. Транспортный модуль имеет собственную локальную базу данных (обычно на движке Derby), где он хранит историю всех чеков для контроля повторных продаж и проверки корректности цепочки «Продажа -> Возврат».
Проанализируем типовой сценарий сбоя:
В результате мы получаем ситуацию, когда по данным ФСРАР товар на остатках, а по данным УТМ и 1С — продажа не отменена.
Прежде чем предпринимать радикальные действия, нам необходимо выяснить реальный статус марки в системе ЕГАИС. Мы не можем доверять только сообщениям в кассовом ПО.
Выполним следующие действия:
QueryBarcode (Запрос штрихкода) через 1С или напрямую через интерфейс УТМ. Это позволит узнать, за какой Справкой 2 (или Справкой Б) числится данная бутылка.Если в ЕГАИС продукция числится на остатках, но при попытке повторной продажи УТМ блокирует операцию с ошибкой «Продукция не внесена в поштучный учет», проблема локализована в фильтрах самого модуля. УТМ «помнит» старое состояние марки и не дает ее реализовать.
Рассмотрим, как «оживить» УТМ:
Во-первых, проверим версию сборки УТМ. Для этого в браузере перейдем по адресу http://127.0.0.1:8080. Если версия устарела, необходимо обновить модуль до актуальной. Вместе с обновлением часто обновляется и Filter (внутренний механизм контроля), который может содержать исправления для подобных багов.
Во-вторых, выполним команду обновления фильтров. В некоторых случаях помогает запрос UpdateFilter, который принудительно синхронизирует локальные правила проверки с актуальными требованиями ФСРАР.
В-третьих, в критических случаях, когда локальная БД Derby повреждена, мы можем выполнить полную переустановку УТМ:
Transport и Transport-Updater.transportDB.В программе 1С:Розница (особенно версии 2.3) статус документа Чек ЕГАИС на возврат может «зависнуть» в состоянии «Ошибка передачи», хотя в ЕГАИС все прошло. Это блокирует дальнейшую работу кассира с этой позицией.
Разберем, как исправить состояние документа программно. Для этого нам понадобится обработка «Групповое изменение реквизитов». Мы должны найти наш проблемный документ и изменить его статус вручную, чтобы система считала его успешно проведенным.
Посмотрим на пример логики, которую мы преследуем при ручной правке:
ЧекЕГАИСВозврат.Статус в значение, соответствующее успешному проведению (обычно это Передан в УТМ или Проведен в ЕГАИС).ОстаткиАлкогольнойПродукцииЕГАИС, чтобы данные в учетной системе соответствовали реальности.Если мы убедились, что в ЕГАИС марка числится на остатках, но 1С отказывается продавать ее из-за внутренних проверок или ошибок предыдущих чеков, можно воспользоваться методом отправки чека напрямую в УТМ, минуя некоторые проверки ККТ (если это допустимо в рамках конкретного инцидента для выравнивания учета).
Проанализируем техническую структуру XML-файла, который отправляется в УТМ. Важно, чтобы в чеке возврата или повторной продажи фигурировали правильные фискальные признаки. Если УТМ выдает «Попытка возврата без предварительной продажи», проверьте, совпадают ли в XML-структуре возврата следующие поля с исходным чеком продажи:
Если эти данные различаются (например, кассу заменили или перепрошили), УТМ не сможет сопоставить продажу и возврат по своей локальной базе.
Подводя итог, при возникновении бага с возвратами в УТМ, мы рекомендуем придерживаться следующего алгоритма:
Помните, что работа с ЕГАИС требует строгого соответствия фактических остатков и данных в системе, поэтому любая ручная корректировка должна быть обоснована результатами запросов остатков по маркам.