Добрый день.

Есть задача.
Получить остатки по месяцам из регистра ПартииТоваровНаСкладах

```1c
    Выбрать
    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток
    ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Месяц)
```

Выбирает, но если нет оборотов, то нет и остатков. А они ведь есть...
Как получить остаток за месяц, в котором нет оборотов?

Прошу помочь.
---
Нашел решение.
ТЗ - это таблица значений с датами.

```1c
    ВЫБРАТЬ
    ТЗ.ДатаПериода
    ПОМЕСТИТЬ ВТ
    ИЗ
    &ТЗ КАК ТЗ
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ.ДатаПериода,
    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК Остаток,
    МАКСИМУМ(ПартииТоваровНаСкладахОстаткиИОбороты1.Период) КАК ПериодПусто,
    ПартииТоваровНаСкладахОстаткиИОбороты1.Номенклатура КАК НоменклатураПусто
    ПОМЕСТИТЬ ВТ1
    ИЗ
    ВТ КАК ВТ
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Месяц, , Номенклатура = &Номенклатура) КАК ПартииТоваровНаСкладахОстаткиИОбороты
    ПО ВТ.ДатаПериода = ПартииТоваровНаСкладахОстаткиИОбороты.Период
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Месяц, , Номенклатура = &Номенклатура) КАК ПартииТоваровНаСкладахОстаткиИОбороты1
    ПО ВТ.ДатаПериода >= ПартииТоваровНаСкладахОстаткиИОбороты1.Период

    СГРУППИРОВАТЬ ПО
    ВТ.ДатаПериода,
    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,
    ПартииТоваровНаСкладахОстаткиИОбороты1.Номенклатура
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ1.ДатаПериода,
    ЕСТЬNULL(ВТ1.Номенклатура, ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура) КАК Номенклатура,
    ЕСТЬNULL(ВТ1.Остаток, ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК Остаток
    ИЗ
    ВТ1 КАК ВТ1
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Месяц, , Номенклатура = &Номенклатура) КАК ПартииТоваровНаСкладахОстаткиИОбороты
    ПО ВТ1.НоменклатураПусто = ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура
    И ВТ1.ПериодПусто = ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура
```
---
Пока не совсем понимаю, что вы хотите. Если вам нужны чисто остатки, то что мешает воспользоваться виртуальной таблицей остатки?
---
мне нужно выбрать остатки за 12 месяцев, по каждому месяцу.
январь - 100
февраль - 200
и т.д.
мне делать 12 запросов?
---
Функция год не раскладывается на месяца? Вы в скд делаете или запрос для чего то чисто?
---
чисто запрос.
---
Я бы посоветовала отчет в скд
---
Нашел решение.
ТЗ - это таблица значений с датами.

```1c
    ВЫБРАТЬ
    ТЗ.ДатаПериода
    ПОМЕСТИТЬ ВТ
    ИЗ
    &ТЗ КАК ТЗ
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ.ДатаПериода,
    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК Остаток,
    МАКСИМУМ(ПартииТоваровНаСкладахОстаткиИОбороты1.Период) КАК ПериодПусто,
    ПартииТоваровНаСкладахОстаткиИОбороты1.Номенклатура КАК НоменклатураПусто
    ПОМЕСТИТЬ ВТ1
    ИЗ
    ВТ КАК ВТ
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Месяц, , Номенклатура = &Номенклатура) КАК ПартииТоваровНаСкладахОстаткиИОбороты
    ПО ВТ.ДатаПериода = ПартииТоваровНаСкладахОстаткиИОбороты.Период
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Месяц, , Номенклатура = &Номенклатура) КАК ПартииТоваровНаСкладахОстаткиИОбороты1
    ПО ВТ.ДатаПериода >= ПартииТоваровНаСкладахОстаткиИОбороты1.Период

    СГРУППИРОВАТЬ ПО
    ВТ.ДатаПериода,
    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,
    ПартииТоваровНаСкладахОстаткиИОбороты1.Номенклатура
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ1.ДатаПериода,
    ЕСТЬNULL(ВТ1.Номенклатура, ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура) КАК Номенклатура,
    ЕСТЬNULL(ВТ1.Остаток, ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК Остаток
    ИЗ
    ВТ1 КАК ВТ1
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Месяц, , Номенклатура = &Номенклатура) КАК ПартииТоваровНаСкладахОстаткиИОбороты
    ПО ВТ1.НоменклатураПусто = ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура
    И ВТ1.ПериодПусто = ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура
```