Акт премии клиенту / Форма документа / Модуль формы

файл
//@strict-types

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
	
	Если ПланыОбмена.ГлавныйУзел() <> Неопределено Тогда
		
		ТолькоПросмотр = Истина;
		
	КонецЕсли;
	
	Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
		
		ПриСозданииЧтенииНаСервере();
		
	КонецЕсли;
	
	ПараметрыВыбораСтатейИАналитик = Документы.АктПремииКлиенту.ПараметрыВыбораСтатейИАналитик();
	ДоходыИРасходыСервер.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыВыбораСтатейИАналитик);
	
	//++ НЕ УТ
	ПараметрыНастройки = Документы.АктПремииКлиенту.ПараметрыНастройкиСчетовУчета();
	НастройкаСчетовУчетаСервер.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыНастройки);
	//-- НЕ УТ
	
	// СтандартныеПодсистемы.РаботаСФайлами
	ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();
	ПараметрыГиперссылки.Размещение = "КоманднаяПанель";
	РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки);
	// Конец СтандартныеПодсистемы.РаботаСФайлами
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	// ИнтеграцияС1СДокументооборотом
	ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтотОбъект);
	// Конец ИнтеграцияС1СДокументооборотом
	
	УстановитьСвойстваДатыПризнанияВУчете(ЭтотОбъект);
	
	СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// СтандартныеПодсистемы.РаботаСФайлами
	РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
	// Конец СтандартныеПодсистемы.РаботаСФайлами
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	//++ НЕ УТ
	НастройкаСчетовУчетаСервер.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
	//-- НЕ УТ
	
	МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтотОбъект, Отказ, ТекущийОбъект, ПараметрыЗаписи);
	
	// ИнтеграцияС1СДокументооборотом
	ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	// Конец ИнтеграцияС1СДокументооборотом
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	Оповестить("Запись_АктПремииКлиенту", ПараметрыЗаписи, Объект.Ссылка);
	
	ОбщегоНазначенияУТКлиент.ВыполнитьДействияПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	// СтандартныеПодсистемы.РаботаСФайлами
	РаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия);
	// Конец СтандартныеПодсистемы.РаботаСФайлами
	
КонецПроцедуры

&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
	
	// СтандартныеПодсистемы.РаботаСФайлами
	РаботаСФайламиКлиент.ПоказатьПодтверждениеЗакрытияФормыСФайлами(ЭтотОбъект, Отказ, ЗавершениеРаботы, Объект.Ссылка);
	Если Отказ Тогда
		Возврат;
	КонецЕсли;
	// Конец СтандартныеПодсистемы.РаботаСФайлами
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура СтатусПриИзменении(Элемент)
	
	УстановитьСвойстваДатыПризнанияВУчете(ЭтотОбъект);
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

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

&НаКлиенте
Процедура СтатусОчистка(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
	
	ДатаПриИзмененииСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
	
	ОрганизацияПриИзмененииСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
	
	КонтрагентПриИзмененииСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура ПартнерПриИзменении(Элемент)
	
	ПартнерПриИзмененииСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура ДоговорПриИзменении(Элемент)
	
	ДоговорПриИзмененииСервер();
	
КонецПроцедуры

// Параметры:
//  Элемент - ДекорацияФормы - Элемент
//  СтандартнаяОбработка - Булево
//
&НаКлиенте
Процедура НадписьВалютыНажатие(Элемент, СтандартнаяОбработка)
	
	Оповещение = Новый ОписаниеОповещения("НадписьВалютыНажатиеЗавершение", ЭтотОбъект);
	ВзаиморасчетыКлиент.ВалютыИКурсДокументаНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка, Оповещение);
	
КонецПроцедуры

&НаКлиенте
Процедура ПредставлениеОтраженияВРеглУчетеНажатие(Элемент, СтандартнаяОбработка)
	
	//++ НЕ УТ
	НастройкаСчетовУчетаКлиент.ПриНажатии(ЭтотОбъект, Элемент, СтандартнаяОбработка);
	//-- НЕ УТ
	
	Возврат;
	
КонецПроцедуры

