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