Как исправить ошибку «Сумма безналичных оплат больше суммы товарных позиций» в 1С:Управление торговлей

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

При оформлении продаж в розницу или оптом через программу 1С:Управление торговлей пользователи часто сталкиваются с неприятной ситуацией: при попытке пробить чек на фискальном регистраторе (особенно популярны устройства АТОЛ с драйвером 10-й версии) система выдает ошибку: «При печати чека произошла ошибка. Чек не напечатан на фискальном устройстве. Дополнительное описание: Сумма безналичных оплат больше суммы товарных позиций». При этом визуально в документе оплаты все копейки сходятся, а безналичный платеж с терминала уже успешно прошел. Для поиска документов, по которым прошла оплата, но чек не пробился из-за кассового сбоя, пригодится отчет для выявления непробитых чеков в эквайринговых операциях.

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

---

Почему возникает эта ошибка: физика процесса

Согласно требованиям Федерального закона 54-ФЗ, фискальный накопитель (ФН) и сама контрольно-кассовая техника (ККТ) осуществляют жесткий контроль поступающих данных перед закрытием чека. Кассовый аппарат выполняет простейшую математическую проверку:

Сумма всех зарегистрированных оплат (наличные + безналичные + предоплата + иные) должна строго равняться сумме всех товарных позиций в чеке с учетом всех скидок и наценок.

Если сумма безналичного платежа, переданная из 1С, хотя бы на одну копейку превышает итоговую сумму товарных позиций, ККТ АТОЛ мгновенно блокирует операцию и возвращает ошибку с кодом -3896 (или ошибку 52 в зависимости от прошивки) — «Сумма не наличных платежей превышает сумму чека».

Основными причинами такого расхождения являются:

  1. Математические погрешности при расчете сложных скидок. Когда на документ или строку применяется процентная скидка, итоговая сумма позиции может содержать дробные части копеек. 1С округляет эти значения по своим алгоритмам, а ККТ — по своим.
  2. Зарегистрированная ошибка 1С. В релизах конфигураций, использующих определенные версии Библиотеки подключаемого оборудования (БПО), существовал баг под номером 00-00233674. При определенных условиях XML-пакет, отправляемый на драйвер ККТ, содержал неверно рассчитанные суммы скидок по позициям, из-за чего итоговая сумма товаров уменьшалась, а сумма безналичной оплаты оставалась исходной.
  3. Неверная настройка форматно-логического контроля (ФЛК). Если ФЛК настроен некорректно, система не пытается исправить копеечные расхождения, а сразу отправляет «сырые» данные на кассу.

---

Способ 1. Официальное решение — обновление конфигурации

Выясним причину на системном уровне. Ошибка 00-00233674 официально признана разработчиками фирмы «1С». Она связана с некорректным формированием фискального признака и распределением оплат по товарным позициям при использовании эквайринга в документах реализации или чеках ККМ.

Данная проблема была полностью устранена в следующих релизах:

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

---

Способ 2. Установка патча (исправления) без полного обновления

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

Выполним следующие шаги для установки исправления:

  1. Перейдем в раздел НСИ и администрирование -> Обслуживание.
  2. Откроем пункт Обновление программы -> Установка обновлений и исправлений (патчей).
  3. Если у вас настроен автоматический доступ к Порталу ИТС, система сама найдет патч для ошибки 00-00233674 (или аналогичный патч для БПО вашей версии).
  4. Установим патч и перезапустим сеанс работы с базой данных.

---

Способ 3. Настройка форматно-логического контроля (ФЛК)

Проанализируем настройки торгового оборудования внутри самой программы 1С. Очень часто пользователи, пытаясь решить проблему, выставляют параметр «Допустимое расхождение форматно-логического контроля» в значение «0». Это в корне неверно!

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

Настроим ФЛК правильно:

  1. Перейдем в раздел НСИ и администрирование -> РМК и оборудование -> Подключаемое оборудование.
  2. Найдем наше фискальное устройство (кассу АТОЛ) и откроем его карточку настроек.
  3. Найдем параметр Допустимое расхождение форматно-логического контроля (или «Допустимое расхождение в копейках»).
  4. Установим значение 0.01 или 0.05 (в зависимости от глубины скидок, иногда помогает установка 1.00 рубля).
  5. При таких настройках, если сумма безналичных оплат будет превышать сумму товаров на 1-2 копейки, 1С автоматически разобьет одну из товарных позиций на две строки (например, 1 штука по цене 100.00 руб. и 1 штука по цене 99.99 руб.), чтобы математически уровнять обе части чека.

