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