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