БонусБесплатный первый месяц абонентской поддержки при заказе разработки «под ключ»

Кросс-проверка корзины, скидок и промокодов

Кросс-проверка корзины, скидок и промокодов в магазине на 1С-Битрикс

Скидка на товар работает. Промокод работает. Цена для оптовика работает. А когда клиент кладёт в корзину акционный товар, вводит промокод и оказывается в группе с оптовой ценой — магазин внезапно продаёт в минус. Никто не заметит, пока не сойдётся отчётность, а к тому времени убыток уже реальный. Корзина ломается не громко, а тихо — в комбинациях, которые никто не проверял.

Разберём, как проводить кросс-проверку корзины, скидок и промокодов в магазине на 1С-Битрикс: как устроен расчёт итоговой суммы через sale.order, где прячутся ошибки приоритетов и граничных случаев, как построить матрицу проверки и закрыть логику автотестами. Настроить и проверить связку заказа с учётом помогает автоматизация продаж и склада на 1С.

Коротко

  • Итоговая сумма — результат взаимодействия многих правил; ошибки прячутся в их комбинациях, а не в отдельных скидках.
  • Главный источник убытков — неверные приоритеты: скидки складываются там, где должна применяться одна.
  • Целенаправленно тестируйте граничные случаи: ноль, минус, пороги срабатывания, округление, промокод на уценённый товар.
  • Сумму всегда считает сервер по правилам sale.order, а ключевые сценарии закрывают автотестами и прогоняют при деплое.

Почему корзина ломается тихо

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

Причина в комбинаторике: каждая скидка по отдельности проста, но вместе они образуют сотни сочетаний, и проверить их «на глаз» нельзя. Именно поэтому корзину нужно проверять системно — комбинациями и граничными случаями, а не парой ручных заказов «вроде работает».

Из чего складывается итоговая сумма

Чтобы проверять корзину, нужно понимать, из каких слоёв собирается итог. В 1С-Битрикс на сумму влияют:

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

Оформление заказа по шагам КорзинатоварыДанныеконтактыДоставкаспособ, адресОплатаспособ оплатыСпасибозаказ созданЧем короче и понятнее шаги оформления, тем меньше брошенных корзин.
Схема: Чем короче и понятнее шаги оформления, тем меньше брошенных корзин.

Приоритеты и сложение скидок

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

Ключевой вопрос бизнеса: скидки складываются или выбирается одна? Ответ должен быть принят явно и настроен приоритетами. Молчаливое «пусть система сама» приводит к тому, что акция плюс промокод плюс оптовая цена обнуляют маржу.

Кросс-проверка начинается именно здесь: берут пары и тройки скидок и убеждаются, что они складываются (или не складываются) ровно так, как задумано бизнесом. Это первый и самый важный тест.

Промокоды и их взаимодействие со скидками

Промокод — отдельный слой со своими условиями, и его взаимодействие с акциями надо продумать. Типичные вопросы: складывается ли промокод с акционной ценой? применяется ли к уже уценённому товару? действует ли для оптовой группы? Ответ на каждый — бизнес-решение, которое затем проверяют на всех комбинациях.

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

Граничные случаи

Больше всего ошибок живёт на краях логики. Их надо тестировать целенаправленно:

«Обычные» заказы такие случаи не покрывают — их надо проверять специально, потому что именно здесь всплывают минусовые суммы и ошибки округления.

Округление и переполнение

Скидки в процентах порождают дробные значения, а деньги считают до копейки — на стыке возникают ошибки округления. Проблема в том, где округлять: на позицию, на строку или на весь заказ; сумма отдельно округлённых позиций может не совпасть с округлённым итогом.

Правильный подход — единое, заранее определённое правило округления по всему расчёту, а не «где как получилось». Проверяют это на суммах, дающих дробные скидки (например, 33% от нечётной цены), и сверяют, что итог, позиции и данные в учёте сходятся до копейки.

Матрица сценариев проверки

Системная проверка строится как матрица: перебор ключевых измерений и сверка фактической суммы с ожидаемой.

