Проблема расхождения сумм в чеках на копейки — это классическая ситуация, с которой сталкиваются специалисты при автоматизации розничной торговли. Особенно остро этот вопрос стоит в связке «1С:Управление торговлей 10.3» и современных онлайн-касс, таких как АТОЛ 91Ф. Конфликт возникает из-за разницы в алгоритмах расчета итоговой суммы: программа 1С сначала вычисляет общую сумму и вычитает из неё скидку, тогда как кассовый аппарат, согласно требованиям законодательства, должен оперировать ценой за единицу товара уже с учетом всех примененных скидок.
В этой статье мы подробно разберем, почему возникают такие «лишние» или «недостающие» копейки, проанализируем нормативные требования и рассмотрим конкретные технические способы решения проблемы, от настройки оборудования до корректировки программного кода 1С.
Для начала выясним причину конфликта. Разберем ситуацию на примере. Допустим, мы продаем 3 единицы товара по цене 100 рублей за штуку. Клиенту предоставляется суммовая скидка в 1 рубль на всю позицию.
Логика 1С:Управление торговлей 10.3:
Программа считает так: (100 руб. * 3 шт.) - 1 руб. = 299 руб. Итоговая сумма по строке в 1С зафиксирована как 299 рублей.
Логика онлайн-кассы (согласно ФФД 1.05 и выше):
Касса обязана получить цену за единицу товара. Она пытается вычислить её: 299 руб. / 3 шт. = 99,6666... руб. Однако формат фискальных данных (ФФД) не позволяет передать в кассу цену с бесконечным количеством знаков после запятой — допускается только два знака.
Если 1С передаст цену 99,66 руб., то касса посчитает итог: 99,66 * 3 = 298,98 руб. (расхождение -2 копейки).
Если 1С передаст цену 99,67 руб., касса посчитает: 99,67 * 3 = 299,01 руб. (расхождение +1 копейка).
Поскольку касса проверяет математическую точность каждой строки, она выдает ошибку «Сумма позиций не совпадает с итогом» или просто пробивает чек с суммой, отличной от суммы в учетной системе 1С. Проанализируем, как можно исправить это поведение.
Многие пользователи используют АТОЛ 91Ф («ньюджер») как автономную кассу. Однако для корректной работы с 1С крайне рекомендуется перевести аппарат в режим фискального регистратора (ФР). В этом режиме касса полностью подчиняется командам драйвера, приходящим из 1С, и не пытается применять собственную внутреннюю логику округления скидок.
Для настройки выполним следующие действия:
Если настройка драйвера не решает проблему (математика все равно не сходится), наиболее надежным способом является доработка алгоритма выгрузки чека в ККМ. Проанализируем метод «разбиения строк». Суть его в том, чтобы разбить одну позицию с «неудобным» количеством на две строки с разными ценами, различающимися на 1 копейку.
В нашем примере с 3 штуками за 299 рублей программа должна отправить на кассу:
Рассмотрим пример кода, который можно внедрить в обработку обслуживания ККМ или общий модуль, отвечающий за фискализацию чека (например, ОбщиеМеханизмыФискальногоРегистратора):
// Пример логики распределения суммы по позициям
ВсегоКолво = СтрокаЧека.Количество;
ИтоговаяСуммаСоСкидкой = СтрокаЧека.Сумма;
// Вычисляем цену с округлением вниз
Цена1 = Окр(ИтоговаяСуммаСоСкидкой / ВсегоКолво, 2, РежимОкругления.Низ);
Сумма1 = Цена1 * ВсегоКолво;
Если Сумма1 < ИтоговаяСуммаСоСкидкой Тогда
// Появилась разница в копейках
РазницаКопеек = (ИтоговаяСуммаСоСкидкой - Сумма1) * 100;
// Выделяем часть товара по цене на 1 копейку больше
КолвоПоЦене2 = РазницаКопеек;
КолвоПоЦене1 = ВсегоКолво - КолвоПоЦене2;
Цена2 = Цена1 + 0.01;
// Формируем две строки вместо одной
ЗарегистрироватьПозицию(Товар, КолвоПоЦене1, Цена1);
ЗарегистрироватьПозицию(Товар, КолвоПоЦене2, Цена2);
Иначе
ЗарегистрироватьПозицию(Товар, ВсегоКолво, Цена1);
КонецЕсли;
Этот метод гарантирует, что сумма в кассе всегда будет соответствовать сумме в 1С до копейки, не нарушая при этом требований ФФД о передаче реальной цены за единицу.
Иногда проблему можно решить «малой кровью», изменив параметры форматно-логического контроля в настройках самого оборудования. Проанализируем возможности драйвера АТОЛ 10-й версии:
Выясним причину, почему нельзя просто передать «сумму скидки» на весь чек, как это делалось раньше в старых версиях 1С. Согласно требованиям 54-ФЗ и соответствующим форматам фискальных данных:
Рекомендация: Настройте 1С таким образом, чтобы в драйвер передавалась чистая цена (сумма строки / количество) без явного указания скидки в параметрах команды регистрации позиции. Все информационные сообщения о скидках для покупателя лучше выводить в текстовые нефискальные строки чека.
Мы рассмотрели основные причины расхождения копеек при работе 1С:УТ 10.3 с кассой АТОЛ 91Ф. Подведем итог: наиболее правильным и современным решением является программное разбиение строк в модуле фискализации 1С. Это позволит вам сохранить полную идентичность данных в учетной системе и фискальном накопителе, избежав ошибок при проверках налоговой инспекцией и упростив жизнь бухгалтеру при закрытии смен.