gifts2017

Альтернатива накопительной системы скидок в конфигурации "Управление торговлей, редакция 11.1"

Опубликовал Максим Лёвочкин (frutty) в раздел Администрирование - Оптимизация БД (HighLoad)

В обход подводных камней стандартной накопительной системы скидок в конфигурации "Управление торговлей, редакция 11.1" используем альтернативное решение подобной задачи.

Эта статья не претендует на внесение в "конституцию", возможно многие и сами дошли до этого, но я счёл полезным поделится своими знаниями.

Всё началось с того, что мне поручили внедрить накопительную систему скидок в нашей организации. Не долго думая создал маркетинговое мероприятие со скидкой в 10%, в которой выбрал только одно условие скидки, а именно: "сумма проданного товара за весь период более 10000 рублей". Сохранил. Создал заказ клиента, накидал товаров и с довольной "миной" нажал на "Расчетать скидки (наценки)". Шикарно, скидка назначилась. Я, довольный собой и типовыми возможностями УТ11, кинулся дополнять созданное ранее маркетинговое мероприятие новыми скидками и условиями. В клочке бумажки, который мне снизашёл сверку был вкраце обрисованы всевозможные скидки и условия акции.

Примерная таблица:

    за 24 месяца за 20 месяцев за 16 месяцев за 12 месяцев
Сегмент номенклатуры После первой покупки от 10000 руб. от 20000 руб. от 30000 руб. от 40000 руб.
Сегмент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 это умеет и родилось это:

Настройка условия

В итоге вышло следующее:

Скидка в 1,5% на товар сегмента Сегмент1

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

Через минут 30 всё было готово. Зову "надзорный орган" и демонстрирую своё произведение искусства, демонстративно создаю заказ клиента напихиваю туда товар из разных сегментов и жму "Рассчитать скидки (наценки)" и ...

Ждём...

Ждём...

Кофе попьём?

Не, подождём.

(Спустя 40 секунд, замечу сразу, база не файловая)

Всё расчиталось как и положено, но что-то мне не нравится взгляд "надзорного органа". Осознав причиву взгляда и пообещав разобраться, начинаю копать конфигуратор и смотреть как в УТ11 считаются скидки. МОЩНО!. Одним запросом. Принимаю решение оптимизировать расчёт и распилить запрос на несколько и смотря на результат одного запроса принимать решение о необходимости выполнять следующий запрос или "перепрыгнуть" на другой. Ушёл домой.

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

На работу я ехал с необыновенным удовольствием, желая побыстрее разобраться с этой проблемой.

В итоге я написал свой запрос для схемы СКД сегмента партнёров, который учитывал покупки партнёра определённого сегмента номенклатуры и период.


ВЫБРАТЬ
	АналитикаУчетаНоменклатуры.КлючАналитики
ПОМЕСТИТЬ ВТ_Ключи
ИЗ
	РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента
		ПО АналитикаУчетаНоменклатуры.Номенклатура = НоменклатураСегмента.Номенклатура
			И АналитикаУчетаНоменклатуры.Характеристика = НоменклатураСегмента.Характеристика
ГДЕ
	НоменклатураСегмента.Сегмент = &Сегмент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам.Партнер КАК Ссылка
ПОМЕСТИТЬ ВТ_Партнеры
ИЗ
	РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(
			&НачалоПериода,
			&ОкончаниеПериода,
			Авто,
			АналитикаУчетаНоменклатуры В
				(ВЫБРАТЬ
					АналитикаУчетаНоменклатуры.КлючАналитики
				ИЗ
					ВТ_Ключи КАК АналитикаУчетаНоменклатуры)) КАК ВыручкаИСебестоимостьПродажОбороты
ГДЕ
	ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот > &СуммаВыручкиОборот
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	Партнеры.Ссылка КАК Партнер
{ВЫБРАТЬ
	Партнер}
ИЗ
	ВТ_Партнеры КАК Партнеры
{ГДЕ
	Партнеры.Ссылка.* КАК Партнер}

Для этого необходимо создать сегмент партнеров с периодическим обновлением, нажать на "редактировать" схемы компоновки данных. В открывшимся окне нажать "Загрузить схему из файла" и выбрать прикреплённый к этой статье файл:

Загрузка схемы компоновки 

После этого если нажать на "Редактировать схему компоновки" вы увидите изменённый запрос:

Новый запрос компоновки

а также новые параметры:

Новые параметры компоновки

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

Заполнение параметров компоновки

мы получим сегмент партнеров с оборотом покупок за последние 24 месяца номенклатуры из сегмента "Сегмент1" на сумму более 10000 руб.

Теперь остаётся только поправить условия предоставления скидок в нашей накопительной системе.

Заменяем ранее созданное условие накопление на следующее:

Новое условие накопления

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

Финальные условия скидки

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Схема компоновки данных для получения сегмента партнеров исходя из истории продаж сегмента номенклатуры
.xml 13,85Kb
24.09.14
1
.xml 1.0 13,85Kb 1 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Виктор Лебедев (eeeio) 25.09.14 16:58
2. Павел А (Pavean) 27.09.14 14:21
Было 40 секунд а стало сколько?
3. Максим Лёвочкин (frutty) 27.09.14 18:03
(2) Pavean, а стало в 40 раз быстрее :)
white_sochi; +1 Ответить
4. Виталий Германов (Vitstav) 30.04.15 08:34
А не проще ли было присваивать клиенту определенный сегмент.... без изменения кода? По заданию? Есть же сегменты которые формируются периодически. Поставить расписание на ночь... и прописать те же самые условия... на утро перешерстив продажи ваш клиент получит нужный вам сегмент и писать ничего ненужно будет...
5. Максим Лёвочкин (frutty) 30.04.15 12:16
(4) Vitstav, без обид, вы статью читали? в ней именно этот способ и описан.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа