При работе в розничной торговле часто возникает ситуация, когда после применения автоматических скидок в чеке появляются суммы с «неудобными» копейками. Особую сложность это представляет для магазинов со смешанным ассортиментом, например, для аптечных пунктов, где на часть товаров (лекарственные средства из списка ЖНВЛП) государством установлены предельные наценки, и любое округление «вверх» может привести к нарушению закона, в то время как для сопутствующих товаров округление до рубля крайне желательно.
В этой статье мы разберем по шагам, как настроить систему таким образом, чтобы округление срабатывало только для определенных групп товаров и не затрагивало позиции с жестким контролем цен.
Разберем ситуацию, описанную в теме: при использовании вытесняющих скидок и внешних обработок программа может рассчитать скидку так, что итоговая цена составит, например, 99.99 рублей. Попытка установить нулевую скидку или скидку 0% часто не дает результата, так как механизмы расчета 1С все равно могут оставлять минимальный остаток в 1 копейку из-за особенностей математического деления в коде. Проанализируем способы решения этой задачи встроенными средствами программы и программными методами. При невозможности решить проблему типовыми инструментами можно использовать обработку для расчета скидки в 1С:Розница.
Малоизвестный, но эффективный способ — использование справочника Скидки (наценки) для самого процесса округления. Рассмотрим, как это настроить:
Проанализируем, как округление взаимодействует с другими скидками. Чтобы округление сработало корректно и именно в конце расчета, его необходимо правильно расположить в дереве скидок:
Округление должно находиться в группе с типом Последовательное применение. При этом само правило округления должно иметь самый низкий приоритет (находиться в самом низу списка). Если поместить округление в группу Вытеснение, оно может быть просто проигнорировано, если сработает любая другая скидка из этой группы.
Выясним причину, по которой копейки могут «мигрировать» между строками чека. В 1С:Розница существуют глобальные настройки магазина. Перейдем в НСИ — Магазины, откроем карточку нужного магазина и найдем раздел настроек округления.
Существует два варианта:
Если вы используете внешние обработки для расчета скидок, как автор сообщения №2, вы можете управлять округлением непосредственно в коде. В процедуре РассчитатьСкидки() при формировании структуры возвращаемых данных можно принудительно вычислить остаток от деления и скорректировать сумму скидки. В качестве практического примера реализации таких алгоритмов можно использовать внешнюю подключаемую обработку для расчета сложных скидок.
Посмотрим на пример логики, которую можно реализовать в обработке:
// Пример корректировки суммы скидки для получения целого числа в строке
Для Каждого СтрокаТЧ Из Объект.Запасы Цикл
Если СтрокаТЧ.Номенклатура.ВходитВСегмент(СегментДляОкругления) Тогда
ТекущаяЦенаС учетомСкидки = СтрокаТЧ.Цена * (1 - СкидкаПроцент/100);
НоваяЦена = Цел(ТекущаяЦенаС учетомСкидки); // Округление до целого рубля вниз
СтрокаТЧ.СуммаСкидки = СтрокаТЧ.Сумма - (НоваяЦена * СтрокаТЧ.Количество);
КонецЕсли;
КонецЦикла;
Использование функции Цел() или Окр(..., 0, РежимОкругления.ВМеньшуюСторону) позволяет программно гарантировать, что итоговая цена будет кратна рублю без лишних копеек, которые мешают при взаиморасчетах с покупателями.
Подводя итог, для настройки правильного округления в 1С:Розница выполните следующие действия:
Такой подход позволит вам соблюсти требования законодательства по контролю цен на медикаменты и одновременно обеспечить удобство расчетов для остальных категорий товаров.