#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, СкидкиНаценкиСервер.СтруктураИсточниковДействияСкидокСогласноФО());
СпособНазначения = Объект.Управляемая;
ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект);
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
Объект.Наименование = АвтоНаименование(ЭтотОбъект);
Иначе
АвтоНаименование(ЭтотОбъект);
КонецЕсли;
СкидкиНаценкиКлиентСервер.ОбновитьРеквизитыАвтонаименования(ЭтотОбъект);
ЗаполнитьСписокВыбораСпособаПредоставления(ЭтотОбъект);
Элементы.ТочностьОкругления.СписокВыбора.Очистить();
ЗначениеОкругления = 0.01;
ЧетноеПриращение = Ложь;
МаксимальноеЗначениеОкругления = 100000;
ГраницаДиапазонаЦен = 100000000;
Пока ЗначениеОкругления <= МаксимальноеЗначениеОкругления
И (ЗначениеОкругления <= ГраницаДиапазонаЦен Или ГраницаДиапазонаЦен < 0) Цикл
Элементы.ТочностьОкругления.СписокВыбора.Добавить(ЗначениеОкругления);
ЗначениеОкругления = ЗначениеОкругления * ?(ЧетноеПриращение, 2, 5);
ЧетноеПриращение = Не ЧетноеПриращение;
КонецЦикла;
Если Объект.Ссылка.Пустая() Тогда
СкидкиНаценкиСервер.ПриСозданииЧтенииНаСервере(ЭтотОбъект);
ПриСозданииЧтенииНаСервере();
УстановитьНастройкиУчетаПримененияСкидок();
КонецЕсли;
СкидкиНаценкиСервер.ДобавитьКомандыСозданияНовыхУсловийПредоставленияСкидокНаценок(ЭтотОбъект, Элементы.УсловияПредоставленияГруппаСоздать);
УстановитьНастройкиЭлементовВариантовУсловийПоНоменклатуре(ЭтотОбъект);
ИзменитьВидимостьЭлементов();
СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
СкидкиНаценкиСервер.ПриСозданииЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
ПриСозданииЧтенииНаСервере();
МодификацияКонфигурацииПереопределяемый.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект);
МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если Объект.ВариантОтбораНоменклатуры = ПредопределенноеЗначение("Перечисление.ВариантыОтбораНоменклатурыДляРасчетаСкидокНаценок.ОтборКомпоновкиДанных")
И Не ЗначениеЗаполнено(Строка(КомпоновщикНастроекОтборПоНоменклатуре.Настройки.Отбор)) Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Не установлен отбор номенклатуры'"),,"КомпоновщикНастроекОтборПоНоменклатуреПредставление",, Отказ);
КонецЕсли;
ОбновитьАвтонаименование(Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтотОбъект, ПараметрыЗаписи);
ПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
СкидкиНаценкиСервер.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, "СпособПредоставления");
МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтотОбъект, Отказ, ТекущийОбъект, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "Выбор_УсловияПредоставленияСкидокНаценок"
И ЗначениеЗаполнено(Источник)
И ТипЗнч(Источник) = Тип("СправочникСсылка.УсловияПредоставленияСкидокНаценок") Тогда
НоваяСтрока = Объект.УсловияПредоставления.Добавить();
НоваяСтрока.УсловиеПредоставления = Источник;
Модифицированность = Истина;
ИзменитьВидимостьЭлементов();
ИначеЕсли ИмяСобытия = "Запись_ДействиеСкидокНаценок"
И Параметр.Свойство("СкидкаНаценка")
И Параметр.СкидкаНаценка.Найти(Объект.Ссылка) <> Неопределено Тогда
ОбновитьИспользованиеСкидокНаценок();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура РодительПриИзменении(Элемент)
УстановитьНастройкиУчетаПримененияСкидок();
КонецПроцедуры
&НаКлиенте
Процедура СпособПредоставленияПриИзменении(Элемент)
ПредложитьДобавитьУсловиеКартаЛояльностиНеЗарегистрирована = СпособПредоставленияПриИзмененииНаСервере();
Если ПредложитьДобавитьУсловиеКартаЛояльностиНеЗарегистрирована Тогда
ПоказатьВопрос(Новый ОписаниеОповещения("СпособПредоставленияПриИзмененииЗавершение", ЭтотОбъект),
СтрШаблон(
НСтр("ru = 'Добавить условие ""Карта лояльности ""%1"" не зарегистрирована?""'"),
Объект.ВидКартыЛояльности
), РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
УстановитьНастройкиУчетаПримененияСкидок();
ОбновитьАвтонаименование(Истина);
КонецПроцедуры
&НаКлиенте
Процедура СпособПредоставленияПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Результат = РезультатВопроса;
Если Результат = КодВозвратаДиалога.Да Тогда
ДобавитьУсловиеКартаЛояльностиНеЗарегистрирована(Объект.ВидКартыЛояльности);
КонецЕсли;
ОбновитьАвтонаименование(Истина);
КонецПроцедуры
&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
СкидкиНаценкиКлиентСервер.ОбновитьРеквизитыАвтонаименования(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ЗначениеСкидкиНаценкиПриИзменении(Элемент)
ОбновитьАвтонаименование(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ВалютаПредоставленияПриИзменении(Элемент)
ОбновитьАвтонаименование(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ВидЦеныПриИзменении(Элемент)
ОбновитьАвтонаименование(Истина);
КонецПроцедуры
&НаКлиенте
Процедура УсловияПредоставленияПриИзменении(Элемент)
ОбновитьАвтонаименование(Истина);
ИзменитьВидимостьЭлементов();
КонецПроцедуры
&НаКлиенте
Процедура ВидКартыЛояльностиПриИзменении(Элемент)
ОбновитьАвтонаименование(Истина);
ПредложитьДобавитьУсловиеКартаЛояльностиНеЗарегистрирована = ВидКартыЛояльностиПриИзмененииНаСервере();
Если ПредложитьДобавитьУсловиеКартаЛояльностиНеЗарегистрирована Тогда
ПоказатьВопрос(Новый ОписаниеОповещения("ВидКартыЛояльностиПриИзмененииЗавершение", ЭтотОбъект),
СтрШаблон(
НСтр("ru = 'Добавить условие ""Карта лояльности ""%1"" не зарегистрирована?""'"),
Объект.ВидКартыЛояльности
), РежимДиалогаВопрос.ДаНет);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВидКартыЛояльностиПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Результат = РезультатВопроса;
Если Результат = КодВозвратаДиалога.Да Тогда
ДобавитьУсловиеКартаЛояльностиНеЗарегистрирована(Объект.ВидКартыЛояльности);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТекстСообщенияПриИзменении(Элемент)
ОбновитьАвтонаименование(Истина);
КонецПроцедуры
&НаКлиенте
Процедура СегментПодарковПриИзменении(Элемент)
ОбновитьАвтонаименование(Истина);
КонецПроцедуры
&НаКлиенте
Процедура УсловиеДляСкидкиКоличествомПриИзменении(Элемент)
ОбновитьАвтонаименование(Истина);
КонецПроцедуры
&НаКлиенте
Процедура СпособПримененияСкидкиПриИзменении(Элемент)
Если Объект.СпособПримененияСкидки = ПредопределенноеЗначение("Перечисление.СпособыПримененияСкидокНаценок.НачислитьБонусныеБаллы") Тогда
Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаБонусы;
Иначе
Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаСкидки;
КонецЕсли;
Элементы.СтраницаБонусы.Видимость = (Объект.СпособПримененияСкидки = ПредопределенноеЗначение("Перечисление.СпособыПримененияСкидокНаценок.НачислитьБонусныеБаллы"));
Элементы.СтраницаСкидки.Видимость = Не (Объект.СпособПримененияСкидки = ПредопределенноеЗначение("Перечисление.СпособыПримененияСкидокНаценок.НачислитьБонусныеБаллы"));
ОбновитьАвтонаименование(Истина);
СпособПримененияСкидкиПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура СпособПредоставленияБонусыПриИзменении(Элемент)
ПредложитьДобавитьУсловиеКартаЛояльностиНеЗарегистрирована = СпособПредоставленияПриИзмененииНаСервере();
Если ПредложитьДобавитьУсловиеКартаЛояльностиНеЗарегистрирована Тогда
ПоказатьВопрос(Новый ОписаниеОповещения("СпособПредоставленияБонусыПриИзмененииЗавершение", ЭтотОбъект),
СтрШаблон(
НСтр("ru = 'Добавить условие ""Карта лояльности ""%1"" не зарегистрирована?""'"),
Объект.ВидКартыЛояльности
), РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
СпособПредоставленияБонусыПриИзмененииФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура СпособПредоставленияБонусыПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Результат = РезультатВопроса;
Если Результат = КодВозвратаДиалога.Да Тогда
ДобавитьУсловиеКартаЛояльностиНеЗарегистрирована(Объект.ВидКартыЛояльности);
КонецЕсли;
СпособПредоставленияБонусыПриИзмененииФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура СпособПредоставленияБонусыПриИзмененииФрагмент()
ОбновитьАвтонаименование(Истина);
КонецПроцедуры
&НаКлиенте
Процедура СпособНазначенияПриИзменении(Элемент)
Объект.Управляемая = СпособНазначения > 0;
ОбновитьАвтонаименование(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПрограммаЛояльностиПриИзменении(Элемент)
ОбновитьАвтонаименование(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ИспользоватьПериодДействияПриИзменении(Элемент)
ИзменитьДоступность(ЭтотОбъект);
Объект.КоличествоПериодовДействия = ИспользоватьПериодДействия;
КонецПроцедуры
&НаКлиенте
Процедура ИспользоватьОтсрочкуНачалаДействияПриИзменении(Элемент)
ИзменитьДоступность(ЭтотОбъект);
Объект.КоличествоПериодовОтсрочкиНачалаДействия = ИспользоватьОтсрочкуНачалаДействия;
КонецПроцедуры
&НаКлиенте
Процедура УсловияПредоставленияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ОткрытьУсловиеПредоставления();
КонецПроцедуры
&НаКлиенте
Процедура ИнформацияОДействииСкидокОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если НавигационнаяСсылка = "Изменить" Тогда
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
Кнопки = Новый СписокЗначений;
Кнопки.Добавить("Записать", НСтр("ru = 'Записать'"));
Кнопки.Добавить("Отмена", НСтр("ru = 'Отмена'"));
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработкаОповещенияВопросПередИзменениемСтатуса", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, НСтр("ru='Для изменения статуса действия скидка (наценка) должна быть записана.'"), Кнопки,,,НСтр("ru = 'Скидка (наценка) не записана'"));
Иначе
ОткрытьФормуИзмененияСтатусаДействия();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоставляетсяВнешнейОбработкойСкидкиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(Неопределено, Объект.СпособПредоставления);
КонецПроцедуры
&НаКлиенте
Процедура ОтборОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СкидкиНаценкиКлиент.НастроитьОтбор(
ЭтотОбъект,
НавигационнаяСсылкаФорматированнойСтроки,
ПолучитьАдресаСхемыКомпоновкиДанныхВоВременномХранилище(НавигационнаяСсылкаФорматированнойСтроки));
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныйОтборПредставлениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СкидкиНаценкиКлиент.НастроитьОтбор(
ЭтотОбъект,
НавигационнаяСсылкаФорматированнойСтроки,
ПолучитьАдресаСхемыКомпоновкиДанныхВоВременномХранилище(НавигационнаяСсылкаФорматированнойСтроки));
КонецПроцедуры
&НаКлиенте
Процедура УточнениеПоЦеновымГруппамПредставлениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("АдресВоВременномХранилище", АдресУточненияЗначенияСкидкиНаценкиВоВременномХранилище());
ПараметрыФормы.Вставить("ТолькоПросмотр", Элементы.СпособПредоставления.ТолькоПросмотр);
ДополнительныеПараметры = Новый Структура;
ОткрытьФорму(
"Справочник.СкидкиНаценки.Форма.УточнениеСкидкиНаценки",
ПараметрыФормы,
ЭтотОбъект,
УникальныйИдентификатор,,,
Новый ОписаниеОповещения("РедактированиеУточненияЗначенияСкидкиНаценкиЗавершение", ЭтотОбъект, ДополнительныеПараметры));
КонецПроцедуры
&НаКлиенте
Процедура СписокНоменклатурыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
Кнопки = Новый СписокЗначений;
Кнопки.Добавить("Записать", НСтр("ru = 'Записать'"));
Кнопки.Добавить("Отмена", НСтр("ru = 'Отмена'"));
ПоказатьВопрос(
Новый ОписаниеОповещения("ОбработкаОповещенияВопросПередОткрытиемСпискаНоменклатуры", ЭтотОбъект),
НСтр("ru='Для изменения статуса действия скидка (наценка) должна быть записана.'"),
Кнопки,,,НСтр("ru = 'Скидка (наценка) не записана'"));
Иначе
ПараметрыДанных = Новый Структура;
ПараметрыДанных.Вставить("Источник", Объект.Ссылка);
ОткрытьФорму(
"РегистрСведений.ДействиеСкидокНаценокПоНоменклатуре.Форма.СписокНоменклатуры",
ПараметрыДанных,,,,,
Новый ОписаниеОповещения("ДействиеСкидокНаценокПоНоменклатуреЗавершение", ЭтотОбъект));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СпособПредоставленияОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ВариантОтбораНоменклатурыОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ПодобратьУсловияПредоставления(Команда)
СписокУсловийПредоставления = Новый СписокЗначений();
Для Каждого ТекСтрока Из Объект.УсловияПредоставления Цикл
СписокУсловийПредоставления.Добавить(ТекСтрока.УсловиеПредоставления);
КонецЦикла;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Документ", Объект.Ссылка);
ПараметрыФормы.Вставить("УсловияПредоставления", СписокУсловийПредоставления);
ОткрытьФорму(
"Справочник.УсловияПредоставленияСкидокНаценок.Форма.ФормаПодбора",
ПараметрыФормы,
ЭтотОбъект,,,, Новый ОписаниеОповещения("ПодобратьУсловияПредоставленияЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ПодобратьУсловияПредоставленияЗавершение(Результат, ДополнительныеПараметры) Экспорт
СписокУсловийПредоставления = Результат;
Если СписокУсловийПредоставления <> Неопределено Тогда
Объект.УсловияПредоставления.Очистить();
Для Каждого ТекСтрока Из СписокУсловийПредоставления Цикл
НоваяСтрока = Объект.УсловияПредоставления.Добавить();
НоваяСтрока.УсловиеПредоставления = ТекСтрока.Значение;
КонецЦикла;
ОбновитьАвтонаименование(Истина);
ИзменитьВидимостьЭлементов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда)
ПараметрыПроцедуры = ОбщегоНазначенияУТКлиент.ПараметрыРазрешенияРедактированияРеквизитовОбъекта();
ПараметрыПроцедуры.ОповещениеОРазблокировке = Новый ОписаниеОповещения("РазрешитьРедактированиеРеквизитовОбъектаЗавершение", ЭтотОбъект);
ОбщегоНазначенияУТКлиент.РазрешитьРедактированиеРеквизитовОбъекта(ЭтотОбъект, ПараметрыПроцедуры );
КонецПроцедуры
&НаКлиенте
Процедура КонструкторПсихологическогоОкругления(Команда)
РезультатРедактирования = Неопределено;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ТочностьОкругления", Объект.ТочностьОкругления);
ПараметрыФормы.Вставить("ВариантОкругления", Объект.ВариантОкругления);
ПараметрыФормы.Вставить("ПсихологическоеОкругление", Объект.ПсихологическоеОкругление);
ПараметрыФормы.Вставить("ГраницаДиапазонаЦен", Объект.ЗначениеСкидкиНаценки);
ПараметрыФормы.Вставить("ПримерЧисло", Объект.ЗначениеСкидкиНаценки);
ОткрытьФорму("Справочник.ВидыЦен.Форма.ФормаКонструктораОкругления",
ПараметрыФормы,,,,,
Новый ОписаниеОповещения("КонструкторПсихологическогоОкругленияЗавершение",
ЭтотОбъект),
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура КонструкторПсихологическогоОкругленияЗавершение(Результат, ДополнительныеПараметры) Экспорт
РезультатРедактирования = Результат;
Если РезультатРедактирования <> Неопределено Тогда
Объект.ПсихологическоеОкругление = РезультатРедактирования.ПсихологическоеОкругление;
Объект.ТочностьОкругления = РезультатРедактирования.ТочностьОкругления;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтотОбъект, Команда);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьВыбранноеУсловиеПредоставления(Команда)
ОткрытьУсловиеПредоставления();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуСозданияУсловийПредоставленияСкидокНаценок(Команда)
СкидкиНаценкиКлиент.ОбработатьКомандуДобавленияУсловияПредоставленияСкидокНаценок(
ЭтотОбъект,
Команда,
Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьФормуНастроекВнешнейОбработки(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("АдресНастроекВнешнейОбработки", АдресНастроекВнешнейОбработки);
ОткрытьФорму(
ИмяФормыНастроекВнешнейОбработки,
ПараметрыФормы,
ЭтотОбъект,,,,
Новый ОписаниеОповещения("ИзмененыНастройкиВнешнейОбработки", ЭтотОбъект));
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ПриИзмененииРеквизитов
&НаСервере
Функция ВидКартыЛояльностиПриИзмененииНаСервере()
Если ЗначениеЗаполнено(Объект.ВидКартыЛояльности) Тогда
Возврат Не ЕстьУсловиеКартаЛояльностиНеЗарегистрирована(
Объект.УсловияПредоставления.Выгрузить().ВыгрузитьКолонку("УсловиеПредоставления"),
Объект.ВидКартыЛояльности);
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
&НаСервере
Функция СпособПредоставленияПриИзмененииНаСервере()
ИзменитьВидимостьЭлементов();
Если Объект.СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.КартаЛояльности
И ЗначениеЗаполнено(Объект.ВидКартыЛояльности) Тогда
Возврат Не ЕстьУсловиеКартаЛояльностиНеЗарегистрирована(
Объект.УсловияПредоставления.Выгрузить().ВыгрузитьКолонку("УсловиеПредоставления"),
Объект.ВидКартыЛояльности);
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
#КонецОбласти
#Область Прочее
&НаКлиентеНаСервереБезКонтекста
Функция АвтоНаименование(Форма)
Форма.Элементы.Наименование.СписокВыбора.Очистить();
Объект = Форма.Объект;
СтрокаНаименования = "";
Если Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.Процент") Тогда
Если Объект.СпособПримененияСкидки <> ПредопределенноеЗначение("Перечисление.СпособыПримененияСкидокНаценок.НачислитьБонусныеБаллы") Тогда
СтрокаНаименования = Строка(Объект.ЗначениеСкидкиНаценки) + "%";
Иначе
СтрокаНаименования = СтрШаблон(НСтр("ru = '%1%3, бонусная программа %2'"), Объект.ЗначениеСкидкиНаценки, Объект.БонуснаяПрограммаЛояльности, "%");
КонецЕсли;
ИначеЕсли Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.Сумма") Тогда
Если Объект.СпособПримененияСкидки <> ПредопределенноеЗначение("Перечисление.СпособыПримененияСкидокНаценок.НачислитьБонусныеБаллы") Тогда
СтрокаНаименования = СтрШаблон("%1 %2", Объект.ЗначениеСкидкиНаценки, Объект.ВалютаПредоставления);
Иначе
СтрокаНаименования = СтрШаблон(НСтр("ru = '%1 бонусной программы %2'"),
СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(Объект.ЗначениеСкидкиНаценки, НСтр("ru = 'балл, баллов, баллов'")),
Объект.БонуснаяПрограммаЛояльности);
КонецЕсли;
ИначеЕсли Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.СуммаДляКаждойСтроки") Тогда
СтрокаНаименования = СтрШаблон("%1 %2", Объект.ЗначениеСкидкиНаценки, Объект.ВалютаПредоставления);
ИначеЕсли Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.ВидЦены") Тогда
СтрокаНаименования = СтрШаблон(НСтр("ru = 'Вид цены: %1'"), Объект.ВидЦены);
ИначеЕсли Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.Сообщение") Тогда
СтрокаНаименования = СтрШаблон(НСтр("ru = 'Сообщение: %1'"), Объект.ТекстСообщения);
ИначеЕсли Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.КартаЛояльности") Тогда
СтрокаНаименования = СтрШаблон(НСтр("ru = 'Карта лояльности: %1'"), Объект.ВидКартыЛояльности);
ИначеЕсли Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.Количество") Тогда
СтрокаНаименования = СтрШаблон(
НСтр("ru = 'Бесплатно %1 ед. из %2 ед.'"),
Объект.ЗначениеСкидкиНаценки,
Объект.УсловиеДляСкидкиКоличеством);
ИначеЕсли Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.Подарок") Тогда
Если ЗначениеЗаполнено(Объект.СегментПодарков) Тогда
СтрокаНаименования = СтрШаблон(
НСтр("ru = '%1 ед. из сегмента %2 в подарок'"),
Объект.ЗначениеСкидкиНаценки,
Объект.СегментПодарков);
Иначе
СтрокаНаименования = СтрШаблон(
НСтр("ru = '%1 ед. из документа в подарок'"),
Объект.ЗначениеСкидкиНаценки);
КонецЕсли;
ИначеЕсли Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.ОкруглениеСуммы") Тогда
СтрокаНаименования = СтрШаблон(
НСтр("ru = 'Округление суммы документа, точность %1'"),
Объект.ТочностьОкругления);
ИначеЕсли ТипЗнч(Объект.СпособПредоставления) = Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда
СтрокаНаименования = Форма.АвтонаименованиеВнешнейОбработки;
КонецЕсли;
Если Объект.Управляемая Тогда
СтрокаНаименования = НСтр("ru = 'Назначается вручную:'") + " "+ СтрокаНаименования;
КонецЕсли;
Если Объект.СпособПримененияСкидки = ПредопределенноеЗначение("Перечисление.СпособыПримененияСкидокНаценок.НачислитьБонусныеБаллы") Тогда
СтрокаНаименования = НСтр("ru = 'Бонус:'") + " "+ СтрокаНаименования;
КонецЕсли;
Форма.Элементы.Наименование.СписокВыбора.Добавить(СтрокаНаименования);
Если Объект.УсловияПредоставления.Количество() = 1 Тогда
СтрокаНаименования = СтрокаНаименования + " ("+Объект.УсловияПредоставления[0].УсловиеПредоставления+")";
Форма.Элементы.Наименование.СписокВыбора.Добавить(СтрокаНаименования);
ИначеЕсли Объект.УсловияПредоставления.Количество() > 1 Тогда
КоличествоУсловий = Объект.УсловияПредоставления.Количество();
Если КоличествоУсловий >= 2 Тогда
СтрокаНаименования = СтрокаНаименования + " " +НСтр("ru = '(несколько условий)'");
Форма.Элементы.Наименование.СписокВыбора.Добавить(СтрокаНаименования);
КонецЕсли;
ИначеЕсли Объект.УсловияПредоставления.Количество() = 0 Тогда
СтрокаНаименования = СтрокаНаименования + " " + НСтр("ru = 'без условий'");
Форма.Элементы.Наименование.СписокВыбора.Добавить(СтрокаНаименования);
КонецЕсли;
Если Объект.ЦеновыеГруппы.Количество() > 0 Тогда
СтрокаНаименования = СтрокаНаименования + " " +НСтр("ru = '(с уточнением по ценовым группам)'");
Форма.Элементы.Наименование.СписокВыбора.Добавить(СтрокаНаименования);
КонецЕсли;
Если Форма.ИндексАвтонаименования <= Форма.Элементы.Наименование.СписокВыбора.Количество() - 1 Тогда
Возврат Форма.Элементы.Наименование.СписокВыбора.Получить(Форма.ИндексАвтонаименования).Значение;
Иначе
Возврат СтрокаНаименования;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ОбновитьАвтонаименование(Обновить = Истина)
Наименование = АвтоНаименование(ЭтотОбъект);
Если Не ЗначениеЗаполнено(Объект.Наименование)
ИЛИ (Обновить И ИспользуетсяАвтоНаименование И Не НаименованиеИзмененоПользователем) Тогда
Объект.Наименование = Наименование;
ИспользуетсяАвтоНаименование = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ИзменитьВидимостьЭлементов()
Элементы.СпособПримененияСкидкиСкидкаНаценка.Видимость = ИспользоватьБонусныеПрограммыЛояльности;
Элементы.СпособПримененияСкидкиБонусныеБаллы.Видимость = ИспользоватьБонусныеПрограммыЛояльности;
Элементы.Страницы.ТекущаяСтраница.Видимость = Ложь;
Если Объект.СпособПримененияСкидки = ПредопределенноеЗначение("Перечисление.СпособыПримененияСкидокНаценок.НачислитьБонусныеБаллы") Тогда
Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаБонусы;
Иначе
Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаСкидки;
КонецЕсли;
Элементы.Страницы.ТекущаяСтраница.Видимость = Истина;
Элементы.СтраницыОписаниеБонусы.ТекущаяСтраница.Видимость = Ложь;
Если Объект.СпособПримененияСкидки = ПредопределенноеЗначение("Перечисление.СпособыПримененияСкидокНаценок.НачислитьБонусныеБаллы") Тогда
Если Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.Процент") Тогда
Элементы.СтраницыОписаниеБонусы.ТекущаяСтраница = Элементы.СтраницыОписаниеБонусы.ПодчиненныеЭлементы.ГруппаОписаниеБонусыПроцент;
ИначеЕсли Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.Сумма") Тогда
Элементы.СтраницыОписаниеБонусы.ТекущаяСтраница = Элементы.СтраницыОписаниеБонусы.ПодчиненныеЭлементы.ГруппаОписаниеБонусыСумма;
ИначеЕсли ТипЗнч(Объект.СпособПредоставления) = Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда
Элементы.СтраницыОписаниеБонусы.ТекущаяСтраница = Элементы.СтраницыОписаниеБонусы.ПодчиненныеЭлементы.ГруппаОписаниеБонусыВнешняяОбработка;
КонецЕсли;
Элементы.СтраницыОписаниеБонусы.ТекущаяСтраница.Видимость = Истина;
КонецЕсли;
Элементы.ГруппаСрокиДействия.Видимость = Объект.СпособПримененияСкидки = ПредопределенноеЗначение("Перечисление.СпособыПримененияСкидокНаценок.НачислитьБонусныеБаллы");
ВидимостьЦеновыхГрупп = Ложь;
Элементы.СтраницыОписаниеСкидкиНаценки.ТекущаяСтраница.Видимость = Ложь;
Если Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.ВидЦены") Тогда
Элементы.СтраницыОписаниеСкидкиНаценки.ТекущаяСтраница = Элементы.СтраницыОписаниеСкидкиНаценки.ПодчиненныеЭлементы.ГруппаОписаниеСкидкиВидЦены;
ИначеЕсли Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.КартаЛояльности") Тогда
Элементы.СтраницыОписаниеСкидкиНаценки.ТекущаяСтраница = Элементы.СтраницыОписаниеСкидкиНаценки.ПодчиненныеЭлементы.ГруппаОписаниеСкидкиКартаЛояльности;
ИначеЕсли Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.Количество") Тогда
Элементы.СтраницыОписаниеСкидкиНаценки.ТекущаяСтраница = Элементы.СтраницыОписаниеСкидкиНаценки.ПодчиненныеЭлементы.ГруппаОписаниеСкидкиКоличество;
ИначеЕсли Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.ОкруглениеСуммы") Тогда
Элементы.СтраницыОписаниеСкидкиНаценки.ТекущаяСтраница = Элементы.СтраницыОписаниеСкидкиНаценки.ПодчиненныеЭлементы.ГруппаОписаниеСкидкиОкруглениеСуммы;
ИначеЕсли Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.Подарок") Тогда
Элементы.СтраницыОписаниеСкидкиНаценки.ТекущаяСтраница = Элементы.СтраницыОписаниеСкидкиНаценки.ПодчиненныеЭлементы.ГруппаОписаниеСкидкиПодарок;
ИначеЕсли Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.Процент") Тогда
ВидимостьЦеновыхГрупп = Истина;
Элементы.СтраницыОписаниеСкидкиНаценки.ТекущаяСтраница = Элементы.СтраницыОписаниеСкидкиНаценки.ПодчиненныеЭлементы.ГруппаОписаниеСкидкиПроцент;
ИначеЕсли Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.Сообщение") Тогда
Элементы.СтраницыОписаниеСкидкиНаценки.ТекущаяСтраница = Элементы.СтраницыОписаниеСкидкиНаценки.ПодчиненныеЭлементы.ГруппаОписаниеСкидкиСообщение;
ИначеЕсли Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.Сумма") Тогда
Элементы.СтраницыОписаниеСкидкиНаценки.ТекущаяСтраница = Элементы.СтраницыОписаниеСкидкиНаценки.ПодчиненныеЭлементы.ГруппаОписаниеСкидкиСумма;
ИначеЕсли Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.СуммаДляКаждойСтроки") Тогда
ВидимостьЦеновыхГрупп = Истина;
Элементы.СтраницыОписаниеСкидкиНаценки.ТекущаяСтраница = Элементы.СтраницыОписаниеСкидкиНаценки.ПодчиненныеЭлементы.ГруппаОписаниеСкидкиСуммаДляКаждойСтроки;
ИначеЕсли ТипЗнч(Объект.СпособПредоставления) = Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда
Элементы.СтраницыОписаниеСкидкиНаценки.ТекущаяСтраница = Элементы.СтраницыОписаниеСкидкиНаценки.ПодчиненныеЭлементы.ГруппаОписаниеСкидкиВнешняяОбработка;
ОписаниеДействияВнешнейОбработки = СкидкиНаценкиВызовСервера.ОписаниеДействияВнешнейОбработки(
Объект.СпособПредоставления,
АдресНастроекВнешнейОбработки);
АвтонаименованиеВнешнейОбработки = СкидкиНаценкиВызовСервера.АвтонаименованиеВнешнейОбработки(
Объект.СпособПредоставления,
АдресНастроекВнешнейОбработки);
ИмяФормыНастроекВнешнейОбработки = СкидкиНаценкиВызовСервера.ИмяФормыНастроекВнешнейОбработки(
Объект.СпособПредоставления,
АдресНастроекВнешнейОбработки);
Элементы.ПоказатьФормуНастроекВнешнейОбработкиСкидки.Видимость = ЗначениеЗаполнено(ИмяФормыНастроекВнешнейОбработки);
КонецЕсли;
Элементы.СтраницыОписаниеСкидкиНаценки.ТекущаяСтраница.Видимость = Истина;
Если Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.Процент") Тогда
Элементы.ПрименятьУмножениеВРамкахВышестоящейГруппы.Видимость = Истина;
Элементы.ПрименятьУмножениеВРамкахВышестоящейГруппыБонусы.Видимость = Истина;
НастроитьВидимостьДоступностьЭлементовУчетаПримененныхСкидок();
Иначе
Элементы.ПрименятьУмножениеВРамкахВышестоящейГруппы.Видимость = Ложь;
Элементы.ПрименятьУмножениеВРамкахВышестоящейГруппыБонусы.Видимость = Ложь;
КонецЕсли;
Если Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.Сумма")
ИЛИ Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.СуммаДляКаждойСтроки")
ИЛИ Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.Подарок") Тогда
Элементы.ИспользоватьКратностьБонусыСумма.Видимость = Истина;
Элементы.ИспользоватьКратностьПодарок.Видимость = Истина;
Элементы.ИспользоватьКратностьСумма.Видимость = Истина;
Элементы.ИспользоватьКратностьСуммаДляКаждойСтроки.Видимость = Истина;
Иначе
Элементы.ИспользоватьКратностьБонусыСумма.Видимость = Ложь;
Элементы.ИспользоватьКратностьПодарок.Видимость = Ложь;
Элементы.ИспользоватьКратностьСумма.Видимость = Ложь;
Элементы.ИспользоватьКратностьСуммаДляКаждойСтроки.Видимость = Ложь;
КонецЕсли;
УсловиеЗаФормуОплаты = ЕстьУсловиеЗаФормуОплаты(Объект.УсловияПредоставления.Выгрузить().ВыгрузитьКолонку("УсловиеПредоставления"));
Элементы.ИнформацияОНеПоддерживаемыхСкидках.Видимость = УсловиеЗаФормуОплаты;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЕстьУсловиеКартаЛояльностиНеЗарегистрирована(МассивУсловий, ВидКартыЛояльности)
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| Условия.Ссылка
|ИЗ
| Справочник.УсловияПредоставленияСкидокНаценок КАК Условия
|ГДЕ
| Условия.УсловиеПредоставления = ЗНАЧЕНИЕ(
| Перечисление.УсловияПредоставленияСкидокНаценок.КартаЛояльностиНеЗарегистрирована
| )
| И Условия.Ссылка В(&МассивУсловий)
| И Условия.ВидКартыЛояльности = &ВидКартыЛояльности");
Запрос.УстановитьПараметр("МассивУсловий", МассивУсловий);
Запрос.УстановитьПараметр("ВидКартыЛояльности", ВидКартыЛояльности);
Результат = Запрос.Выполнить();
Возврат Не Результат.Пустой();
КонецФункции
&НаСервереБезКонтекста
Функция ЕстьУсловиеЗаФормуОплаты(МассивУсловий)
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| Условия.Ссылка КАК Ссылка
|ИЗ
| Справочник.УсловияПредоставленияСкидокНаценок КАК Условия
|ГДЕ
| Условия.УсловиеПредоставления = ЗНАЧЕНИЕ(Перечисление.УсловияПредоставленияСкидокНаценок.ЗаФормуОплаты)
| И Условия.Ссылка В(&МассивУсловий)");
Запрос.УстановитьПараметр("МассивУсловий", МассивУсловий);
Результат = Запрос.Выполнить();
Возврат Не Результат.Пустой();
КонецФункции
&НаСервере
Процедура ДобавитьУсловиеКартаЛояльностиНеЗарегистрирована(ВидКартыЛояльности)
УстановитьПривилегированныйРежим(Истина);
Условие = Неопределено;
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| Условия.Ссылка
|ИЗ
| Справочник.УсловияПредоставленияСкидокНаценок КАК Условия
|ГДЕ
| Условия.УсловиеПредоставления = ЗНАЧЕНИЕ(
| Перечисление.УсловияПредоставленияСкидокНаценок.КартаЛояльностиНеЗарегистрирована
| )
| И Условия.ВидКартыЛояльности = &ВидКартыЛояльности");
Запрос.УстановитьПараметр("МассивСсылок", Объект.УсловияПредоставления.Выгрузить().ВыгрузитьКолонку("УсловиеПредоставления"));
Запрос.УстановитьПараметр("ВидКартыЛояльности", ВидКартыЛояльности);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Условие = Выборка.Ссылка;
Иначе
НовоеУсловиеОбъект = Справочники.УсловияПредоставленияСкидокНаценок.СоздатьЭлемент();
НовоеУсловиеОбъект.УсловиеПредоставления = Перечисления.УсловияПредоставленияСкидокНаценок.КартаЛояльностиНеЗарегистрирована;
НовоеУсловиеОбъект.ВидКартыЛояльности = ВидКартыЛояльности;
НовоеУсловиеОбъект.Наименование = СтрШаблон(
НСтр("ru = 'Карта лояльности ""%1"" не зарегистрирована'"),
ВидКартыЛояльности);
НовоеУсловиеОбъект.Записать();
Условие = НовоеУсловиеОбъект.Ссылка;
КонецЕсли;
НовоеСтрока = Объект.УсловияПредоставления.Добавить();
НовоеСтрока.УсловиеПредоставления = Условие;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокВыбораСпособаПредоставления(Форма)
Форма.Элементы.СпособПредоставления.СписокВыбора.Очистить();
Форма.Элементы.СпособПредоставленияБонусы.СписокВыбора.Очистить();
Варианты = СкидкиНаценкиСервер.ДоступныеСпособыПредоставления();
Для Каждого КлючИЗначение Из Варианты Цикл
Если КлючИЗначение.Ключ = "БонусныеБаллы" Тогда
Для Каждого ЭлементСписка Из Варианты.БонусныеБаллы Цикл
Форма.Элементы.СпособПредоставленияБонусы.СписокВыбора.Добавить(ЭлементСписка.Значение, ЭлементСписка.Представление);
КонецЦикла;
КонецЕсли;
Если КлючИЗначение.Ключ = "СкидкиНаценки" Тогда
Для Каждого ЭлементСписка Из Варианты.СкидкиНаценки Цикл
Форма.Элементы.СпособПредоставления.СписокВыбора.Добавить(ЭлементСписка.Значение, ЭлементСписка.Представление);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СпособПримененияСкидкиПриИзмененииНаСервере()
ИзменитьВидимостьЭлементов();
КонецПроцедуры
&НаСервере
Процедура ПриСозданииЧтенииНаСервере()
ИспользоватьПериодДействия = ?(Объект.КоличествоПериодовДействия > 0, 1, 0);
ИспользоватьОтсрочкуНачалаДействия = ?(Объект.КоличествоПериодовОтсрочкиНачалаДействия > 0, 1, 0);
ВалютаПредоставленияНеИспользоватьНесколькоВалютПредставление = Строка(ДоходыИРасходыСервер.ПолучитьВалютуУправленческогоУчета());
ОбновитьИспользованиеСкидокНаценок();
ОбновитьПредставлениеУточненияЗначенияСкидкиНаценки();
ИзменитьДоступность(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ОбновитьИспользованиеСкидокНаценок()
ИспользованиеСкидкиНаценки = СкидкиНаценкиСервер.ИспользованиеСкидкиНаценки(Объект.Ссылка, ТекущаяДатаСеанса());
СкидкиНаценкиСервер.СформироватьИнформационнуюНадписьИспользованиеСкидокНаценок(ИнформацияОДействииСкидок,
ИспользованиеСкидкиНаценки,
"Изменить",
Ложь);
Элементы.ИнформацияОДействииСкидок.Высота = ?(СтрДлина(ИнформацияОДействииСкидок) < 120 , 1, 2);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ИзменитьДоступность(Форма)
Форма.Элементы.ГруппаСрокДействияПраво.Доступность = (Форма.ИспользоватьПериодДействия = 1);
Форма.Элементы.ГруппаОтсрочкаПраво.Доступность = (Форма.ИспользоватьОтсрочкуНачалаДействия = 1);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьУсловиеПредоставления()
ТекущиеДанные = Элементы.УсловияПредоставления.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Не выбрано условие предоставления'"));
Возврат;
КонецЕсли;
ПоказатьЗначение(Неопределено, ТекущиеДанные.УсловиеПредоставления);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуИзмененияСтатусаДействия()
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("СкидкаНаценка", Объект.Ссылка);
Если (Не ИспользоватьКартыЛояльности) И (Не ИспользоватьНесколькоСкладов) И (Не ИспользоватьСоглашенияСКлиентами) Тогда
ПараметрыОткрытия.Вставить("Источник", ПредопределенноеЗначение("Справочник.Склады.ПустаяСсылка"));
ОткрытьФорму("Справочник.СкидкиНаценки.Форма.УстановкаСтатусаДействия", ПараметрыОткрытия);
Иначе
ОткрытьФорму("Справочник.СкидкиНаценки.Форма.ДействиеСкидкиНаценки", ПараметрыОткрытия);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещенияВопросПередИзменениемСтатуса(Результат, ДополнительныеПараметры) Экспорт
Если Результат = "Записать" Тогда
Если Записать() Тогда
ОткрытьФормуИзмененияСтатусаДействия();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИзмененыНастройкиВнешнейОбработки(Результат, ДополнительныеПараметры) Экспорт
Если ЗначениеЗаполнено(Результат) Тогда
ОписаниеДействияВнешнейОбработки = Результат.ОписаниеДействияВнешнейОбработки;
АвтонаименованиеВнешнейОбработки = Результат.АвтонаименованиеВнешнейОбработки;
ОбновитьАвтонаименование(Истина);
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьНастройкиЭлементовВариантовУсловийПоНоменклатуре(Форма)
Форма.Элементы.СегментНоменклатуры.Видимость = (Форма.Объект.ВариантОтбораНоменклатуры = ПредопределенноеЗначение("Перечисление.ВариантыОтбораНоменклатурыДляРасчетаСкидокНаценок.СегментНоменклатуры")
ИЛИ Форма.Объект.ВариантОтбораНоменклатуры = ПредопределенноеЗначение("Перечисление.ВариантыОтбораНоменклатурыДляРасчетаСкидокНаценок.НеСегментНоменклатуры"));
Форма.Элементы.СписокНоменклатуры.Видимость = (Форма.Объект.ВариантОтбораНоменклатуры = ПредопределенноеЗначение("Перечисление.ВариантыОтбораНоменклатурыДляРасчетаСкидокНаценок.СписокНоменклатуры"));
Форма.Элементы.ОтборПредставление.Видимость = (Форма.Объект.ВариантОтбораНоменклатуры = ПредопределенноеЗначение("Перечисление.ВариантыОтбораНоменклатурыДляРасчетаСкидокНаценок.ОтборКомпоновкиДанных"));
СкидкиНаценкиКлиентСервер.НастроитьГиперссылкиОтборов(Форма);
КонецПроцедуры
&НаКлиенте
Процедура ВариантОтбораНоменклатурыПриИзменении(Элемент)
УстановитьНастройкиЭлементовВариантовУсловийПоНоменклатуре(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещенияВопросПередОткрытиемСпискаНоменклатуры(Результат, ДополнительныеПараметры) Экспорт
Если Результат = "Записать" Тогда
Если Записать() Тогда
ПараметрыДанных = Новый Структура;
ПараметрыДанных.Вставить("Источник", Объект.Ссылка);
ОткрытьФорму(
"РегистрСведений.ДействиеСкидокНаценокПоНоменклатуре.Форма.СписокНоменклатуры",
ПараметрыДанных,,,,,
Новый ОписаниеОповещения("ДействиеСкидокНаценокПоНоменклатуреЗавершение", ЭтотОбъект));
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДействиеСкидокНаценокПоНоменклатуреЗавершение(Результат, ДополнительныеПараметры) Экспорт
СкидкиНаценкиКлиентСервер.НастроитьГиперссылкуНаСписокНоменклатурныхПозиций(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Функция ПолучитьАдресаСхемыКомпоновкиДанныхВоВременномХранилище(Имя)
Возврат СкидкиНаценкиВызовСервера.ПолучитьАдресаСхемыКомпоновкиДанныхВоВременномХранилище(ЭтотОбъект, Имя);
КонецФункции
&НаСервере
Процедура ПрименитьИзменения(Результат, Имя)
Настройки = ПолучитьИзВременногоХранилища(Результат);
ЭтотОбъект[Имя].ЗагрузитьНастройки(Настройки);
СкидкиНаценкиКлиентСервер.НастроитьГиперссылкиОтборов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура РедактироватьСхемуКомпоновкиДанныхЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
ПрименитьИзменения(Результат, ДополнительныеПараметры.Имя);
КонецПроцедуры
&НаСервере
Функция АдресУточненияЗначенияСкидкиНаценкиВоВременномХранилище()
Возврат ПоместитьВоВременноеХранилище(Объект.ЦеновыеГруппы.Выгрузить(), УникальныйИдентификатор);
КонецФункции
&НаСервере
Процедура ЗагрузитьУточненияЗначенияСкидкиНаценкиИзВременногоХранилища(Адрес)
ТаблицаЗначений = ПолучитьИзВременногоХранилища(Адрес);
Объект.ЦеновыеГруппы.Загрузить(ТаблицаЗначений);
Модифицированность = Истина;
ОбновитьПредставлениеУточненияЗначенияСкидкиНаценки();
КонецПроцедуры
&НаКлиенте
Процедура РедактированиеУточненияЗначенияСкидкиНаценкиЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат <> Неопределено Тогда
ЗагрузитьУточненияЗначенияСкидкиНаценкиИзВременногоХранилища(Результат);
ОбновитьАвтонаименование(Истина);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьПредставлениеУточненияЗначенияСкидкиНаценки()
Если Объект.ЦеновыеГруппы.Количество() = 0 Тогда
УточнениеПоЦеновымГруппамПредставление = Новый ФорматированнаяСтрока(НСтр("ru = 'Уточнить'"),,,,"Изменить");
Иначе
УточнениеПоЦеновымГруппамПредставление = Новый ФорматированнаяСтрока(НСтр("ru = 'Есть уточнения'"),,,,"Изменить");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗначениеСкидкиНаценкиКоличествоОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
Если СтрНайти(Текст, "-") > 0 Тогда
ОчиститьСообщения();
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Для типа скидки ""Скидка количеством"", поле ""Бесплатно"" не может быть меньше 0'"),,,,);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗначениеСкидкиНаценкиПодарокОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
Если СтрНайти(Текст, "-") > 0 Тогда
ОчиститьСообщения();
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Для типа скидки ""Подарок"", поле ""Стоимость"" не может быть меньше 0'"),,,,);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура НастроитьВидимостьДоступностьЭлементовУчетаПримененныхСкидок()
Если Не Элементы.СпособПредоставления.Доступность Тогда
Возврат;
КонецЕсли;
ВариантСовместногоПримененияГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Родитель, "ВариантСовместногоПрименения");
Если Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.Процент")
И ВариантСовместногоПримененияГруппы = Перечисления.ВариантыСовместногоПримененияСкидокНаценок.Умножение Тогда
Элементы.ПрименятьУмножениеВРамкахВышестоящейГруппы.Доступность =
Не Объект.ПрименятьУмножениеВРамкахВышестоящейГруппы;
Иначе
Элементы.ПрименятьУмножениеВРамкахВышестоящейГруппы.Доступность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РазрешитьРедактированиеРеквизитовОбъектаЗавершение(Результат, ДополнительныеПараметры) Экспорт
НастроитьВидимостьДоступностьЭлементовУчетаПримененныхСкидок();
КонецПроцедуры
&НаСервере
Процедура УстановитьНастройкиУчетаПримененияСкидок()
Если Не Объект.ПрименятьУмножениеВРамкахВышестоящейГруппы Тогда
ВариантСовместногоПримененияГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Родитель, "ВариантСовместногоПрименения");
Объект.ПрименятьУмножениеВРамкахВышестоящейГруппы =
Объект.СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.Процент
И ВариантСовместногоПримененияГруппы = Перечисления.ВариантыСовместногоПримененияСкидокНаценок.Умножение;
КонецЕсли;
НастроитьВидимостьДоступностьЭлементовУчетаПримененныхСкидок();
КонецПроцедуры
#КонецОбласти
#КонецОбласти