Скидка (наценка) процентом на самые дешевые позиции в чеке

Публикация № 940274

Разработка - Обработки - Ценообразование, прайсы

Скидки Наценки Розница УТ 11 Управление торговлей Внешняя обработка

Внешняя обработка для УТ11, добавляющая скидку (наценку) процентом на самые дешевые позиции в чеке кратно условиям.

Данная обработка позволяет вводить скидки процентом не на все позиции в чеке, а на самые дешевые позиции, кратно выполнению условий скидки. Данный тип скидок позволяет увеличить количество позиций в чеке. Пример условий для скидки: Сумма в документе не менее 2 000 руб., Количество в документе не менее 2 ед.. В результате на каждый второй товар при условии, что сумма чека не менне 2000 будет выдана скидка (например 20 %).

Обработка сделана на основе примера из поставки УТ 11. Основной кусок кода отвечающий за расчет скидки.

// Выполняет расчет скидки (наценки)
//
// Параметры:
//	СкидкаНаценка - Строка дерева скидок (наценок). Включает результаты проверки условий, способы совместного применения
//	Настройки - Структура - Настройки, заданные пользователем в форме настроек внешней обработки
//	Товары - Коллекция товаров, для которых требуется применить скидку (наценку)
//	ПараметрыРасчета - Структура - Параметры расчета скидок (наценок)
//
// Возвращаемое значение:
//	РезультатРасчета - ТаблицаЗначений - результат расчета
//
Функция Рассчитать(СкидкаНаценка, Настройки, Товары, ПараметрыРасчета) Экспорт
	
	РезультатРасчета = СкидкиНаценкиСервер.ПустаяТаблицаСкидокСРасшифровкой();
	СкидкаНаценка.ИспользоватьКратность = Истина;
	ТаблицаСтоимостейТоваров = Новый ТаблицаЗначений;
	ТаблицаСтоимостейТоваров.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
	ТаблицаСтоимостейТоваров.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
	ТаблицаСтоимостейТоваров.Колонки.Добавить("КлючСвязи", Новый ОписаниеТипов("Число"));
	
	Для Каждого Товар Из Товары Цикл
		
		Если Товар.Количество = 0 Тогда
			Продолжить;
		КонецЕсли;
		
		НоваяСтрока = ТаблицаСтоимостейТоваров.Добавить();
		НоваяСтрока.Цена       = Товар.Сумма / Товар.Количество;
		НоваяСтрока.Количество = Товар.Количество;
		НоваяСтрока.КлючСвязи = Товар.КлючСвязи;
		
		
	КонецЦикла;
	ТаблицаСтоимостейТоваров.Сортировать("Цена Возр");
	
	ЧислоСкидок = СкидкиНаценкиСервер.КратностьВыполнения(СкидкаНаценка);
	ЧислоСкидокИсх = ЧислоСкидок;	
	ЗначениеСкидки = 0;
	Если Настройки <> Неопределено Тогда
		Попытка
		  	ЗначениеСкидки = Настройки.ЗначениеСкидки;
		Исключение
		КонецПопытки; 
	КонецЕсли;
	МассивТоваровДляСкидок = новый Массив;
	а = 0;
	Пока ЧислоСкидок > 0 Цикл
		ЧислоСкидок = ЧислоСкидок -1;
		КлючСвязи = ТаблицаСтоимостейТоваров[а].КлючСвязи;
		Для Каждого Товар Из Товары Цикл
			Если Товар.КлючСвязи = КлючСвязи Тогда
				Если МассивТоваровДляСкидок.Найти(Товар) = неопределено Тогда
					ЧислоСкидок = ЧислоСкидок - (Товар.Количество - 1);
					МассивТоваровДляСкидок.Добавить(Товар);
				КонецЕсли;
				
			КонецЕсли;
		КонецЦикла;
		а = а+1;
		
	КонецЦикла;	
	
	ЭтоУмножение = СкидкаНаценка.ПрименятьУмножениеВРамкахВышестоящейГруппы;
	
	
	Для Каждого Товар Из МассивТоваровДляСкидок Цикл
		
		Сумма =  ЗначениеСкидки / 100 * СкидкиНаценкиСервер.ОстатокСуммыПоСтроке(СкидкаНаценка, Товар, ПараметрыРасчета, ЭтоУмножение) * Мин(ЧислоСкидокИсх, Товар.Количество) / Товар.Количество;
		
		СкидкиНаценкиСервер.ПрименитьЗначениеСкидкиКТовару(СкидкаНаценка, Сумма, Товар, РезультатРасчета, ПараметрыРасчета);
		ЧислоСкидокИсх = ЧислоСкидокИсх - Мин(ЧислоСкидокИсх,Товар.Количество);
	КонецЦикла;
	
	Возврат РезультатРасчета;
	
КонецФункции

Обработка добавляется как обычно в справочник "Дополнительные отчеты и обработки". После добавления обработки, в справочнике "Скидки (наценки)" появится новый тип скидки "Процент на самые дешевые товары". Установка размера скидки производится с помощью кнопки "Настроить", все остальное стандартно.

Обработка разрабатывалась и тестировать на УТ 11.4.3.126. Платформа 8.3.12.1616

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

Наименование Файл Версия Размер
СкидкаНаценкаПроцентНаСамыеДешевые.epf

.epf 9,10Kb
37
.epf 1.0 9,10Kb 37 Скачать

Специальные предложения

Оставьте свое сообщение

См. также

Интеграция с бонусной программой лояльности ManyBonus Промо

Управление взаимоотношениями с клиентами (СRM) Розничная торговля WEB v8 Розница УУ Абонемент ($m)

ManyBonus.com - бонусная программа лояльности на базе мессенджеров. Позволяет регистрировать клиента в программе лояльности через Telegram, Viber, VK, отправлять коды скидок в мессенджеры, получать уведомления при списании/начислении бонусных баллов, альтернатива сообщениям СМС.

3 стартмани

07.01.2021    1833    2    Anton64    0