&НаКлиенте
Процедура СтатьяРасходовАктивовНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
	
	ДоходыИРасходыКлиент.НачалоВыбораСтатьи(ЭтотОбъект, Элемент, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура СтатьяРасходовАктивовПриИзменении(Элемент)
	
	СтатьяПриИзмененииСервер(Элемент.Имя);
	
КонецПроцедуры

&НаКлиенте
Процедура АналитикаРасходовНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ДоходыИРасходыКлиент.НачалоВыбораАналитикиРасходов(ЭтотОбъект, Элемент, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура АналитикаРасходовАвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка)
	
	ДоходыИРасходыКлиент.АвтоПодборАналитикиРасходов(
		ЭтотОбъект, Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура АналитикаРасходовОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка)
	
	ДоходыИРасходыКлиент.ОкончаниеВводаТекстаАналитикиРасходов(
		ЭтотОбъект, Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка);
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыРетроБонусы

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

&НаКлиенте
Процедура РетроБонусыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа, Параметр)
	
	Отказ = Истина;
	
КонецПроцедуры

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

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
	
	ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтотОбъект, Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаписатьДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Записать(ЭтотОбъект, Истина);

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

&НаКлиенте
Процедура ПровестиДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Провести(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьПометкуУдаленияДокумента(Команда)
	
	ОбщегоНазначенияУТКлиент.УстановитьПометкуУдаленияДокумента(ЭтотОбъект);
	
КонецПроцедуры

// СтандартныеПодсистемы.ПодключаемыеКоманды

// Параметры:
//   Команда - КомандаФормы - выполняемая команда
//
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	
	ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
	
КонецПроцедуры

// СтандартныеПодсистемы.РаботаСФайлами

// Параметры:
//  Команда - КомандаФормы - выполняемая команда.
//
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)
	
	РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);
	
КонецПроцедуры

// Конец СтандартныеПодсистемы.РаботаСФайлами

// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

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

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

#Область СлужебныеПроцедурыИФункции

#Область ОбработчикиСобытийЭлементовШапкиФормыВспомогательные

&НаСервере
Процедура ДатаПриИзмененииСервер()
	
	ИменаПолей = Новый Массив; // Массив Из Строка
	ИменаПолей.Добавить("Дата");
	ИменаПолей.Добавить("ВалютаВзаиморасчетов");
	ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект, ИменаПолей);
	
	ПараметрыРасчета = СтруктураПересчетаСуммыВзаиморасчетов(Объект);
	
	Для каждого СтрокаТЧ Из Объект.РетроБонусы Цикл
		
		СтрокаТЧ.СуммаВзаиморасчетов = РетроБонусыКлиентСервер.ПересчитатьСуммуВзаиморасчетовВСтроке(
			ПараметрыРасчета, СтрокаТЧ.СуммаБонуса, ВалютаРеглУчета);
		
	КонецЦикла;
	
	ВзаиморасчетыКлиентСервер.ОбновитьТекстГиперссылкиВалюты(ЭтотОбъект);
	РассчитатьИтоги(ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура ОрганизацияПриИзмененииСервер()
	
	ВалютаРеглУчета = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Объект.Организация);
	
	//++ НЕ УТ
	ПараметрыНастройки = Документы.АктПремииКлиенту.ПараметрыНастройкиСчетовУчета();
	НастройкаСчетовУчетаСервер.ПриИзмененииПараметровНастройки(ЭтотОбъект, ПараметрыНастройки);
	//-- НЕ УТ
	
КонецПроцедуры

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

&НаСервере
Процедура ПартнерПриИзмененииСервер()
	
	ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект, "Партнер");
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура СтатьяПриИзмененииСервер(ИмяЭлемента)
	
	ДоходыИРасходыКлиентСервер.СтатьяПриИзменении(ЭтотОбъект, Элементы[ИмяЭлемента]);
	
	//++ НЕ УТ
	ПараметрыНастройки = Документы.АктПремииКлиенту.ПараметрыНастройкиСчетовУчета();
	НастройкаСчетовУчетаСервер.ПриИзмененииПараметровНастройки(ЭтотОбъект, ПараметрыНастройки);
	//-- НЕ УТ
	
КонецПроцедуры

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

#Область Прочее

