При оформлении продаж в розницу или оптом через программу 1С:Управление торговлей пользователи часто сталкиваются с неприятной ситуацией: при попытке пробить чек на фискальном регистраторе (особенно популярны устройства АТОЛ с драйвером 10-й версии) система выдает ошибку: «При печати чека произошла ошибка. Чек не напечатан на фискальном устройстве. Дополнительное описание: Сумма безналичных оплат больше суммы товарных позиций». При этом визуально в документе оплаты все копейки сходятся, а безналичный платеж с терминала уже успешно прошел. Для поиска документов, по которым прошла оплата, но чек не пробился из-за кассового сбоя, пригодится отчет для выявления непробитых чеков в эквайринговых операциях.
В этой статье мы подробно разберем, почему возникает данная коллизия, проанализируем внутренние механизмы взаимодействия 1С с кассовым аппаратом и рассмотрим все возможные пути решения проблемы — от простых настроек в пользовательском режиме до программных методов исправления.
---
Согласно требованиям Федерального закона 54-ФЗ, фискальный накопитель (ФН) и сама контрольно-кассовая техника (ККТ) осуществляют жесткий контроль поступающих данных перед закрытием чека. Кассовый аппарат выполняет простейшую математическую проверку:
Сумма всех зарегистрированных оплат (наличные + безналичные + предоплата + иные) должна строго равняться сумме всех товарных позиций в чеке с учетом всех скидок и наценок.
Если сумма безналичного платежа, переданная из 1С, хотя бы на одну копейку превышает итоговую сумму товарных позиций, ККТ АТОЛ мгновенно блокирует операцию и возвращает ошибку с кодом -3896 (или ошибку 52 в зависимости от прошивки) — «Сумма не наличных платежей превышает сумму чека».
Основными причинами такого расхождения являются:
---
Выясним причину на системном уровне. Ошибка 00-00233674 официально признана разработчиками фирмы «1С». Она связана с некорректным формированием фискального признака и распределением оплат по товарным позициям при использовании эквайринга в документах реализации или чеках ККМ.
Данная проблема была полностью устранена в следующих релизах:
Если ваша конфигурация находится на поддержке, настоятельно рекомендуем выполнить обновление до актуального релиза. Это самый надежный способ раз и навсегда избавиться от этой ошибки без необходимости постоянно корректировать документы вручную. При необходимости обслуживать несколько информационных баз этот процесс упрощается через программу для автоматического резервного копирования и обновления 1С.
---
Рассмотрим ситуацию, когда конфигурация сильно кастомизирована, и быстрое обновление на новый релиз невозможно или экономически нецелесообразно. В этом случае мы можем воспользоваться механизмом патчей (расширений исправления ошибок), предоставляемых фирмой «1С».
Выполним следующие шаги для установки исправления:
00-00233674 (или аналогичный патч для БПО вашей версии).---
Проанализируем настройки торгового оборудования внутри самой программы 1С. Очень часто пользователи, пытаясь решить проблему, выставляют параметр «Допустимое расхождение форматно-логического контроля» в значение «0». Это в корне неверно!
Форматно-логический контроль (ФЛК) предназначен для того, чтобы сглаживать копеечные расхождения, возникающие при распределении скидок. Если мы установим этот параметр в значение, отличное от нуля, программа получит право корректировать копейки в позициях чека, чтобы подогнать общую сумму товаров под сумму фактически принятой оплаты.
Настроим ФЛК правильно:
---
Если копейки продолжают «плыть» из-за применения процентных скидок, мы можем настроить округление чеков на уровне правил продаж программы 1С. Это позволит избежать появления дробных частей копеек еще на этапе формирования корзины товаров.
Сделаем это по шагам:
---
Посмотрим на проблему изнутри программного кода. Если вы являетесь разработчиком и вам необходимо локализовать ошибку, мы можем перехватить XML-пакет, который БПО отправляет на кассовый аппарат. Для этого нам нужно проанализировать модуль интеграции с кассой.
Ниже представлен пример концептуального кода, который можно использовать в расширении для отладки и ручной корректировки расхождений перед отправкой XML драйверу АТОЛ:
// В процедуре подготовки XML-пакета для ККТ (например, в БПО)
Процедура КорректироватьДанныеЧекаПередПечатью(ПараметрыЧека) Экспорт
ОбщаяСуммаОплат = 0;
Для Каждого СтрокаОплаты Из ПараметрыЧека.ТаблицаОплат Цикл
ОбщаяСуммаОплат = ОбщаяСуммаОплат + СтрокаОплаты.Сумма;
КонецЦикла;
ОбщаяСуммаТоваров = 0;
Для Каждого СтрокаТовара Из ПараметрыЧека.ТаблицаТоваров Цикл
ОбщаяСуммаТоваров = ОбщаяСуммаТоваров + СтрокаТовара.СуммаСУчетомСкидок;
КонецЦикла;
// Выявляем копеечное расхождение
Если ОбщаяСуммаОплат > ОбщаяСуммаТоваров Тогда
РазницаКопеек = ОбщаяСуммаОплат - ОбщаяСуммаТоваров;
// Если разница незначительна (до 5 копеек), корректируем последнюю позицию
Если РазницаКопеек <= 0.05 Тогда
КоличествоТоваров = ПараметрыЧека.ТаблицаТоваров.Количество();
Если КоличествоТоваров > 0 Тогда
ПоследняяСтрока = ПараметрыЧека.ТаблицаТоваров[КоличествоТоваров - 1];
ПоследняяСтрока.СуммаСУчетомСкидок = ПоследняяСтрока.СуммаСУчетомСкидок + РазницаКопеек;
// Также корректируем цену единицы товара, если количество равно 1
Если ПоследняяСтрока.Количество = 1 Тогда
ПоследняяСтрока.Цена = ПоследняяСтрока.СуммаСУчетомСкидок;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Такой подход позволяет гарантировать, что на уровне платформы 1С данные всегда будут уходить на фискальный регистратор сбалансированными, независимо от сложности примененных скидок и округлений.
---
Подводя итоги, дадим краткий чек-лист по устранению ошибки «Сумма безналичных оплат больше суммы товарных позиций» в вашей системе:
0.01 или 0.05 рубля, а не в круглый ноль.