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