Как исправить ошибку «в ККТ нет денег для выплаты» при возврате после закрытия смены в 1С:Бухгалтерия 3.0?

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

При работе с контрольно-кассовой техникой (ККТ) в программе «1С:Бухгалтерия предприятия 3.0» пользователи часто сталкиваются с неприятной ситуацией. Вчера была совершена продажа, смена успешно закрылась, а сегодня покупатель вернул товар и требует назад свои деньги. При попытке пробить чек возврата на кассовом аппарате возникает критическая ошибка: «в ККТ нет денег для выплаты». При этом фактически в кассе организации деньги могут присутствовать, но фискальный регистратор упрямо отказывается выполнять операцию.

В этой статье мы подробно разберем, почему возникает данная ошибка, проанализируем техническую сторону взаимодействия учетной системы 1С:Бухгалтерия 3.0 с драйвером кассового аппарата, и рассмотрим несколько практических способов решения этой проблемы.

---

Выясняем техническую причину ошибки

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

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

Когда мы пытаемся на следующий день сделать возврат на сумму, например, 50 рублей, кассовый аппарат сравнивает требуемую сумму выплаты со своим внутренним регистром наличных. Видя там цифру 0, математика ККТ выдает ошибку: денег для выплаты нет. Ей «неизвестно», что деньги лежат в реальном денежном ящике или сейфе организации — касса доверяет только своим электронным счетчикам.

Ситуация осложняется спецификой конфигурации 1С:Бухгалтерия 3.0. В отличие от специализированных торговых решений (таких как 1С:Розница, 1С:УНФ или 1С:Управление торговлей), в типовой бухгалтерии полностью отсутствует штатный пользовательский интерфейс для совершения операций физического внесения и выемки денежных средств из ККТ.

Многие бухгалтеры ошибочно полагают, что создание документа Расходный кассовый ордер (РКО) с видом операции «Выдача в кассу ККМ» решает эту проблему. Проанализируем этот момент: РКО делает исключительно проводку в бухгалтерском учете (между счетами 50.02 и 50.01), но данный документ не отправляет на кассовый аппарат физическую команду драйвера «Внести деньги». В базе 1С остаток по ККМ увеличивается, но в оперативной памяти фискального накопителя по-прежнему числится ноль. В результате касса блокирует выдачу.

---

Способ 1. Отключение автоинкассации в настройках кассового аппарата

Рассмотрим самый простой и популярный вариант обхода проблемы, который не требует доработки конфигурации 1С. Нам необходимо сделать так, чтобы при закрытии смены денежный остаток в памяти ККТ не сбрасывался в ноль, а переходил на следующий день. Рассмотрим этот процесс по шагам на примере распространенных касс марки АТОЛ:

  1. Полностью закроем программу 1С на рабочем компьютере, чтобы освободить порт подключения кассы.
  2. Запустим утилиту «Тест драйвера ККТ» (обычно она устанавливается вместе с драйверами АТОЛ).
  3. Установим флаг «Включено» в правом верхнем углу для связи с кассовым аппаратом.
  4. Перейдем в раздел «Свойства», затем выберем пункт «Параметры ККТ».
  5. В открывшемся дереве настроек найдем раздел «Основные параметры» или «Правила» (в зависимости от версии платформы ККТ и версии драйвера название может немного отличаться).
  6. Найдем параметр «Автоматическое обнуление денежных регистров при закрытии смены» (или «Автоинкассация») и снимем с него отметку (выключим данный параметр).
  7. Нажмем кнопку «Сохранить и закрыть».

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

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

---

Способ 2. Оформление возврата не «день в день» через РКО главной кассы

Проанализируем ситуацию с точки зрения методологии бухгалтерского и кассового учета. Согласно указаниям Центрального Банка РФ, если покупатель возвращает товар не в день его покупки (то есть в другую кассовую смену), выдача денежных средств должна осуществляться не из операционной кассы ККМ, а из главной кассы организации.

Разберем по шагам, как правильно оформить такую операцию в программе 1С:Бухгалтерия 3.0 без возникновения ошибок на кассе:

  1. Создадим документ «Возврат товаров от покупателя», заполнив его на основании первичной продажи.
  2. На основании этого возврата создадим документ «Расходный кассовый ордер» с видом операции «Возврат оплаты покупателю». Обратите внимание: счет учета должен быть указан 50.01 (а не касса ККМ 50.02).
  3. Непосредственно из этого РКО выполним команду пробития чека.

