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