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