Индивидуальный график / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

#Область ДляВызоваИзДругихПодсистем

// СтандартныеПодсистемы.УправлениеДоступом

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

// Конец СтандартныеПодсистемы.УправлениеДоступом

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

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

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

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

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

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

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

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

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

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

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

Процедура ЗаполнитьДокументИсправление(ДанныеЗаполнения)
	
	Запрос = Новый Запрос;
	
	Запрос.УстановитьПараметр("Ссылка", ДанныеЗаполнения.Ссылка);
	
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ИндивидуальныйГрафик.Организация КАК Организация,
	|	ИндивидуальныйГрафик.Подразделение КАК Подразделение,
	|	ИндивидуальныйГрафик.ДатаНачалаПериода КАК ДатаНачалаПериода,
	|	ИндивидуальныйГрафик.ДатаОкончанияПериода КАК ДатаОкончанияПериода,
	|	ИндивидуальныйГрафик.ГрафикСменности КАК ГрафикСменности
	|ИЗ
	|	Документ.ИндивидуальныйГрафик КАК ИндивидуальныйГрафик
	|ГДЕ
	|	ИндивидуальныйГрафик.Ссылка = &Ссылка
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ИндивидуальныйГрафикДанныеОВремени.Сотрудник КАК Сотрудник,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов1 КАК Часов1,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов2 КАК Часов2,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов3 КАК Часов3,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов4 КАК Часов4,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов5 КАК Часов5,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов6 КАК Часов6,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов7 КАК Часов7,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов8 КАК Часов8,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов9 КАК Часов9,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов10 КАК Часов10,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов11 КАК Часов11,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов12 КАК Часов12,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов13 КАК Часов13,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов14 КАК Часов14,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов15 КАК Часов15,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов16 КАК Часов16,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов17 КАК Часов17,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов18 КАК Часов18,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов19 КАК Часов19,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов20 КАК Часов20,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов21 КАК Часов21,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов22 КАК Часов22,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов23 КАК Часов23,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов24 КАК Часов24,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов25 КАК Часов25,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов26 КАК Часов26,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов27 КАК Часов27,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов28 КАК Часов28,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов29 КАК Часов29,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов30 КАК Часов30,
	|	ИндивидуальныйГрафикДанныеОВремени.Часов31 КАК Часов31,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени1 КАК ВидВремени1,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени2 КАК ВидВремени2,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени3 КАК ВидВремени3,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени4 КАК ВидВремени4,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени5 КАК ВидВремени5,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени6 КАК ВидВремени6,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени7 КАК ВидВремени7,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени8 КАК ВидВремени8,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени9 КАК ВидВремени9,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени10 КАК ВидВремени10,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени11 КАК ВидВремени11,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени12 КАК ВидВремени12,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени13 КАК ВидВремени13,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени14 КАК ВидВремени14,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени15 КАК ВидВремени15,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени16 КАК ВидВремени16,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени17 КАК ВидВремени17,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени18 КАК ВидВремени18,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени19 КАК ВидВремени19,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени20 КАК ВидВремени20,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени21 КАК ВидВремени21,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени22 КАК ВидВремени22,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени23 КАК ВидВремени23,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени24 КАК ВидВремени24,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени25 КАК ВидВремени25,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени26 КАК ВидВремени26,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени27 КАК ВидВремени27,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени28 КАК ВидВремени28,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени29 КАК ВидВремени29,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени30 КАК ВидВремени30,
	|	ИндивидуальныйГрафикДанныеОВремени.ВидВремени31 КАК ВидВремени31,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены1 КАК ПереходящаяЧастьСмены1,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены2 КАК ПереходящаяЧастьСмены2,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены3 КАК ПереходящаяЧастьСмены3,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены4 КАК ПереходящаяЧастьСмены4,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены5 КАК ПереходящаяЧастьСмены5,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены6 КАК ПереходящаяЧастьСмены6,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены7 КАК ПереходящаяЧастьСмены7,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены8 КАК ПереходящаяЧастьСмены8,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены9 КАК ПереходящаяЧастьСмены9,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены10 КАК ПереходящаяЧастьСмены10,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены11 КАК ПереходящаяЧастьСмены11,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены12 КАК ПереходящаяЧастьСмены12,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены13 КАК ПереходящаяЧастьСмены13,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены14 КАК ПереходящаяЧастьСмены14,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены15 КАК ПереходящаяЧастьСмены15,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены16 КАК ПереходящаяЧастьСмены16,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены17 КАК ПереходящаяЧастьСмены17,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены18 КАК ПереходящаяЧастьСмены18,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены19 КАК ПереходящаяЧастьСмены19,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены20 КАК ПереходящаяЧастьСмены20,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены21 КАК ПереходящаяЧастьСмены21,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены22 КАК ПереходящаяЧастьСмены22,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены23 КАК ПереходящаяЧастьСмены23,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены24 КАК ПереходящаяЧастьСмены24,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены25 КАК ПереходящаяЧастьСмены25,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены26 КАК ПереходящаяЧастьСмены26,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены27 КАК ПереходящаяЧастьСмены27,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены28 КАК ПереходящаяЧастьСмены28,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены29 КАК ПереходящаяЧастьСмены29,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены30 КАК ПереходящаяЧастьСмены30,
	|	ИндивидуальныйГрафикДанныеОВремени.ПереходящаяЧастьСмены31 КАК ПереходящаяЧастьСмены31
	|ИЗ
	|	Документ.ИндивидуальныйГрафик.ДанныеОВремени КАК ИндивидуальныйГрафикДанныеОВремени
	|ГДЕ
	|	ИндивидуальныйГрафикДанныеОВремени.Ссылка = &Ссылка
	|	И &Условие";
	
	ЗаполнятьПоСпискуСотрудников = Ложь;
	Если ДанныеЗаполнения.Свойство("Сотрудники") Тогда
		ТекстУсловия = "ИндивидуальныйГрафикДанныеОВремени.Сотрудник В (&Сотрудники)";
		Запрос.УстановитьПараметр("Сотрудники", ДанныеЗаполнения.Сотрудники);
		ЗаполнятьПоСпискуСотрудников = Истина;
	Иначе
		ТекстУсловия = "ИСТИНА";
	КонецЕсли;
	
	Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Условие", ТекстУсловия); 
	
	Результаты = Запрос.ВыполнитьПакет();
	
	ДанныеШапки = Результаты[0].Выбрать();
	
	Если ДанныеШапки.Следующий() Тогда
	
		ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеШапки);
		
		Дата = ТекущаяДатаСеанса();
		
		ПериодРегистрации = Макс(НачалоМесяца(ТекущаяДатаСеанса()), КонецМесяца(ДанныеШапки.ДатаНачалаПериода) + 1);
		
		ИсправленныйДокумент = ДанныеЗаполнения.Ссылка;
		
		ПериодВводаДанныхОВремени = Перечисления.ПериодыВводаДанныхОВремени.ПрошлыйПериод;
		
		ДанныеОВремени.Загрузить(Результаты[1].Выгрузить());
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли

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