Untitled

mail@pastecode.io avatarunknown
plain_text
2 months ago
4.3 kB
2
Indexable
Never
// Через подписку на событие обработки проведения вызывается сразу для 4ых документов (Приходная и Расходная накладная, Приход и Расход денег)
Процедура ОбработкаПроведенияДокументовКонтрольБюджета(Источник, Отказ, РежимПроведения) Экспорт
	
	// ДВИЖЕНИЯ ПО РЕГИСТРУ БЮДЖЕТ
	
	ДвиженияБюджет = Источник.Движения.Бюджет;
	
	ДвиженияБюджет.Записывать = Истина;
	ДвиженияБюджет.БлокироватьДляИзменения = Истина;
	
	// Отражение движения по регистру Бюджет по подразделению, Статье и сумме документа
	Движение = ДвиженияБюджет.Добавить();
	Движение.Период = Источник.Дата;
	Движение.Подразделение = Источник.Подразделение;
	Движение.СтатьяЗатрат = Источник.СтатьяЗатрат;
	Движение.Факт = Источник.СуммаПоДокументу;
	
	// Запись движений в регистр
	Источник.Движения.Записать();	
	
	// Запрос контроля превышения планируемой суммы бюджета 
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	БюджетОбороты.ФактОборот - БюджетОбороты.ПланОборот КАК ДопустимоеПревышение,
	|	БюджетОбороты.ФактОборот - БюджетОбороты.ПланОборот - БюджетОбороты.ДопустимоеПревышениеОборот КАК ПревышениеСверхДопустимого
	|ИЗ
	|	РегистрНакопления.Бюджет.Обороты(
	|			&НачалоПериода,
	|			&КонецПериода,
	|			,
	|			Подразделение = &Подразделение
	|				И СтатьяЗатрат = &СтатьяЗатрат) КАК БюджетОбороты
	|ГДЕ
	|	БюджетОбороты.ФактОборот > БюджетОбороты.ПланОборот";
	
	ДатаДокумента = Источник.Дата;
	
	Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ДатаДокумента));
	Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ДатаДокумента));
	Запрос.УстановитьПараметр("Подразделение", Источник.Подразделение);
	Запрос.УстановитьПараметр("СтатьяЗатрат", Источник.СтатьяЗатрат);
	
	// Обход результатов запроса
	РезультатЗапроса = Запрос.Выполнить();			
	Если Не РезультатЗапроса.Пустой() Тогда
		// Бюджет превышен, выводим соответствующее сообщение о превышении
		Данные = РезультатЗапроса.Выбрать();	
		Данные.Следующий();
		
		Если Данные.ПревышениеСверхДопустимого > 0 Тогда
			ТекстСообщения = СтрШаблон("Превышение запланированного бюджета сверх допустимого на %1",
				Данные.ПревышениеСверхДопустимого);
		Иначе
			ТекстСообщения = СтрШаблон("Превышение запланированного бюджета в пределах допустимого на %1",
				Данные.ДопустимоеПревышение);	
		КонецЕсли;
		
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = ТекстСообщения;
		Сообщение.Сообщить();
		
	КонецЕсли;
	
КонецПроцедуры