Ввод остатков отпусков / Форма документа / Модуль формы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЕжегодныеОтпускаПередУдалением(Элемент, Отказ)
	
	ОстаткиОтпусковКлиент.ПередУдалениемЕжегодногоОтпуска(ЭтотОбъект, Отказ, "ДействующийОтпуск, ВведеныОстатки", Истина);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьСвойстваЭлементовФормы(Форма)

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

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


&НаСервере
Процедура ПриПолученииДанныхНаСервере()

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

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

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

&НаКлиенте
Процедура УдалитьСтрокуПраваЗавершение(Результат, УдаляемаяСтрока) Экспорт

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

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

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

&НаСервере
Процедура ЗагрузитьОстаткиОтпусков(АдресВоВременномХранилище)

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

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

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

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

&НаСервереБезКонтекста
Функция КоличествоДнейЕжегодногоОтпускаПоУмолчанию(ВидЕжегодногоОтпуска)
	Возврат ОстаткиОтпусков.КоличествоДнейОтпускаВГодПоУмолчанию(ВидЕжегодногоОтпуска);
КонецФункции

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

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

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

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

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

&НаСервере
Процедура УстановитьРеквизитВведеныОстатки()

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

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

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

	ОстаткиОтпусковКлиентСервер.ВнестиСводныйОстатокВТаблицуПрав(Форма.Объект, "ОстатокНаДатуОстатков", "ВведеныОстатки");	
	ОстаткиОтпусковКлиент.ПриАктивизацииСтрокиЕжегодногоОтпуска(Форма, "ДействующийОтпуск, ВведеныОстатки");

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

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

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

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

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

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