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