При таком подходе фискальный чек регистрируется как выдача из основной кассы предприятия. Но помните: если на кассовом аппарате включена жесткая автоинкассация и в начале смены в ККТ числится 0 рублей, кассовый аппарат все равно может заблокировать выдачу наличных. Поэтому данный способ рекомендуется совмещать со Способом 1 либо выполнять возврат в тот момент, когда в кассе ККТ уже накопилась достаточная сумма от текущих дневных продаж наличными.

---

Способ 3. Безналичный возврат (если оплата была картой)

Выясним еще одно важное правило: если покупатель изначально оплачивал покупку банковской картой или через Систему быстрых платежей (СБП), возвращать ему наличные денежные средства напрямую из кассы категорически запрещено налоговым законодательством. Возврат должен осуществляться исключительно безналичным путем на ту же карту или банковский счет.

При оформлении возврата безналичных средств в 1С:

  1. В документе возврата выберем тип оплаты «Безналичными» (или «Электронными» в зависимости от релиза).
  2. При пробитии чека на ККТ отправится команда фискализации типа оплаты «Безналичные».

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

---

Способ 4. Создание внешней обработки для внесения денег (Решение для программиста)

Если кассирам регулярно требуется вносить разменную монету или совершать выплаты в условиях жесткой автоинкассации, а заходить в тест драйвера АТОЛ для них слишком сложно, оптимальным выходом будет создание небольшой внешней обработки для 1С.

Библиотека подключаемого оборудования (БПО), встроенная в 1С:Бухгалтерия 3.0, на уровне программного кода полностью поддерживает команды внесения и выемки денег. Программисту достаточно написать простую обработку, которая будет вызывать методы БПО для физического внесения средств на кассу.

Рассмотрим пример кода, который выполняет подключение оборудования и операцию внесения денежных средств в фискальный регистратор:


// Пример программного внесения денежных средств в ККТ через БПО
Процедура ВыполнитьВнесениеДенегНаККТ(СуммаВнесения, КассаККМ)
    
    // Получаем параметры подключения устройства
    ПараметрыПодключения = МенеджерОборудованияКлиент.ПолучитьПараметрыПодключения(КассаККМ);
    
    Если ПараметрыПодключения = Неопределено Тогда
        Предупреждение("Не удалось получить параметры подключения кассового аппарата!");
        Возврат;
    КонецЕсли;
    
    // Подключаем устройство
    РезультатПодключения = МенеджерОборудованияКлиент.ПодключитьУстройство(ПараметрыПодключения.ИдентификаторУстройства);
    
    Если РезультатПодключения Тогда
        
        // Подготавливаем параметры операции
        ПараметрыОперации = Новый Структура;
        ПараметрыОперации.Вставить("Сумма", СуммаВнесения);
        
        // Вызываем команду драйвера через БПО
        РезультатОперации = МенеджерОборудованияКлиент.ВыполнитьОперациюВнесенияВыемки(
            ПараметрыПодключения.ИдентификаторУстройства, 
            "Внесение", 
            ПараметрыОперации
        );
        
        Если НЕ РезультатОперации.Результат Тогда
            ОбщегоНазначенияКлиентСервер.СообщитьОшибку(РезультатОперации.ОписаниеОшибки);
        Иначе
            ПоказатьПредупреждение(, "Денежные средства успешно внесены в ККТ!");
        КонецЕсли;
        
        // Отключаем устройство после операции
        МенеджерОборудованияКлиент.ОтключитьУстройство(ПараметрыПодключения.ИдентификаторУстройства);
        
    Иначе
        Предупреждение("Ошибка подключения ККТ!");
    КонецЕсли;
    
КонецПроцедуры

Данный код можно оформить в виде удобной внешней обработки с единственным полем ввода «Сумма внесения» и кнопкой «Выполнить». Кассир сможет запускать ее прямо из интерфейса 1С в разделе «Дополнительные обработки», вводить сумму (например, те самые 50 рублей) и нажимать кнопку. Касса издаст характерный звуковой сигнал, напечатает нефискальный документ внесения, а внутренний регистр ККТ пополнится. После этого возврат пройдет без каких-либо ошибок.

---

Резюме и рекомендации

Мы проанализировали проблему нехватки денег в ККТ после закрытия смены и нашли несколько путей ее решения. Выбор оптимального пути зависит от бизнес-процессов вашей компании:

← На главную