Эта статья не претендует на внесение в "конституцию", возможно многие и сами дошли до этого, но я счёл полезным поделится своими знаниями.
Всё началось с того, что мне поручили внедрить накопительную систему скидок в нашей организации. Не долго думая создал маркетинговое мероприятие со скидкой в 10%, в которой выбрал только одно условие скидки, а именно: "сумма проданного товара за весь период более 10000 рублей". Сохранил. Создал заказ клиента, накидал товаров и с довольной "миной" нажал на "Расчетать скидки (наценки)". Шикарно, скидка назначилась. Я, довольный собой и типовыми возможностями УТ11, кинулся дополнять созданное ранее маркетинговое мероприятие новыми скидками и условиями. В клочке бумажки, который мне снизашёл сверку был вкраце обрисованы всевозможные скидки и условия акции.
Примерная таблица:
за 24 месяца | за 20 месяцев | за 16 месяцев | за 12 месяцев | ||
Сегмент номенклатуры | После первой покупки | от 10000 руб. | от 20000 руб. | от 30000 руб. | от 40000 руб. |
Сегмент1 | 1 | 1,5 | 2 | 2,5 | 3 |
Сегмент2 | 1,5 | 2 | 2,5 | 3 | 3,5 |
Сегмент3 | 2 | 2,5 | 3 | 3,5 | 4 |
Сегмент4 | 2,5 | 3 | 3,5 | 4 | 4,5 |
Сегмент5 | 3 | 3,5 | 4 | 4,5 | 5 |
Сегмент6 | 3,5 | 4 | 4,5 | 5 | 5,5 |
Вникать в суть таблицы не стоит, самое главное что в условиях данной таблицы значилось следующее: Скидка даётся на определённый сегмент номенклатуры, а также зависит от объёма покупок клиента конкретного сегмента номенклатуры, причём за определённый период.
Не вопрос, подумал я, УТ11 это умеет и родилось это:
В итоге вышло следующее:
Сохранив и опробовав на заказе клиента я как заводной начал шлёпать подобные скидки для остальных условий таблицы.
Через минут 30 всё было готово. Зову "надзорный орган" и демонстрирую своё произведение искусства, демонстративно создаю заказ клиента напихиваю туда товар из разных сегментов и жму "Рассчитать скидки (наценки)" и ...
Ждём...
Ждём...
Кофе попьём?
Не, подождём.
(Спустя 40 секунд, замечу сразу, база не файловая)
Всё расчиталось как и положено, но что-то мне не нравится взгляд "надзорного органа". Осознав причиву взгляда и пообещав разобраться, начинаю копать конфигуратор и смотреть как в УТ11 считаются скидки. МОЩНО!. Одним запросом. Принимаю решение оптимизировать расчёт и распилить запрос на несколько и смотря на результат одного запроса принимать решение о необходимости выполнять следующий запрос или "перепрыгнуть" на другой. Ушёл домой.
Заснуть не мог долго, мысли витали в голове. Одну из них я смог поймать. Идея заключалась в том, чтобы не проверять каждый раз накопленную сумму, а вычислять её раз в день и запоминать, а именно заполнять сегмент партнеров для каждой категории скидки. Поняв, что это верная мысль, я смог уснуть.
На работу я ехал с необыновенным удовольствием, желая побыстрее разобраться с этой проблемой.
В итоге я написал свой запрос для схемы СКД сегмента партнёров, который учитывал покупки партнёра определённого сегмента номенклатуры и период.
ВЫБРАТЬ
АналитикаУчетаНоменклатуры.КлючАналитики
ПОМЕСТИТЬ ВТ_Ключи
ИЗ
РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента
ПО АналитикаУчетаНоменклатуры.Номенклатура = НоменклатураСегмента.Номенклатура
И АналитикаУчетаНоменклатуры.Характеристика = НоменклатураСегмента.Характеристика
ГДЕ
НоменклатураСегмента.Сегмент = &Сегмент
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам.Партнер КАК Ссылка
ПОМЕСТИТЬ ВТ_Партнеры
ИЗ
РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(
&НачалоПериода,
&ОкончаниеПериода,
Авто,
АналитикаУчетаНоменклатуры В
(ВЫБРАТЬ
АналитикаУчетаНоменклатуры.КлючАналитики
ИЗ
ВТ_Ключи КАК АналитикаУчетаНоменклатуры)) КАК ВыручкаИСебестоимостьПродажОбороты
ГДЕ
ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот > &СуммаВыручкиОборот
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Партнеры.Ссылка КАК Партнер
{ВЫБРАТЬ
Партнер}
ИЗ
ВТ_Партнеры КАК Партнеры
{ГДЕ
Партнеры.Ссылка.* КАК Партнер}
Для этого необходимо создать сегмент партнеров с периодическим обновлением, нажать на "редактировать" схемы компоновки данных. В открывшимся окне нажать "Загрузить схему из файла" и выбрать прикреплённый к этой статье файл:
После этого если нажать на "Редактировать схему компоновки" вы увидите изменённый запрос:
а также новые параметры:
В итоге введя следующие параметры в настройки компановки:
мы получим сегмент партнеров с оборотом покупок за последние 24 месяца номенклатуры из сегмента "Сегмент1" на сумму более 10000 руб.
Теперь остаётся только поправить условия предоставления скидок в нашей накопительной системе.
Заменяем ранее созданное условие накопление на следующее:
Финальная версия скидки с условиями выглядит так: