Untitled

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

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

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