Утверждение тарифной группы / Форма документа / Модуль формы

файл
#Область ОписаниеПеременных

&НаКлиенте
Перем ПараметрыОбработчикаОжидания;

&НаКлиенте
Перем ФормаДлительнойОперации;

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


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

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

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

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

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

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

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	
	ПараметрыОповещения = Новый Структура;
	ПараметрыОповещения.Вставить("ТарифнаяСетка", Объект.ТарифнаяСетка);
	ПараметрыОповещения.Вставить("ВидТарифнойСетки", Объект.ВидТарифнойСетки);
	Оповестить("Запись_УтверждениеТарифнойСетки", ПараметрыОповещения, Объект.Ссылка);
	
	ОповеститьОбИзменении(Объект.Ссылка);
	Если УтверждениеНовойТарифнойСетки Тогда
		ОповеститьОбИзменении(ТарифнаяСетка.Ссылка);
	КонецЕсли; 
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	// СтандартныеПодсистемы.Свойства
	Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
		ОбновитьЭлементыДополнительныхРеквизитов();
		УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
	КонецЕсли;
	// Конец СтандартныеПодсистемы.Свойства
	
КонецПроцедуры
	
#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ТарифнаяСеткаПриИзменении(Элемент)	
	
	ТарифнаяСеткаПриИзмененииНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура БазовыйТарифГруппыПриИзменении(Элемент)
	
	БазовыйТарифГруппыПриИзмененииНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ВидТарифнойСеткиПриИзменении(Элемент)
	
	ВидТарифнойСетки = Объект.ВидТарифнойСетки;
	УстановитьЗаголовки();
	
КонецПроцедуры

