Пересчет скидок на этапе изменения оформленного заказа

Редактировал(а) Татьяна Брыкова 2026/01/22 13:07

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

На этапе изменения заказа происходит пересмотр применённых скидок. Для этого в дисконтном правиле предусмотрено поле для признака пересчитываемого правила. Оно расположено на формах правил: «Базовое правило», «Поощрение за купон», «Правило-комплект», «Персональная акция», «Товарная акция», «Правило-счетчик» внутри секции Параметры правила => Расширенные параметры => «Пересчитываемое»:

ПолеОписаниеОбязательное полеРедактирование
ПересчитываемоеПризнак правила, по которому определяется алгоритм применения скидок на изменяемые позиции. Поле отображается, если в поле  «На» выбрано одно из значений:  «Чек или заказ», «Позиция чека или заказа», «Заказ», «Позиция заказа»НетДефолтное значение поля зависит от роли безопасности пользователя: если включена привилегия «Настройка правил только на заказы», то поле по умолчанию не активировано, т.е. в значении «Нет», в противном случае «Да».

1712306887946-907.png

Рис. Поле "Пересчитываемое" на форме Базового правила

При обработке запроса изменения заказа проверяется является ли дисконтное правило пересчитываемым или нет. Если дисконтное правило пересчитываемое, то скидки по всем позициям заказа по данному правилу удаляются и рассчитываются по этому же правилу заново на все позиции нового состава заказа.

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

Например, клиент оформил заказ на 2 товара, и по дисконтному пересчитываемому правилу на них действует скидка 10%. При сборке оказалось, что 2-го товара нет в наличии и его заменили на другой товар, на который действует скидка 15% по другому пересчитываемому правилу. В этом случае на первый товар останется скидка 10%, а на второй станет 15%.

Если же правило не пересчитываемое, то скидка 10% по правилу перенесётся на заменяемую позицию, и общая скидка по заказу не изменится.

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

При поступлении в Manzana Loyalty Online запроса на изменение заказа, он очищается от всех примененных внутренних скидок. В запросе изменения заказа передаются только внешние скидки. Внешняя скидка учитывается по замещающей позиции и должна быть передана в запросе, в том числе, если позиция с внешней скидкой заменяется на саму себя.

Величина внешней скидки передается при включенной партнерской настройки Loyalty.Processing.Soft.ExternalDiscountRuturnAsAttribute.TurnOn в РА с ключом, соответствующим значению партнерской настройки Loyalty.Processing.Soft.ExternalDiscountRuturnAsAttribute.Prefix.

Итоговая присвоенная скидка по замещающей позиции должна устанавливаться на основании алгоритма агрегации внешней скидки.

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

Примененный купон учитывается в измененном заказе, в том случае, когда был использован в создании заказа. Повторно при изменении заказа купон применять не нужно. Если получилось так, что купонное пересчитываемое правило не может быть применено по условиям фильтрации, но при этом применялось при создании заказа, то купон восстанавливается к использованию. В случае, когда из заказа удаляются позиции, к которым применялся купон, купон также активируется, если не наступил срок окончания его действия на момент регистрации запроса изменения заказа. Номера купонов определяются в РА позиции, если включена партнерская настройка Loyalty.Processing.Soft.DiscountRuleRuturnAsAttribute.ReturnJson.ValueType в значении 2 или 3.

В итоге обработки запроса изменения заказа после всех агрегаций, исключений, обрезаний по МРЦ, формируются внешние скидки и скидки по всем правилам. Заново сформируем РА в ответ и сохраняется новая детализация скидок по позициям и правилам. Старый заказ удаляется из базы ночью.

Если позиция удаляется, т.е. в запросе заказа есть, а в запросе изменения нет, то такая позиция удаляется вместе со скидкой.