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