Untitled

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

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

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

КонецПроцедуры