&НаСервере
Процедура УстановитьСвязиПараметровВыбораДоговора()
	
	СвязиПараметровДоговора = Новый Массив(); // Массив из СвязьПараметраВыбора
	
	НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Контрагент", "Объект.Контрагент");
	СвязиПараметровДоговора.Добавить(НоваяСвязь);
	
	НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Организация", "Объект.Организация");
	СвязиПараметровДоговора.Добавить(НоваяСвязь);
	
	НоваяСвязь = Новый СвязьПараметраВыбора("Партнер", "Объект.Партнер");
	СвязиПараметровДоговора.Добавить(НоваяСвязь);
	
	Элементы.Договор.СвязиПараметровВыбора = Новый ФиксированныйМассив(СвязиПараметровДоговора);
	
	ПараметрыВыбораДоговора = Новый Массив(); // Массив из ПараметрВыбора
	
	НовыйПараметр = Новый ПараметрВыбора("Отбор.Статус", Перечисления.СтатусыДоговоровКонтрагентов.Действует);
	ПараметрыВыбораДоговора.Добавить(НовыйПараметр);
	
	НовыйПараметр = Новый ПараметрВыбора("Отбор.ПометкаУдаления", Ложь);
	ПараметрыВыбораДоговора.Добавить(НовыйПараметр);
	
	ХозяйственнаяОперацияРеализацияКлиенту = Перечисления.ХозяйственныеОперации.РеализацияКлиенту;
	НовыйПараметр = Новый ПараметрВыбора("Отбор.ХозяйственнаяОперация", ХозяйственнаяОперацияРеализацияКлиенту);
	ПараметрыВыбораДоговора.Добавить(НовыйПараметр);
	
	Элементы.Договор.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбораДоговора);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ЗакрытьФорму()
	
	Закрыть();
	
КонецПроцедуры

&НаСервере
Процедура ПриСозданииЧтенииНаСервере()
	
	ВалютаРеглУчета = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Объект.Организация);
	ВалютаДокумента = Объект.ВалютаДокумента;
	УстановитьСвязиПараметровВыбораДоговора();
	
	ВзаиморасчетыСервер.ФормаПриЧтенииНаСервере(ЭтотОбъект);
	РассчитатьИтоги(ЭтотОбъект);
	
КонецПроцедуры

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

&НаКлиентеНаСервереБезКонтекста
Процедура РассчитатьИтоги(Форма)
	
	Объект = Форма.Объект;
	Форма.СуммаБонусовДокумента = Объект.РетроБонусы.Итог("СуммаБонуса");
	Форма.СуммаВзаиморасчетов = Объект.РетроБонусы.Итог("СуммаВзаиморасчетов");
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция СтруктураПересчетаСуммыВзаиморасчетов(Объект)
	
	Результат = Новый Структура;
	Результат.Вставить("Валюта", Объект.ВалютаДокумента);
	Результат.Вставить("КурсЧислитель", Объект.КурсЧислитель);
	Результат.Вставить("КурсЗнаменатель", Объект.КурсЗнаменатель);
	Результат.Вставить("ВалютаВзаиморасчетов", Объект.ВалютаВзаиморасчетов);
	
	Возврат Результат;
	
КонецФункции

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

#Область ПодборПоОстаткам

&НаКлиенте
Асинх Процедура ПодобратьПоОстаткамПодготовка()
	
	Если Объект.Проведен Тогда
		
		ТекстВопроса = НСтр("ru = 'Перед подбором начислений необходимо отменить проведение документа. Продолжить?'");
		Ответ = Ждать ВопросАсинх(ТекстВопроса, РежимДиалогаВопрос.ДаНет); // КодВозвратаДиалога
		
		Если Ответ = КодВозвратаДиалога.Да Тогда
			
			ПараметрыЗаписи = Новый Структура("РежимЗаписи", РежимЗаписиДокумента.ОтменаПроведения);
			Записать(ПараметрыЗаписи);
			
		КонецЕсли;
		
	КонецЕсли;
	
	ПодобратьРетроБонусы();
	
КонецПроцедуры

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

// Возвращаемое значение:
//	Строка
//
&НаСервере
Функция АдресТаблицыПодобранныхСтрок()
	
	ОписаниеТиповБулево = Новый ОписаниеТипов("Булево");
	ОписаниеТиповВалюта = Новый ОписаниеТипов("СправочникСсылка.Валюты");
	
	ТаблицаПодобранныхСтрок = Объект.РетроБонусы.Выгрузить();
	ТаблицаПодобранныхСтрок.Колонки.Добавить("ДокументВыбран", ОписаниеТиповБулево);
	ТаблицаПодобранныхСтрок.Колонки.Добавить("Пометка", ОписаниеТиповБулево);
	ТаблицаПодобранныхСтрок.Колонки.Добавить("Валюта", ОписаниеТиповВалюта);
	
	Для Каждого СтрокаПодобранная Из ТаблицаПодобранныхСтрок Цикл
		
		СтрокаПодобранная.ДокументВыбран = Истина;
		СтрокаПодобранная.Пометка = Истина;
		СтрокаПодобранная.Валюта = Объект.ВалютаДокумента;
		
	КонецЦикла;
	
	АдресТаблицыПодобранныхСтрок = ПоместитьВоВременноеХранилище(ТаблицаПодобранныхСтрок, УникальныйИдентификатор);
	
	Возврат АдресТаблицыПодобранныхСтрок;
	
