Сложная скидка 3=2, 5=3
Обратился клиент, который скачал мою обработку для розничных скидок и попросил помочь ему настроить скидку, когда при покупке двух товаров третий дается бесплатно, а при покупке трех — еще два бесплатно.
Я поломал голову и понял, что в существующей парадигме работы задачу не решить. Скидки рассчитываются последовательно, а тут нужно прогнозирование. Предложил доработать обработку за небольшие деньги, потому что новые возможности пойдут на пользу всем пользователям.
В итоге я разложил все товары в таблицу, в каждой строке которой было по одной штуке товара. Т.е. если в строке количество товара 3, оно раскладывалось в три строчки.
Соответственно, по каждой строке было понятно, сколько уже накоплено товара. Поэтому заранее будет рассчитано, сколько товара будет накоплено в следующей строке.
В итоге формула выполнения условия стала выглядеть так:
Р = НакопительКоличества = 4 И ЕстьНакопительКоличества(5) ИЛИ НакопительКоличества = 5 ИЛИ НакопительКоличества = 3 И НЕ ЕстьНакопительКоличества(5)
Интересно, что функция ЕстьНакопительКоличества использует глобальные переменные модуля обработки для того, чтобы понять, какая текущая строка таблицы товаров и для таблицы товаров. Но для пользователя она выглядит аккуратно и компактно, без ненужных параметров.
Настраивается только одна условная скидка:
В тестовой базе, правда, я делал скидку 10%, а не продажу по 1 копейке.
Проверяем для 5 и более товаров:
Проверяем для 3 товаров:
Работает!
Кстати, если покупатель берет только 4 позиции, он получает только скидку 3=2, нюансик! Но это верно, так и задумано.
Свежие комментарии