Untitled

mail@pastecode.io avatarunknown
plain_text
2 months ago
10 kB
1
Indexable
Never
Процедура РассчитатьНачисления(Регистратор, Движения) Экспорт
	
	НаборЗаписей = Движения.ОсновныеНачисления;
	РассчитатьОсновныеНачисления(Регистратор, НаборЗаписей);	
	НаборЗаписей.Записать(, Истина);
	
	ДопНаборЗаписей = Движения.ДополнительныеНачисления;
	РассчитатьДопНачисления(Регистратор, ДопНаборЗаписей);	
	ДопНаборЗаписей.Записать();
	
КонецПроцедуры

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

Процедура РассчитатьДопНачисления(Регистратор, НаборЗаписей)
	
	// РАСЧЕТ НАДБАВКИ
	// Формула расчета: [Сумма продаж по бригаде] * [Процент надбавки]
	
	Запрос = Новый Запрос;	
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ДополнительныеНачисления.НомерСтроки КАК НомерСтроки,
	|	ДополнительныеНачисления.Размер КАК Размер,
	|	ДополнительныеНачисления.Бригада КАК Бригада
	|ПОМЕСТИТЬ ВТ_ДополнительныеНачисления_Надбавка
	|ИЗ
	|	РегистрРасчета.ДополнительныеНачисления КАК ДополнительныеНачисления
	|ГДЕ
	|	ДополнительныеНачисления.Регистратор = &Регистратор
	|	И ДополнительныеНачисления.ВидРасчета = &ВидРасчетаНадбавка
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Бригада
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВТ_ДополнительныеНачисления_Надбавка.НомерСтроки КАК НомерСтроки,
	|	ВТ_ДополнительныеНачисления_Надбавка.Размер КАК Процент,
	|	ЕСТЬNULL(УправленческийОборотыДтКт.СуммаОборот, 0) КАК СуммаПродаж
	|ИЗ
	|	ВТ_ДополнительныеНачисления_Надбавка КАК ВТ_ДополнительныеНачисления_Надбавка
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.ОборотыДтКт(
	|				&НачалоБазовогоПериода,
	|				&КонецБазовогоПериода,
	|				,
	|				СчетДт = &СчетПокупатели,
	|				,
	|				СчетКт = &СчетПрибыли,
	|				&СубконтоБригады,
	|				СубконтоКт1 В
	|					(ВЫБРАТЬ
	|						ВТ_ДополнительныеНачисления_Надбавка.Бригада КАК Бригада
	|					ИЗ
	|						ВТ_ДополнительныеНачисления_Надбавка КАК ВТ_ДополнительныеНачисления_Надбавка)) КАК УправленческийОборотыДтКт
	|		ПО ВТ_ДополнительныеНачисления_Надбавка.Бригада = УправленческийОборотыДтКт.СубконтоКт1";
	
	ПредыдущийКвартал = ДобавитьМесяц(Регистратор.Дата, -3); // для расчета параметров периода регистра бухгалтерии

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

КонецПроцедуры