Счет на оплату клиенту / Модуль объекта

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

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

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

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

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

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

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

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

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

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

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

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

#Область ИнициализацияИЗаполнение

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

Процедура ЗаполнитьПоРеализацииТоваров(Знач Основание, ДанныеЗаполнения)

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

Процедура ЗаполнитьПоВыкупуВозвратнойТарыКлиентом(Знач Основание, ДанныеЗаполнения)

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

Процедура ЗаполнитьПоАктуВыполненныхРабот(Знач Основание, ДанныеЗаполнения)

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

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

Процедура ЗаполнитьПоОтчетуКомитенту(Знач Основание, ДанныеЗаполнения)

	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	ДанныеДокумента.Дата                    КАК Дата,
	|	ДанныеДокумента.Организация				КАК Организация,
	|	ДанныеДокумента.Руководитель            КАК Руководитель,
	|	ДанныеДокумента.ГлавныйБухгалтер        КАК ГлавныйБухгалтер,
	|	ДанныеДокумента.Номер					КАК Номер,
	|	ДанныеДокумента.Организация.Префикс		КАК Префикс,
	|	ДанныеДокумента.Валюта					КАК Валюта,
	|	ДанныеДокумента.Валюта					КАК ВалютаВзаиморасчетов,
	|	ДанныеДокумента.СуммаВознаграждения		КАК СуммаДокумента,
	|	ДанныеДокумента.Ссылка					КАК ДокументОснование,
	|	ДанныеДокумента.Партнер					КАК Партнер,
	|	ДанныеДокумента.Контрагент				КАК Контрагент,
	|	ДанныеДокумента.КонтактноеЛицо			КАК КонтактноеЛицо,
	|	ДанныеДокумента.Договор					КАК Договор,
	|	ДанныеДокумента.ДатаПлатежа				КАК ДатаПлатежа,
	|	ЛОЖЬ									КАК ЧастичнаяОплата,
	|	НЕ ДанныеДокумента.Проведен				КАК ЕстьОшибкиПроведен,
	|	ДанныеДокумента.УдержатьВознаграждение	КАК УдержатьВознаграждение,
	|
	|	ВЫБОР КОГДА ДанныеДокумента.ПорядокРасчетов = ЗНАЧЕНИЕ(Перечисление.ПорядокРасчетов.ПоДоговорамКонтрагентов) ТОГДА
	|		ИСТИНА
	|	ИНАЧЕ
	|		ЛОЖЬ
	|	КОНЕЦ КАК РасчетыПоДоговору
	|
	|ИЗ
	|	Документ.ОтчетКомитенту КАК ДанныеДокумента
	|ГДЕ
	|	ДанныеДокумента.Ссылка = &Ссылка
	|;
	|ВЫБРАТЬ
	|	ЕСТЬNULL(РасчетыСКлиентами.СуммаОстаток,0) КАК СуммаОплаты
	|ИЗ
	|	РегистрНакопления.РасчетыСКлиентами.Остатки(, ОбъектРасчетов.Объект=&Ссылка) КАК РасчетыСКлиентами
	|");
	Запрос.УстановитьПараметр("Ссылка", Основание);
	
	РезультатЗапроса = Запрос.ВыполнитьПакет();
	
	ДанныеЗаполнения = Новый Структура;
	Для Каждого Колонка Из РезультатЗапроса[0].Колонки Цикл
		ДанныеЗаполнения.Вставить(Колонка.Имя);
	КонецЦикла;
	
	ВыборкаПоДокументу = РезультатЗапроса[0].Выбрать();
	ВыборкаПоРасчетам  = РезультатЗапроса[1].Выбрать();
	
	Если ВыборкаПоДокументу.Следующий() Тогда
		
		Если ВыборкаПоДокументу.УдержатьВознаграждение Тогда
				
			Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Не требуется вводить счет на оплату на основании документа %1, поскольку в нем удержано вознаграждение'"),
				Основание);
			
			ВызватьИсключение Текст;
			
		КонецЕсли;
		
		Если ВыборкаПоДокументу.СуммаДокумента <= 0 Тогда
				
			Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Не требуется вводить счет на оплату на основании документа %1, поскольку отсутствует сумма вознаграждения или она отрицательная'"),
				Основание);
			
			ВызватьИсключение Текст;
			
		КонецЕсли;
		
		ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
			ВыборкаПоДокументу.ДокументОснование,
			Неопределено, // Статус
			ВыборкаПоДокументу.ЕстьОшибкиПроведен,
			Ложь); // ЕстьОшибкиСтатус
		
		ЗаполнитьЗначенияСвойств(ДанныеЗаполнения, ВыборкаПоДокументу);
		
		НазначениеПлатежа = Документы.СчетНаОплатуКлиенту.СформироватьНазначениеПлатежа(
			ВыборкаПоДокументу.Номер,
			Основание);
		
	КонецЕсли;
	
	СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияБанковскогоСчетаОрганизацииПоУмолчанию();
	СтруктураПараметров.Организация    		= ДанныеЗаполнения.Организация;

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

