Untitled
unknown
plain_text
2 years ago
5.2 kB
4
Indexable
Процедура ОбработкаПроведенияОУ(Отказ) // ДВИЖЕНИЯ ПО РЕГИСТРУ ВЗАИМОРАСЧЕТЫ Движения.Взаиморасчеты.Записывать = Истина; Движения.Взаиморасчеты.Записать(); ПроектАванс = Справочники.Проекты.Аванс; // Установка блокировки данных в регистре Взаиморасчеты по контрагенту документа и проекту - авансу Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Взаиморасчеты"); ЭлементБлокировки.УстановитьЗначение("Контрагент", Контрагент); ЭлементБлокировки.УстановитьЗначение("Проект", ПроектАванс); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); // В первом запросе пакета определяем курс валюты проекта, указанного в документе // Во втором запросе пакета получаем имеющийся аванс контрагента Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КурсыВалютСрезПоследних.Курс КАК Курс |ИЗ | РегистрСведений.КурсыВалют.СрезПоследних(&ДатаСреза, Валюта = ВЫРАЗИТЬ(&Проект КАК Справочник.Проекты).Валюта) КАК КурсыВалютСрезПоследних |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | -ВзаиморасчетыОстатки.СуммаВРубляхОстаток КАК СуммаАванс, | ВзаиморасчетыОстатки.Контрагент КАК Контрагент |ИЗ | РегистрНакопления.Взаиморасчеты.Остатки( | &МоментВремени, | Контрагент = &Контрагент | И Проект = &Аванс) КАК ВзаиморасчетыОстатки"; Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); Запрос.УстановитьПараметр("ДатаСреза", Дата); Запрос.УстановитьПараметр("Контрагент", Контрагент); Запрос.УстановитьПараметр("Аванс", ПроектАванс); Запрос.УстановитьПараметр("Проект", Проект); МассивРезультатов = Запрос.ВыполнитьПакет(); РезультатКурсПроекта = МассивРезультатов[0]; КурсПроекта = 0; Если Не РезультатКурсПроекта.Пустой() Тогда Данные = РезультатКурсПроекта.Выбрать(); Данные.Следующий(); КурсПроекта = Данные.Курс; КонецЕсли; РезультатОсновной = МассивРезультатов[1]; ГасимИзАванса = 0; Если Не РезультатОсновной.Пустой() Тогда // Если аванс есть, то гасим сумму долга по документу из аванса Данные = РезультатОсновной.Выбрать(); Данные.Следующий(); СуммаАванса = Данные.СуммаАванс; ГасимИзАванса = Мин (СуммаАванса, СуммаПоДокументу); Движение = Движения.Взаиморасчеты.ДобавитьПриход(); Движение.Период = Дата; Движение.Контрагент = Контрагент; Движение.Проект = ПроектАванс; Движение.СуммаВРублях = ГасимИзАванса; КонецЕсли; // Если сумма документа не была полностью погашена авансом, отражаем остаток долга в регистре ОстатокДолга = СуммаПоДокументу - ГасимИзАванса; Если ОстатокДолга <> 0 Тогда Движение = Движения.Взаиморасчеты.ДобавитьПриход(); Движение.Период = Дата; Движение.Контрагент = Контрагент; Движение.Проект = Проект; Движение.СуммаВРублях = ОстатокДолга; Движение.СуммаВВалюте = ?(КурсПроекта = 0, 0, ОстатокДолга / КурсПроекта); КонецЕсли; КонецПроцедуры
Editor is loading...