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