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