Индивидуальный график / Форма сменного графика / Модуль формы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
	УчетРабочегоВремениРасширенныйКлиент.ТабельОрганизацияПриИзменении(ЭтаФорма);
КонецПроцедуры

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

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

&НаКлиенте
Процедура ДатаНачалаПериодаПриИзменении(Элемент)
	
	Если НачалоМесяца(Объект.ДатаНачалаПериода) <> НачалоМесяца(Объект.ДатаОкончанияПериода) Тогда
		Объект.ДатаОкончанияПериода = КонецМесяца(Объект.ДатаНачалаПериода);
	КонецЕсли;
	
	ПериодРегистрацииПриИзменении();
	
КонецПроцедуры

&НаКлиенте
Процедура ДатаОкончанияПериодаПриИзменении(Элемент)
	
	Если НачалоМесяца(Объект.ДатаНачалаПериода) <> НачалоМесяца(Объект.ДатаОкончанияПериода) Тогда
		Объект.ДатаОкончанияПериода = КонецМесяца(Объект.ДатаНачалаПериода);
	КонецЕсли;
	
	ПериодРегистрацииПриИзменении();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура СортироватьПоУбыванию(Команда)
	СортироватьПоУбываниюНаСервере();
КонецПроцедуры

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

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

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

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

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

#Область ИсправлениеДокументов

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

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

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

	ИсправлениеДокументовЗарплатаКадрыКлиентСервер.УстановитьПоляИсправления(Форма, "ПериодическиеСведения");
	
КонецПроцедуры

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

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

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

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

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

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

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


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

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

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

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

#Область ЗаполнениеПредставления

&НаСервере
Процедура ПослеДобавленииСтрокИндивидуальногоГрафика(ДобавленныеСтрокиДанныхОВремени, ДобавляемыеСтрокиСмен)
	УстановитьИдентификаторыСтрокИндивидуальногоГрафика(ДобавленныеСтрокиДанныхОВремени, ДобавляемыеСтрокиСмен);	
	ВывестиПредставлениеИндивидуальногоГрафика(ДобавленныеСтрокиДанныхОВремени, ДобавляемыеСтрокиСмен);	
КонецПроцедуры	

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

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

&НаСервере
Процедура ДобавитьСтрокуПредставленияДанныхПоСотруднику(СтрокиДанных, СтрокаТаблицыСмен)
	Сотрудник = СтрокиДанных[0].Сотрудник;
	ИдентификаторДанных = СтрокиДанных[0].ИдентификаторДанных;
	
	СтрокаТаблицыПредставления = ПредставлениеДанныхСменногоГрафика.Добавить();
	СтрокаТаблицыПредставления.Сотрудник = Сотрудник;
	СтрокаТаблицыПредставления.ИдентификаторДанных = ИдентификаторДанных;	
	
	УстановитьПредставлениеДанныхИндивидуальногоГрафикаПоСотруднику(СтрокаТаблицыПредставления, СтрокиДанных, СтрокаТаблицыСмен);	
КонецПроцедуры	

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПредставлениеДанныхСменногоГрафикаСотрудникПриИзменении(Элемент)
	ПредставлениеДанныхСменногоГрафикаСотрудникПриИзмененииНаСервере();
КонецПроцедуры

&НаКлиенте
Процедура ПредставлениеДанныхСменногоГрафикаПередУдалением(Элемент, Отказ)
	ПриУдаленииСтрокТаблицыПредставления(Элементы.ПредставлениеДанныхСменногоГрафика.ВыделенныеСтроки);	
КонецПроцедуры

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

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

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

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

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

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

&НаСервере
Процедура ПослеОкончанииРедактированияДанныхОВремениНаСервере()
	ОтредактированныеДанные = ПолучитьИзВременногоХранилища(АдресРедактируемыхДанных);	
	
	ОтредактированныеДанныеДанныеВДанныеОбъекта(ОтредактированныеДанные)	
КонецПроцедуры	

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

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

&НаСервере                                                                            
Процедура ПослеДобавленииДопСтрокиДанныхПоСотруднику(СуществующиеСтроки, ДобавленнаяСтрока)
	ДобавленнаяСтрока.ИдентификаторДанных = СуществующиеСтроки[0].ИдентификаторДанных;		
КонецПроцедуры	

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

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

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

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

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

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

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