Индексация штатного расписания / Модуль менеджера

файл

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс

// СтандартныеПодсистемы.ВерсионированиеОбъектов

// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
//  Настройки - Структура - настройки подсистемы.
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт

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

// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

#Область ДляВызоваИзДругихПодсистем

// СтандартныеПодсистемы.УправлениеДоступом

// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа.
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
	// Ограничения доступа в ролях:
	// Чтение / Изменение:
	// #ПоЗначениямРасширенный( "Документ.ИндексацияШтатногоРасписания", "","","",
	// "НЕ ЛОЖЬ В (ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ Документ.ИндексацияШтатногоРасписания.Позиции КАК Т1
	// ГДЕ Т1.Ссылка = Т.Ссылка 
	// И НЕ Т1.ПозицияШтатногоРасписания.Подразделение В (ВЫБРАТЬ РАЗЛИЧНЫЕ Т2.Подразделение ИЗ
	// РегистрСведений.ПодчиненностьПодразделенийОрганизаций КАК Т2 ГДЕ (","ПодразделенияОрганизаций",
	// "Т2.ВышестоящееПодразделение", "))) И ", "Организации","Т.Организация", "","","", "", "","", "", "","","", "","","",
	// "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","")
	Ограничение.Текст =
	"ПрисоединитьДополнительныеТаблицы
	|ЭтотСписок КАК Т
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ Документ.ИндексацияШтатногоРасписания.Позиции КАК Т1
	|	ПО Т1.Ссылка = Т.Ссылка
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПодчиненностьПодразделенийОрганизаций КАК Т2
	|	ПО Т2.Подразделение = Т1.ПозицияШтатногоРасписания.Подразделение
	|;
	|РазрешитьЧтениеИзменение
	|ГДЕ
	|	ЗначениеРазрешено(Т.Организация)
	|	И (Т1.ПозицияШтатногоРасписания.Подразделение ЕСТЬ NULL
	|		ИЛИ ДляВсехСтрок(
	|			ЗначениеРазрешено(Т2.Подразделение)
	|			ИЛИ ДляОднойИзСтрок(ЗначениеРазрешено(Т2.ВышестоящееПодразделение))))";
КонецПроцедуры

// Конец СтандартныеПодсистемы.УправлениеДоступом

#КонецОбласти

#КонецОбласти

#Область СлужебныйПрограммныйИнтерфейс

#Область ОбработчикиПравилРегистрации

// См. ЗарплатаКадрыРасширенныйСинхронизацияДанных.ШаблонОбработчика
Процедура ПриЗаполненииНастроекОбработчиковПравилРегистрации(Настройки) Экспорт
	ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляОтбораПоОрганизации(Настройки);
	ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляОбъектаСПрисоединеннымиФайлами(Настройки);
КонецПроцедуры

#КонецОбласти

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область Печать

// Заполняет список команд печати.
// 
// Параметры:
//   КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати.
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
КонецПроцедуры

#КонецОбласти

#КонецОбласти


#Область ЗаполнениеДокумента

Процедура ЗаполнитьФОТПозицийНачислений(Объект, МенеджерВременныхТаблиц = Неопределено, СписокПозиций = Неопределено) Экспорт
	
	ФОТПозицийНачислений = ФОТПозицийНачислений(Объект, МенеджерВременныхТаблиц, СписокПозиций);
	
	ОтборПозиции = Новый Структура("ПозицияШтатногоРасписания");
	ОтборНачисления = Новый Структура("ИдентификаторСтрокиПозиции,Начисление");
	
	Для каждого СтрокаФОТПозиции Из ФОТПозицийНачислений.ФОТПозиций Цикл
		ОтборПозиции.Вставить("ПозицияШтатногоРасписания", СтрокаФОТПозиции.ПозицияШтатногоРасписания);  
		СтрокиПозиции = Объект.Позиции.НайтиСтроки(ОтборПозиции);
		Для каждого СтрокаПозиции Из СтрокиПозиции Цикл
			ЗаполнитьЗначенияСвойств(СтрокаПозиции, 
			СтрокаФОТПозиции, 
			"ОкладТариф,ОкладТарифМин,ОкладТарифМакс,ФОТ,ФОТМин,ФОТМакс,РайонныйКоэффициентРазмер,РайонныйКоэффициентРазмерМин,РайонныйКоэффициентРазмерМакс,СевернаяНадбавкаРазмер,СевернаяНадбавкаРазмерМин,СевернаяНадбавкаРазмерМакс,НадбавкаЗаВредностьРазмер,НадбавкаЗаВредностьРазмерМин,НадбавкаЗаВредностьРазмерМакс");
		КонецЦикла;
	КонецЦикла;
	
	Для каждого СтрокаФОТНачисления Из ФОТПозицийНачислений.ФОТНачислений  Цикл
		ОтборНачисления.Вставить("ИдентификаторСтрокиПозиции", СтрокаФОТНачисления.ИдентификаторСтрокиПозиции);  
		ОтборНачисления.Вставить("Начисление", СтрокаФОТНачисления.Начисление);  
		СтрокиНачисления = Объект.Начисления.НайтиСтроки(ОтборНачисления);
		Для каждого СтрокаНачисления Из СтрокиНачисления Цикл
			ЗаполнитьЗначенияСвойств(СтрокаНачисления, 
			СтрокаФОТНачисления, 
			"Размер,РазмерМин,РазмерМакс");
		КонецЦикла;
	КонецЦикла;	
