Untitled

 avatar
unknown
plain_text
2 years ago
6.2 kB
2
Indexable
Процедура РассчитатьНачисления(Регистратор, Движения) Экспорт
	
	НаборЗаписей = Движения.ОсновныеНачисления;
	РассчитатьОсновныеНачисления(Регистратор, НаборЗаписей);		
	НаборЗаписей.Записать(, Истина);
	
	ДопНаборЗаписей = Движения.ДополнительныеНачисления;
	РассчитатьДопНачисления(Регистратор, ДопНаборЗаписей);	
	ДопНаборЗаписей.Записать();
	
КонецПроцедуры

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

Процедура РассчитатьДопНачисления(Регистратор, НаборЗаписей)
	
	// РАСЧЕТ КОМПЕНСАЦИИ НА ОБЕД
	// Формула расчета: [Сумма базы (по тарифу)] / [Количество рабочих дней] * [Количество отработанных дней]

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