Ограничение максимального процента скидки в РМК. Розница 2.3

Клиент попросил ограничить максимальную скидку в РМК до 40%. Дело в том что у него использовалось UDS и автоматизированные скидки. А UDS прописывало скидки в ручные. Нужно было организовать контроль максимальной общей скидки.

Я поискал — в Рознице таких настроек нет. Готовых расширений тоже не нашлось.

Поэтому сделал своё маленькое расширение, которое не дает нажать на кнопку оплаты (любой), пока не скорректирован процент скидки.

Текущий процент скидки считается как ручной + автоматизированный.

Сначала я хотел сделать процент константой, но в текущем режиме совместимости Розница не может в расширениях позволить константы.

Поэтому занес процент в мини-регистр правил:

Зато теперь можно выбрать процент или для каждого магазина или для всех. Я поставил для всех 40%:

Теперь если процент скидки превышает заданный система выдает предупреждение при попытке открыть форму оплаты:

В процессе вскрылся один момент, что перед возвратом нужно делать форму доступной, иначе она останется недоступной и из РМК нельзя будет выйти.

Код расширения обработки РМКУправляемыйРежим:


&НаКлиенте
&Вместо("ОплатитьТовары")
Процедура крск_ОплатитьТовары(ИмяФормыОплаты, ОплатаПлатежнойКартой, Печать)
	МаксимальныйПроцентСкидки = крск_ПолучитьМаксимальныйПроцентСкидки();
	Если МаксимальныйПроцентСкидки <> 0 Тогда
		Для Каждого Строка ИЗ Объект.Товары Цикл
			ТекПроцентСкидки = Строка.ПроцентАвтоматическойСкидки + Строка.ПроцентРучнойСкидки;
			Если ТекПроцентСкидки >= МаксимальныйПроцентСкидки Тогда
				ПоказатьПредупреждение(, "В строке с товаром: " + Строка.Номенклатура + " скидка превышает максимально допустимую: " + МаксимальныйПроцентСкидки);
				ЭтотОбъект.Доступность = Истина;
				Возврат;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	ПродолжитьВызов(ИмяФормыОплаты, ОплатаПлатежнойКартой, Печать);
КонецПроцедуры

&НаСервере
Функция крск_ПолучитьМаксимальныйПроцентСкидки()
	УстановитьПривилегированныйРежим(Истина);
	З = Новый Запрос(
	"ВЫБРАТЬ
	|	крск_МаксимальныйПроцентСкидки.МаксимальныйПроцентСкидки КАК МаксимальныйПроцентСкидки
	|ИЗ
	|	РегистрСведений.крск_МаксимальныйПроцентСкидки КАК крск_МаксимальныйПроцентСкидки
	|ГДЕ
	|	крск_МаксимальныйПроцентСкидки.Магазин = &Магазин
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	крск_МаксимальныйПроцентСкидки.МаксимальныйПроцентСкидки
	|ИЗ
	|	РегистрСведений.крск_МаксимальныйПроцентСкидки КАК крск_МаксимальныйПроцентСкидки
	|ГДЕ
	|	крск_МаксимальныйПроцентСкидки.Магазин = ЗНАЧЕНИЕ(Справочник.Магазины.ПустаяСсылка)");
	З.УстановитьПараметр("Магазин", ПараметрыСеанса.ТекущийМагазин);
	Выборка = З.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Возврат Выборка.МаксимальныйПроцентСкидки;
	КонецЕсли;
	
	Возврат 0;
	
КонецФункции

Среда: Розница 2.3.4.33. Объем: 1.5 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *