Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
5.6 kB
2
Indexable
Never
Процедура РассчитатьНачисления(Регистратор, НаборЗаписей) Экспорт
	
	// РАСЧЕТ ОКЛАДА
	// Формула расчета: [Количество отработанных часов] * [Тарифная ставка]

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