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