Untitled

mail@pastecode.io avatarunknown
plain_text
a month ago
5.8 kB
0
Indexable
Never
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	// ДВИЖЕНИЯ ПО РЕГИСТРУ УПРАВЛЕНЧЕСКИЙ

	Движения.Управленческий.Записать();
	
	Движения.Управленческий.Записывать = Истина;
	
	// Установка блокировки данных в регистре Управленческий по счету Покупатели по контрагенту документа
	Блокировка = Новый БлокировкаДанных;
	ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Управленческий");
	ЭлементБлокировки.УстановитьЗначение("Счет", ПланыСчетов.Управленческий.Покупатели);
	ЭлементБлокировки.УстановитьЗначение(ПланыВидовХарактеристик.ВидыСубконто.Контрагенты, Контрагент);
	ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
	Блокировка.Заблокировать();

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