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