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