&НаКлиенте
Процедура ДатаВступленияВСилуПриИзменении(Элемент)
	
	Если Объект.ДатаВступленияВСилу < ДатаПоследнегоИзменения Тогда
		
		ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru='Новая дата %1 меньше даты предыдущего изменения %2, документ будет перезаполнен.
				|Изменить дату вступления в силу изменений?'"),
			Формат(Объект.ДатаВступленияВСилу, "ДЛФ=DD"),
			Формат(ДатаПоследнегоИзменения, "ДЛФ=DD")
		);
			
		Оповещение = Новый ОписаниеОповещения("ДатаВступленияВСилуПриИзмененииЗавершение", ЭтотОбъект);
			
		ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена);
		
	Иначе
		ДатаВступленияВСилуПриИзмененииЗавершение(КодВозвратаДиалога.Да);
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура Подключаемый_ОткрытьДокументыВведенныеПозже(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ЗарплатаКадрыРасширенныйКлиент.ОткрытьВведенныеНаДатуДокументы(ЭтотОбъект.ДокументыВведенныеПозже);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОткрытьРанееВведенныеДокументы(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ЗарплатаКадрыРасширенныйКлиент.ОткрытьВведенныеНаДатуДокументы(ЭтотОбъект.РанееВведенныеДокументы);
	
КонецПроцедуры

&НаКлиенте
Процедура ТарифнаяСеткаПрименениеТарифныхКоэффициентовПриИзменении(Элемент)
	
	УстановитьДоступностьБазовогоТарифа(ЭтотОбъект);
	УстановитьИспользованиеТарифныхКоэффициентов();
	УстановитьВидимостьЭлементов();
	
КонецПроцедуры

&НаКлиенте
Процедура СпособОкругленияПриИзменении(Элемент)
	
	СпособОкругленияПриИзмененииНаСервере();
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыТарифы

&НаКлиенте
Процедура ТарифыПриАктивизацииСтроки(Элемент)
	
	ТекущиеДанные = Элементы.Тарифы.ТекущиеДанные;
	Если ТекущиеДанные <> Неопределено Тогда
			
		Если ТекущиеДанные.Отменить Тогда
			ТекущаяСтраница = Элементы.СтраницаДобавитьПродолжить;
		Иначе
			Если Не ТекущиеДанные.НоваяСтрока Тогда
				ТекущаяСтраница = Элементы.СтраницаДобавитьОтменить;
			Иначе
				ТекущаяСтраница = Элементы.СтраницаДобавитьУдалить;
			КонецЕсли;
		КонецЕсли;
		
		ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
			Элементы,
			"СтраницыКоманднойПанелиТарифы",
			"ТекущаяСтраница",
			ТекущаяСтраница);
			
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ТарифыПередУдалением(Элемент, Отказ)
	
	ТекущиеДанные = Элементы.Тарифы.ТекущиеДанные;
	Если ТекущиеДанные <> Неопределено Тогда
		
		Если Не ТекущиеДанные.НоваяСтрока Тогда
			ТекущиеДанные.Отменить = Не ТекущиеДанные.Отменить;
			Отказ = Истина;
		КонецЕсли; 
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ТарифыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
	
	Если НоваяСтрока Тогда
		
		ТекущиеДанные = Элемент.ТекущиеДанные;
		ТекущиеДанные.НоваяСтрока = Истина;
		ТекущиеДанные.РеквизитДопУпорядочивания = 99999;
		
		Если Копирование Тогда
			ТекущиеДанные.РазрядКатегория = ПредопределенноеЗначение("Справочник.РазрядыКатегорииДолжностей.ПустаяСсылка");
		КонецЕсли; 
		
		Если ПрименениеТарифныхКоэффициентов Тогда
			
			КоличествоТарифов = Объект.Тарифы.Количество();
			
			Если КоличествоТарифов = 1 Тогда
				ТекущиеДанные.РазрядныйКоэффициент = 1;
			ИначеЕсли КоличествоТарифов = 2 Тогда
				ТекущиеДанные.РазрядныйКоэффициент = Объект.Тарифы[0].РазрядныйКоэффициент + (Объект.Тарифы[0].РазрядныйКоэффициент - 1);
			Иначе
				ТекущиеДанные.РазрядныйКоэффициент = Объект.Тарифы[КоличествоТарифов - 2].РазрядныйКоэффициент * 2
					- Объект.Тарифы[КоличествоТарифов - 3].РазрядныйКоэффициент;
			КонецЕсли; 
				
			РассчитатьТарифВСтроке(ТекущиеДанные, Объект.БазовыйТарифГруппы, Объект.СпособОкругления);
			
		КонецЕсли;
		
	КонецЕсли; 
	
КонецПроцедуры

&НаКлиенте
Процедура ТарифыРазрядныйКоэффициентПриИзменении(Элемент)	
	
	ТекущиеДанные = Элементы.Тарифы.ТекущиеДанные;
	Если ТекущиеДанные <> Неопределено Тогда
		РассчитатьТарифВСтроке(ТекущиеДанные, Объект.БазовыйТарифГруппы, Объект.СпособОкругления);
	КонецЕсли; 
	
КонецПроцедуры

&НаКлиенте
Процедура ТарифыРазрядКатегорияПриИзменении(Элемент)
	
	ТарифыРазрядКатегорияПриИзмененииНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ТарифыТарифПриИзменении(Элемент)
	
	Если ПрименениеТарифныхКоэффициентов Тогда
		
		ТекущиеДанные = Элементы.Тарифы.ТекущиеДанные;
		Если ТекущиеДанные <> Неопределено 
			И  Объект.БазовыйТарифГруппы <> 0 Тогда
			
			ТекущиеДанные.РазрядныйКоэффициент = ТекущиеДанные.Тариф / Объект.БазовыйТарифГруппы;
			
		КонецЕсли; 
		
	КонецЕсли; 
	
КонецПроцедуры

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

#Область ОбработчикиКомандФормы

// СтандартныеПодсистемы.Свойства
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
	УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.Свойства

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

&НаКлиенте
Процедура УпорядочитьРазряды()
	
	Объект.Тарифы.Сортировать("РеквизитДопУпорядочивания");
	
КонецПроцедуры

// ИнтеграцияС1СДокументооборотом
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
	
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
		МодульИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль(
			"ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент");
		МодульИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(
			Команда,
			ЭтотОбъект,
			Объект);
	КонецЕсли;
	
КонецПроцедуры
// Конец ИнтеграцияС1СДокументооборотом

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

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

// СтандартныеПодсистемы.Свойства 
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
	УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
	УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
	УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.Свойства

#Область ОбработчикиСобытийПроцессыОбработкиДокументов

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

&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокументаОповещение(Контекст, ДополнительныеПараметры) Экспорт
	ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст);
	ВыполнитьОбработкуОповещения(ДополнительныеПараметры, Контекст);
КонецПроцедуры

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

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

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

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

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

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

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

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

	УстановитьВидимостьЭлементов();
	УстановитьЗаголовки();
	
КонецПроцедуры

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьБазовогоТарифа(Форма)
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
		Форма.Элементы,
		"БазовыйТарифСпособОкругленияГруппа",
		"Доступность",
		Форма.ТарифнаяСетка.ПрименениеТарифныхКоэффициентов);
	
КонецПроцедуры

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

&НаСервере
Процедура ОбновитьТарифыПоДаннымФормы(ТекущийОбъект,  Отказ)
	
	Тарифы = Объект.Тарифы.Выгрузить();
	РазрядыКатегорииДолжностей.ОбновитьТарифыПоДаннымФормы(Тарифы, ВидТарифнойСетки, ТекущийОбъект.ТарифнаяСетка, Отказ, "Объект.Тарифы");
	
	ТекущийОбъект.Тарифы.Загрузить(Тарифы);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура РассчитатьТарифВСтроке(ТекущиеДанные, БазовыйТарифГруппы, СпособОкругления)
	
	Если БазовыйТарифГруппы <> 0 Тогда
		
		#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
			ОписаниеСпособаОкругления = ЗарплатаКадрыРасширенныйПовтИсп.ОписаниеСпособаОкругления(СпособОкругления);
		#Иначе
			ОписаниеСпособаОкругления = ЗарплатаКадрыРасширенныйКлиентПовтИсп.ОписаниеСпособаОкругления(СпособОкругления);
		#КонецЕсли
		
		ТекущиеДанные.Тариф = ТекущиеДанные.РазрядныйКоэффициент * БазовыйТарифГруппы;
		ТекущиеДанные.Тариф = ЗарплатаКадрыКлиентСервер.Округлить(ТекущиеДанные.Тариф, ОписаниеСпособаОкругления.Точность, ОписаниеСпособаОкругления.ПравилоОкругления);
		
	КонецЕсли; 
	
КонецПроцедуры

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

&НаСервере
Процедура СпособОкругленияПриИзмененииНаСервере()
	
	РассчитатьЗначенияТарифов();
		
КонецПроцедуры

&НаСервере
Процедура БазовыйТарифГруппыПриИзмененииНаСервере()
	
	РассчитатьЗначенияТарифов();
	
КонецПроцедуры

&НаСервере
Процедура ЗапомнитьДатуПоследнегоИзменения()
	
	ДатаПоследнегоИзменения = '00010101';
	Если ЗначениеЗаполнено(Объект.ДатаВступленияВСилу) Тогда
		ДатаПоследнегоИзменения = ДатаПоследнегоИзмененияТарифнойСетки(Объект.ТарифнаяСетка, Объект.ДатаВступленияВСилу);
	КонецЕсли;
	
	ПоследняяДатаИзменения = ДатаПоследнегоИзмененияТарифнойСетки(Объект.ТарифнаяСетка);
	ПоследнееУтверждениеТарифов = ПоследняяДатаИзменения <= Объект.ДатаВступленияВСилу;
	
КонецПроцедуры

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

&НаСервере
Процедура ТарифыРазрядКатегорияПриИзмененииНаСервере()
	
	ТекущиеДанные = Объект.Тарифы.НайтиПоИдентификатору(Элементы.Тарифы.ТекущаяСтрока);
	Если ТекущиеДанные <> Неопределено Тогда
		
		Если ЗначениеЗаполнено(ТекущиеДанные.РазрядКатегория) Тогда
			РеквизитДопУпорядочивания = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущиеДанные.РазрядКатегория, "РеквизитДопУпорядочивания");
		Иначе
			РеквизитДопУпорядочивания = 99999;
		КонецЕсли;
		
		ТекущиеДанные.РеквизитДопУпорядочивания = РеквизитДопУпорядочивания;
		
	КонецЕсли; 
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ИзменитьШтатноеРасписаниеЗавершение(Ответ, ДополнительныеПараметры) Экспорт 

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

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

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

&НаКлиенте
Процедура ИзменитьПлановыеНачисленияЗавершение(Ответ, ДополнительныеПараметры) Экспорт 

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

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

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

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

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

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