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

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

&НаКлиенте
Перем ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ПериодРегистрацииПриИзмененииНаСервере();
	
КонецПроцедуры

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьСтраницуГруппаСогласиеРаботника(Элементы, СогласиеТребуется)

	Элементы.ГруппаСогласиеРаботника.ТекущаяСтраница = ?(СогласиеТребуется, Элементы.СогласиеНеобходимо, Элементы.СогласиеНеТребуется);

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

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

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


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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ДниРаботыЗначениеПриИзменении(Элемент)
	
	ДниРаботыПриИзмененииНаСервере();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ИзменитьРеквизиты(, УдаляемыеРеквизиты);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ИмяКолонкиСтрока(ДатаДень, ВремяВЧасах) Экспорт
	
	Если ВремяВЧасах = 1 Тогда
		Возврат ИмяКолонкиДатаСтрока(ДатаДень);
	Иначе
		Возврат ИмяКолонкиРаботалСтрока(ДатаДень);
	КонецЕсли;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ИмяКолонкиДатаСтрока(ДатаДень) Экспорт
	Возврат "Дата" + Формат(ДатаДень, "ДФ=""ггггММдд""");
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ИмяКолонкиРаботалСтрока(ДатаДень) Экспорт
	Возврат "Работал" + Формат(ДатаДень, "ДФ=""ггггММдд""");
КонецФункции

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

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

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

&НаКлиенте
Процедура ЗаполнитьНомераСтрок()
	
	Для Каждого Стр Из Сотрудники Цикл		
		Стр.НомерСтроки = Сотрудники.Индекс(Стр) + 1;		
	КонецЦикла;
				
КонецПроцедуры

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

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

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

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