Как настроить избирательное округление в чеке 1С:Розница 2.3 после применения скидок

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

При работе в розничной торговле часто возникает ситуация, когда после применения автоматических скидок в чеке появляются суммы с «неудобными» копейками. Особую сложность это представляет для магазинов со смешанным ассортиментом, например, для аптечных пунктов, где на часть товаров (лекарственные средства из списка ЖНВЛП) государством установлены предельные наценки, и любое округление «вверх» может привести к нарушению закона, в то время как для сопутствующих товаров округление до рубля крайне желательно.

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

Причина возникновения проблемы «одной копейки»

Разберем ситуацию, описанную в теме: при использовании вытесняющих скидок и внешних обработок программа может рассчитать скидку так, что итоговая цена составит, например, 99.99 рублей. Попытка установить нулевую скидку или скидку 0% часто не дает результата, так как механизмы расчета 1С все равно могут оставлять минимальный остаток в 1 копейку из-за особенностей математического деления в коде. Проанализируем способы решения этой задачи встроенными средствами программы и программными методами. При невозможности решить проблему типовыми инструментами можно использовать обработку для расчета скидки в 1С:Розница.

Решение 1: Округление как отдельный вид скидки

Малоизвестный, но эффективный способ — использование справочника Скидки (наценки) для самого процесса округления. Рассмотрим, как это настроить:

  1. Перейдем в раздел Маркетинг — Скидки (наценки).
  2. Создадим новый элемент и выберем тип скидки Округление суммы.
  3. В поле Точность укажем нужное значение (например, 1.00 для округления до рубля или 0.05 для округления до 5 копеек).
  4. Важный момент: Чтобы округление не нарушало закон в отношении контролируемых товаров, в поле Вариант округления обязательно выберем В пользу покупателя. Это гарантирует, что программа всегда будет округлять сумму только вниз, не допуская превышения максимально допустимой цены.
  5. На вкладке Условия предоставления добавим ограничение по сегменту номенклатуры. Таким образом, округление будет применяться только к тем товарам, которые входят в выбранный сегмент (например, «Хозтовары»), и игнорироваться для сегмента «Медикаменты».

Решение 2: Настройка совместного применения скидок

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

Округление должно находиться в группе с типом Последовательное применение. При этом само правило округления должно иметь самый низкий приоритет (находиться в самом низу списка). Если поместить округление в группу Вытеснение, оно может быть просто проигнорировано, если сработает любая другая скидка из этой группы.

Решение 3: Округление по строкам vs Округление по чеку

Выясним причину, по которой копейки могут «мигрировать» между строками чека. В 1С:Розница существуют глобальные настройки магазина. Перейдем в НСИ — Магазины, откроем карточку нужного магазина и найдем раздел настроек округления.

Существует два варианта:

Решение 4: Программная корректировка во внешних обработках

Если вы используете внешние обработки для расчета скидок, как автор сообщения №2, вы можете управлять округлением непосредственно в коде. В процедуре РассчитатьСкидки() при формировании структуры возвращаемых данных можно принудительно вычислить остаток от деления и скорректировать сумму скидки. В качестве практического примера реализации таких алгоритмов можно использовать внешнюю подключаемую обработку для расчета сложных скидок.

Посмотрим на пример логики, которую можно реализовать в обработке:


// Пример корректировки суммы скидки для получения целого числа в строке
Для Каждого СтрокаТЧ Из Объект.Запасы Цикл
    Если СтрокаТЧ.Номенклатура.ВходитВСегмент(СегментДляОкругления) Тогда
        ТекущаяЦенаС учетомСкидки = СтрокаТЧ.Цена * (1 - СкидкаПроцент/100);
        НоваяЦена = Цел(ТекущаяЦенаС учетомСкидки); // Округление до целого рубля вниз
        СтрокаТЧ.СуммаСкидки = СтрокаТЧ.Сумма - (НоваяЦена * СтрокаТЧ.Количество);
    КонецЕсли;
КонецЦикла;

Использование функции Цел() или Окр(..., 0, РежимОкругления.ВМеньшуюСторону) позволяет программно гарантировать, что итоговая цена будет кратна рублю без лишних копеек, которые мешают при взаиморасчетах с покупателями.

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

Подводя итог, для настройки правильного округления в 1С:Розница выполните следующие действия:

  1. Установите в настройках магазина Округление по строкам.
  2. Создайте скидку с типом Округление суммы и настройте её В пользу покупателя.
  3. Ограничьте действие этой скидки только нужными сегментами номенклатуры.
  4. Поместите правило округления в самый конец группы Последовательного применения скидок.

Такой подход позволит вам соблюсти требования законодательства по контролю цен на медикаменты и одновременно обеспечить удобство расчетов для остальных категорий товаров.

← На главную