Untitled

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

	КонецЦикла;	

	РезультатДН = РезультатыЗапросов[3];
	Если не РезультатДН.Пустой() Тогда
		Выборка = РезультатДН.Выбрать();
		Пока Выборка.Следующий() Цикл
			Движение = Движения.ДополнительныеНачисления.Добавить();
			ЗаполнитьЗначенияСвойств(Движение, Выборка);
		КонецЦикла;	
	КонецЕсли;	

	Движения.Записать();
	
	Расчет.РассчитатьНачисления(Ссылка, Движения);
	
КонецПроцедуры