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

файл

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
&НаКлиенте
Процедура Подключаемый_ДекорацияСостояниеОригиналаНажатие()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура КомандаЗаписать(Команда)
	
	ПараметрыЗаписи = Новый Структура("РежимЗаписи", ?(Объект.Проведен, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись));
	ЗаписатьНаКлиенте(Ложь, ПараметрыЗаписи);
	
КонецПроцедуры

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

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

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

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

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

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

	УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);

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

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

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

// СтандартныеПодсистемы.КонтрольВеденияУчета

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

// Конец СтандартныеПодсистемы.КонтрольВеденияУчета

#Область КлючевыеРеквизитыЗаполненияФормы

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

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

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

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

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

	Для Каждого СтрокаТаблицы Из ТаблицаДанных Цикл
		СтрокаТаблицы.ФизическоеЛицо = СоответствиеФизЛиц[СтрокаТаблицы.Сотрудник];
	КонецЦикла;
	
	Объект.Сотрудники.Загрузить(ТаблицаДанных);
		
	Если СотрудникиДобавлены Тогда
		Модифицированность = Истина;
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьПрежниеЗначенияСтроки(СтрокаСотрудники)

	Если ЗначениеЗаполнено(СтрокаСотрудники.Отпуск) Тогда
		СтрокаСотрудники.ВидОтпускаПрежний = СтрокаСотрудники.ВидОтпуска;
		СтрокаСотрудники.ДатаНачалаПрежняя = СтрокаСотрудники.ДатаНачала;
		СтрокаСотрудники.ДатаОкончанияПрежняя = СтрокаСотрудники.ДатаОкончания;
	КонецЕсли; 
	
КонецПроцедуры

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

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

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

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

&НаСервере
Процедура ЗаполнитьПримечаниеВСтроке(ТекущиеДанные)
	
	Документы.ГрафикОтпусков.ЗаполнитьПримечаниеВСтроке(ТекущиеДанные);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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