Untitled

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

	НаборЗаписей.Записать(, Истина);
	
КонецПроцедуры