ЦЕНЫ И ПРАВИЛА АКЦИЙ
Как сочетать скидки: база, порядок и итог каждой строки
Два одинаковых купона могут дать разный итог на сайте и кассе, если базы или порядок расчёта отличаются. Разберите одну корзину по шагам, проверьте исключения и сохраните распределение для последующих корректировок.
Начните с правила, которое можно воспроизвести
«Скидки суммируются» недостаточно для кассира, сайта и поддержки. Нужны ответы: на какие строки действует каждое предложение, что считается базой, в каком порядке происходят операции, какие комбинации разрешены и как округляется результат. Одно название купона не содержит всех этих условий.
Разделите три уровня: отдельный товар, подходящая часть корзины и доставка. В документации Shopify эти классы различаются; товарные скидки применяются до скидок заказа, а доставка обрабатывается отдельно. Поддержка комбинаций зависит от условий магазина и типа скидок. Источник: Shopify.
Дальше используется собственная учебная модель расчёта. Она нужна для согласования требований и не обещает одинакового поведения всех систем. Выбор между общей акцией и адресным предложением разобран отдельно.
Совместимость и способ расчёта — разные настройки
Сначала определите, можно ли применять предложения вместе. Затем установите, как считается разрешённая комбинация. Последовательное применение 20% и 10% к одному товару оставляет 0,8 × 0,9 = 0,72 исходной цены, то есть уменьшает её на 28%.
Если оба процента считаются от одной исходной базы, уменьшение будет 30%. Ни одно толкование нельзя назначить по слову «суммируются». Microsoft Commerce документирует отдельную настройку последовательного расчёта и расчёта от первоначальной цены. Источник: Microsoft.
У Shopify есть важное частное правило: несколько процентных скидок уровня заказа рассчитываются от одной базы после товарных скидок. Это не то же самое, что произвольная последовательная цепочка. Источник: сочетание скидок Shopify. При переносе акции между каналами сравнивайте фактическую формулу, а не только одинаковые названия полей.
Учебная корзина с исключённым товаром
Все суммы условные, в одной денежной единице. Налоги для этого арифметического примера не рассматриваются: их порядок нужно проверять отдельно для реального места продажи. В корзине две единицы A по 1 000, одна B за 500 и одна C за 300. Товарный итог до скидок — 2 800. Доставка стоит ещё 200.
Заданы правила:
- A получает товарную скидку 20%.
- Купон даёт 10% на A и B после товарной скидки.
- C исключён из обеих акций.
- Доставка не входит в процентную базу.
- Эти две акции разрешено сочетать.
После первого шага строка A стоит 2 000 × 0,8 = 1 600. База купона — 1 600 + 500 = 2 100. Скидка купона составляет 210: на A приходится 160, на B — 50. Итоговые товарные строки равны 1 440, 450 и 300.
Всего за товары: 1 440 + 450 + 300 = 2 190. С доставкой: 2 390. Товарная скидка суммарно равна 610, или примерно 21,79% исходных 2 800. На A действительно действует уменьшение на 28%, на B — на 10%, на C — на 0%. Общего процента 30% у всей корзины нет.
Порог акции требует собственной базы
Предположим, у купона дополнительно установлен минимум 2 200. Если он проверяется по подходящим товарам после товарных скидок, база 2 100 не проходит условие. Если согласованная база — те же подходящие товары до скидок, сумма 2 500 проходит. Это разные условия, хотя текст «от 2 200» одинаковый.
Не включайте исключённый C в порог автоматически. Возможна политика, при которой товар участвует в достижении минимума, но не получает скидку; тогда оба решения должны быть записаны раздельно. Условия бесплатной доставки также могут использовать другую сумму.
После добавления, удаления или изменения количества строк пересчитайте право на акцию и её результат. Если купон перестал подходить, объяснение должно называть нарушенное условие, а не показывать неопределённую ошибку. Принятые условия уже оформленного заказа меняются только по предусмотренному процессу.
Сравнивайте полные разрешённые варианты
Для той же исходной корзины рассмотрим альтернативу: один купон на 500 для A и B, который по учебным условиям нельзя сочетать с остальными скидками. Тогда товары стоят 2 800 − 500 = 2 300, а с доставкой — 2 500.
Первая разрешённая комбинация даёт 2 390, альтернатива — 2 500. Разница 110 в пользу первой. Сравнение отдельных чисел «500 больше 210» неверно: у первой ветки есть ещё товарная скидка 400.
Если появляется предложение бесплатной доставки, включите его только в те варианты, где оно разрешено. Не собирайте итог из лучших частей несовместимых наборов. Сохраните выбранную комбинацию и причины отклонения остальных; это поможет объяснить результат клиенту и найти различие между кассой и сайтом.
Порядок фиксированной и процентной скидки
На цене 1 000 сначала уменьшение на 20%, затем на 100 даёт 700. Обратный порядок даёт (1 000 − 100) × 0,8 = 720. Разница 20 появляется без изменения названий акций.
Поэтому у смешанных правил нужны явный порядок и определение, является ли фиксированное уменьшение суммой на единицу, строку или заказ. Купон «100 на строку» для трёх единиц не равен купону «100 на каждую единицу».
Отдельно задайте защиту от отрицательной цены и поведение при скидке больше подходящей суммы. Не выдавайте отрицательную цену за автоматически возникший долг магазина. Подарочные карты, бонусные платежи и скидки также не должны превращаться в один общий тип операции без проверенной модели.
Распределение по строкам и округление
В новом независимом варианте после товарной скидки база A и B равна 2 100. Вместо процентного купона применяется фиксированная скидка 300. Для внутренней сверки выбрано пропорциональное распределение по стоимости подходящих строк после товарных скидок.
На A приходится 300 × 1 600 / 2 100 ≈ 228,5714, на B — 300 × 500 / 2 100 ≈ 71,4286. При согласованном округлении до двух знаков это 228,57 и 71,43. Их сумма остаётся ровно 300. C получает ноль.
После распределения A стоит 1 371,43, B — 428,57, C — 300. Товарный итог — 2 100. Алгоритм должен восстанавливать именно общий результат, включая остаток округления. Если строк несколько, независимое округление каждой доли способно дать расхождение; задайте детерминированный порядок распределения остатка.
Две единицы внутри A также требуют правил детализации. Деление 1 371,43 пополам не даёт двух одинаковых сумм с двумя знаками. Для поштучной сверки возможны 685,72 и 685,71 с сохранённым основанием. Это техническое распределение, не универсальное правило возврата покупателю.
Сохраняйте расчёт оформленного заказа
В заказе нужны исходные цены, подходящие количества, исключения, версии правил, рассчитанные базы, суммы по шагам, распределение и округление. Одного итогового значения недостаточно, чтобы понять, почему клиент заплатил именно столько.
При возврате или отмене части заказа используйте сохранённые условия и применимый порядок корректировки. Не пересчитывайте прошлую покупку по сегодняшней акции только потому, что старый купон уже выключен. Денежный результат и права клиента определяются действующими условиями и применимыми требованиями; учебное распределение выше лишь помогает восстановить исходные суммы.
Отдельно храните резерв использования купона, подтверждённое использование и разрешённое восстановление лимита. Повтор обработки того же заказа не должен съедать дополнительное применение. Отмена платежа сама по себе не доказывает, что вся покупка отменена и лимит надо вернуть.
Приёмочный набор перед запуском
- Для основной корзины воспроизводится итог 2 390 с доставкой.
- Исключённый C не получает процентного уменьшения.
- Для порога 2 200 видна разница баз 2 100 и 2 500.
- Несовместимый купон на 500 даёт альтернативный итог 2 500.
- Порядок 20% и 100 воспроизводит 700 либо 720 по выбранному правилу.
- Фиксированные 300 распределяются как 228,57 и 71,43 без потери остатка.
- Изменение количества повторно проверяет порог и доступные комбинации.
- Поддержка видит расчёт оформленного заказа после завершения акции.
- Повторный обмен не удваивает использование купона.
Для SABSUS проверьте сценарии через заказы, лояльность и структуру каталога. Доступность нужных способов сочетания и распределения необходимо подтвердить в выбранной конфигурации. Отчёт о марже должен использовать итоговую выручку без повторного вычитания той же скидки.
Частые вопросы
Две скидки 20% и 10% всегда дают 28%?
Только при последовательном применении к одному и тому же остатку цены. При общей первоначальной базе получится 30%; возможны и ограничения совместимости.
Почему меньший купон оказался выгоднее?
Сравнивайте весь разрешённый набор. У купона может быть товарная скидка в сочетании, другая база или условие доставки.
Можно хранить только итоговую цену?
Для воспроизводимой проверки нужны ещё правила и шаги расчёта. Особенно важны исключения, распределение по строкам и остатки округления.
Источники
- Shopify: Combining discounts — классы, совместимость и базы сочетаний.
- Microsoft: Pricing settings — последовательный расчёт и расчёт от первоначальной цены.
Источники проверены 9 октября 2026 года. Корзины, цены и варианты правил учебные.