Рассмотрим частую задачу, с которой сталкиваются при настройке торгового оборудования: как реализовать корректное округление итоговой суммы чека до целого рубля (без копеек) при пробитии через ККТ АТОЛ 11Ф. Разберем по шагам, почему нельзя просто отбросить дробную часть, как работает математика современных фискальных регистраторов и какие способы решения существуют в связке с 1С.
Проанализируем ситуацию с точки зрения требований Форматов фискальных документов (ФФД 1.05, 1.1 и 1.2). Современные онлайн-кассы и их фискальные накопители (ФН) осуществляют строгий математический контроль каждой строки передаваемого чека.
Основное правило, которое контролирует драйвер кассы: «Цена с учетом скидки × Количество = Стоимость строки». При этом итоговая сумма чека должна строго равняться сумме стоимостей всех его позиций. Если программно отрезать копейки только от общего итога, математика не сойдется, и касса вернет ошибку (например, «Неверная цена (сумма)»). Чек пробит не будет.
Кроме того, важно помнить важное правило для онлайн-касс: округление может осуществляться только в меньшую сторону (в пользу покупателя) через механизм скидок. Сделать наценку на чек нельзя. Например, если расчетная сумма чека составляет 10 рублей 99 копеек, мы можем округлить ее только до 10 рублей, применив скидку 99 копеек. «Наценить» 1 копейку для округления до 11 рублей аппарат не позволит.
Если мы работаем с кассой напрямую из кода 1С через драйвер оборудования, рассмотрим использование встроенных методов драйвера АТОЛ. Чтобы сделать скидку-округление на весь чек, выполним следующие шаги:
SummDiscount().Destination=0.При таком подходе драйвер попытается самостоятельно распределить копеечную скидку по позициям чека перед записью данных в ФН.
В современных учетных системах (таких как 1С:Розница, 1С:УТ, 1С:УНФ) программировать логику округления через драйвер не нужно. Посмотрим на встроенные механизмы, которые позволяют решить задачу легально и без ошибок расхождения сумм.
Механизм автоматических скидок. Настроим округление стандартным функционалом: создадим специальную автоматическую скидку с типом «Округление» (до 1 рубля в пользу покупателя). В дереве скидок такую скидку необходимо разместить в самом конце списка и назначить ей максимальный приоритет. При расчете корзины платформа 1С сама распределит эти копейки по товарам так, чтобы итоговая сумма чека получилась ровной и прошла проверку ФФД.
Алгоритм разбиения строк. Разберем ситуацию, когда распределить скидку ровно невозможно (возникают бесконечные дроби или товар штучный, но цена не делится). Современные версии библиотек подключаемого оборудования 1С применяют умный алгоритм: одинаковый товар программно разбивается на две строки в чеке.
Суммарно это дает ровный итог без копеек, и касса принимает такой чек без ошибок расхождения.
Если стандартные механизмы не подходят или конфигурация нетиповая, проанализируем дополнительные варианты обхода проблемы:
Применяя любой из описанных методов, всегда проверяйте результат на тестовом контуре или при пробитии чека на небольшую сумму, чтобы убедиться, что драйвер АТОЛ корректно принимает команду и итоговая сумма в фискальном документе полностью соответствует задуманному округлению.