Техническое задание на доработку

Менеджеры сами выставляют скидки покупателям.
Необходимо ограничить их в максимальных скидках.
Ограничение выставляется на пользователя и папку в справочнике "Номенклатура".



Реализация
1 Нужно создать регистр сведений без привязки к документу.

Заполняем его

ограничение максимального процента скидки в 1с
и выводим в меню "Справочники"



2 Правим конфигурацию

Скидка выставляется в заказе покупателя в колонке "Ручная скидка".
Необходимо проверять значение введенной скидки событием колонки "Окончание ввода текста"

Кроме этой колонки скидку можно изменить через обработку "Обработка табличной части". Вызывается она из документа "Заказ покупателя" кнопкой "Изменить" в командной панели "Товары".

Поэтому функцию проверки максимальной скидки установим в общий модуль не важно какой, например "ОбщегоНазначения".

Текст функции


функция РазрешенаВведеннаяСкидка(НоменклатураСсылка,Скидка)  Экспорт
Запрос = Новый Запрос;
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
|	МаксимальнаяСкидкаПоФабрикам.ПапкаНоменклатуры,
|	МаксимальнаяСкидкаПоФабрикам.ПроцентСкидки
|ИЗ
|	РегистрСведений.МаксимальнаяСкидкаПоФабрикам КАК МаксимальнаяСкидкаПоФабрикам
|ГДЕ
|	МаксимальнаяСкидкаПоФабрикам.Пользователь = &пользователь";

Запрос.УстановитьПараметр("пользователь",	Пользователи.ТекущийПользователь());	 //Пользователи
РезультатЗапроса = Запрос.Выполнить();	
если РезультатЗапроса.Пустой() тогда возврат ложь; конецЕсли;
выборка=РезультатЗапроса.Выбрать();
Пока выборка.Следующий() цикл
Если НоменклатураСсылка.ПринадлежитЭлементу(выборка.папкаНоменклатуры)	тогда
если выборка.процентСкидки>=Скидка тогда возврат истина;
иначе возврат ложь; 
конецЕсли;
КонецЕсли;
конецЦикла;
возврат ложь;
конецФункции
Вызываем ее из события "Окончания ввода текста" колонки "ПроцентСкидкиНаценки" документа "Заказ покупателя".

Процедура ТоварыПроцентСкидкиНаценкиОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
если НЕ ОбщегоНазначения.РазрешенаВведеннаяСкидка(ЭлементыФормы.Товары.ТекущаяСтрока.номенклатура,элемент.значение) тогда
	   СтандартнаяОбработка=ложь;
	конецЕсли;
КонецПроцедуры
И вызываем ее из события "Окончания ввода текста" колонки "ПроцентСкидкиНаценки" обработки "ОбработкаТабличнойЧасти" код такой же.


В обработке "обработкаТабличнойЧасти" есть меню



Выделенные пункты позволяют обойти это ограничение, поэтому для всех у кого нет полных прав убираем эти пункты. Допишем код в событие "ПриОткрытии" после кода, где это меню заполняется.
Если ТипЗнч(ДокументОбъект)=тип("ДокументОбъект.ЗаказПокупателя") и НЕ РольДоступна("ПолныеПрава")
		тогда
		// изменить цены на %
		значениеСп=СписокДействий.НайтиПоЗначению(Новый Действие("КнопкаВыполнитьНажатиеИзменитьЦену"));
		если значениеСп<>неопределено тогда
		СписокДействий.Удалить(СписокДействий.Индекс(значениеСп));
		конецЕсли;
		// установить скидку
		значениеСп=СписокДействий.НайтиПоЗначению(Новый Действие("КнопкаВыполнитьНажатиеУстановитьСкидку"));
		если значениеСп<>неопределено тогда
		СписокДействий.Удалить(СписокДействий.Индекс(значениеСп));
		конецЕсли;
		
		
		конецЕсли;
Всё.





Нужен 1с программист? Заполните заявку.

Гарантия на все разработки. Помощь в составлении технического задания.