IE2017

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

Программирование - Практика программирования

Небольшая доработка конфигурации Управление Торговлей 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
3
.rar 129,77Kb 3 Скачать

См. также

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

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

На мой взгляд, правильным решением этой задачи было бы добавление нового условия срабатывания скидки: "номер строки равен (больше, меньше) Х".
2. script Мальчинко (script) 198 08.01.17 03:05 Сейчас в теме
А разве не для этого предназначен тип скидки "Специальная цена"?
3. Андрей Харечко (aharechko) 41 04.04.17 14:10 Сейчас в теме
Загрузил вашу инструкцию.
"Скидка 50% на второй товар" - все работат.

Ваш код не решает следующую проблему:
Клиент купляет три товара.
Должен получить следующие скидки:
1. "Скидка 50% на второй товар"
2. "Скидка 30% на третий товар"

Можно это реализовать?
Оставьте свое сообщение