Почему неправильно рассчитываются бонусы и скачут скидки в чеке 1С:Розница 2.2 и как это исправить?

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

Проанализируем ситуацию, с которой часто сталкиваются при настройке бонусной системы и дисконтных карт в конфигурации 1С:Розница 2.2. Допустим, мы настроили две маркетинговые акции: начисление 5% бонусов по обычной карте и 7% по VIP-карте. По задумке скидка по VIP-карте должна вытеснять базовую. Однако при подборе товаров в документ ЧекККМ мы замечаем странное поведение системы.

Во-первых, итоговая сумма бонусов оказывается меньше ожидаемой на 1-2 рубля (например, 69 рублей вместо 70 с тысячи). Во-вторых, при подборе определенного количества товаров (обычно больше 8-9 позиций) расчет ломается: скидки в первых строках чека внезапно меняются, "скачут", и система начинает применять разные условия для одинаковых строк.

Разберем основные причины проблемы

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

  1. Особенности механизма округления. В программе технически округление копеек реализовано через механизм автоматических скидок. Это округление накладывается поверх уже рассчитанных бонусов. Если в настройках задано построчное округление, отбрасываемые доли копеек в каждой строке суммируются и накапливаются. В итоге общая сумма скидки документа будет отличаться от прямой математической пропорции.
  2. Сбой приоритетов в дереве скидок. Правило совместного применения Вытеснение опирается не на процентную выгоду, а на иерархию (порядок расположения) скидок в папке. При большом количестве строк (более 8) и постоянном фоновом пересчете скидок в момент подбора алгоритм 1С иногда сбоит, нарушая иерархию, из-за чего скидки начинают применяться хаотично.
  3. Контроль минимальной розничной цены. Если в магазине включено ограничение на продажу ниже минимальной цены (или цены закупки), скидка 7% по VIP-карте может пробивать этот порог для конкретного дешевого товара. Программа видит запрет, отменяет 7% и пытается применить предыдущую доступную скидку (5%), что визуально выглядит как ошибка.

Рассмотрим по шагам решения проблемы

Убедившись в причинах, применим на практике несколько проверенных способов настройки системы. Выполним следующие действия для стабилизации расчета в РМК.

1. Замена правила "Вытеснение" на "Максимум"

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

Перейдем в раздел маркетинговых акций и откроем дерево скидок. Поместим обе наши скидки (и 5%, и 7%) в одну группу. Для этой группы установим правило совместного применения Максимум. Теперь математическое ядро программы будет самостоятельно анализировать каждую строку и выбирать ту скидку, которая дает наибольшую выгоду покупателю. Это работает гораздо стабильнее и исключает "перемигивание" скидок при добавлении 9-го и последующих товаров.

2. Изменение настроек округления чека

Чтобы избавиться от потери рублей и копеек при начислении бонусов, проанализируем настройки округления. Перейдем в раздел "НСИ" — "Магазины" (или проверим настройки самих видов скидок).

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

3. Отключение фонового авторасчета при подборе

Если скидки продолжают хаотично меняться прямо в процессе сканирования штрихкодов, давайте отключим промежуточный пересчет.

Зайдем в раздел "Администрирование" — "Настройки пользователей и прав" — "Персональные настройки пользователей". Найдем и снимем флажок Рассчитывать автоматические скидки при каждом редактировании товаров в чеке.

Что это даст? Кассир сможет спокойно отсканировать все 10, 20 или 50 товаров. Программа не будет дергать алгоритм расчета после каждой позиции. Когда весь товар подобран, кассир один раз нажимает кнопку "Рассчитать скидки" (или она срабатывает автоматически при переходе к оплате). Это полностью исключит промежуточные конфликты в дереве скидок.

Дополнительные рекомендации

Посмотрим на альтернативный вариант. Если вы используете старый релиз 1С:Розница 2.2, проблема распределения итоговой суммы бонусов по строкам является известным архитектурным ограничением. Для ее полного решения без вмешательства в программный код общих модулей рекомендуется обновить систему.

Рассмотрите возможность перехода на редакцию 2.3 и включите использование функционала "Новое РМК" (Единое рабочее место кассира). В последних версиях разработчики переписали математическое ядро расчета и интегрировали обновленный сервер лояльности, где проблемы с округлением и вытеснением множественных скидок решены на базовом уровне платформы.

← На главную