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