Резервы отпусков (архив) / Форма документа / Модуль формы

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

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

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

&НаКлиенте
Перем ЗакрытьПослеЗаписи;

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

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

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

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

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

	// СтандартныеПодсистемы.ДатыЗапретаИзменения
	ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.ДатыЗапретаИзменения

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура РасчетРезерваОтпусковСотрудникПриИзменении(Элемент)
	
	СтрокаТаблицы    = Элементы.РасчетРезерваОтпусков.ТекущиеДанные;
	ТекущийСотрудник = СтрокаТаблицы.Сотрудник;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция ЗаданиеВыполнено(ИдентификаторЗадания)
	
	Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания);
	
КонецФункции

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

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

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

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

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

&НаКлиенте
Процедура ДобавитьИзмененныеДанные(ИмяТаблицы, Сотрудник)
	
	НоваяСтрока = ИзмененныеДанные.Добавить();
	НоваяСтрока.Сотрудник = Сотрудник;
	
КонецПроцедуры

#Область ВспомогательныеПроцедурыИФункции

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

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

&НаСервере
Процедура ПроверитьИспользованиеОбмена()

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

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


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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьНадписиВСтроке(ТекущиеДанные)
	
	ТекущиеДанные.НадписьБУ = НСтр("ru = 'БУ:'");
	ТекущиеДанные.НадписьНУ = НСтр("ru = 'НУ:'");
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область РедактированиеМесяцаСтрокой

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

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

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

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

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

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

&НаКлиенте
Процедура ОбработчикОжиданияМесяцНачисленияПриИзменении()

	ОбработатьИзменениеМесяцНачисленияНаСервере();
	
КонецПроцедуры

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

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

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

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

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

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

#Область Инициализация

ЗакрытьПослеЗаписи    = Ложь;

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

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