Процедура ЗаполнитьПоОтчетуКомиссионераОСписании(Знач Основание, ДанныеЗаполнения)

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

Процедура ЗаполнитьПоДоговору(Знач Основание, ДанныеЗаполнения)

	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	ДанныеДокумента.Ссылка               КАК Договор,
	|	ДанныеДокумента.Организация          КАК Организация,
	|	ДанныеДокумента.Номер                КАК Номер,
	|	Неопределено                         КАК Префикс,
	|	ДанныеДокумента.ВалютаВзаиморасчетов КАК Валюта,
	|	0                                    КАК СуммаДокумента,
	|	ДанныеДокумента.Ссылка               КАК ДокументОснование,
	|	ДанныеДокумента.Партнер              КАК Партнер,
	|	ДанныеДокумента.Контрагент           КАК Контрагент,
	|	&ТекущаяДата                         КАК ДатаПлатежа,
	|	ИСТИНА                               КАК ЧастичнаяОплата,
	|	ДанныеДокумента.Статус               КАК Статус,
	|	ДанныеДокумента.КонтактноеЛицо       КАК КонтактноеЛицо,
	|
	|	ВЫБОР КОГДА ДанныеДокумента.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыДоговоровКонтрагентов.НеСогласован) ТОГДА
	|		ИСТИНА
	|	ИНАЧЕ
	|		ЛОЖЬ
	|	КОНЕЦ                                КАК ЕстьОшибкиСтатус,
	|
	|	ВЫБОР КОГДА ДанныеДокумента.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ЗакупкаУПоставщика) ТОГДА
	|		ИСТИНА
	|	ИНАЧЕ
	|		ЛОЖЬ
	|	КОНЕЦ                                КАК ЕстьОшибкиТипДоговора
	|
	|ИЗ
	|	Справочник.ДоговорыКонтрагентов КАК ДанныеДокумента
	|ГДЕ
	|	ДанныеДокумента.Ссылка = &Ссылка
	|");
	Запрос.УстановитьПараметр("Ссылка", Основание);
	Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса());
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ДанныеЗаполнения = Новый Структура;
	Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл
		ДанныеЗаполнения.Вставить(Колонка.Имя);
	КонецЦикла;
	
	ВыборкаПоДокументу = РезультатЗапроса.Выбрать();
	
	Если ВыборкаПоДокументу.Следующий() Тогда
		
		ПроверитьВозможностьВводаНаОснованииДоговора(ВыборкаПоДокументу.ЕстьОшибкиТипДоговора);
		
		ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
			ВыборкаПоДокументу.ДокументОснование,
			ВыборкаПоДокументу.Статус,
			, // ЕстьОшибкиПроведен
			ВыборкаПоДокументу.ЕстьОшибкиСтатус);
		
		ЗаполнитьЗначенияСвойств(ДанныеЗаполнения, ВыборкаПоДокументу);
		
		НазначениеПлатежа = Документы.СчетНаОплатуКлиенту.СформироватьНазначениеПлатежа(
			ВыборкаПоДокументу.Номер,
			Основание);
		
	КонецЕсли;
	
	СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияБанковскогоСчетаОрганизацииПоУмолчанию();
	СтруктураПараметров.Организация = ДанныеЗаполнения.Организация;

	БанковскийСчет = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(СтруктураПараметров);
	
	СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияКассыОрганизацииПоУмолчанию();
	СтруктураПараметров.Организация    		= ДанныеЗаполнения.Организация;
	Касса = ЗначениеНастроекПовтИсп.ПолучитьКассуОрганизацииПоУмолчанию(СтруктураПараметров); // Касса
	
