Акт премии клиенту / Модуль объекта

файл
// @strict-types

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

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

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

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

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

Процедура ПриЗаписи(Отказ)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
	
	АктПремииКлиентуЛокализация.ПриЗаписи(ЭтотОбъект, Отказ);
	
КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
	
	АктПремииКлиентуЛокализация.ОбработкаПроведения(ЭтотОбъект, Отказ, РежимПроведения);
	
КонецПроцедуры

Процедура ОбработкаУдаленияПроведения(Отказ)
	
	ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
	
	АктПремииКлиентуЛокализация.ОбработкаУдаленияПроведения(ЭтотОбъект, Отказ);
	
КонецПроцедуры

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

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

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

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

#Область ВводНаОсновании

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

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

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

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

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

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

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

#КонецЕсли

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