Добрый день. Помогите с запросом. Цель: Получить месяца и тарифы страховых взносов действующие в соответствующем месяце.

Пока додумался до этого:
```1c
    ВЫБРАТЬ РАЗЛИЧНЫЕ
    НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК ПериодМесяц
    ПОМЕСТИТЬ Месяца
    ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
    ГДЕ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ТарифСтраховыхВзносов.Период,
    ТарифСтраховыхВзносов.ВидТарифа,
    ТарифСтраховыхВзносов.ПФР,
    ТарифСтраховыхВзносов.ПФРНакопительная,
    ТарифСтраховыхВзносов.ФСС,
    ТарифСтраховыхВзносов.ФССсИностранцев,
    ТарифСтраховыхВзносов.ФФОМС,
    ТарифСтраховыхВзносов.ТФОМС
    ПОМЕСТИТЬ Тарифы
    ИЗ
    РегистрСведений.ТарифСтраховыхВзносов КАК ТарифСтраховыхВзносов
    ГДЕ
    ТарифСтраховыхВзносов.ВидТарифа = &ВидТарифа
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Месяца.ПериодМесяц КАК ПериодМесяц,
    МАКСИМУМ(Тарифы.Период) КАК Период,
    Тарифы.ВидТарифа,
    Тарифы.ПФР,
    Тарифы.ПФРНакопительная,
    Тарифы.ФСС,
    Тарифы.ФССсИностранцев,
    Тарифы.ФФОМС,
    Тарифы.ТФОМС
    ИЗ
    Месяца КАК Месяца
    ЛЕВОЕ СОЕДИНЕНИЕ Тарифы КАК Тарифы
    ПО (НАЧАЛОПЕРИОДА(Месяца.ПериодМесяц, ГОД) = Тарифы.Период)

    СГРУППИРОВАТЬ ПО
    Месяца.ПериодМесяц,
    Тарифы.ВидТарифа,
    Тарифы.ПФР,
    Тарифы.ПФРНакопительная,
    Тарифы.ФСС,
    Тарифы.ФССсИностранцев,
    Тарифы.ФФОМС,
    Тарифы.ТФОМС

    УПОРЯДОЧИТЬ ПО
    ПериодМесяц
```

Но выпадает 2013 и 2016 год т.к. тарифы не менялись и записей в регистре нет
---
Потому что запрос должен быть хитрее. По сути, нужно использовать такой же приём, как и при получении, например, розничных цен номенклатуры на каждый момент поступления этой номенклатуры.
Нужно сначала соединить месяцы с тарифами левым соединением по условию (НАЧАЛОПЕРИОДА(Месяца.ПериодМесяц, ГОД) >= Тарифы.Период) и сгруппировать полученную таблицу по всем полям, кроме Тарифы.Период, а по нему взять максимум. Получится, что на каждый месяц будем иметь последний тариф. Дальше уже, думаю, ясно, что делать.
---
если записей нет, значит и не действовали, что вам и надо получить судя по п.1
---
Потому что запрос должен быть хитрее. По сути, нужно использовать такой же приём, как и при получении, например, розничных цен номенклатуры на каждый момент поступления этой номенклатуры.
Нужно сначала соединить месяцы с тарифами левым соединением по условию (НАЧАЛОПЕРИОДА(Месяца.ПериодМесяц, ГОД) >= Тарифы.Период) и сгруппировать полученную таблицу по всем полям, кроме Тарифы.Период, а по нему взять максимум. Получится, что на каждый месяц будем иметь последний тариф. Дальше уже, думаю, ясно, что делать.
---
borodatii, точнее, будем иметь период последнего изменения тарифа. А чтобы вытащить сам тариф, нужно будет полученную таблицу (лучше её поместить во временную) ещё раз соединить с таблицей тарифов, уже по равенству периодов.
---
borodatii, Спасибо. Тема закрыта