Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
4.6 kB
0
Indexable
Never
Процедура РассчитатьНачисления(Регистратор, НаборЗаписей) Экспорт
	
	// РАСЧЕТ ОКЛАДА
	// Формула расчета: [Начальное значение оклада] / [Количество рабочих часов] * [Количество отработанных часов]
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.КоличествоЧасовФактическийПериодДействия, 0) КАК ЧасовФакт,
	|	ОсновныеНачисленияДанныеГрафика.Параметр,
	|	ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.КоличествоЧасовПериодДействия, 0) КАК ЧасовПлан,
	|	ОсновныеНачисленияДанныеГрафика.НомерСтроки
	|ИЗ
	|	РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(
	|			Регистратор = &Регистратор
	|				И ВидРасчета = &ВидРасчетаОклад) КАК ОсновныеНачисленияДанныеГрафика";
	
	Запрос.УстановитьПараметр("Регистратор", Регистратор);
	Запрос.УстановитьПараметр("ВидРасчетаОклад", ПланыВидовРасчета.ОсновныеНачисления.Оклад);
	
	Выборка = Запрос.Выполнить().Выбрать();
	СтруктураПоиска = Новый Структура;
	СтруктураПоиска.Вставить("НомерСтроки",0);
	Для Каждого Запись Из НаборЗаписей Цикл
		СтруктураПоиска.НомерСтроки = Запись.НомерСтроки;
		Если Выборка.НайтиСледующий(СтруктураПоиска) Тогда
			Запись.Результат = ?(Выборка.ЧасовПлан = 0,0, Выборка.Параметр / Выборка.ЧасовПлан * Выборка.ЧасовФакт);
		КонецЕсли;		
		Выборка.Сбросить();
	КонецЦикла;
	
	НаборЗаписей.Записать(, Истина);
	
	// РАСЧЕТ ПРЕМИИ
	// Формула расчета: [Сумма базы (по окладу)] * [Процент премии]
	
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ОсновныеНачисленияБазаОсновныеНачисления.НомерСтроки,
	|	ОсновныеНачисленияБазаОсновныеНачисления.РезультатБаза КАК База,
	|	ОсновныеНачисленияБазаОсновныеНачисления.Параметр
	|ИЗ
	|	РегистрРасчета.ОсновныеНачисления.БазаОсновныеНачисления(
	|			&Измерения,
	|			&измерения,
	|			,
	|			Регистратор = &Регистратор
	|				И ВидРасчета = &ВидРасчетаПремия) КАК ОсновныеНачисленияБазаОсновныеНачисления";
	
	Измерения = Новый Массив(1);
	Измерения[0] = "Сотрудник";
	
	Запрос.УстановитьПараметр("Регистратор", Регистратор);
	Запрос.УстановитьПараметр("Измерения", Измерения);
	Запрос.УстановитьПараметр("ВидРасчетаПремия", ПланыВидовРасчета.ОсновныеНачисления.Премия);
	
	
	Выборка = Запрос.Выполнить().Выбрать();
	СтруктураПоиска = Новый Структура;
	СтруктураПоиска.Вставить("НомерСтроки",0);
	Для Каждого Запись Из НаборЗаписей Цикл
		СтруктураПоиска.НомерСтроки = Запись.НомерСтроки;
		Если Выборка.НайтиСледующий(СтруктураПоиска) Тогда
			Запись.Результат = Выборка.База * Выборка.Параметр / 100;
		КонецЕсли;		
		Выборка.Сбросить();
	КонецЦикла;
	
	НаборЗаписей.Записать(, Истина); 	
	
КонецПроцедуры