Подписка на событие проведения документа "Списание безналичных ДС":
Процедура ПроверкаЛимитаОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
Если Источник.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ОплатаПоставщику и
Не ЗначениеЗаполнено(Источник.ЗаявкаНаРасходованиеДенежныхСредств) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаявкаНаРасходованиеДенежныхСредств.Ссылка
|ПОМЕСТИТЬ Заявки
|ИЗ
| Документ.ЗаявкаНаРасходованиеДенежныхСредств КАК ЗаявкаНаРасходованиеДенежныхСредств
|ГДЕ
| ЗаявкаНаРасходованиеДенежныхСредств.Проведен
| И ЗаявкаНаРасходованиеДенежныхСредств.Организация = &Организация
| И ЗаявкаНаРасходованиеДенежныхСредств.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаявокНаРасходованиеДенежныхСредств.Утверждена)
| И ЗаявкаНаРасходованиеДенежныхСредств.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПрочиеРасходы)
| И ЗаявкаНаРасходованиеДенежныхСредств.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ДляЛимитов)
| И ЗаявкаНаРасходованиеДенежныхСредств.ДатаПлатежа МЕЖДУ &НачалоПериода И &КонецПериода
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДенежныеСредстваКВыплатеОстатки.ЗаявкаНаРасходованиеДенежныхСредств,
| ДенежныеСредстваКВыплатеОстатки.СтатьяДвиженияДенежныхСредств,
| ДенежныеСредстваКВыплатеОстатки.АналитикаУчетаПоПартнерам,
| ДенежныеСредстваКВыплатеОстатки.ПодотчетноеЛицо,
| ДенежныеСредстваКВыплатеОстатки.СтатьяРасходов,
| ДенежныеСредстваКВыплатеОстатки.АналитикаРасходов,
| -ДенежныеСредстваКВыплатеОстатки.СуммаОстаток КАК СуммаОстаток
|ИЗ
| РегистрНакопления.ДенежныеСредстваКВыплате.Остатки(
| &ДатаОстатка,
| АналитикаРасходов = &Подразделение
| И ЗаявкаНаРасходованиеДенежныхСредств В
| (ВЫБРАТЬ
| Заявки.Ссылка
| ИЗ
| Заявки КАК Заявки)) КАК ДенежныеСредстваКВыплатеОстатки
|ИТОГИ
| СУММА(СуммаОстаток)
|ПО
| ОБЩИЕ";
Запрос.УстановитьПараметр("ДатаОстатка", Источник.МоментВремени());
Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(Источник.Дата));
Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(Источник.Дата));
Запрос.УстановитьПараметр("Организация", Источник.Организация);
Запрос.УстановитьПараметр("Подразделение", Источник.Подразделение);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Нет остатка по лимиту ДС! Оформите заявку на расход ДС.";
Сообщение.Сообщить();
Отказ = Истина;
Возврат;
КонецЕсли;
ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВыборкаОбщийИтог.Следующий(); // Общий итог
Если ВыборкаОбщийИтог.СуммаОстаток < Источник.СуммаДокумента Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Сумма документа = " + Формат(Источник.СуммаДокумента, "ЧДЦ=2")
+ " превышает остаток по лимиту = " + Формат(ВыборкаОбщийИтог.СуммаОстаток, "ЧДЦ=2");
Сообщение.Сообщить();
Отказ = Истина;
Возврат;
КонецЕсли;
//Уменьшим доступный остаток по лимиту
НаборЗаписей = Источник.Движения.ДенежныеСредстваКВыплате;
НаборЗаписей.Записывать = Истина;
НаборЗаписей.БлокироватьДляИзменения = Истина;
ОстатокПоДокументу = Источник.СуммаДокумента;
Выборка = ВыборкаОбщийИтог.Выбрать();
Пока Выборка.Следующий() Цикл
Движение = НаборЗаписей.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Источник.Дата;
ЗаполнитьЗначенияСвойств(Движение, Выборка);
Если Выборка.СуммаОстаток < ОстатокПоДокументу Тогда
Движение.Сумма = Выборка.СуммаОстаток;
ОстатокПоДокументу = ОстатокПоДокументу - Выборка.СуммаОстаток;
Иначе
Движение.Сумма = ОстатокПоДокументу;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Сам отчет:
Вложения:
7708093.erf