gifts2017

Скидка на второй товар в чеке 50%, третий бесплатно!

Опубликовал Юрий Пихоцкий (pihy) в раздел Программирование - Практика программирования

Небольшая доработка конфигурации Управление Торговлей 11, которая позволяет использовать популярные в наше время конфигурации скидок "скидка 50% на второй товар", "скидка 70% на второй товар", "третий товар в чеке БЕСПЛАТНО" и т. д.

Клиент поставил задачу настроить скидки в конфигурации Управление торговлей, редакция 11.1 - "скидка 50% на второй товар" или "третий товар в чеке БЕСПЛАТНО". Со второй половиной задачи проблем не было (настраивается с помощью типа скидки подарок), а вот функционала конфигурации для решения первой половины задачи не оказалось! Погуглил - действительно нет! Специалист учебного центра в комментариях к своей статье  предлагает использовать готовые динамические комплекты (наборы) для решения данной задачи, но такое решение не подходит если не известны заранее компоненты набора или их очень много. И тут, как обычно в таких случаях, помогает "напильник". 

В общем модуле "СкидкиНаценкиСервер" находим процедуру "РассчитатьСкидку"  в ней условие: 

	ИначеЕсли ПараметрыСкидки.СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.Подарок Тогда

после строки "Сумма = 0;" вносим корректировки в код:

		//Определяем делитель исходя из скидки в размере тысячных долей стоимости последнего самого дешевого товара в чеке. 0,500 соответствует 50% скидки и т.д. 
		Если ПараметрыСкидки.ЗначениеСкидкиНаценки < 1 И Не ПараметрыСкидки.ЗначениеСкидкиНаценки = 0 Тогда
			Делитель = 1/ПараметрыСкидки.ЗначениеСкидкиНаценки;
		Иначе
			Делитель = 1;
		КонецЕсли; 
		//конец изменений
		

        //округляем до целых, т.к. если при вычислении получится число хоть на миллионную меньше целого, скидка не рассчитаться
		Для i=1 По МинимальнаяКратностьВыполнения * Окр(ПараметрыСкидки.ЗначениеСкидкиНаценки*Делитель ,0) Цикл   
			Для Каждого СтрокаТЧ Из ТаблицаСтоимостейТоваров Цикл
				Если СтрокаТЧ.Количество > 0 Тогда
					СтрокаТЧ.Количество = СтрокаТЧ.Количество - 1;
		//в след. строке определяется сам размер скидки - половина, третья часть, полная стоимость последнего товара в чеке			
                    Сумма = Сумма + СтрокаТЧ.Цена/Делитель;  
					Прервать;
				КонецЕсли;
			КонецЦикла;
		КонецЦикла;

Теперь, для решения первоначальной задачи создадим  группу совместного применения и укажем вариант применения (максимум или вытеснение), добавим две новые скидки "50% на второй товар" и "3й товар в подарок" с типом скидки "Подарок", а в поле "Предоставить скидку на стоимость" указываем соответственно 0,500 и 1,000 стоимости единицы, в условиях указываем соответственно количество в документе не менее 2 ед. и не менее  3 ед. По правде говоря, в чеке 3й товар не будет с нулевой стоимостью, а второй товар с 50% стоимости - будет рассчитана скидка величиной половина стоимости второго или полная стоимость третьего, которая распределится на все позиции в чеке. Но нас это устраивает, т.к. по закону стоимость не может быть 0 рублей. 
Задача решена. Пользуемся  на здоровье!   

Во вложении прикреплена короткая инструкция по настройке скидок и код модуля с изменениями указанный выше. 

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

Наименование Файл Версия Размер Кол. Скачив.
ИнструкцияПоСкидкам
.rar 129,77Kb
10.08.16
1
.rar 129,77Kb 1 Скачать

См. также

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

Комментарии

1. Алексей Масалыгин (CnupT) 17.08.16 13:12
Ну оочень частный случай задачи.
Например в моей практике была задача увеличивать скидку на 10% на каждую последующую покупку в чеке. Т.е.:
1я строка 10%
2я Строка 20%
3я строка 30% и т.д.

Или просто на вторую строку 20%.

На мой взгляд, правильным решением этой задачи было бы добавление нового условия срабатывания скидки: "номер строки равен (больше, меньше) Х".
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа