Данные для расчета зарплаты / Форма документа / Модуль формы

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

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

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

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

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


#Область ОбработчикиСобытийПоляВыбораМесяцаМесяцРегистрацииВремени

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаполнитьИсполнителейРабот(Команда)
	ЗаполнитьИсполнителейРаботНаСервере();
КонецПроцедуры

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьСуммуПоТарифуВыполненныхРабот(СтрокаТаблицы)
	СтрокаТаблицы.СуммаПоТарифу = ?(СтрокаТаблицы.ФиксЗначение, 0,
		СтрокаТаблицы.ТарифнаяСтавка * ?(СтрокаТаблицы.ВремяВЧасах, СтрокаТаблицы.ОтработаноЧасов, СтрокаТаблицы.ОтработаноДней));
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьИтогоПоКолонке(Форма, КоллекцияСтрок, ИмяКолонки)
	Форма[ИмяКолонки + "_Итог"] = КоллекцияСтрок.Итог(ИмяКолонки);
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция ДатаДняМесяца(НомерДня, ЛюбаяДатаМесяца)
	Возврат Дата(Год(ЛюбаяДатаМесяца), Месяц(ЛюбаяДатаМесяца), НомерДня);
КонецФункции

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

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

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

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

#Область РаботаСЗначениямиПоказателей

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

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

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

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

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

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

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

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

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

#Область РаботаСДаннымиОВремени

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

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

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

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

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

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

#Область РаботаСДаннымиОВыполненныхРаботах

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

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

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

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

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

#Область РаспределениеСтоимостиВыполненныхРабот

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьИсполнителейРаботНаСервере()
	ЗаполнитьСписокСотрудников();
	ЗаполнитьКоэффициентыРаспределенияВыполненныхРабот();
	
	ЗаполнитьТарифныеСтавкиИОтработанноеВремя();
	РаспределитьСтоимостьРаботПоСотрудникам();
КонецПроцедуры

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

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

&НаСервере
Процедура ОтменитьВсеИсправленияНаСервере()
	ЗаполнитьТарифныеСтавкиИОтработанноеВремя(, Истина);
	РаспределитьСтоимостьРаботПоСотрудникам(Истина);
КонецПроцедуры

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

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

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

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