Шаблон кода Внешней обработки Расчет Скидки Наценки

СергейТ 112 4 10

Шаблон кода внешней обработки Вида Перечисления.ВидыДополнительныхОтчетовИОбработок.РасчетСкидкиНаценки

////////////////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС

// Возвращает сведения о внешней обработке.
Функция СведенияОВнешнейОбработке() Экспорт
	
	Наименование = НСтр("ru = 'Процент/сумма по ... '");
	Информация = НСтр("ru = 'Предоставляется скидка (наценка) процентом (суммой), зависит от ... .'");
	Назначение = Новый Массив;
	
	ПараметрыРегистрации = Новый Структура;
	
	ПараметрыРегистрации.Вставить("Вид", Перечисления.ВидыДополнительныхОтчетовИОбработок.РасчетСкидкиНаценки);
	ПараметрыРегистрации.Вставить("Версия", "1.01.001");
	ПараметрыРегистрации.Вставить("Назначение", Назначение);
	ПараметрыРегистрации.Вставить("Наименование", Наименование);
	ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
	ПараметрыРегистрации.Вставить("Информация", Информация);
	ПараметрыРегистрации.Вставить("ВерсияБСП", "2.1.2.1");
	
	ПараметрыРегистрации.Вставить("Команды", Новый ТаблицаЗначений);
	
	Возврат ПараметрыРегистрации;
	
КонецФункции

// Возвращает способ применения скидки (наценки)
//
// Возвращаемое значение:
//	Перечисления.СпособыПримененияСкидокНаценок - способ применения скидки (наценки)
//
Функция СпособПрименения() Экспорт
	
	Возврат Перечисления.СпособыПримененияСкидокНаценок.ПрименитьВМоментРасчетаСкидокНаценок;
	
КонецФункции

// Выполняет расчет скидки (наценки)
//
// Параметры:
//	СкидкаНаценка - Строка дерева скидок (наценок). Включает результаты проверки условий, способы совместного применения
//	Настройки - Структура - Настройки, заданные пользователем в форме настроек внешней обработки
//	Товары - Коллекция товаров, для которых требуется применить скидку (наценку)
//	ПараметрыРасчета - Структура - Параметры расчета скидок (наценок)
//
// Возвращаемое значение:
//	РезультатРасчета - ТаблицаЗначений - результат расчета
//
Функция Рассчитать(СкидкаНаценка, Настройки, Товары, ПараметрыРасчета) Экспорт
	
	ИмяРеквизитаУсловия = "";
	
	РезультатРасчета = СкидкиНаценкиСервер.ПустаяТаблицаСкидокСРасшифровкой();
	//Если своя {
	//РезультатРасчета = ПустаяТаблицаСкидокСРасшифровкой();
	//Если своя }

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

// Возвращает имя формы внешней обработки,
// предназначенной для настройки условия предоставления 
//
// Возвращаемое значение:
//	Строка - Имя формы
//
Функция ИмяФормыНастроек() Экспорт
	
	Возврат "Настройки";
	
КонецФункции

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

// Возвращает заголовок условия предоставления с учетом настроек
//
// Параметры:
//	Настройки - Структура - Значения настроек условия предоставления
//
// Возвращаемое значение:
//	Строка - Наименование условия
//
Функция Автонаименование(Настройки) Экспорт
	
	Возврат НСтр("ru = 'Процент/сумма по ... '");
	
КонецФункции

Функция ПустаяТаблицаСкидокСРасшифровкой(ПараметрыРасчета = Неопределено) Экспорт
	
	Если ПараметрыРасчета = Неопределено Тогда
		Таблица = Новый ТаблицаЗначений;
		Таблица.Колонки.Добавить("КлючСвязи",   Новый ОписаниеТипов("Число"));
		Таблица.Колонки.Добавить("Расшифровка", Новый ОписаниеТипов("ТаблицаЗначений"));
		Таблица.Колонки.Добавить("Сумма",       Новый ОписаниеТипов("Число",,,Новый КвалификаторыЧисла(15,2)));
		Таблица.Колонки.Добавить("Действует",   Новый ОписаниеТипов("Булево"));
		Возврат Таблица;
	Иначе
		Возврат ПараметрыРасчета.ПустаяТаблицаСкидокСРасшифровкой.СкопироватьКолонки();
	КонецЕсли;
	
КонецФункции
0
Орфографическая ошибка в Автонаименование: Автонаименование

См. также

Шаблон кода Внешней обработки Заполнение Объекта

Расчет ручной скидки &НаСервере

ДобавитьПараметрШаблона (БСП)

Внешняя обработка с несколькими командами, добавляемая в регламентные задания

ИнициализироватьСтруктуруСообщения (БСП)

Создание и инициализация менеджера расчета зарплаты

Шаблон внешней печатной формы

Модератору