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