Скидки (наценки) / Форма элемента / Модуль формы

файл

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);

	ЗаполнитьЗначенияСвойств(ЭтотОбъект, СкидкиНаценкиСервер.СтруктураИсточниковДействияСкидокСогласноФО());
	
	СпособНазначения = Объект.Управляемая;
	
	// Обработчик подсистемы запрета редактирования реквизитов объектов
	ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект);
	
	// Обработчик механизма "ВерсионированиеОбъектов"
	ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
	
	Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
		Объект.Наименование = АвтоНаименование(ЭтотОбъект);
	Иначе
		АвтоНаименование(ЭтотОбъект);
	КонецЕсли;
	СкидкиНаценкиКлиентСервер.ОбновитьРеквизитыАвтонаименования(ЭтотОбъект);
	
	ЗаполнитьСписокВыбораСпособаПредоставления(ЭтотОбъект);
	
	Элементы.ТочностьОкругления.СписокВыбора.Очистить();
	ЗначениеОкругления             = 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'"),,,,);	
	КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура НастроитьВидимостьДоступностьЭлементовУчетаПримененныхСкидок()
	
	Если Не Элементы.СпособПредоставления.Доступность Тогда
		Возврат;
	КонецЕсли;
	
	ВариантСовместногоПримененияГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Родитель, "ВариантСовместногоПрименения");
	
	Если Объект.СпособПредоставления = ПредопределенноеЗначение("Перечисление.СпособыПредоставленияСкидокНаценок.Процент")
		И ВариантСовместногоПримененияГруппы = Перечисления.ВариантыСовместногоПримененияСкидокНаценок.Умножение Тогда

		Элементы.ПрименятьУмножениеВРамкахВышестоящейГруппы.Доступность = 
														Не Объект.ПрименятьУмножениеВРамкахВышестоящейГруппы;
														
	Иначе
		Элементы.ПрименятьУмножениеВРамкахВышестоящейГруппы.Доступность = Истина;
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура РазрешитьРедактированиеРеквизитовОбъектаЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	НастроитьВидимостьДоступностьЭлементовУчетаПримененныхСкидок();

КонецПроцедуры

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

#КонецОбласти

#КонецОбласти

Связанные материалы