---

Способ 4. Включение округления чеков в пользу покупателя

Если копейки продолжают «плыть» из-за применения процентных скидок, мы можем настроить округление чеков на уровне правил продаж программы 1С. Это позволит избежать появления дробных частей копеек еще на этапе формирования корзины товаров.

Сделаем это по шагам:

  1. Перейдем в раздел CRM и маркетинг -> Настройки и справочники -> Правила округления цен.
  2. Создадим новое правило округления, например, «До 1 рубля» или «До 50 копеек» в пользу покупателя.
  3. Применим данное правило к розничному соглашению или к конкретной кассе ККМ.
  4. Благодаря округлению в пользу покупателя, итоговые суммы строк всегда будут целочисленными (или кратными 50 копейкам), что полностью исключит математические коллизии при передаче данных в драйвер ККТ.

---

Способ 5. Программный анализ отправляемого XML-пакета (для разработчиков)

Посмотрим на проблему изнутри программного кода. Если вы являетесь разработчиком и вам необходимо локализовать ошибку, мы можем перехватить XML-пакет, который БПО отправляет на кассовый аппарат. Для этого нам нужно проанализировать модуль интеграции с кассой.

Ниже представлен пример концептуального кода, который можно использовать в расширении для отладки и ручной корректировки расхождений перед отправкой XML драйверу АТОЛ:


// В процедуре подготовки XML-пакета для ККТ (например, в БПО)
Процедура КорректироватьДанныеЧекаПередПечатью(ПараметрыЧека) Экспорт
    
    ОбщаяСуммаОплат = 0;
    Для Каждого СтрокаОплаты Из ПараметрыЧека.ТаблицаОплат Цикл
        ОбщаяСуммаОплат = ОбщаяСуммаОплат + СтрокаОплаты.Сумма;
    КонецЦикла;
    
    ОбщаяСуммаТоваров = 0;
    Для Каждого СтрокаТовара Из ПараметрыЧека.ТаблицаТоваров Цикл
        ОбщаяСуммаТоваров = ОбщаяСуммаТоваров + СтрокаТовара.СуммаСУчетомСкидок;
    КонецЦикла;
    
    // Выявляем копеечное расхождение
    Если ОбщаяСуммаОплат > ОбщаяСуммаТоваров Тогда
        РазницаКопеек = ОбщаяСуммаОплат - ОбщаяСуммаТоваров;
        
        // Если разница незначительна (до 5 копеек), корректируем последнюю позицию
        Если РазницаКопеек <= 0.05 Тогда
            КоличествоТоваров = ПараметрыЧека.ТаблицаТоваров.Количество();
            Если КоличествоТоваров > 0 Тогда
                ПоследняяСтрока = ПараметрыЧека.ТаблицаТоваров[КоличествоТоваров - 1];
                ПоследняяСтрока.СуммаСУчетомСкидок = ПоследняяСтрока.СуммаСУчетомСкидок + РазницаКопеек;
                // Также корректируем цену единицы товара, если количество равно 1
                Если ПоследняяСтрока.Количество = 1 Тогда
                    ПоследняяСтрока.Цена = ПоследняяСтрока.СуммаСУчетомСкидок;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры

Такой подход позволяет гарантировать, что на уровне платформы 1С данные всегда будут уходить на фискальный регистратор сбалансированными, независимо от сложности примененных скидок и округлений.

---

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

Подводя итоги, дадим краткий чек-лист по устранению ошибки «Сумма безналичных оплат больше суммы товарных позиций» в вашей системе:

  1. Проверьте релиз конфигурации: если ваша УТ ниже версии 11.4.9.70 — обновите ее или установите соответствующий патч через подсистему обслуживания.
  2. Настройте ФЛК: убедитесь, что в настройках ККТ в 1С допустимое расхождение ФЛК установлено в значение 0.01 или 0.05 рубля, а не в круглый ноль.
  3. Проверьте округление: используйте округление чека в пользу покупателя для минимизации дробных копеек.
  4. Обновите драйвер: убедитесь, что вы используете актуальный драйвер АТОЛ v10 и последнюю версию прошивки кассового аппарата, поддерживающую актуальные протоколы ФФД.
← На главную