ИзмерениеВарианты
Группа клиентаРозница, опт, дилер
Скидка на товарНет, акция, уценка
Скидка на корзинуНет, от суммы, от состава
ПромокодНет, процент, фикс, на категорию
Порог/границаНиже, ровно, выше порога

Даже сокращённая матрица даёт десятки сценариев — гораздо больше, чем проверяют вручную. Ключевые из них автоматизируют, чтобы прогонять повторно при каждом изменении.

Пересчёт на сервере и безопасность

Итоговую сумму, скидки и применимость промокода всегда считает сервер, а не браузер. Данные, пришедшие от клиента — цена, скидка, итог, — принимать на веру нельзя: подмена цены в запросе иначе превращается в дыру. Сервер заново рассчитывает корзину по правилам sale.order при каждом изменении и обязательно перед оформлением, а фронтенд лишь отображает результат.

Это часть более широкой темы доверия к входным данным. Почему нельзя доверять тому, что прислал клиент, и как защищать серверные точки входа, мы разбирали в статье про REST, вебхуки и безопасность в Битрикс.

Согласование суммы с 1С

Отдельный класс ошибок — расхождение суммы на сайте и в учётной системе. Оно возникает, когда скидки считаются в двух местах по-разному: часть логики на сайте, часть — в 1С. Правильно, когда итог считается в одном месте и передаётся обменом без повторного пересчёта, иначе клиент, бухгалтерия и склад видят разные цифры по одному заказу.

Поэтому кросс-проверка включает сверку: сумма заказа на сайте = сумма в 1С после обмена. Навести порядок в этой связке помогает автоматизация на 1С, а начать при хаотичном обмене логично с диагностики через аудит.

Автотесты на уровне sale.order

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

  1. Опишите ожидания. Для каждого сценария — вход (товары, группа, промокод) и точная ожидаемая сумма.
  2. Соберите заказ программно. Через API заказа, а не кликами в браузере.
  3. Примените правила. Дайте системе рассчитать скидки как в бою.
  4. Сверьте до копейки. Фактический итог должен совпасть с ожидаемым.
  5. Держите набор в репозитории. Тесты живут с кодом и прогоняются автоматически.

Проверка перед деплоем

Логика корзины — самое хрупкое место магазина: правка одной скидки легко ломает другую. Поэтому набор тестов на скидки прогоняют при каждом развёртывании, до того как изменения увидит покупатель. Это ловит регрессии — случаи, когда «починили одно, сломали другое» — на этапе выкладки, а не в проде.

Встроить прогон тестов в процесс выкладки — часть культуры контролируемого деплоя, о которой мы писали в статье про CI/CD и деплой в Битрикс. Для критичной логики скидок такой автоматический барьер особенно ценен.

Частые ошибки

Чек-лист проверки

  1. Приоритеты заданы явно. Решено и настроено, складываются скидки или выбирается одна.
  2. Промокод × акция. Проверено заявленное поведение во всех комбинациях.
  3. Граничные случаи. Ноль, минус, пороги, промокод на уценённое — протестированы.
  4. Округление едино. Одно правило по всему расчёту, позиции и итог сходятся.
  5. Матрица прогнана. Группы × скидки × промокоды × пороги сверены с ожиданием.
  6. Считает сервер. Итог рассчитывается по sale.order, данные клиента не в доверии.
  7. Сумма = 1С. Итог заказа на сайте совпадает с учётом после обмена.
  8. Тесты в деплое. Сценарии скидок прогоняются при каждой выкладке.

Вывод

Корзина ломается тихо и дорого — не ошибкой сервера, а неверной суммой в комбинации скидок, которую никто не проверял. Поэтому её тестируют системно: приоритеты и сложение скидок, взаимодействие промокодов, граничные случаи и округление — комбинациями, а не поодиночке, через матрицу сценариев с точными ожиданиями.

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

Частые вопросы

Почему корзину и скидки так сложно тестировать?