КонецПроцедуры


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

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

Процедура ЗаполнитьПоОтчетуКомитентуОЗакупках(Знач Основание, ДанныеЗаполнения)

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

	Запрос.УстановитьПараметр("Ссылка", Основание);
	Запрос.УстановитьПараметр("ВариантОбособления", Константы.ВариантОбособленияТоваровВПродажах.Получить());
	РезультатЗапроса = Запрос.ВыполнитьПакет();
	
	ДанныеЗаполнения = Новый Структура;
	Для Каждого Колонка Из РезультатЗапроса[0].Колонки Цикл
		ДанныеЗаполнения.Вставить(Колонка.Имя);
	КонецЦикла;
	
	ВыборкаПоДокументу = РезультатЗапроса[0].Выбрать();
	ВыборкаПоЭтапам    = РезультатЗапроса[1].Выбрать();
	ВыборкаПоРасчетам  = РезультатЗапроса[3].Выбрать();
	
	Если ВыборкаПоДокументу.Следующий() Тогда
		
		Если ВыборкаПоДокументу.СуммаДокумента <= 0 Тогда
				
			Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Не требуется вводить счет на оплату на основании документа %1, поскольку отсутствует сумма вознаграждения или она отрицательная'"),
				Основание);
			
			ВызватьИсключение Текст;
			
		КонецЕсли;
		
		Документы.СчетНаОплатуКлиенту.ПроверитьКорректностьХозяйственнойОперацииДокументаОснования(
			ВыборкаПоДокументу.ЕстьОшибкиХозяйственнаяОперация,
			ВыборкаПоДокументу.ХозяйственнаяОперация);
		
		ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
			ВыборкаПоДокументу.ДокументОснование,
			ВыборкаПоДокументу.Статус,
			ВыборкаПоДокументу.ЕстьОшибкиПроведен,
			ВыборкаПоДокументу.ЕстьОшибкиСтатус);
		
		ЗаполнитьЗначенияСвойств(ДанныеЗаполнения, ВыборкаПоДокументу);
		
		НазначениеПлатежа = Документы.СчетНаОплатуКлиенту.СформироватьНазначениеПлатежа(
			ВыборкаПоДокументу.Номер,
			Основание);
		
		Если ВыборкаПоДокументу.РасчетыПоДоговору Тогда
			
			Пока ВыборкаПоЭтапам.Следующий() Цикл
				ЭтапОплаты = ЭтапыГрафикаОплаты.Добавить();
				ЗаполнитьЗначенияСвойств(ЭтапОплаты, ВыборкаПоЭтапам);
			КонецЦикла;
			
		Иначе
			
			Если ВыборкаПоРасчетам.Следующий() Тогда
				
				СуммаОплаты = ВыборкаПоРасчетам.СуммаОплаты;
				Если ВыборкаПоДокументу.ВалютаВзаиморасчетов <> ВыборкаПоДокументу.Валюта Тогда
					Коэффициенты  = РаботаСКурсамивалютУТ.ПолучитьКоэффициентыПересчетаВалюты(
						ВыборкаПоДокументу.Валюта,
						ВыборкаПоДокументу.ВалютаВзаиморасчетов,
						ВыборкаПоДокументу.Дата,
						ВыборкаПоДокументу.Организация);
					СуммаОплаты = ?(Коэффициенты.КоэффициентПересчетаВВалютуВзаиморасчетов <> 0, СуммаОплаты / Коэффициенты.КоэффициентПересчетаВВалютуВзаиморасчетов, 0);
				КонецЕсли;
				
				Пока СуммаОплаты > 0 И ВыборкаПоЭтапам.Следующий() Цикл
					
					ЭтапОплаты = ЭтапыГрафикаОплаты.Добавить();
					ЗаполнитьЗначенияСвойств(ЭтапОплаты, ВыборкаПоЭтапам);
					Если СуммаОплаты < ВыборкаПоЭтапам.СуммаПлатежа Тогда
						ЭтапОплаты.СуммаПлатежа = СуммаОплаты;
					КонецЕсли;
					
					СуммаОплаты = СуммаОплаты - ВыборкаПоЭтапам.СуммаПлатежа;
					
				КонецЦикла;
				
				ЭтапыГрафикаОплаты.Сортировать("ДатаПлатежа");
				
			КонецЕсли;
			
			ДанныеЗаполнения.Вставить("СуммаДокумента",  ЭтапыГрафикаОплаты.Итог("СуммаПлатежа"));
			ДанныеЗаполнения.Вставить("ЧастичнаяОплата", ВыборкаПоДокументу.СуммаДокумента <> ЭтапыГрафикаОплаты.Итог("СуммаПлатежа"));
			
		КонецЕсли;
		
		СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияБанковскогоСчетаОрганизацииПоУмолчанию();
		СтруктураПараметров.Организация = ДанныеЗаполнения.Организация;
		
		БанковскийСчет = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(СтруктураПараметров);
		СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияКассыОрганизацииПоУмолчанию();
		СтруктураПараметров.Организация = ДанныеЗаполнения.Организация;
		Касса = ЗначениеНастроекПовтИсп.ПолучитьКассуОрганизацииПоУмолчанию(СтруктураПараметров);
		
		СуммаПлатежей            = ЭтапыГрафикаОплаты.Итог("СуммаПлатежа");
			СуммаПроцентов             = 100;
			Множитель                  = ?(СуммаПлатежей<0,-1,1);
			
			Сч = 0;
			Пока Сч < ЭтапыГрафикаОплаты.Количество() Цикл
				
				Если СуммаПлатежей * Множитель > 0 Тогда
					ЭтапыГрафикаОплаты[Сч].ПроцентПлатежа = ?(Сч = ЭтапыГрафикаОплаты.Количество()-1,
																		СуммаПроцентов,
																		ЭтапыГрафикаОплаты[Сч].СуммаПлатежа / СуммаПлатежей * 100);
					
					СуммаПроцентов = СуммаПроцентов - ЭтапыГрафикаОплаты[Сч].ПроцентПлатежа*Множитель;
				КонецЕсли;
				
				Сч = Сч + 1;
			КонецЦикла;
		
	Иначе
		ЗаполнитьСуммуДокументаПоРасчетамСКлиентами(ВыборкаПоДокументу, ВыборкаПоРасчетам, ДанныеЗаполнения);
	КонецЕсли;
	
