Сложная скидка 3=2, 5=3

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

Я поломал голову и понял, что в существующей парадигме работы задачу не решить. Скидки рассчитываются последовательно, а тут нужно прогнозирование. Предложил доработать обработку за небольшие деньги, потому что новые возможности пойдут на пользу всем пользователям.

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

Соответственно, по каждой строке было понятно, сколько уже накоплено товара. Поэтому заранее будет рассчитано, сколько товара будет накоплено в следующей строке.

В итоге формула выполнения условия стала выглядеть так:

Р = НакопительКоличества = 4 И ЕстьНакопительКоличества(5) ИЛИ НакопительКоличества = 5 ИЛИ НакопительКоличества = 3 И НЕ ЕстьНакопительКоличества(5)

Интересно, что функция ЕстьНакопительКоличества использует глобальные переменные модуля обработки для того, чтобы понять, какая текущая строка таблицы товаров и для таблицы товаров. Но для пользователя она выглядит аккуратно и компактно, без ненужных параметров.

Настраивается только одна условная скидка:

В тестовой базе, правда, я делал скидку 10%, а не продажу по 1 копейке.

Проверяем для 5 и более товаров:

Проверяем для 3 товаров:

Работает!

Кстати, если покупатель берет только 4 позиции, он получает только скидку 3=2, нюансик! Но это верно, так и задумано.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *