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

файл

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

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

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

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


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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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