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

файл

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

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

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

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

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

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

&НаКлиенте
Процедура РаботаВРазныхТерриторияхПриИзменении(Элемент)
	УстановитьТерриториюВТаблицеПодробныхДанных();
	УстановитьСвойстваЭлементовОтображенияТерриторий();
КонецПроцедуры

&НаКлиенте
Процедура РаботаВРазныхУсловияхПриИзменении(Элемент)
	УстановитьТерриториюВТаблицеПодробныхДанных();
	УстановитьСвойстваЭлементовОтображенияУсловийТруда();
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура Ок(Команда)
	Если Модифицированность Тогда
		ОтредактированныеДанныеВХранилище();
		Закрыть(Истина);
	Иначе
		Закрыть(Ложь);
	КонецЕсли;		
КонецПроцедуры

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьПредставлениеДаты()
	ДатаПредставление = Формат(Дата, "ДФ='дд ддд.'");	
КонецПроцедуры	

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

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

	Возврат ВозвращаемыеДанные;	
КонецФункции	

&НаСервере
Функция СтруктураВозвращаемыхДанных()
	ВозвращаемыеДанные = Новый Структура;
	
	ПоляОписанияИнтервала = "Измерение, ИспользуетсяНесколькоЗначенийИзмерения, ЗначениеИзмерения, Часы, НомерПервогоДня, Длина, Открыт, НомерИнтервала";

	ТаблицаДанныхОВремени = Новый ТаблицаЗначений;
	ТаблицаДанныхОВремени.Колонки.Добавить("ВидВремени");
	ТаблицаДанныхОВремени.Колонки.Добавить("Территория");
	ТаблицаДанныхОВремени.Колонки.Добавить("УсловияТруда");
	ТаблицаДанныхОВремени.Колонки.Добавить("Часы");
	ТаблицаДанныхОВремени.Колонки.Добавить("ПереходящаяЧастьСмены");

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

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

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

&НаСервере
Процедура УстановитьСвойстваЭлементовФормы()
	УстановитьСвойстваЭлементовОтображенияТерриторий();	
	УстановитьСвойстваЭлементовОтображенияУсловийТруда();
КонецПроцедуры	

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

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

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

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

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

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



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

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