КонецПроцедуры

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

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

Функция ФОТПозицийНачислений(Объект, МенеджерВременныхТаблиц = Неопределено, СписокПозиций = Неопределено)
	// Дополним данные документа данными учета.
	ДополненныеДанныеДокумента = ДополненныеДанныеДокумента(Объект, МенеджерВременныхТаблиц, СписокПозиций);
	
	ТЗПозиции = ДополненныеДанныеДокумента["РезультатЗапросаПозиций"].Выгрузить();
	ТЗНачисления = ДополненныеДанныеДокумента["РезультатЗапросаНачислений"].Выгрузить();
	ТЗПоказатели = ДополненныеДанныеДокумента["РезультатЗапросаПоказателей"].Выгрузить();
	
	ТЗПозиции.Колонки["ПозицияШтатногоРасписания"].Имя 		= "Позиция";
	ТЗНачисления.Колонки["ПозицияШтатногоРасписания"].Имя 	= "Позиция";
	ТЗПоказатели.Колонки["ПозицияШтатногоРасписания"].Имя 	= "Позиция";
	
	РассчитатьФОТ(Объект, ТЗПозиции, ТЗНачисления, ТЗПоказатели);
	
	ТЗПозиции.Колонки["Позиция"].Имя 		= "ПозицияШтатногоРасписания";
	ТЗНачисления.Колонки["Позиция"].Имя 	= "ПозицияШтатногоРасписания";
	ТЗПоказатели.Колонки["Позиция"].Имя 	= "ПозицияШтатногоРасписания";
	
	ФОТПозицийНачислений = Новый Структура;
	ФОТПозицийНачислений.Вставить("ФОТПозиций", ТЗПозиции);
	ФОТПозицийНачислений.Вставить("ФОТНачислений", ТЗНачисления);
	
	Возврат ФОТПозицийНачислений
	
КонецФункции

Процедура РассчитатьФОТ(Объект, КоллекцияПозиций, КоллекцияНачислений, КоллекцияПоказателей)
	
	ОписаниеПозиций = Новый Структура;
	ОписаниеПозиций.Вставить("Организация", Объект.Организация);
	ОписаниеПозиций.Вставить("ДатаВступленияВСилу", Объект.МесяцИндексации);
	ОписаниеПозиций.Вставить("Позиции", КоллекцияПозиций);
	ОписаниеПозиций.Вставить("Начисления", КоллекцияНачислений);
	ОписаниеПозиций.Вставить("Показатели", КоллекцияПоказателей);
	
	УправлениеШтатнымРасписанием.РассчитатьФОТНесколькихПозиций(ОписаниеПозиций);

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

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

		ФильтроватьПоОстальнымДолжностям = ИмяКомандыЗаполнения="ЗаполнитьОстальныеПозиции";
		
		Если ФильтроватьПоОстальнымДолжностям Тогда
			Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
				МодульГосударственнаяСлужба = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужба");
				МодульГосударственнаяСлужба.ДополнитьФильтрПоПоОстальнымДолжностямЗаполненияПозиций(ПараметрыПостроения.Отборы);
			КонецЕсли;
		КонецЕсли;
		
		Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ОбразовательныеУчреждения") Тогда
			МодульОбразовательныеУчреждения = ОбщегоНазначения.ОбщийМодуль("ОбразовательныеУчреждения");
			Если ФильтроватьПоОстальнымДолжностям Тогда
				МодульОбразовательныеУчреждения.ДополнитьФильтрПоПоОстальнымДолжностямЗаполненияПозиций(ПараметрыПостроения.Отборы);
			Иначе 
				МодульОбразовательныеУчреждения.ДополнитьФильтрПоВидуДолжностейЗаполненияПозиций(ИмяКомандыЗаполнения, ПараметрыПостроения.Отборы);
			КонецЕсли;
		КонецЕсли;
		
		Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.Медицина") Тогда
			МодульМедицина = ОбщегоНазначения.ОбщийМодуль("Медицина");
			Если ФильтроватьПоОстальнымДолжностям Тогда
				МодульМедицина.ДополнитьФильтрПоПоОстальнымДолжностямЗаполненияПозиций(ПараметрыПостроения.Отборы);
			Иначе 
				МодульМедицина.ДополнитьФильтрПоВидуДолжностейЗаполненияПозиций(ИмяКомандыЗаполнения, ПараметрыПостроения.Отборы);
			КонецЕсли;
		КонецЕсли;
				
	КонецЕсли;
		
	ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
		ПараметрыПостроения.Отборы, "КоличествоСтавок", "<>", 0);
	
	УправлениеШтатнымРасписанием.СоздатьВТШтатноеРасписание(МенеджерВременныхТаблиц, Истина, ПараметрыПостроения, , "ВТПозицииШтатногоРасписания");
	
	ПараметрыПостроения = УправлениеШтатнымРасписанием.ПараметрыПостроенияВТШтатноеРасписаниеПоТаблицеФильтра("ВТПозицииШтатногоРасписания");
	ПараметрыПостроения.ДополнитьОписаниемНачислений = Истина;
	ПараметрыПостроения.ПолноеОписаниеНачислений = ПолноеОписание;
	
	УправлениеШтатнымРасписанием.СоздатьВТНачисленияШтатногоРасписания(МенеджерВременныхТаблиц, Истина, ПараметрыПостроения, "ВТНачисленияПозицийШтатногоРасписания");
	
КонецПроцедуры

#КонецОбласти 

#КонецЕсли

Связанные материалы