КонецФункции

// Параметры:
//  Результат - Неопределено, Строка - 
//  ДополнительныеПараметры - Произвольный -
//
&НаКлиенте
Процедура ПодобратьРетроБонусыЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат <> Неопределено
	   И ЭтоАдресВременногоХранилища(Результат) Тогда
		
		ОбработатьПодобранныеРетроБонусы(Результат);
		
		ВзаиморасчетыКлиентСервер.ОбновитьТекстГиперссылкиВалюты(ЭтотОбъект);
		РассчитатьИтоги(ЭтотОбъект);
		Модифицированность = Истина;
		
	КонецЕсли;
	
КонецПроцедуры

// Параметры:
//  АдресВХранилище - Строка
//
&НаСервере
Процедура ОбработатьПодобранныеРетроБонусы(Знач АдресВХранилище)
	
	ТаблицаОстатков = ТаблицаВыбранныхОстатков(АдресВХранилище);
	УдалитьИзВременногоХранилища(АдресВХранилище);
	Объект.РетроБонусы.Очистить();
	
	Если ТаблицаОстатков.Количество() = 0 Тогда
		Объект.ВалютаДокумента = Справочники.Валюты.ПустаяСсылка();
	Иначе
		
		Если Объект.ВалютаДокумента.Пустая() Тогда
			
			Объект.ВалютаДокумента = ТаблицаОстатков[0].Валюта;
			
			ИменаПолей = Новый Массив; // Массив Из Строка
			ИменаПолей.Добавить("Дата");
			ИменаПолей.Добавить("ВалютаДокумента");
			ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект, ИменаПолей);
			
		КонецЕсли;
		
		ПараметрыРасчета = СтруктураПересчетаСуммыВзаиморасчетов(Объект);
		
		Для Каждого СтрокаОстатков Из ТаблицаОстатков Цикл
			
			СтрокаРБ = Объект.РетроБонусы.Добавить();
			СтрокаРБ.ДокументУсловий = СтрокаОстатков.ДокументУсловий;
			СтрокаРБ.Партнер = СтрокаОстатков.Партнер;
			СтрокаРБ.НачалоПериода = СтрокаОстатков.НачалоПериода;
			СтрокаРБ.ОкончаниеПериода = СтрокаОстатков.ОкончаниеПериода;
			СтрокаРБ.СуммаБонуса = СтрокаОстатков.Сумма;
			СтрокаРБ.СуммаВзаиморасчетов = РетроБонусыКлиентСервер.ПересчитатьСуммуВзаиморасчетовВСтроке(
				ПараметрыРасчета, СтрокаРБ.СуммаБонуса, ВалютаРеглУчета);
			
		КонецЦикла;
		
		ВзаиморасчетыКлиентСервер.ОбновитьТекстГиперссылкиВалюты(ЭтотОбъект);
		
	КонецЕсли;
	
КонецПроцедуры

// Параметры:
//  АдресВХранилище - Строка - Адрес в хранилище
// 
// Возвращаемое значение:
//  ТаблицаЗначений:
//   * ДокументУсловий - ДокументСсылка.УсловияРетроБонусовКлиентов
//   * Партнер - СправочникСсылка.Партнеры
//   * НачалоПериода - Дата
//   * ОкончаниеПериода - Дата
//   * Сумма - ОпределяемыйТип.ДенежнаяСуммаНеотрицательная
//   * Валюта - СправочникСсылка.Валюты
//
&НаСервере
Функция ТаблицаВыбранныхОстатков(АдресВХранилище)
	
	Возврат ПолучитьИзВременногоХранилища(АдресВХранилище);
	
КонецФункции

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

#Область СтандартныеПодсистемы_ПодключаемыеКоманды

// СтандартныеПодсистемы.ПодключаемыеКоманды

// Подключаемый продолжить выполнение команды на сервере.
// 
// Параметры:
//  ПараметрыВыполнения - Структура -
//  ДополнительныеПараметры - Структура -
//
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
	
	ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
	
КонецПроцедуры

&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
	
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
	
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

// ИнтеграцияС1СДокументооборотом

// Параметры:
//   Команда - КомандаФормы - выполняемая команда
//
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
	
	ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтотОбъект, Объект);
	
КонецПроцедуры

// Конец ИнтеграцияС1СДокументооборотом

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

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

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