Шаблон кода внешней обработки Вида Перечисления.ВидыДополнительныхОтчетовИОбработок.РасчетСкидкиНаценки
////////////////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
// Возвращает сведения о внешней обработке.
Функция СведенияОВнешнейОбработке() Экспорт
Наименование = НСтр("ru = 'Процент/сумма по ... '");
Информация = НСтр("ru = 'Предоставляется скидка (наценка) процентом (суммой), зависит от ... .'");
Назначение = Новый Массив;
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", Перечисления.ВидыДополнительныхОтчетовИОбработок.РасчетСкидкиНаценки);
ПараметрыРегистрации.Вставить("Версия", "1.01.001");
ПараметрыРегистрации.Вставить("Назначение", Назначение);
ПараметрыРегистрации.Вставить("Наименование", Наименование);
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ПараметрыРегистрации.Вставить("Информация", Информация);
ПараметрыРегистрации.Вставить("ВерсияБСП", "2.1.2.1");
ПараметрыРегистрации.Вставить("Команды", Новый ТаблицаЗначений);
Возврат ПараметрыРегистрации;
КонецФункции
// Возвращает способ применения скидки (наценки)
//
// Возвращаемое значение:
// Перечисления.СпособыПримененияСкидокНаценок - способ применения скидки (наценки)
//
Функция СпособПрименения() Экспорт
Возврат Перечисления.СпособыПримененияСкидокНаценок.ПрименитьВМоментРасчетаСкидокНаценок;
КонецФункции
// Выполняет расчет скидки (наценки)
//
// Параметры:
// СкидкаНаценка - Строка дерева скидок (наценок). Включает результаты проверки условий, способы совместного применения
// Настройки - Структура - Настройки, заданные пользователем в форме настроек внешней обработки
// Товары - Коллекция товаров, для которых требуется применить скидку (наценку)
// ПараметрыРасчета - Структура - Параметры расчета скидок (наценок)
//
// Возвращаемое значение:
// РезультатРасчета - ТаблицаЗначений - результат расчета
//
Функция Рассчитать(СкидкаНаценка, Настройки, Товары, ПараметрыРасчета) Экспорт
ИмяРеквизитаУсловия = "";
РезультатРасчета = СкидкиНаценкиСервер.ПустаяТаблицаСкидокСРасшифровкой();
//Если своя {
//РезультатРасчета = ПустаяТаблицаСкидокСРасшифровкой();
//Если своя }
Если ПараметрыРасчета.Объект.Ссылка.Пустая() Тогда
Возврат РезультатРасчета;
КонецЕсли;
ЭтоУмножение = СкидкаНаценка.ПрименятьУмножениеВРамкахВышестоящейГруппы;
// { Поиск строк с нужным условием
СтрокаТЧ = Настройки.Таблица.Найти(ПараметрыРасчета.Объект[ИмяРеквизитаУсловия], "КолонкаУсловие");
// } Поиск строк с нужным условием
Если СтрокаТЧ <> Неопределено Тогда
Для Каждого Товар Из Товары Цикл
Если СтрокаТЧ.СпособПредоставленияСкидки = Перечисления.СпособыПредоставленияСкидокНаценок.Процент Тогда
СуммаСкидки = СтрокаТЧ.Значение / 100 * СкидкиНаценкиСервер1.ОстатокСуммыПоСтроке(СкидкаНаценка, Товар, ПараметрыРасчета, ЭтоУмножение);
СкидкиНаценкиСервер.ПрименитьЗначениеСкидкиКТовару(СкидкаНаценка, СуммаСкидки, Товар, РезультатРасчета, ПараметрыРасчета);
Иначе
ДатаЦены = ?(ЗначениеЗаполнено(ПараметрыРасчета.Объект.ДатаСогласования), ПараметрыРасчета.Объект.ДатаСогласования, ПараметрыРасчета.Объект.Дата);
СуммаСкидки = СтрокаТЧ.Значение * РаботаСКурсамиВалют.ПолучитьКурсВалюты(ПараметрыРасчета.Объект.Соглашение.ВидЦен.ВалютаЦены, ДатаЦены).Курс;
СкидкиНаценкиСервер.ПрименитьЗначениеСкидкиКТовару(СкидкаНаценка, СуммаСкидки, Товар, РезультатРасчета, ПараметрыРасчета);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат РезультатРасчета;
КонецФункции
// Возвращает имя формы внешней обработки,
// предназначенной для настройки условия предоставления
//
// Возвращаемое значение:
// Строка - Имя формы
//
Функция ИмяФормыНастроек() Экспорт
Возврат "Настройки";
КонецФункции
// Возвращает расширенное описание условия предоставления с учетом настроек
//
// Параметры:
// Настройки - Структура - Значения настроек условия предоставления
//
// Возвращаемое значение:
// Строка - Расширенное описание
//
Функция ОписаниеДействия(Настройки) Экспорт
Попытка
Если Настройки<> Неопределено И Настройки.Таблица.Количество() > 0 Тогда
Описание = "Предоставляется скидка (наценка) процентом (суммой), зависит от ... :";
Для Каждого СтрокаТЧ Из Настройки.Таблица Цикл
Описание = Описание + Символы.ПС + "По условию " + " """ + СтрокаТЧ.КолонкаУсловие + """: " + СтрокаТЧ.Значение
+ ?(СтрокаТЧ.СпособПредоставленияСкидки = Перечисления.СпособыПредоставленияСкидокНаценок.Процент, "%", "€");
КонецЦикла;
Иначе
Описание = "Не заданы настройки скидки (наценки)";
КонецЕсли;
Исключение
Описание = "Настройки не загружены.
|При загрузке настроек скидки (наценки) произошла ошибка:
|" + ОписаниеОшибки();
КонецПопытки;
Возврат Описание;
КонецФункции
// Возвращает заголовок условия предоставления с учетом настроек
//
// Параметры:
// Настройки - Структура - Значения настроек условия предоставления
//
// Возвращаемое значение:
// Строка - Наименование условия
//
Функция Автонаименование(Настройки) Экспорт
Возврат НСтр("ru = 'Процент/сумма по ... '");
КонецФункции
Функция ПустаяТаблицаСкидокСРасшифровкой(ПараметрыРасчета = Неопределено) Экспорт
Если ПараметрыРасчета = Неопределено Тогда
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("КлючСвязи", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("Расшифровка", Новый ОписаниеТипов("ТаблицаЗначений"));
Таблица.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число",,,Новый КвалификаторыЧисла(15,2)));
Таблица.Колонки.Добавить("Действует", Новый ОписаниеТипов("Булево"));
Возврат Таблица;
Иначе
Возврат ПараметрыРасчета.ПустаяТаблицаСкидокСРасшифровкой.СкопироватьКолонки();
КонецЕсли;
КонецФункции
Орфографическая ошибка в Автонаименование: Автонаименование
Шаблон кода Внешней обработки Заполнение Объекта
Расчет ручной скидки &НаСервере
Внешняя обработка с несколькими командами, добавляемая в регламентные задания
ИнициализироватьСтруктуруСообщения (БСП)