КонецПроцедуры


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

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

Процедура ДобавитьЭтапОплаты(СуммаОплаты, ДатаПлатежа)
	
	ЭтапОплаты = ЭтапыГрафикаОплаты.Добавить();
	ЭтапОплаты.ПроцентПлатежа = 100;
	ЭтапОплаты.СуммаПлатежа   = СуммаОплаты;
	ЭтапОплаты.ДатаПлатежа    = ?(ЗначениеЗаполнено(ДатаПлатежа), ДатаПлатежа, ТекущаяДатаСеанса());
	
КонецПроцедуры

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

Процедура РассчитатьПроцентыПлатежей()
	СтрокиОплаты = ЭтапыГрафикаОплаты.НайтиСтроки(Новый Структура("ЭтоЗалогЗаТару", Ложь));
	СуммыПлатажей = ЭтапыГрафикаОплаты.Выгрузить(СтрокиОплаты, "СуммаПлатежа").ВыгрузитьКолонку("СуммаПлатежа");
	ПроцентыПлатежей = ОбщегоНазначенияУТКлиентСервер.РаспределитьПропорционально(100, СуммыПлатажей);
	Если ПроцентыПлатежей <> Неопределено Тогда
		СчетчикТаблицы = 0;
		СчетчикМассива = 0;
		Пока СчетчикМассива < ПроцентыПлатежей.Количество() Цикл
			Пока ЭтапыГрафикаОплаты[СчетчикТаблицы].ЭтоЗалогЗаТару 
				И СчетчикТаблицы < ЭтапыГрафикаОплаты.Количество() Цикл
				СчетчикТаблицы = СчетчикТаблицы + 1;
			КонецЦикла;
			Если СчетчикТаблицы < ЭтапыГрафикаОплаты.Количество()
				И Не ЭтапыГрафикаОплаты[СчетчикТаблицы].ЭтоЗалогЗаТару Тогда
				ЭтапыГрафикаОплаты[СчетчикТаблицы].ПроцентПлатежа = ПроцентыПлатежей[СчетчикМассива];
			КонецЕсли;
			СчетчикТаблицы = СчетчикТаблицы + 1;
			СчетчикМассива = СчетчикМассива + 1;
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

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

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

#КонецЕсли

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