Ситуация, когда кассир открывает смену, фискальный регистратор (ККТ) выдает отчет об открытии, но в программе 1С:Управление торговлей 11.3 документ Кассовая смена не появляется, является довольно распространенной. Это создает тупиковую ситуацию: пробить чек невозможно, так как 1С считает смену закрытой, а повторно открыть ее нельзя, так как кассовый аппарат сообщает, что смена уже открыта. Разберем подробно причины возникновения этой ошибки и способы ее решения.
Прежде всего, обратим внимание на среду функционирования базы данных. Использование файловой базы данных, расположенной на другом компьютере в локальной сети (файл-сервер), является фактором риска. Процесс открытия смены в 1С состоит из нескольких этапов:
Кассовая смена в базу данных.Выясним причину сбоя на последнем этапе: если в момент записи документа произошел кратковременный разрыв сетевого соединения с файл-сервером или файл базы был заблокирован другим процессом (например, антивирусом или резервным копированием), транзакция записи документа откатывается. Однако действие на кассовом аппарате уже совершено, и отменить его невозможно. В результате мы получаем рассинхронизацию статусов.
Рассмотрим ситуацию со стороны оборудования. Часто проблема кроется в нестабильном подключении по USB. Проанализируем физические соединения:
Если обновление конфигурации до актуальных версий (где эта проблема частично решена) невозможно, проанализируем способ программного обхода ошибки. Мы можем внедрить проверку статуса ККТ перед выполнением операции открытия смены. Если аппарат сообщает, что смена уже открыта, программа должна не выдавать ошибку, а программно создать недостающий документ Кассовая смена.
Рассмотрим пример кода, который можно интегрировать в модуль обработки торгового оборудования. Основная идея заключается в использовании метода ПолучитьТекущееСостояние:
// Пример логики проверки состояния смены на ККТ
Результат = ОбъектДрайвера.ПолучитьТекущееСостояние(ПараметрыПодключения.ИДУстройства,
НомерЧека,
НомерСмены,
СтатусСмены,
ПараметрыСостояния);
// СтатусСмены может принимать значения:
// 0 - Смена закрыта
// 1 - Смена открыта
// 2 - Смена истекла (более 24 часов)
Если СтатусСмены = 1 Тогда
// Смена на аппарате уже открыта, а в 1С документа нет.
// Здесь необходимо вызвать процедуру программного создания документа "Кассовая смена"
// и заполнить его данными, полученными из "ПараметрыСостояния" (номер смены, дата).
СоздатьДокументКассоваяСменаВБазе(НомерСмены);
КонецЕсли;
Разберем подробнее: метод ПолучитьТекущееСостояние позволяет нам узнать реальное положение дел внутри фискального накопителя. Если мы видим, что СтатусСмены равен 1, мы понимаем, что произошел сбой записи в БД при предыдущей попытке. Вместо того чтобы блокировать работу кассира, мы принудительно синхронизируем данные.
Стоит отметить, что в релизах ветки 11.3.4 и выше функционал работы с онлайн-кассами был существенно переработан. В старых версиях (например, 11.3.3.231) проверка статуса перед открытием работала некорректно. Рассмотрим, что изменилось:
Кассовая смена.Если проблема повторяется, проанализируем логи самого драйвера Атол. Это самый надежный способ понять, доходит ли подтверждение от ККТ до компьютера. Посмотрим, где их искать:
%AppData%\Atol\drivers8\.fptr10.log и находятся в профиле пользователя.В логе необходимо искать команду OpenSession. Если после нее зафиксирован ответ ResultCode = 0 (означает успех), но в 1С документ не создан — значит, проблема на 100% в сетевом соединении между клиентом 1С и файл-сервером или в правах доступа к базе данных.
Подведем итог и составим план действий для устранения проблемы:
8.3.10 и УТ 11.3.3 давно устарели и содержат ошибки в механизмах взаимодействия с драйверами ККТ по протоколам 54-ФЗ.*.1CD, *.cln, *.log в исключения сканирования на сервере и рабочих станциях.Применяя эти шаги, мы обеспечим надежную фиксацию открытия смен и минимизируем простои в работе торговой точки.