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