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