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