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