Untitled

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

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

		КонецЦикла;
	КонецЕсли;
	
	// Проверка на отсутствие переплат
	Если ОсталосьСписать > 0 Тогда
		Отказ = Истина;
		
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = СтрШаблон("Переплат быть не должно! Сумма оплаты превышает долг по всем накладным на %1", 
			ОсталосьСписать);
		Сообщение.Сообщить(); 		
	КонецЕсли;
	
КонецПроцедуры