При работе с алкогольной и пивной продукцией в решениях 1С пользователи регулярно сталкиваются со специфическими сбоями обмена с ЕГАИС. Один из самых неприятных и вводящих в заблуждение сбоев — повторная автоматическая отправка актов списания после закрытия кассовой смены. Проблема имеет массовый характер и встречается в конфигурации 1С:Розница редакций 2.2 и 2.3 (вплоть до актуальных релизов).
В этой статье мы подробно разберем, почему возникает этот сбой, проанализируем внутренние механизмы взаимодействия программы с УТМ (Универсальным транспортным модулем) и рассмотрим пошаговые инструкции, как исправить эту проблему и вернуть зависшим документам корректный статус.
---
Давайте пошагово проанализируем ситуацию, которая происходит в системе в момент закрытия смены кассиром:
АктСписанияЕГАИС для немаркируемого алкоголя (например, пива и слабоалкогольных напитков) и передает его в УТМ.СтатусыДокументовЕГАИС информацию о том, что документ уже ушел в УТМ. В базе 1С статус акта так и остается в положении «Черновик» или «К передаче».---
Рассмотрим подробнее три основные причины, из-за которых транзакция записи статуса в 1С прерывается в момент отправки:
Кассиры в розничных магазинах работают под урезанными правами (профиль доступа «Продавец-кассир»). В момент закрытия смены инициируется фоновый процесс отправки данных. Если у пользователя отсутствуют права на запись в технические регистры ЕГАИС (в частности, на изменение статусов документов) или на выполнение фоновых заданий обмена, XML-файл уходит в УТМ, но сессия кассира аварийно завершает запись статуса в базу.
В связи с ограничениями ЕГАИС на использование Регистра №2 («Торговый зал»), 1С использует сложный алгоритм автоматического списания:
Этот процесс порождает высокую нагрузку на СУБД. В клиент-серверных или веб-серверных базах (публикация на IIS / Apache) это часто приводит к таймаутам веб-соединения. Документ отправляется в УТМ, но соединение рвется до того, как веб-сервер успеет вернуть в 1С подтверждение успешной отправки для смены статуса.
Если обмен с ЕГАИС настроен на периферийном узле, а центральный узел пытается синхронизировать или продублировать отправку документов до завершения миграции пакетов данных между узлами, система также может продублировать запрос.
---
Выяснив причины, разберем по шагам, как настроить систему для стабильной работы и как вернуть корректный статус уже зависшим документам.
Необходимо предоставить пользователям, закрывающим смену, доступ к механизмам ЕГАИС:
АдминистраторЕГАИС или создайте отдельный профиль с правами на интерактивный обмен и чтение/запись данных ЕГАИС. Это позволит сессии кассира беспрепятственно менять данные в регистре СтатусыДокументовЕГАИС.Чтобы полностью исключить влияние прав кассира и зависание интерфейса РМК при закрытии смены, рекомендуется перевести отправку актов в фоновый режим на сервере:
Обмен с ЕГАИС, включите его и настройте расписание (например, каждые 30 минут или один раз ночью). Это задание будет выполняться под учетной записью с полными правами администратора, что гарантирует корректную запись статусов документов в базу данных.Если ваша база опубликована на веб-сервере или работает по медленной локальной сети, стандартного таймаута ожидания ответа от УТМ может не хватать. Увеличим это значение:
Если у вас уже накопилась пачка актов со статусом «Ошибка передачи», у которых в протоколе обмена зафиксировано успешное первое списание и отказ по повторному UUID, исправим их вручную:
Акт списания ЕГАИС.Если документов слишком много, исправить статусы можно напрямую через редактирование регистра сведений. Разберем этот пример:
СтатусыДокументовЕГАИС.Для продвинутых администраторов автоматизировать этот процесс в распределенной базе можно с помощью внешней обработки, выполняющей следующий код:
НаборЗаписей = РегистрыСведений.СтатусыДокументовЕГАИС.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Документ.Установить(СсылкаНаАктСписания);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() > 0 Тогда
Для Каждого Запись Из НаборЗаписей Цикл
Запись.Статус = Перечисления.СтатусыДокументовЕГАИС.ПроведенВЕГАИС;
КонецЦикла;
НаборЗаписей.Записать();
КонецЕсли;
Использование этого кода позволяет быстро скорректировать состояние регистров программным путем, избегая долгой ручной работы с протоколами обмена.
---
Проблема двойной отправки актов списания в ЕГАИС из 1С:Розница полностью решается за счет правильной настройки прав кассиров, увеличения таймаутов веб-соединения или перехода на регламентные фоновые задания для обмена. Применяя данные методы, вы защитите свою систему от накопления ложных ошибок и обеспечите актуальность остатков в ЕГАИС и в учетной системе.