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