Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
4.2 kB
0
Indexable
Never
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	// ДВИЖЕНИЯ ПО РЕГИСТРУ ВЗАИМОРАСЧЕТЫ

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