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

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

При работе с конфигурацией 1С:Управление торговлей 10.3 (особенно в релизах 10.3.87.x) пользователи часто сталкиваются с неприятной ситуацией: при попытке пробить чек на основании документа Оплата от клиента платежными картами с видом операции «Предоплата», кассовый аппарат аннулирует операцию. На экране или в логах драйвера ККТ появляется сообщение: «Сумма не наличных оплат превышает сумму чека». Это блокирует работу розничной точки и требует оперативного вмешательства технического специалиста.

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

Выясним причину возникновения ошибки

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

Рассмотрим основные факторы, провоцирующие конфликт:

  1. Математические округления при распределении предоплаты: Если в заказе покупателя несколько позиций, 1С должна распределить сумму оплаты пропорционально стоимости каждой строки. Из-за деления возникают бесконечные дроби, которые округляются до копеек. Если алгоритм просто округляет каждую строку, сумма округлений может не совпасть с итогом на копейку.
  2. Особенности ФФД 1.2 и новых драйверов: Современные версии драйверов (например, АТОЛ 10.х) стали гораздо жестче контролировать математическую целостность чека. Если раньше касса могла «простить» небольшое расхождение, то теперь протоколы обмена требуют идеального совпадения.
  3. Неверная передача признака способа расчета: При предоплате 1С иногда ошибочно передает данные так, будто это полная оплата товара в момент отгрузки, что создает путаницу в регистрах ККТ.

Решение №1: Обновление конфигурации

Несмотря на то, что поддержка УТ 10.3 постепенно сворачивается, фирма «1С» выпустила критически важные обновления. Разберем этот путь подробнее. Ошибка была официально признана и исправлена в релизе 10.3.88.1 и последующих. При работе с несколькими информационными базами для регулярной установки релизов применяется программа для автоматического обновления баз 1С.

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

Решение №2: Программная корректировка алгоритма (для разработчиков)

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

Рассмотрим пример логики исправления в процедуре, отвечающей за заполнение таблицы товаров для чека (обычно это ЗаполнитьТаблицуТоваровЧека или аналогичные методы в обработках ТОСервер или ОбщиеМодули).

Посмотрим на пример кода, который предотвращает накопление ошибки округления:


// Пример корректировки распределения суммы по строкам
ОстатокОплаты = СуммаДокумента;
КоличествоСтрок = ТаблицаТоваров.Количество();

Для Сч = 1 По КоличествоСтрок Цикл
    Строка = ТаблицаТоваров[Сч - 1];
    
    Если Сч = КоличествоСтрок Тогда
        // В последнюю строку записываем весь оставшийся «хвост»
        Строка.Сумма = ОстатокОплаты;
    Иначе
        // Рассчитываем пропорциональную сумму
        ТекущаяСумма = Округлить(Строка.Цена * Строка.Количество, 2);
        // Дополнительная проверка, чтобы не превысить остаток
        ТекущаяСумма = Минимум(ТекущаяСумма, ОстатокОплаты);
        Строка.Сумма = ТекущаяСумма;
        ОстатокОплаты = ОстатокОплаты - ТекущаяСумма;
    КонецЕсли;
КонецЦикла;

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

Решение №3: Анализ логов драйвера и настройка ККТ

Если программный код кажется верным, но ошибка сохраняется, нам нужно проверить, что именно «видит» касса. Проанализируем лог драйвера (например, для АТОЛ это fptr10.log). Найдем в логе секцию формирования чека openReceipt и последующие команды registration и payment.

Обратите внимание на следующие параметры:

Решение №4: Особенности признака способа расчета

Разберем еще один важный момент. При работе с УТ 10.3 и предоплатой важно разделять два этапа:

  1. Получение аванса: В этот момент пробивается чек с признаком «Предоплата» (или «Аванс»). В чеке может не быть списка товаров, только общая сумма.
  2. Отгрузка товара: Пробивается чек с признаком «Полный расчет», где указывается зачет аванса.

Если вы пытаетесь пробить предоплату через документ «Оплата от клиента платежными картами», убедитесь, что в настройках торгового оборудования в 1С верно указана версия ФФД. Если касса работает по ФФД 1.2, а 1С пытается отправить данные по старым протоколам 1.05, структура XML может быть некорректной, что приведет к дублированию сумм в глазах драйвера. Для корректной интеграции кассового оборудования по новому стандарту подойдёт обработка обслуживания ККТ Атол с поддержкой ФФД 1.2.

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

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

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

Во-вторых, используйте метод «последней строки» для распределения копеек, чтобы итоговая сумма чека всегда сходилась с суммой оплаты до копейки.

В-третьих, всегда проверяйте логи драйвера ККТ. Это единственный способ увидеть реальные цифры, которые уходят на кассу, и понять, на каком этапе (товары, налоги или оплаты) происходит разрыв в 1 копейку.

Совместная проверка программной логики 1С и настроек драйвера ККТ позволит вам устранить ошибку и обеспечить бесперебойную работу кассового узла.

← На главную