#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
Если ЭтоГруппа Тогда
МассивНепроверяемыхРеквизитов.Добавить("Наименование");
Если Ссылка = Справочники.СкидкиНаценки.КорневаяГруппа Тогда
МассивНепроверяемыхРеквизитов.Добавить("Родитель");
КонецЕсли;
Иначе
Если СпособПредоставления <> Перечисления.СпособыПредоставленияСкидокНаценок.ВидЦены Тогда
МассивНепроверяемыхРеквизитов.Добавить("ВидЦены");
КонецЕсли;
Если (СпособПредоставления <> Перечисления.СпособыПредоставленияСкидокНаценок.Сумма
И СпособПредоставления <> Перечисления.СпособыПредоставленияСкидокНаценок.ОкруглениеСуммы
И СпособПредоставления <> Перечисления.СпособыПредоставленияСкидокНаценок.СуммаДляКаждойСтроки)
И СпособПримененияСкидки = Перечисления.СпособыПримененияСкидокНаценок.ПрименитьВМоментРасчетаСкидокНаценок Тогда
МассивНепроверяемыхРеквизитов.Добавить("ВалютаПредоставления");
КонецЕсли;
Если СпособПримененияСкидки = Перечисления.СпособыПримененияСкидокНаценок.НачислитьБонусныеБаллы Тогда
МассивНепроверяемыхРеквизитов.Добавить("ВалютаПредоставления");
КонецЕсли;
Если СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.ВидЦены
ИЛИ СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.Процент
ИЛИ СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.Сумма
ИЛИ СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.СуммаДляКаждойСтроки Тогда
МассивНепроверяемыхРеквизитов.Добавить("ВидКартыЛояльности");
МассивНепроверяемыхРеквизитов.Добавить("ТекстСообщения");
ИначеЕсли СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.КартаЛояльности
ИЛИ СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.Сообщение Тогда
МассивНепроверяемыхРеквизитов.Добавить("ЗначениеСкидкиНаценки");
Если СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.КартаЛояльности Тогда
МассивНепроверяемыхРеквизитов.Добавить("ТекстСообщения");
КонецЕсли;
Если СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.Сообщение Тогда
МассивНепроверяемыхРеквизитов.Добавить("ВидКартыЛояльности");
КонецЕсли;
КонецЕсли;
Если СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.ОкруглениеСуммы Тогда
МассивНепроверяемыхРеквизитов.Добавить("ТекстСообщения");
МассивНепроверяемыхРеквизитов.Добавить("ВидКартыЛояльности");
Если ЗначениеЗаполнено(ТочностьОкругления) И
ПсихологическоеОкругление >= ТочностьОкругления Тогда
ТекстОшибки = НСтр("ru='Психологическое округление должно быть меньше точности округления'");
ОбщегоНазначения.СообщитьПользователю(
ТекстОшибки,
ЭтотОбъект,
"ПсихологическоеОкругление",
,
Отказ);
КонецЕсли;
КонецЕсли;
Если СпособПредоставления <> Перечисления.СпособыПредоставленияСкидокНаценок.ОкруглениеСуммы Тогда
МассивНепроверяемыхРеквизитов.Добавить("ТочностьОкругления");
КонецЕсли;
Если СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.Подарок
ИЛИ СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.Количество Тогда
МассивНепроверяемыхРеквизитов.Добавить("ТекстСообщения");
МассивНепроверяемыхРеквизитов.Добавить("ВидКартыЛояльности");
КонецЕсли;
Если СпособПримененияСкидки <> Перечисления.СпособыПримененияСкидокНаценок.НачислитьБонусныеБаллы Тогда
МассивНепроверяемыхРеквизитов.Добавить("ПериодДействия");
МассивНепроверяемыхРеквизитов.Добавить("КоличествоПериодовДействия");
МассивНепроверяемыхРеквизитов.Добавить("ПериодОтсрочкиНачалаДействия");
МассивНепроверяемыхРеквизитов.Добавить("КоличествоПериодовОтсрочкиНачалаДействия");
МассивНепроверяемыхРеквизитов.Добавить("БонуснаяПрограммаЛояльности");
КонецЕсли;
Если ТипЗнч(СпособПредоставления) = Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда
МассивНепроверяемыхРеквизитов.Добавить("ТекстСообщения");
МассивНепроверяемыхРеквизитов.Добавить("ВидКартыЛояльности");
КонецЕсли;
Если СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.Количество Тогда
Если ЗначениеСкидкиНаценки >= УсловиеДляСкидкиКоличеством Тогда
ТекстОшибки = НСтр("ru='Количество бесплатного товара должно быть меньше общего количества данного товара""'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстОшибки,
ЭтотОбъект,
"ЗначениеСкидкиНаценки",
,
Отказ);
КонецЕсли;
Иначе
МассивНепроверяемыхРеквизитов.Добавить("УсловиеДляСкидкиКоличеством");
КонецЕсли;
Если ВариантОтбораНоменклатуры <> Перечисления.ВариантыОтбораНоменклатурыДляРасчетаСкидокНаценок.СегментНоменклатуры
Или ВариантОтбораНоменклатуры <> Перечисления.ВариантыОтбораНоменклатурыДляРасчетаСкидокНаценок.НеСегментНоменклатуры Тогда
МассивНепроверяемыхРеквизитов.Добавить("СегментНоменклатурыОграничения");
КонецЕсли;
КонецЕсли;
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
КонецПроцедуры
Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
СкидкиНаценкиСервер.ПередЗаписью(ЭтотОбъект, Отказ);
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
Если Ссылка <> Справочники.СкидкиНаценки.КорневаяГруппа
И Не ЗначениеЗаполнено(Родитель) Тогда
ОбщегоНазначения.СообщитьПользователю(
НСтр("ru = 'Поле ""Группа совместного применения"" обязательно к заполнению'"),,,, Отказ);
КонецЕсли;
ОчиститьНеиспользуемыеРеквизиты();
УстановитьНастройкиУчетаПримененияСкидок();
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если Не ЭтоГруппа Тогда
ВалютаПредоставления = ДоходыИРасходыСервер.ПолучитьВалютуУправленческогоУчета(ВалютаПредоставления);
ВидЦены = Справочники.ВидыЦен.ВидЦеныПоУмолчанию(ВидЦены);
Если ДанныеЗаполнения <> Неопределено
И ДанныеЗаполнения.Свойство("СпособПредоставления")
И ТипЗнч(ДанныеЗаполнения.СпособПредоставления) = Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда
ВнешняяОбработка = СкидкиНаценкиПовтИсп.ОбъектВнешнейОбработки(ДанныеЗаполнения.СпособПредоставления);
УстановитьБезопасныйРежим(Истина);
СпособПримененияСкидки = ВнешняяОбработка.СпособПрименения();
УстановитьБезопасныйРежим(Ложь);
КонецЕсли;
Если ДанныеЗаполнения <> Неопределено
И ДанныеЗаполнения.Свойство("ДанныеДляЗаполненияРодителя")
И ЗначениеЗаполнено(ДанныеЗаполнения.ДанныеДляЗаполненияРодителя) Тогда
Родитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеЗаполнения.ДанныеДляЗаполненияРодителя, "Родитель");
Если Не ЗначениеЗаполнено(Родитель) Тогда
Родитель = Справочники.СкидкиНаценки.КорневаяГруппа;
КонецЕсли;
Иначе
Родитель = Справочники.СкидкиНаценки.КорневаяГруппа;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область Прочее
Процедура ОчиститьНеиспользуемыеРеквизиты()
Если СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.ВидЦены Тогда
ВалютаПредоставления = Неопределено;
ЗначениеСкидкиНаценки = Неопределено;
ТекстСообщения = Неопределено;
ВидКартыЛояльности = Неопределено;
ИначеЕсли СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.Процент Тогда
Если СпособПримененияСкидки = Перечисления.СпособыПримененияСкидокНаценок.ПрименитьВМоментРасчетаСкидокНаценок Тогда
ВалютаПредоставления = Неопределено;
КонецЕсли;
ВалютаПредоставления = Неопределено;
ВидЦены = Неопределено;
ТекстСообщения = Неопределено;
ВидКартыЛояльности = Неопределено;
ИначеЕсли СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.Сумма Тогда
ВидЦены = Неопределено;
ТекстСообщения = Неопределено;
ВидКартыЛояльности = Неопределено;
ИначеЕсли СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.Сообщение Тогда
ЗначениеСкидкиНаценки = Неопределено;
ВалютаПредоставления = Неопределено;
ВидЦены = Неопределено;
ЦеновыеГруппы.Очистить();
ВидКартыЛояльности = Неопределено;
ИначеЕсли СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.КартаЛояльности Тогда
ЗначениеСкидкиНаценки = Неопределено;
ВалютаПредоставления = Неопределено;
ВидЦены = Неопределено;
ЦеновыеГруппы.Очистить();
ТекстСообщения = Неопределено;
КонецЕсли;
Если ЦеновыеГруппы.Количество() > 0 Тогда
Если СпособПредоставления <> Перечисления.СпособыПредоставленияСкидокНаценок.Процент И
СпособПредоставления <> Перечисления.СпособыПредоставленияСкидокНаценок.СуммаДляКаждойСтроки Тогда
ЦеновыеГруппы.Очистить();
КонецЕсли;
КонецЕсли;
Если Не ЭтоГруппа И СпособПримененияСкидки <> Перечисления.СпособыПримененияСкидокНаценок.НачислитьБонусныеБаллы Тогда
БонуснаяПрограммаЛояльности = Неопределено;
КонецЕсли;
КонецПроцедуры
Процедура УстановитьНастройкиУчетаПримененияСкидок()
Если ЭтоГруппа Или ПрименятьУмножениеВРамкахВышестоящейГруппы Тогда
Возврат;
КонецЕсли;
Если Не Ссылка.Пустая() И Родитель <> ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Родитель, "Родитель") Тогда
ВариантСовместногоПримененияГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Родитель, "ВариантСовместногоПрименения");
ПрименятьУмножениеВРамкахВышестоящейГруппы =
СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.Процент
И ВариантСовместногоПримененияГруппы = Перечисления.ВариантыСовместногоПримененияСкидокНаценок.Умножение;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли