Начисления / Форма вида расчета / Модуль формы

файл

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
	
	Если Не ПараметрыЗаписи.Свойство("ПроверкаПередЗаписьюВыполнена") Тогда 
		Отказ = Истина;
		ЗаписатьНаКлиенте(Ложь);
		Возврат;
	КонецЕсли;
	
	// Заполнение табличной части МесяцыНачисления.
	Объект.МесяцыНачисления.Очистить();
	Для НомерМесяца = 1 По 12 Цикл
		Если ЭтаФорма["НачисляетсяВМесяце" + Формат(НомерМесяца, "ЧЦ=2; ЧВН=")] = Истина Тогда
			Объект.МесяцыНачисления.Добавить().Месяц = НомерМесяца;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура ВыполнитьЧтениеНаСервере(ТекущийОбъект = Неопределено)
	
	КонтролируемыеРеквизитыРасчетаСреднегоЗаработкаСоответствие = КонтролируемыеРеквизитыРасчетаСреднегоЗаработкаСоответствие();
	КонтролируемыеРеквизитыРасчетаСреднегоЗаработка = Новый ФиксированноеСоответствие(КонтролируемыеРеквизитыРасчетаСреднегоЗаработкаСоответствие);

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ИспользоватьОперативныеПоказателиВЦеломЗаМесяцЧислоПриИзменении(Элемент)
	
	ЗаполнитьПодсказкуВариантаИспользованияОперативныхПоказателей(ЭтаФорма);
	
	БылПризнакНачисляетсяВЦеломЗаМесяц = Объект.НачисляетсяВЦеломЗаМесяц;
	ЗаполнитьПризнакНачисляетсяВЦеломЗаМесяц(ЭтаФорма);
	
	Если БылПризнакНачисляетсяВЦеломЗаМесяц <> Объект.НачисляетсяВЦеломЗаМесяц Тогда
		// Если изменилось использование периода действия, нужно перезаполнить связи.
		ЗаполнитьСвязиНачисления(Ложь);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ВидВремениОтработанногоПриИзменении(Элемент)
	ПриИзмененииВидаВремени();
КонецПроцедуры

&НаКлиенте
Процедура ВидВремениНеОтработанногоПриИзменении(Элемент)
	ПриИзмененииВидаВремени();
КонецПроцедуры

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьНадписьДополнительныхВидовВремени(Форма)
	
	Представление = "";
	ВидовВремени = 0;
	Для Каждого Строка Из Форма.ДополнительныеВидыВремени Цикл
		Если ВидовВремени = 2 Тогда
			Прервать;
		КонецЕсли;
		Представление = Представление + Строка(Строка.ВидВремени) + ", ";
		ВидовВремени = ВидовВремени + 1;
	КонецЦикла;
	СтроковыеФункцииКлиентСервер.УдалитьПоследнийСимволВСтроке(Представление, 2);
	
	Если ВидовВремени < Форма.ДополнительныеВидыВремени.Количество() Тогда
		Представление = Представление + " " + СтрШаблон(НСтр("ru = 'и еще %1'"), Форма.ДополнительныеВидыВремени.Количество() - ВидовВремени);
	КонецЕсли;
	
	Если ПустаяСтрока(Представление) Тогда
		Представление = НСтр("ru = '<Не выбраны>'");
	КонецЕсли;
	
	Форма.Элементы.ВидыВремени.Заголовок = СтрШаблон(НСтр("ru = 'Дополнительные виды времени (%1)'"), Представление);
	
КонецПроцедуры

&НаКлиенте
Процедура СтратегияОтраженияВУчетеПриИзменении(Элемент)
	
	ОтражениеЗарплатыВБухучетеКлиентСерверРасширенный.ОбработатьИзменениеСтратегииОтраженияВБухучетеНачисления(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ВидНачисленияДляНУПриИзменении(Элемент)
	
	ОтражениеЗарплатыВБухучетеКлиентСерверРасширенный.ОбновитьПредставлениеВидаНачисленияПоНКРФ(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ОблагаетсяНДФЛПриИзменении(Элемент)
	УстановитьДоступностьКодаДоходаНДФЛ(ЭтаФорма);
	УстановитьСвойстваКатегорииДоходаНДФЛ(ЭтаФорма);
КонецПроцедуры

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

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

&НаКлиенте
Процедура ВключаетсяВРасходыПоСт255НКРФПриИзменении(Элемент)
	УстановитьДоступностьВидаНачисленияДляНУ(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура РассчитыватьРезультатПриИзменении(Элемент)
	
	Объект.Рассчитывается = ?(РассчитыватьРезультат = 0, Истина, Ложь);
	РассчитыватьРезультатПриИзмененииНаСервере();
	
КонецПроцедуры

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

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

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

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

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

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

#Область ЭлементыНастройкиСреднегоЗаработка

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

&НаКлиенте
Процедура СреднийЗаработокОбщийЗначениеЕдинственныйОчистка(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

&НаКлиенте
Процедура СреднийЗаработокОбщийЗначениеОчистка(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура УчитыватьИзменениеЗначенийПоказателейВБазовомПериодеЧислоПриИзменении(Элемент)
	
	Объект.УчитыватьИзменениеЗначенийПоказателейВБазовомПериоде = ?(УчитыватьИзменениеЗначенийПоказателейВБазовомПериодеЧисло = 0, Ложь, Истина);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура СреднийЗаработокОбщийЗначениеЕдинственныйПриИзменении(Элемент)
	
	УстановитьДоступностьКоличестваМесяцевБазовогоПериодаПремии(ЭтаФорма);
	УстановитьЗначенияПоУмолчаниюБазовогоПериодаПремии(ЭтаФорма);
	УстановитьСтраницуВыбораПериодаПремииДляСреднегоЗаработка(ЭтаФорма);
	УстановитьДоступностьВыбораПериодаПремииДляСреднегоЗаработка(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УдалитьДополнительныйВидВремени(Форма, ВидВремени)
	
	ОтборСтрок = Новый Структура("ВидВремени");
	ОтборСтрок.ВидВремени = ВидВремени;
	НайденныеСтроки = Форма.ДополнительныеВидыВремени.НайтиСтроки(ОтборСтрок);
	Для Каждого Строка Из НайденныеСтроки Цикл
		Форма.ДополнительныеВидыВремени.Удалить(Строка);
	КонецЦикла;

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

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

&НаКлиенте
Процедура НадписьПроверкаСвязейНачисленийНажатие(Элемент)
	
	ОткрытьФормуИсправленияСвязейНачислений(Ложь, Ложь);
	
КонецПроцедуры

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

#Область МесяцыНачисления

&НаКлиенте
Процедура МесяцНачисления01ПриИзменении(Элемент)
	УстановитьСписокВыбораПериодаРасчетаБазовыхНачислений(ЭтаФорма);
	УстановитьДоступностьВыбораПериодаПремииДляСреднегоЗаработка(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура МесяцНачисления02ПриИзменении(Элемент)
	УстановитьСписокВыбораПериодаРасчетаБазовыхНачислений(ЭтаФорма);
	УстановитьДоступностьВыбораПериодаПремииДляСреднегоЗаработка(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура МесяцНачисления03ПриИзменении(Элемент)
	УстановитьСписокВыбораПериодаРасчетаБазовыхНачислений(ЭтаФорма);
	УстановитьДоступностьВыбораПериодаПремииДляСреднегоЗаработка(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура МесяцНачисления04ПриИзменении(Элемент)
	УстановитьСписокВыбораПериодаРасчетаБазовыхНачислений(ЭтаФорма);
	УстановитьДоступностьВыбораПериодаПремииДляСреднегоЗаработка(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура МесяцНачисления05ПриИзменении(Элемент)
	УстановитьСписокВыбораПериодаРасчетаБазовыхНачислений(ЭтаФорма);
	УстановитьДоступностьВыбораПериодаПремииДляСреднегоЗаработка(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура МесяцНачисления06ПриИзменении(Элемент)
	УстановитьСписокВыбораПериодаРасчетаБазовыхНачислений(ЭтаФорма);
	УстановитьДоступностьВыбораПериодаПремииДляСреднегоЗаработка(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура МесяцНачисления07ПриИзменении(Элемент)
	УстановитьСписокВыбораПериодаРасчетаБазовыхНачислений(ЭтаФорма);
	УстановитьДоступностьВыбораПериодаПремииДляСреднегоЗаработка(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура МесяцНачисления08ПриИзменении(Элемент)
	УстановитьСписокВыбораПериодаРасчетаБазовыхНачислений(ЭтаФорма);
	УстановитьДоступностьВыбораПериодаПремииДляСреднегоЗаработка(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура МесяцНачисления09ПриИзменении(Элемент)
	УстановитьСписокВыбораПериодаРасчетаБазовыхНачислений(ЭтаФорма);
	УстановитьДоступностьВыбораПериодаПремииДляСреднегоЗаработка(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура МесяцНачисления10ПриИзменении(Элемент)
	УстановитьСписокВыбораПериодаРасчетаБазовыхНачислений(ЭтаФорма);
	УстановитьДоступностьВыбораПериодаПремииДляСреднегоЗаработка(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура МесяцНачисления11ПриИзменении(Элемент)
	УстановитьСписокВыбораПериодаРасчетаБазовыхНачислений(ЭтаФорма);
	УстановитьДоступностьВыбораПериодаПремииДляСреднегоЗаработка(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура МесяцНачисления12ПриИзменении(Элемент)
	УстановитьСписокВыбораПериодаРасчетаБазовыхНачислений(ЭтаФорма);
	УстановитьДоступностьВыбораПериодаПремииДляСреднегоЗаработка(ЭтаФорма);
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ВедущиеВидыРасчетаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	ОбработкаПодбораНачисленийНаСервере(ВыбранноеЗначение, "Объект.ВедущиеВидыРасчета");
	
КонецПроцедуры

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

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

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

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

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыВытесняющиеВидыРасчета

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

&НаКлиенте
Процедура ВытесняющиеВидыРасчетаПослеУдаления(Элемент)
	
	ПроверитьНастройкуПриоритета("Объект.ВытесняющиеВидыРасчета");
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура СписокПриоритетНижеПослеУдаления(Элемент)
	
	ПроверитьНастройкуПриоритета("СписокПриоритетНиже");
	
КонецПроцедуры

&НаКлиенте
Процедура СписокПриоритетНижеВидРасчетаПриИзменении(Элемент)
	
	ПроверитьНастройкуПриоритета("СписокПриоритетНиже");
	
КонецПроцедуры

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

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокЗависимыеУдержания

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

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

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

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

&НаКлиенте
Процедура КомандаЗаписатьИЗакрыть(Команда)
	
	ЗаписатьНаКлиенте(Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура КомандаЗаписать(Команда)
	
	ЗаписатьНаКлиенте(Ложь);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// СтандартныеПодсистемы.Свойства 

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ДобавитьВидыРасчетаОплатыДолейРКСНВЗависимыхНачисленияхУдержаниях(ТабличнаяЧастьОбъекта, ДополнительныеНачисленияДолейРКСН, ОсновнойВидРасчета)

	Если ДополнительныеНачисленияДолейРКСН = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ВидыРасчетаДолейРКСН = ДополнительныеНачисленияДолейРКСН.Получить(ОсновнойВидРасчета);
	Если ВидыРасчетаДолейРКСН <> Неопределено Тогда
		Для Каждого КлючИЗначение Из ВидыРасчетаДолейРКСН Цикл
			ТабличнаяЧастьОбъекта.Добавить().ВидРасчета = КлючИЗначение.Значение;
		КонецЦикла;
	КонецЕсли;

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

&НаКлиентеНаСервереБезКонтекста
Процедура УдалитьВидыРасчетаОплатыДолейРКСНВЗависимыхНачисленияхУдержаниях(ТабличнаяЧастьОбъекта, ДополнительныеНачисленияДолейРКСН, ОсновнойВидРасчета)

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьЗначенияПоУмолчаниюБазовогоПериодаПремии(Форма)

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

&НаКлиентеНаСервереБезКонтекста
Функция ЭтоПремия(Форма) 
	
	Премии = Новый Массив;
	Премии.Добавить(ПредопределенноеЗначение("Перечисление.УчетНачисленийВСреднемЗаработкеОбщий.ПремияГодоваяПроцентом"));
	Премии.Добавить(ПредопределенноеЗначение("Перечисление.УчетНачисленийВСреднемЗаработкеОбщий.ПремияГодоваяФиксированнойСуммой"));
	Премии.Добавить(ПредопределенноеЗначение("Перечисление.УчетНачисленийВСреднемЗаработкеОбщий.ПремияПроцентом"));
	Премии.Добавить(ПредопределенноеЗначение("Перечисление.УчетНачисленийВСреднемЗаработкеОбщий.ПремияФиксированнойСуммой"));
	
	ЭтоПремия = Премии.Найти(Форма.СреднийЗаработокОбщийЗначение) <> Неопределено;

	Возврат ЭтоПремия;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьИнформационныйТекстСписковВытеснения(Форма)
	
	Если ПустаяСтрока(Форма.Объект.Наименование) Тогда
		ПредставлениеНачисления = НСтр("ru = 'Данное начисление'");
	Иначе
		Наименование = Форма.Объект.Наименование;
		Если СтрДлина(Форма.Объект.Наименование) > 25 Тогда
			Наименование = Лев(Наименование, 22) + "...";
		КонецЕсли;
		ПредставлениеНачисления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '«%1»'"), Наименование);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПредставлениеПериодаОпределенияЗначенийПоказателей(Форма)
	
	Форма.УчитыватьИзменениеЗначенийПоказателейВБазовомПериодеЧисло = ?(Форма.Объект.УчитыватьИзменениеЗначенийПоказателейВБазовомПериоде, 1, 0);
	
КонецПроцедуры

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

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

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

	Если ВидОтпуска = ВидОтпускаОплачиваемыйЧАЭС Тогда		
		ВидыДоходовНеОблагаетсяЦеликом = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыДоходовПоСтраховымВзносам.НеОблагаетсяЦеликом");

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьСвязиПоОсновномуВидуРасчета()
	
	Объект.ВытесняющиеВидыРасчета.Очистить();
	Объект.ВедущиеВидыРасчета.Очистить();
	СписокПриоритетНиже.Очистить();
	СписокРассчитываемыхПосле.Очистить();

	Объект.БазовыеВидыРасчета.Очистить();
	СписокЗависимыеНачисления.Очистить();
		
	// Заполнение реквизита со списком начислений, для которых данное начисление является базовым.
	РасчетЗарплатыРасширенный.ЗаполнитьСписокЗависимыхВидовРасчета(Объект.ОсновнойВидРасчета, СписокЗависимыеНачисления, "БазовыеВидыРасчета");
	
	// Заполнение реквизита со списком удержаний, для которых данное начисление является базовым.
	РасчетЗарплатыРасширенный.ЗаполнитьСписокЗависимыхВидовРасчета(Объект.ОсновнойВидРасчета, СписокЗависимыеУдержания, "БазовыеВидыРасчета", Истина);
	
	//Заполнение вытесняющих видов расчета, для которых основной вид расчета является ведущим
	ЗаполнитьВытесняющиеВидыРасчетаПоОсновномуВидуРасчета();
		
КонецПроцедуры

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

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

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

&НаСервере
Процедура СкопироватьСпискиЗависимыхВидовРасчетаПриКопировании(ЗначениеКопирования)

	// Заполнение реквизита со списком зависимых начислений.
	РасчетЗарплатыРасширенный.ЗаполнитьСписокЗависимыхВидовРасчета(ЗначениеКопирования, СписокРассчитываемыхПосле, "ВедущиеВидыРасчета");
	
	// Заполнение реквизита со списком вытесняемых начислений (приоритет которых ниже).
	РасчетЗарплатыРасширенный.ЗаполнитьСписокЗависимыхВидовРасчета(ЗначениеКопирования, СписокПриоритетНиже, "ВытесняющиеВидыРасчета");
	
	// Заполнение реквизита со списком начислений, для которых данное начисление является базовым.
	РасчетЗарплатыРасширенный.ЗаполнитьСписокЗависимыхВидовРасчета(ЗначениеКопирования, СписокЗависимыеНачисления, "БазовыеВидыРасчета");
	
	// Заполнение реквизита со списком удержаний, для которых данное начисление является базовым.
	РасчетЗарплатыРасширенный.ЗаполнитьСписокЗависимыхВидовРасчета(ЗначениеКопирования, СписокЗависимыеУдержания, "БазовыеВидыРасчета", Истина);
	
КонецПроцедуры

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

	УстановитьЗначенияПоУмолчаниюБазовогоПериодаПремии(ЭтаФорма);
	
	УстановитьДоступностьНачисленияВПервуюПоловинуМесяца(ЭтаФорма);
	УстановитьДоступностьРасчетаБазы(ЭтаФорма);
	УстановитьСвойстваПериодаРасчетаСреднегоЗаработка(ЭтаФорма);
	
КонецПроцедуры

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

&НаСервере
Процедура ОбработкаПодбораНачисленийНаСервере(ВыбранноеЗначение, ПутьКДанным)
	
	УдалениеВыбранныхВидовРасчета(ВыбранноеЗначение.УдаленныеВидыРасчета, ПутьКДанным);
	
	Для Каждого ВидРасчета Из ВыбранноеЗначение.ДобавленныеВидыРасчета Цикл
		ОбработкаВыбранногоНачисления(ВидРасчета, ПутьКДанным);
	КонецЦикла;
	
КонецПроцедуры

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьПризнакНачисляетсяВЦеломЗаМесяц(Форма)
	
	Форма.Объект.ИспользоватьОперативныеПоказателиВЦеломЗаМесяц = Форма.ИспользоватьОперативныеПоказателиВЦеломЗаМесяцЧисло;
	
	Форма.Объект.НачисляетсяВЦеломЗаМесяц = РасчетЗарплатыРасширенныйКлиентСервер.НачислениеВыполняетсяВЦеломЗаМесяц(
		Форма.Объект, Форма.ЕстьПоказателиУчетаВремени, Форма.ЕстьПоказательРасчетнаяБаза, Форма.ЕстьОперативныеПоказатели, Форма.ЕстьПоказательОтработаноСмен);
	
	УстановитьДоступностьНачисленияВПервуюПоловинуМесяца(Форма);
	ЗаполнитьНачисляетсяПриРасчетеПервойПоловиныМесяцаПоУмолчанию(Форма);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьПризнакНачисляетсяВОтпускеПоУходу(Форма)
	
	Форма.Объект.НачисляетсяВОтпускеПоУходу = Ложь;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьВыбораПериодаПремииДляСреднегоЗаработка(Форма)
	
	Элементы = Форма.Элементы;
	
	Если Элементы.НастройкиПремииСтраницы.ТекущаяСтраница = Элементы.НастройкиПремииВидимостьЛожь Тогда
		Возврат;
	КонецЕсли;

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьНастроекСреднегоЗаработка(Форма)
	Форма.Элементы.СреднийЗаработокОбщийНастройкаГруппа.Видимость = Форма.Объект.СтратегияОтраженияВСреднемЗаработке <> ПредопределенноеЗначение("Перечисление.СтратегииОтраженияВУчетеНачисленийУдержаний.ПоБазовымРасчетам");
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьВариантаИспользованияОперативныхПоказателей(Форма)
	
	Элементы = Форма.Элементы;
	Элементы.ИспользованиеОперативныхПоказателейГруппа.Видимость = Форма.ЕстьОперативныеПоказатели;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьВключатьВФОТ(Форма)

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВключатьВФОТ(Форма)

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

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

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

&НаКлиенте
Процедура ЗаполнитьМесяцыНачисления()
	
	// Начисление с расчетной базой:
	// - за текущий квартал имеет смысл только в последнем месяце квартала
	// - за текущий год - только в последнем месяце года.
	
	Для НомерМесяца = 1 По 12 Цикл
		ДоступностьМесяца = Истина;
		Если Объект.ПериодРасчетаБазовыхНачислений = ПредопределенноеЗначение("Перечисление.ПериодыРасчетаБазовыхНачислений.ТекущийГод") Тогда
			ДоступностьМесяца = (НомерМесяца = 12);
		ИначеЕсли Объект.ПериодРасчетаБазовыхНачислений = ПредопределенноеЗначение("Перечисление.ПериодыРасчетаБазовыхНачислений.ТекущийКвартал") Тогда
			ДоступностьМесяца = (НомерМесяца % 3 = 0);
		КонецЕсли;
		Если Не ДоступностьМесяца Тогда
			ЭтаФорма["НачисляетсяВМесяце" + Формат(НомерМесяца, "ЧЦ=2; ЧВН=")] = ДоступностьМесяца;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

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

	УстановитьДоступностьДополнительныхВидовВремени(Форма);
	
КонецПроцедуры

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьСвойстваПоКатегории(Форма)
	
	Объект = Форма.Объект;
	
	СвойстваНачисления = Форма.СвойстваПоКатегориям.Получить(Объект.КатегорияНачисленияИлиНеоплаченногоВремени);
	Если Форма.Параметры.Ключ.Пустая() Тогда
		
		Если Объект.КатегорияНачисленияИлиНеоплаченногоВремени = ПредопределенноеЗначение("Перечисление.КатегорииНачисленийИНеоплаченногоВремени.КвартальнаяПремия") Тогда
			СвойстваНачисления.СпособВыполненияНачисления = ПредопределенноеЗначение("Перечисление.СпособыВыполненияНачислений.ВЗаданныхМесяцахПриОкончательномРасчете");
			СвойстваНачисления.ПериодРасчетаБазовыхНачислений = ПредопределенноеЗначение("Перечисление.ПериодыРасчетаБазовыхНачислений.ТекущийКвартал");
			
			Форма.НачисляетсяВМесяце01 = Ложь;
			Форма.НачисляетсяВМесяце02 = Ложь;
			Форма.НачисляетсяВМесяце03 = Истина;
			Форма.НачисляетсяВМесяце04 = Ложь;
			Форма.НачисляетсяВМесяце05 = Ложь;
			Форма.НачисляетсяВМесяце06 = Истина;
			Форма.НачисляетсяВМесяце07 = Ложь;
			Форма.НачисляетсяВМесяце08 = Ложь;
			Форма.НачисляетсяВМесяце09 = Истина;
			Форма.НачисляетсяВМесяце10 = Ложь;
			Форма.НачисляетсяВМесяце11 = Ложь;
			Форма.НачисляетсяВМесяце12 = Истина;
		КонецЕсли;
		
		Если Форма.Параметры.Свойство("ЗначенияЗаполнения") Тогда
			Форма.Параметры.ЗначенияЗаполнения.Свойство("ОбозначениеВТабелеУчетаРабочегоВремени", СвойстваНачисления.ОбозначениеВТабелеУчетаРабочегоВремени);
		КонецЕсли;
		
	КонецЕсли;
	
	Если СвойстваНачисления = Неопределено Тогда
		// Если не нашлось для соответствующей категории используем свойства по умолчанию.
		СвойстваНачисления = Форма.СвойстваПоКатегориям.Получить(
			ПредопределенноеЗначение("Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ПустаяСсылка"));
		ЗаполнитьЗначенияСвойств(Объект, СвойстваНачисления, , "СреднийЗаработокОбщий");
		Возврат;
	КонецЕсли;
	
	// Если категория определена, то свойства, которые она определяет недоступны для изменения пользователем.
	Если Не ЗначениеЗаполнено(Объект.КатегорияНачисленияИлиНеоплаченногоВремени) Тогда
		Возврат;
	КонецЕсли;
	
	// Поля структуры свойств, которые не являются непосредственно свойствами ПВР, 
	// но содержат инструкции и/или другие сведения о категории начисления.
	Инструкции = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СвойстваНачисления.ИменаИнструкций);
	НедоступныеСвойства = СвойстваНачисления.НедоступныеСвойства;
	Для Каждого КлючИЗначение Из СвойстваНачисления Цикл
		ИмяСвойства = КлючИЗначение.Ключ;
		Если Инструкции.Найти(ИмяСвойства) <> Неопределено Тогда
			Продолжить;
		КонецЕсли;
		Если ИмяСвойства = "СреднийЗаработокОбщий" Тогда
			ЗаполнитьСреднийЗаработокОбщий(Форма, КлючИЗначение.Значение);
		ИначеЕсли ИмяСвойства = "ВключатьВСреднийЗаработокОбщий" Тогда
			Форма.СреднийЗаработокОбщийИспользовать = КлючИЗначение.Значение;
			КонтролируемыеРеквизитыРасчетаСреднегоЗаработкаСоответствие = Новый Соответствие(Форма.КонтролируемыеРеквизитыРасчетаСреднегоЗаработка);
			КонтролируемыеРеквизитыРасчетаСреднегоЗаработкаСоответствие["СреднийЗаработокОбщийИспользовать"] = Форма.СреднийЗаработокОбщийИспользовать;
			Форма.КонтролируемыеРеквизитыРасчетаСреднегоЗаработка = Новый ФиксированноеСоответствие(КонтролируемыеРеквизитыРасчетаСреднегоЗаработкаСоответствие);
		ИначеЕсли ИмяСвойства = "ИндексируетсяСреднийЗаработокОбщий" Тогда
			Продолжить;
		ИначеЕсли ИмяСвойства = "ВключатьВСреднийЗаработокФСС" Тогда
			Продолжить;
		ИначеЕсли ИмяСвойства = "ВключатьВСреднийЗаработокФСС2010" Тогда
			ВключатьВСреднийЗаработокФСС = КлючИЗначение.Значение;
			Если ВключатьВСреднийЗаработокФСС = Неопределено Тогда 
				СвойстваНачисления.Свойство("ВключатьВСреднийЗаработокФСС", ВключатьВСреднийЗаработокФСС);
			КонецЕсли;
			ЗаполнитьСреднийЗаработокФСС(Форма, ВключатьВСреднийЗаработокФСС);
		ИначеЕсли ИмяСвойства = "ПериодРасчетаБазовыхНачислений" Тогда
			Объект[ИмяСвойства] = КлючИЗначение.Значение;
			Если Не ЗначениеЗаполнено(Объект[ИмяСвойства]) Тогда
				Объект[ИмяСвойства] = ПредопределенноеЗначение("Перечисление.ПериодыРасчетаБазовыхНачислений.ТекущийМесяц");
			КонецЕсли;
		ИначеЕсли ИмяСвойства = "ФормулаРасчета" Тогда
			Если ЗначениеЗаполнено(КлючИЗначение.Значение) 
				Или СвойстваНачисления.СпособРасчета <> ПредопределенноеЗначение("Перечисление.СпособыРасчетаНачислений.ПроизвольнаяФормула") Тогда 
				Объект[ИмяСвойства] = КлючИЗначение.Значение;
			КонецЕсли;
		Иначе
			Объект[ИмяСвойства] = КлючИЗначение.Значение;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьКатегорииДоходовНДФЛ()
	
	КодыИКатегорииНДФЛ = УчетФактическиПолученныхДоходов.СопоставлениеКодовИКатегорийДоходовНДФЛ();
	
	СоответствиеКодовИКатегорий = Новый Соответствие;
	
	Для Каждого Строка Из КодыИКатегорииНДФЛ Цикл
		Ключ = Строка.КодДохода;
		СписокКатегорийНачислений = СоответствиеКодовИКатегорий.Получить(Ключ);
		Если СписокКатегорийНачислений = Неопределено Тогда
			СписокКатегорийНачислений = Новый Соответствие;
		КонецЕсли;
		КлючКатегорииНачисления = 0;
		Если ЗначениеЗаполнено(Строка.КатегорияНачисления) Тогда
			КлючКатегорииНачисления = Строка.КатегорияНачисления;
		КонецЕсли;
		МассивПоКатегорииНачисления = СписокКатегорийНачислений.Получить(КлючКатегорииНачисления);
		Если МассивПоКатегорииНачисления = Неопределено Тогда
			МассивПоКатегорииНачисления = Новый Массив;
		КонецЕсли;
		МассивПоКатегорииНачисления.Добавить(Строка.КатегорияДохода);
		СписокКатегорийНачислений.Вставить(КлючКатегорииНачисления, МассивПоКатегорииНачисления);
		СоответствиеКодовИКатегорий.Вставить(Ключ, СписокКатегорийНачислений);
	КонецЦикла;
	
	Для Каждого КодПоКатегорииНачисления Из СоответствиеКодовИКатегорий Цикл
		СоответствиеКодовИКатегорий.Вставить(КодПоКатегорииНачисления.Ключ, Новый ФиксированноеСоответствие(СоответствиеКодовИКатегорий[КодПоКатегорииНачисления.Ключ]));
	КонецЦикла;
	
	КатегорииДоходовНДФЛ = Новый ФиксированноеСоответствие(СоответствиеКодовИКатегорий);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьСвойстваКатегорииДоходаНДФЛ(Форма)
	
	Форма.Элементы.КатегорияДохода.РежимВыбораИзСписка = Истина;
	Форма.Элементы.КатегорияДохода.СписокВыбора.Очистить();
	
	Если Форма.ОблагаетсяНДФЛ = 0 
		Или Не ЗначениеЗаполнено(Форма.Объект.КодДоходаНДФЛ) Тогда
		Форма.Объект.КатегорияДохода = Неопределено;
		Форма.Элементы.КатегорияДохода.АвтоОтметкаНезаполненного = Ложь;
		Форма.Элементы.КатегорияДохода.ОтметкаНезаполненного = Ложь;
		Форма.Элементы.КатегорияДохода.Доступность = Ложь;
		УстановитьВидимостьСпособаОпределенияМесяцаДоходаВНалоговомУчете(Форма);
		Возврат;
	КонецЕсли;
	
	ДоступныеКатегорииНачислений = Форма.КатегорииДоходовНДФЛ.Получить(Форма.Объект.КодДоходаНДФЛ);
	ДоступныеКатегорииДохода = ДоступныеКатегорииНачислений.Получить(Форма.Объект.КатегорияНачисленияИлиНеоплаченногоВремени);
	Если ДоступныеКатегорииДохода = Неопределено Тогда
		ДоступныеКатегорииДохода = ДоступныеКатегорииНачислений.Получить(0);
	КонецЕсли;
	
	КатегорияДоступна = Истина;
	Если ДоступныеКатегорииДохода = Неопределено
		Или ДоступныеКатегорииДохода.Количество() = 0 Тогда 
		Форма.Элементы.КатегорияДохода.РежимВыбораИзСписка = Ложь;
	ИначеЕсли ДоступныеКатегорииДохода.Количество() = 1 Тогда
		Форма.Элементы.КатегорияДохода.СписокВыбора.Добавить(ДоступныеКатегорииДохода[0]);
		Форма.Объект.КатегорияДохода = ДоступныеКатегорииДохода[0];
		КатегорияДоступна = Ложь;
	Иначе
		Для Каждого ДоступнаяКатегория Из ДоступныеКатегорииДохода Цикл
			Форма.Элементы.КатегорияДохода.СписокВыбора.Добавить(ДоступнаяКатегория);
		КонецЦикла;
		Если ЗначениеЗаполнено(Форма.Объект.КатегорияДохода) Тогда
			Если ДоступныеКатегорииДохода.Найти(Форма.Объект.КатегорияДохода) = Неопределено Тогда
				Форма.Объект.КатегорияДохода = Неопределено;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	КатегорияНеЗаполнена = Не ЗначениеЗаполнено(Форма.Объект.КатегорияДохода);
	Форма.Элементы.КатегорияДохода.АвтоОтметкаНезаполненного = Истина;
	Форма.Элементы.КатегорияДохода.ОтметкаНезаполненного = КатегорияНеЗаполнена;
	Форма.Элементы.КатегорияДохода.Доступность = КатегорияДоступна;
	
	УстановитьВидимостьСпособаОпределенияМесяцаДоходаВНалоговомУчете(Форма);
	
КонецПроцедуры

#Область НастройкаСреднегоЗаработка

&НаСервере
Процедура НастроитьЭлементыВводаСреднегоЗаработка()
	
	НастроитьЭлементыВводаСреднегоЗаработкаОбщий();
	
	НастроитьЭлементыВводаСреднегоЗаработкаФСС();
	
КонецПроцедуры

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

&НаСервере
Процедура ЗаписатьНастройкиСреднегоЗаработка(ТекущийОбъект)
	
	ЗаписатьНастройкиСреднегоЗаработкаОбщий(ТекущийОбъект);
	
	ЗаписатьНастройкиСреднегоЗаработкаФСС(ТекущийОбъект);
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция КодДоходаСтраховыеВзносыВходитВБазуФСС(КодДоходаСтраховыеВзносы)
	Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КодДоходаСтраховыеВзносы, "ВходитВБазуФСС");
КонецФункции

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ТекстСообщенияОДобавленииДополнительныхВидовРасчета(ДобавленныйВидРасчета, ДополнительныеВидыРасчета)
	
	ТекстСообщения = "";
	КоличествоЭлементов = ДополнительныеВидыРасчета.Количество();
	
	Если КоличествоЭлементов = 0 Тогда 
		Возврат ТекстСообщения;
	КонецЕсли;	
	
	ВидыРасчетовСтрока = "";
	Для Сч = 1 По КоличествоЭлементов Цикл 
		ВидыРасчетовСтрока = ВидыРасчетовСтрока + ДополнительныеВидыРасчета[Сч-1] + ?(Сч = КоличествоЭлементов, "", ", ");
	КонецЦикла;
		
	ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
	НСтр("ru='Кроме начисления %1 в список включены следующие начисления: %2'"), 
	ДобавленныйВидРасчета, ВидыРасчетовСтрока);
	
	Возврат ТекстСообщения;
	
КонецФункции

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Подключаемый_СвойстваНачисленийГосударственныхСлужащихПриИзменении(Элемент)

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

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

&НаКлиенте
Процедура Подключаемый_СвойстваНачисленийОтношениеКДенежномуДовольствиюПриИзменении(Элемент)

	Подключаемый_СвойстваНачисленийОтношениеКДенежномуДовольствиюПриИзмененииНаСервере();

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

&НаСервере
Процедура Подключаемый_СвойстваНачисленийОтношениеКДенежномуДовольствиюПриИзмененииНаСервере()

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьКодаДоходаНДФЛ(Форма)
	
	ОбязательноЗаполнять = Форма.КатегорииКодДоходаНДФЛНеЗаполняется.Найти(Форма.Объект.КатегорияНачисленияИлиНеоплаченногоВремени) = Неопределено;
	
	Форма.Элементы.ОблагаетсяНДФЛЧисло0.Доступность = Форма.КодДоходаНДФЛДоступностьПоКатегории И Не ОбязательноЗаполнять;
	Форма.Элементы.ОблагаетсяНДФЛЧисло1.Доступность = Форма.КодДоходаНДФЛДоступностьПоКатегории;
	
	Если ОбязательноЗаполнять Тогда
		Форма.ОблагаетсяНДФЛ = 1;
	КонецЕсли;
	
	ДоступностьКодаНДФЛ = Форма.ОблагаетсяНДФЛ = 1 И Форма.КодДоходаНДФЛДоступностьПоКатегории;
	
	Форма.Элементы.КодДоходаНДФЛ.Доступность = ДоступностьКодаНДФЛ;
	Форма.Элементы.КодДоходаНДФЛ.АвтоОтметкаНезаполненного = ДоступностьКодаНДФЛ;
	Форма.Элементы.КодДоходаНДФЛ.ОтметкаНезаполненного = Не ЗначениеЗаполнено(Форма.Объект.КодДоходаНДФЛ);
	
	Если Форма.ОблагаетсяНДФЛ = 0 Тогда
		Форма.Объект.КодДоходаНДФЛ = Неопределено;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьКатегорииДоходаНДФЛ(Форма)
	
	Форма.Элементы.КодДоходаНДФЛ.Доступность = Ложь;
	Форма.Элементы.КодДоходаНДФЛ.АвтоОтметкаНезаполненного = Ложь;
	Форма.Элементы.КодДоходаНДФЛ.ОтметкаНезаполненного = Ложь;
		
	Если Форма.Элементы.КатегорияДохода.СписокВыбора.Количество() > 2 Тогда
		Форма.Элементы.КодДоходаНДФЛ.Доступность = Истина;
		Форма.Элементы.КодДоходаНДФЛ.АвтоОтметкаНезаполненного = Истина;
		Форма.Элементы.КодДоходаНДФЛ.ОтметкаНезаполненного = ЗначениеЗаполнено(Форма.Объект.КатегорияДохода);
	ИначеЕсли Форма.Элементы.КатегорияДохода.СписокВыбора.Количество() = 1 
		И Форма.Элементы.КатегорияДохода.СписокВыбора[0] <> Форма.Объект.КатегорияДохода Тогда 
		Форма.Элементы.КодДоходаНДФЛ.Доступность = Истина;
		Форма.Элементы.КодДоходаНДФЛ.АвтоОтметкаНезаполненного = Истина;
		Форма.Элементы.КодДоходаНДФЛ.ОтметкаНезаполненного = ЗначениеЗаполнено(Форма.Объект.КатегорияДохода);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьКатегориюСтатистическогоНаблюдения57Т(Форма)
	
	Объект = Форма.Объект;
	Если Объект.КатегорияСтатистическогоНаблюдения <> ПредопределенноеЗначение("Перечисление.КатегорииСтатистическогоНаблюдения.ЗаработнаяПлатаРаботников") Тогда
		Объект.КатегорияСтатистическогоНаблюдения57Т = Неопределено;
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПроверитьНастройкуПриоритета(ПутьКДанным)
	
	ПроверитьНастройкуПриоритетаНаСервере(ПутьКДанным);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ОткрытьФормуПредупрежденияОПерепроведенииДокументов(ЗакрытьПослеИсправления = Истина, ЗаписатьДанные = Истина)
	
	ДополнительныеПараметры = Новый Структура;
	ДополнительныеПараметры.Вставить("ЗакрытьПослеИсправления", ЗакрытьПослеИсправления);
	ДополнительныеПараметры.Вставить("ЗаписатьДанные", ЗаписатьДанные);

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ВидимостьВидДоходаСтраховыеВзносыИнфо(Форма)
	Видимость = Форма.Объект.КодДоходаСтраховыеВзносы <> Форма.Объект.КодДоходаСтраховыеВзносы2017;
	Форма.Элементы.ВидДоходаСтраховыеВзносыИнфо.Видимость = Видимость;
КонецПроцедуры

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

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

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

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

&НаСервере
Функция СведенияОПоказателяхФормулы()

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

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

&НаСервере
Процедура УстановитьВидимостьКатегорииСтатистическогоНаблюденияЗПОбразование()
	Настройки = СтатистикаПерсоналаРасширенный.НастройкиСтатистикиПерсонала();
	Видимость = Настройки.ИспользоватьОтчетностьМониторингаРаботниковСоциальнойСферы 
		И Настройки.ФормаЗПОбразование;
	Элементы.ГруппаКатегорияСтатистическогоНаблюденияЗП.Видимость = Видимость;
КонецПроцедуры

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

&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьПодсказкуВариантаИспользованияОперативныхПоказателей(Форма)
	
	Если Форма.ИспользоватьОперативныеПоказателиВЦеломЗаМесяцЧисло Тогда
		ТекстПодсказки = НСтр("ru = 'Начисление выполняется в целом за месяц, изменения постоянных показателей в течение месяца не учитываются'");
	Иначе	
		ТекстПодсказки = НСтр("ru = 'Значения показателей подбираются исходя из фактического периода действия начислений'");
	КонецЕсли;
	
	Форма.Элементы.ИспользоватьОперативныеПоказателиВЦеломЗаМесяцЧисло.Подсказка = ТекстПодсказки;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ВключатьВФОТПриИзменении(Элемент)
	УстановитьВидимостьПоляФОТНеРедактируется();
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура Подключаемый_СвойстваНачисленийВходитВРасчетПособияПоУходуЗаРебенкомВоеннослужащимПриИзменении(Элемент)

	Подключаемый_СвойстваНачисленийВходитВРасчетПособияПоУходуЗаРебенкомВоеннослужащимПриИзмененииНаСервере();

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

&НаСервере
Процедура Подключаемый_СвойстваНачисленийВходитВРасчетПособияПоУходуЗаРебенкомВоеннослужащимПриИзмененииНаСервере()

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

&НаКлиенте
Процедура Подключаемый_СвойстваНачисленийКатегорияНадбавкиФормы3ОБПриИзменении(Элемент)

	Подключаемый_СвойстваНачисленийКатегорияНадбавкиФормы3ОБПриИзмененииНаСервере();

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

&НаСервере
Процедура Подключаемый_СвойстваНачисленийКатегорияНадбавкиФормы3ОБПриИзмененииНаСервере()

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

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

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

&НаСервере
Процедура УстановитьВидимостьСпособаРасчетовСФизическимиЛицами()

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ИзменитьКатегориюОсновногоВидаРасчета()

	КатегорияОсновногоВидаРасчета = КатегорияНачисленияОсновногоВидаРасчета(Объект.ОсновнойВидРасчета);
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция КатегорияНачисленияОсновногоВидаРасчета(ОсновнойВидРасчета)
	
	КатегорияНачисления = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОсновнойВидРасчета, "КатегорияНачисленияИлиНеоплаченногоВремени");
	Возврат КатегорияНачисления;
	
КонецФункции                                    

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьРасчетТарифнойСтавки(Форма)
	
	Форма.Элементы.РасчетТарифнойСтавки.Видимость = Форма.ЕстьПоказательСтоимостьДняЧасаСУчетомРазовыхНачислений;
	
КонецПроцедуры

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

	КонецЕсли;
		
КонецПроцедуры 

&НаСервере
Процедура ЗаполнитьНаследуемыеСвойстваОсновногоВидаРасчета(СвойстваПоКатегориям, КатегорияНачисления, ОсновнойВидРасчета)
	
	КатегорииОплатыДолейРКСН = ПланыВидовРасчета.Начисления.КатегорииНачисленийОплатыДолейРКиСН();
	Если КатегорииОплатыДолейРКСН.Найти(КатегорияНачисления) = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	СвойстваНачисления = СвойстваПоКатегориям.Получить(КатегорияНачисления);
	СвойстваОсновногоНачисления = СвойстваПоКатегориям.Получить(КатегорияОсновногоВидаРасчета);
	ДополнительныеФормулыНередактируемыхНачислений = ПланыВидовРасчета.Начисления.ДополнительныеФормулыНередактируемыхНачислений();
	
	//Определяем общий набор наследуемых свойств (не имеет значения нужно ли свойство определенной категории начисления или нет).
	СписокНаследуемыхСвойств = "СпособВыполненияНачисления, СпособРасчета, ВидДокументаНачисления, ФормулаРасчета, 
	|НачисляетсяВЦеломЗаМесяц, НачисляетсяПриРасчетеПервойПоловиныМесяца, ОбозначениеВТабелеУчетаРабочегоВремени, 
	|ВидНачисленияДляНУ, КодДоходаСтраховыеВзносы, ВидПособияСоциальногоСтрахования, ПорядокОпределенияРасчетногоПериодаСреднегоЗаработка, КоличествоМесяцевРасчетаСреднегоЗаработка, 
	|ВидОтпуска, ВидСтажаСЗВ, ВидСтажаПФР2014, ОчередностьРасчета, ВидОперацииПоЗарплате,
	|ВходитВУчетСреднегоЗаработкаФСС, КатегорияСтатистическогоНаблюдения2019, ПоддерживаетНесколькоПлановыхНачислений,
	|ВключатьВФОТ, КодДоходаСтраховыеВзносы2017, ПорядокОпределенияМесяцаДоходаВВидеОплатыТруда, КатегорияСтатистическогоНаблюдения,
	|ВидДоходаИсполнительногоПроизводства, НачисляетсяВОтпускеПоУходу, СтрокаРаздела2Расчета6НДФЛ, ВидДоходаИсполнительногоПроизводства2022,
	|НачисляетсяТолькоПриРасчетеПервойПоловиныМесяца, КатегорияСтатистическогоНаблюденияЗаКлассноеРуководство";
	Если ЗначениеЗаполнено(ОсновнойВидРасчета) Тогда	
		НаследуемыеСвойства = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОсновнойВидРасчета, СписокНаследуемыхСвойств);
		ЗаполнитьЗначенияСвойств(СвойстваНачисления, НаследуемыеСвойства);
		ДополнительныеФормулыНередактируемогоНачисления = ДополнительныеФормулыНередактируемыхНачислений[НаследуемыеСвойства.ФормулаРасчета];
		Если ПланыВидовРасчета.Начисления.КатегорииНачисленийОплатыДолиРК().Найти(КатегорияНачисления) <> Неопределено Тогда
			СвойстваНачисления.ФормулаРасчета = СвойстваОсновногоНачисления.ДополнительныеФормулыРасчета.ФормулаРасчетаДолиРК;
			Если (НЕ ЗначениеЗаполнено(СвойстваНачисления.ФормулаРасчета))
				И ДополнительныеФормулыНередактируемогоНачисления <> Неопределено Тогда
				СвойстваНачисления.ФормулаРасчета = ДополнительныеФормулыНередактируемогоНачисления.ФормулаРасчетаДолиРК;
			КонецЕсли;
		ИначеЕсли ПланыВидовРасчета.Начисления.КатегорииНачисленийОплатыДолиСН().Найти(КатегорияНачисления) <> Неопределено Тогда
			СвойстваНачисления.ФормулаРасчета = СвойстваОсновногоНачисления.ДополнительныеФормулыРасчета.ФормулаРасчетаДолиСН;
			Если (НЕ ЗначениеЗаполнено(СвойстваНачисления.ФормулаРасчета))
				И ДополнительныеФормулыНередактируемогоНачисления <> Неопределено Тогда
				СвойстваНачисления.ФормулаРасчета = ДополнительныеФормулыНередактируемогоНачисления.ФормулаРасчетаДолиСН;
			КонецЕсли;
		КонецЕсли;
	Иначе	
		СвойстваПоУмолчанию = ПланыВидовРасчета.Начисления.СвойстваНачисленийПоКатегориям().Получить(КатегорияНачисления);		
		ЗаполнитьЗначенияСвойств(СвойстваНачисления,СвойстваПоУмолчанию);
	КонецЕсли;
	
	СвойстваНачисления.ОсновнойВидРасчета = ОсновнойВидРасчета;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ВидыРасчетаТарифнойСтавкиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	ОбработкаПодбораНачисленийНаСервере(ВыбранноеЗначение, "Объект.ВидыРасчетаТарифнойСтавки");
	
КонецПроцедуры 

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

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