Что делать, если смена на ККМ открывается, а в 1С:УТ 11 — нет?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Ситуация, когда кассир открывает смену, фискальный регистратор (ККТ) выдает отчет об открытии, но в программе 1С:Управление торговлей 11.3 документ Кассовая смена не появляется, является довольно распространенной. Это создает тупиковую ситуацию: пробить чек невозможно, так как 1С считает смену закрытой, а повторно открыть ее нельзя, так как кассовый аппарат сообщает, что смена уже открыта. Разберем подробно причины возникновения этой ошибки и способы ее решения.

Проанализируем архитектурные особенности системы

Прежде всего, обратим внимание на среду функционирования базы данных. Использование файловой базы данных, расположенной на другом компьютере в локальной сети (файл-сервер), является фактором риска. Процесс открытия смены в 1С состоит из нескольких этапов:

  1. Команда от 1С передается драйверу ККТ.
  2. Драйвер передает команду на физическое устройство.
  3. Устройство открывает смену и возвращает положительный ответ драйверу.
  4. 1С получает ответ от драйвера и инициирует запись документа Кассовая смена в базу данных.

Выясним причину сбоя на последнем этапе: если в момент записи документа произошел кратковременный разрыв сетевого соединения с файл-сервером или файл базы был заблокирован другим процессом (например, антивирусом или резервным копированием), транзакция записи документа откатывается. Однако действие на кассовом аппарате уже совершено, и отменить его невозможно. В результате мы получаем рассинхронизацию статусов.

Проверим аппаратную часть и настройки энергосбережения

Рассмотрим ситуацию со стороны оборудования. Часто проблема кроется в нестабильном подключении по USB. Проанализируем физические соединения:

  1. Качество кабеля: Плохие контакты или отсутствие ферритовых колец на USB-кабеле могут приводить к потере пакетов данных в момент возврата ответа от кассы.
  2. Электропитание USB-портов: В ОС Windows по умолчанию включена функция «Временное отключение USB-порта» для экономии энергии. Если касса простаивала, порт может «уснуть». При открытии смены команда уходит, но ответный поток данных может быть заблокирован системой. Рекомендуется зайти в Диспетчер устройств, найти все «Корневые USB-концентраторы», открыть их свойства и на вкладке «Управление электропитанием» снять галочку «Разрешить отключение этого устройства для экономии энергии».

Программное решение проблемы через доработку кода

Если обновление конфигурации до актуальных версий (где эта проблема частично решена) невозможно, проанализируем способ программного обхода ошибки. Мы можем внедрить проверку статуса ККТ перед выполнением операции открытия смены. Если аппарат сообщает, что смена уже открыта, программа должна не выдавать ошибку, а программно создать недостающий документ Кассовая смена.

Рассмотрим пример кода, который можно интегрировать в модуль обработки торгового оборудования. Основная идея заключается в использовании метода ПолучитьТекущееСостояние:


// Пример логики проверки состояния смены на ККТ
Результат = ОбъектДрайвера.ПолучитьТекущееСостояние(ПараметрыПодключения.ИДУстройства, 
                                                НомерЧека, 
                                                НомерСмены, 
                                                СтатусСмены, 
                                                ПараметрыСостояния);

// СтатусСмены может принимать значения:
// 0 - Смена закрыта
// 1 - Смена открыта
// 2 - Смена истекла (более 24 часов)

Если СтатусСмены = 1 Тогда
    // Смена на аппарате уже открыта, а в 1С документа нет.
    // Здесь необходимо вызвать процедуру программного создания документа "Кассовая смена"
    // и заполнить его данными, полученными из "ПараметрыСостояния" (номер смены, дата).
    СоздатьДокументКассоваяСменаВБазе(НомерСмены);
КонецЕсли;

Разберем подробнее: метод ПолучитьТекущееСостояние позволяет нам узнать реальное положение дел внутри фискального накопителя. Если мы видим, что СтатусСмены равен 1, мы понимаем, что произошел сбой записи в БД при предыдущей попытке. Вместо того чтобы блокировать работу кассира, мы принудительно синхронизируем данные.

Исправление логики в новых релизах УТ 11.3

Стоит отметить, что в релизах ветки 11.3.4 и выше функционал работы с онлайн-кассами был существенно переработан. В старых версиях (например, 11.3.3.231) проверка статуса перед открытием работала некорректно. Рассмотрим, что изменилось:

Диагностика через логи драйвера

Если проблема повторяется, проанализируем логи самого драйвера Атол. Это самый надежный способ понять, доходит ли подтверждение от ККТ до компьютера. Посмотрим, где их искать:

  1. Для драйвера версии 8.х логи обычно находятся в папке %AppData%\Atol\drivers8\.
  2. Для драйвера версии 10.х логи именуются fptr10.log и находятся в профиле пользователя.

В логе необходимо искать команду OpenSession. Если после нее зафиксирован ответ ResultCode = 0 (означает успех), но в 1С документ не создан — значит, проблема на 100% в сетевом соединении между клиентом 1С и файл-сервером или в правах доступа к базе данных.

Рекомендации по стабилизации работы

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

Применяя эти шаги, мы обеспечим надежную фиксацию открытия смен и минимизируем простои в работе торговой точки.

← На главную