Untitled

mail@pastecode.io avatarunknown
plain_text
2 months ago
5.0 kB
5
Indexable
Never
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	Движения.Взаиморасчеты.Записывать = Истина;
	Движения.Взаиморасчеты.Записать();
	
    Блокировка = Новый БлокировкаДанных;
	ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Взаиморасчеты");
	ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
	ЭлементБлокировки.УстановитьЗначение("Контрагент", Контрагент);
	Блокировка.Заблокировать();
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВзаиморасчетыОстатки.Накладная КАК Накладная,
		|	ВзаиморасчетыОстатки.Накладная.Валюта КАК Валюта,
		|	ВзаиморасчетыОстатки.Контрагент КАК Контрагент,
		|	ВзаиморасчетыОстатки.СуммаОстаток КАК СуммаОстаток
		|ПОМЕСТИТЬ вт_ОстаткиДолга
		|ИЗ
		|	РегистрНакопления.Взаиморасчеты.Остатки(
		|			&МоментВремени,
		|			Контрагент = &Контрагент
		|				И Накладная <> &Аванс) КАК ВзаиморасчетыОстатки
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Валюта
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	вт_ОстаткиДолга.Накладная КАК Накладная,
		|	вт_ОстаткиДолга.Валюта КАК Валюта,
		|	вт_ОстаткиДолга.Контрагент КАК Контрагент,
		|	вт_ОстаткиДолга.СуммаОстаток КАК ВалютныйОстаток,
		|	ЕСТЬNULL(КурсыВалютСрезПоследних.Курс, 1) КАК Курс,
		|	вт_ОстаткиДолга.СуммаОстаток * ЕСТЬNULL(КурсыВалютСрезПоследних.Курс, 1) КАК РублевыйОстаток
		|ИЗ
		|	вт_ОстаткиДолга КАК вт_ОстаткиДолга,
		|	РегистрСведений.КурсыВалют.СрезПоследних(
		|			&МоментВремени,
		|			Валюта В
		|				(ВЫБРАТЬ РАЗЛИЧНЫЕ
		|					вт_ОстаткиДолга.Валюта КАК Валюта
		|				ИЗ
		|					вт_ОстаткиДолга КАК вт_ОстаткиДолга)) КАК КурсыВалютСрезПоследних
		|
		|УПОРЯДОЧИТЬ ПО
		|	вт_ОстаткиДолга.Накладная.МоментВремени";
	
	Запрос.УстановитьПараметр("Аванс", Документы.РасходнаяНакладная.ПустаяСсылка());
	Запрос.УстановитьПараметр("Контрагент", Контрагент);
	Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
	
	ОсталосьРаспределить = СуммаОплаты;
	РезультатЗапроса = Запрос.Выполнить();
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() И ОсталосьРаспределить <> 0 Цикл
		
		Распределяем = Мин(ОсталосьРаспределить, Выборка.РублевыйОстаток);
		
		Движение = Движения.Взаиморасчеты.ДобавитьРасход();
		Движение.Период = Дата;
		Движение.Контрагент = Контрагент;
		Движение.Накладная = Выборка.Накладная;
		Движение.Сумма = ?(Распределяем = Выборка.РублевыйОстаток, Выборка.ВалютныйОстаток, Распределяем / Выборка.Курс); 
		
		ОсталосьРаспределить = ОсталосьРаспределить - Распределяем;
		
	КонецЦикла;
	
	Если ОсталосьРаспределить <> 0 Тогда
		Движение = Движения.Взаиморасчеты.ДобавитьПриход();
		Движение.Период = Дата;
		Движение.Контрагент = Контрагент;
		Движение.Накладная = Документы.РасходнаяНакладная.ПустаяСсылка();
		Движение.Сумма = ОсталосьРаспределить;
	КонецЕсли;	
	
	
КонецПроцедуры