Потому что итоговая сумма — результат взаимодействия множества правил: скидок на товар, на корзину, промокодов, цен по группам клиента и бесплатной доставки. Эти правила комбинируются, и число сочетаний растёт лавинообразно. Одна скидка работает верно, но две вместе дают неожиданный результат. Поэтому корзину проверяют не отдельными скидками, а их комбинациями и граничными случаями на уровне заказа sale.order.

Скидки в 1С-Битрикс складываются или выбирается одна?

Зависит от настроек правил работы с корзиной: у скидок есть приоритет и флаг, прекращать ли обработку дальше. Можно настроить, чтобы применялась только одна лучшая скидка, а можно — чтобы несколько складывались. Ошибки чаще всего возникают именно здесь: непродуманные приоритеты приводят к тому, что скидки суммируются там, где не должны, и магазин продаёт в убыток. Это первое, что проверяют при кросс-проверке.

Что такое граничные случаи в корзине?

Это ситуации на краю логики: скидка делает товар бесплатным или уводит сумму в минус, промокод применяется к уже уценённому товару, скидка срабатывает ровно на пороговой сумме, в корзине один товар или очень много. Именно в граничных случаях всплывают ошибки округления и переполнения. Их нужно тестировать целенаправленно, а не надеяться, что «обычные» заказы их покроют.

Можно ли применять промокод вместе со скидкой?

Это бизнес-решение, которое надо принять явно и затем проверить. Часто промокод не должен складываться с акционной ценой, иначе маржа обнуляется. В 1С-Битрикс это регулируется приоритетами и условиями правил корзины и промокодов. Задача кросс-проверки — убедиться, что заявленное поведение (складывается / не складывается) реально выполняется во всех комбинациях, а не только в тех, что проверили вручную.

Как проверять корзину, чтобы не пропустить ошибку?

Составить матрицу сценариев: типы скидок × типы товаров × группы клиентов × промокоды × пороги, и прогнать её, сверяя фактическую сумму с ожидаемой. Ручной проверки «пары заказов» недостаточно — комбинаций слишком много. Ключевые сценарии автоматизируют тестами на уровне sale.order, чтобы каждое изменение логики скидок прогонялось повторно и не ломало то, что уже работало.

Почему сумма на сайте расходится с суммой в 1С?

Чаще всего из-за того, что скидки считаются в двух местах по-разному: часть логики на сайте, часть — в учётной системе, и они не согласованы. Правильно, когда итог заказа считается в одном месте и передаётся обменом без пересчёта, а не вычисляется заново на каждой стороне. Расхождение суммы — тревожный сигнал: клиент, бухгалтерия и склад видят разные цифры по одному заказу.

Нужно ли пересчитывать корзину на сервере?

Обязательно. Итоговую сумму, скидки и применимость промокода всегда считает сервер, а не браузер. Данные, пришедшие от клиента (цена, скидка), нельзя принимать на веру — иначе подмена цены в запросе превращается в дыру. Сервер заново рассчитывает корзину по правилам sale.order при каждом изменении и перед оформлением заказа, а фронтенд лишь отображает результат.

Как не сломать скидки при обновлении сайта?

Покрыть ключевые сценарии скидок автотестами и прогонять их при каждом деплое. Логика корзины — самое хрупкое место магазина: правка одной скидки легко ломает другую. Регрессионные тесты на комбинации скидок и промокодов, встроенные в процесс выкладки, ловят такие поломки до того, как их увидит покупатель. Это часть культуры контролируемого развёртывания изменений.

Поделиться:

Не уверены, что корзина считает правильно?

Проверим приоритеты скидок, промокоды и граничные случаи, согласуем сумму с 1С и закроем логику тестами. Рассчитаем работу по вашему магазину.

Аудит и оптимизация 1С

Редакция B2Bsite

Команда B2Bsite. С 2014 года разрабатываем интернет-магазины на 1С-Битрикс: корзина, скидки и промокоды, sale.order и обмен с 1С, проверенные тестами.

← Все статьи блога