Обработка цен с более чем двумя знаками после запятой: разбор на примерах из файла
Рассмотрим примеры из файла (колбаса и шурупы) и разберём, как правильно обрабатывать цены с дробными значениями в соответствии с ФЗ‑54.
Пример 1. Весовой товар (колбаса)
Исходные данные:
-
цена за кг (P) = 321,00 руб./кг;
-
количество (Q) = 0,231 кг;
-
скидка (d) = 3% (0,03).
Расчёт по формуле:
S = round(321 × 0,231 × 0,97, 2) = 71,81 руб.
Анализ:
-
Сначала вычисляем «сырую» стоимость без округления:
321 × 0,231 = 74,151 руб. -
Применяем скидку 3%:
74,151 × 0,97 = 71,92647 руб. -
Округляем до двух знаков после запятой:
round(71,92647, 2) = 71,93 руб.
Проблема:
Если просто округлить и пробить в чеке 71,93 руб., это нарушит ФЗ‑54 — итоговая сумма не будет точно соответствовать произведению цены, количества и коэффициента скидки.
Правильное решение:
Нужно использовать корректирующую скидку или разбить позицию, чтобы соблюсти правило:Цена × Кол-во × Скидка = Сумма позиции ± 1 копейка.
Вариант 1: корректирующая скидка
-
пробиваем в чеке цену 321,00 руб./кг;
-
указываем количество 0,231 кг;
-
применяем дополнительную корректирующую скидку, чтобы итоговая сумма стала 71,81 руб.;
-
в чеке не должно быть строки «округление» — только условия акции/скидки.
Вариант 2: разбиение позиции
Если корректирующая скидка неприменима, делим позицию на две строки:
-
строка 1: 0,23 кг по 321,00 руб./кг →
321 × 0,23 = 73,83 руб.; -
строка 2: 0,001 кг по сниженной цене → рассчитываем так, чтобы общая сумма составила 71,81 руб.
Как пробить в чеке:
-
кол-во: 0,231 кг;
-
цена: 321,00 руб./кг;
-
сумма: 71,81 руб. (без строки «округление»);
-
если использована корректирующая скидка — отобразить её как условие акции.
Пример 2. Штучный товар (шурупы)
Исходные данные:
-
цена за шт. (P) = 0,30 руб./шт.;
-
количество (Q) = 1000 шт.;
-
скидка (d) = 3% (0,03).
Расчёт по формуле:
S = round(0,30 × 1000 × 0,97, 2) = 291,00 руб.
Анализ:
-
«Сырая» стоимость:
0,30 × 1000 = 300 руб. -
Применяем скидку 3%:
300 × 0,97 = 291,00 руб. -
В этом случае округление не требуется — сумма уже с двумя знаками после запятой.
Особенность:
Хотя здесь округление не понадобилось, важно понимать, что при других значениях (например, цена 0,33 руб./шт.) итоговая сумма могла бы не совпасть с Цена × Кол-во × Скидка.
Пример с «проблемной» ценой:
-
P = 0,33 руб./шт.;
-
Q = 1000 шт.;
-
d = 3%.
-
Расчёт:
0,33 × 1000 × 0,97 = 320,01 руб.(не совпадает с округлённым до двух знаков).
Правильное решение (разбиение позиции):
Разбиваем на две строки:
-
строка 1: 999 шт. по 0,33 руб. →
999 × 0,33 = 329,67 руб.; -
строка 2: 1 шт. по скорректированной цене → рассчитываем так, чтобы общая сумма соответствовала
320,01 руб.после скидки.
Как пробить в чеке:
-
создать две строки для одной позиции;
-
в первой строке: кол-во — 999 шт., цена — 0,33 руб./шт., сумма — 329,67 руб.;
-
во второй строке: кол-во — 1 шт., цена — скорректированная, сумма — оставшаяся часть;
-
итоговая сумма чека: 320,01 руб.;
-
не использовать строку «округление» — корректировки внутри позиций.
Итог
-
Для весового товара (колбаса) используем корректирующую скидку или разбиение позиции, чтобы сумма в чеке точно соответствовала расчётам ±1 копейка.
-
Для штучного товара (шурупы) при необходимости разбиваем позицию на строки, чтобы каждая строка удовлетворяла требованию точности (расхождение ≤ 1 копейка).
-
Ключевое правило: не округляем промежуточные расчёты — только итоговую сумму чека (в пользу покупателя). Все корректировки должны быть внутри позиций, а не через строку «округление».
-
Фискальная дисциплина: соблюдение ФЗ‑54 гарантирует отсутствие претензий со стороны налоговых органов и прозрачность для покупателя.