Штатное расписание / Модуль объекта

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

#Область ОбработчикиСобытий

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	Если ГруппаПозицийПодразделения Тогда
		ВызватьИсключение НСтр("ru='Группы позиций штатного расписания создаются автоматически'");
	КонецЕсли;
	
	ОстаткиОтпусков.ЗаполнитьОбщимиЕжегоднымиОтпусками(ЭтотОбъект);
	
КонецПроцедуры

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

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

Процедура ПриЗаписи(Отказ)
	
	Если ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи(ЭтотОбъект) Тогда
		Возврат;
	КонецЕсли;
	
	Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ОрганизационнаяСтруктура") Тогда
		МодульОрганизационнаяСтруктура = ОбщегоНазначения.ОбщийМодуль("ОрганизационнаяСтруктура");
		МодульОрганизационнаяСтруктура.ШтатноеРасписаниеПриЗаписи(ЭтотОбъект, Отказ);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

Процедура ПроверитьПодразделениеИДолжность(Ссылка, ДатаУтверждения, Подразделение, Должность, Отказ)
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Подразделение", Подразделение);
	Запрос.УстановитьПараметр("Должность", Должность);
	Запрос.УстановитьПараметр("Дата", ДатаУтверждения);
	
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Должности.Наименование КАК ДолжностьНаименование,
		|	ПодразделенияОрганизаций.Наименование КАК ПодразделениеНаименование,
		|	ВЫБОР
		|		КОГДА НЕ ПодразделенияОрганизаций.Расформировано ЕСТЬ NULL 
		|				И ПодразделенияОрганизаций.Расформировано
		|				И (ПодразделенияОрганизаций.ДатаРасформирования <= &Дата
		|					ИЛИ &Дата = ДАТАВРЕМЯ(1, 1, 1))
		|			ТОГДА ИСТИНА
		|		ИНАЧЕ ЛОЖЬ
		|	КОНЕЦ КАК ОшибкаПодразделение,
		|	ВЫБОР
		|		КОГДА НЕ Должности.ИсключенаИзШтатногоРасписания ЕСТЬ NULL 
		|				И Должности.ИсключенаИзШтатногоРасписания
		|				И (Должности.ДатаИсключения <= &Дата
		|					ИЛИ &Дата = ДАТАВРЕМЯ(1, 1, 1))
		|			ТОГДА ИСТИНА
		|		ИНАЧЕ ЛОЖЬ
		|	КОНЕЦ КАК ОшибкаДолжность
		|ИЗ
		|	Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Должности КАК Должности
		|		ПО (Должности.Ссылка = &Должность)
		|			И (ПодразделенияОрганизаций.Ссылка = &Подразделение)";
	
	Выборка = Запрос.Выполнить().Выбрать();
	
	Если Выборка.Следующий() Тогда
		
		Если Выборка.ОшибкаПодразделение Тогда
			ТекстСообщения = НСтр(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ru = 'Подразделение %1 уже расформировано.'", Выборка.ПодразделениеНаименование));
			ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Ссылка, "Объект.Подразделение", , Отказ);
		КонецЕсли;
		
		Если Выборка.ОшибкаДолжность Тогда
			ТекстСообщения = НСтр(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ru = 'Должность %1 уже исключена из штатного расписания.'", Выборка.ДолжностьНаименование));
			ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Ссылка, "Объект.Должность", , Отказ);
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

Процедура ПроверитьЗаполнениеНачислений(Ссылка, Начисления, Показатели, Отказ)
	
	ВыборкаПоНачислениям = СформироватьЗапросДляПроверкиЗаполненияНачислений(Начисления, Показатели).Выбрать();
	
	Пока ВыборкаПоНачислениям.СледующийПоЗначениюПоля("НомерСтроки") Цикл
		
		Если ВыборкаПоНачислениям.ДубльНачисление Тогда
			
			ТекстСообщения = НСтр("ru = 'Данное начисление уже было введено ранее'");
			ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Ссылка, "Объект.Начисления[" + Строка(ВыборкаПоНачислениям.НомерСтроки - 1) + "].Начисление", , Отказ);
			
		ИначеЕсли ВыборкаПоНачислениям.ДубльОсновноеНачисление Тогда 
			
			ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Введено несколько взаимоисключающих начислений (%1)'"), ВыборкаПоНачислениям.НачислениеНаименование);
			ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Ссылка, "Объект.Начисления[" + Строка(ВыборкаПоНачислениям.НомерСтроки - 1) + "].Начисление", , Отказ);
			
		КонецЕсли;
		
		Если ПолучитьФункциональнуюОпцию("ИспользоватьВилкуСтавокВШтатномРасписании") Тогда
			
			Если ВыборкаПоНачислениям.ОшибкаМинЗначенияПоказателя Тогда
				
				ТекстСообщения = НСтр("ru = 'Ранее показателю %1 уже было назначено другое минимальное значение'");
				ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ВыборкаПоНачислениям.ОшибкаМинЗначенияПоказателяПоказатель);
				ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Ссылка, "Объект.Начисления[" + Строка(ВыборкаПоНачислениям.НомерСтроки - 1) + "].Начисление", , Отказ);
				
			КонецЕсли;
			
			Если ВыборкаПоНачислениям.ОшибкаМаксЗначенияПоказателя Тогда
				
				ТекстСообщения = НСтр("ru = 'Ранее показателю %1 уже было назначено другое максимальное значение'");
				ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ВыборкаПоНачислениям.ОшибкаМаксЗначенияПоказателяПоказатель);
				ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Ссылка, "Объект.Начисления[" + Строка(ВыборкаПоНачислениям.НомерСтроки - 1) + "].Начисление", , Отказ);
				
			КонецЕсли;
			
		Иначе
			
			Если ВыборкаПоНачислениям.ОшибкаЗначенияПоказателя Тогда 
				
				ТекстСообщения = НСтр("ru = 'Ранее показателю %1 уже было назначено другое значение'");
				ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ВыборкаПоНачислениям.ОшибкаЗначенияПоказателяПоказатель);
				ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Ссылка, "Объект.Начисления[" + Строка(ВыборкаПоНачислениям.НомерСтроки - 1) + "].Начисление", , Отказ);
				
			КонецЕсли;
			
		КонецЕсли;
		
		СчПоказателей = 1;
		Пока ВыборкаПоНачислениям.Следующий() Цикл
			
			Если ВыборкаПоНачислениям.ОшибкаПоказателя Тогда
				ТекстСообщения = НСтр(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ru = 'Минимальное значение показателя ""%1"" не может быть больше максимального'", ВыборкаПоНачислениям.ПоказательНаименование));
				ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Ссылка, "Объект.Начисления[" + Строка(ВыборкаПоНачислениям.НомерСтроки - 1) + "].МинимальноеЗначение" + СчПоказателей,, Отказ);	
			КонецЕсли;
			
			СчПоказателей = СчПоказателей + 1;
			
		КонецЦикла;
		
	КонецЦикла;
	
КонецПроцедуры

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

КонецФункции

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

#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли

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