Здравствуйте. Есть стандартный период в отчете, в зависимости от шага периода (квартал, день и т.д.) нужно выводить результат отчета по каждой дате (неделе, квартала). Как это можно сделать?
Есть вариант у меня что в зависимости от шага, нужно выбрать период правильно, но только не знаю как

```1c
    ВЫБОР
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.День) = &ШагПериода
    ТОГДА &Период
    ИНАЧЕ ВЫБОР
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Неделя) = &ШагПериода
    ТОГДА &Период
    ИНАЧЕ ВЫБОР
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Месяц) = &ШагПериода
    ТОГДА &Период
    ИНАЧЕ ВЫБОР
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Квартал) = &ШагПериода
    ТОГДА &Период
    ИНАЧЕ ВЫБОР
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Год) = &ШагПериода
    ТОГДА &Период
    КОНЕЦ
    КОНЕЦ
    КОНЕЦ
    КОНЕЦ
    КОНЕЦ
```
---
(20) Итак, текст запроса следующий:

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

В настройках параметра "Периодичность" указан тип "Число" и для удобства пользователя установлены доступные значения с нормальным представлением (см. рис.). При этом параметр используется всегда, т.к. на него будет завязано представление периода, следовательно флажок использования в пользовательских настройках недопустим.

Чтобы поле периода было красиво отформатировано в зависимости от выбранной периодичности, на закладке наборов данных ему установлено выражение представления (к сожалению, обещание не сдержал и громоздкой конструкции таки нашлось место):

```1c
    ВЫБОР
    КОГДА &Периодичность = 6
    ТОГДА Формат(Период, "ДФ=dd.MM.yyyy")
    КОГДА &Периодичность = 7
    ТОГДА Формат(Период, "ДФ=dd.MM.yy") + "-" + Формат(КонецПериода(Период, "НЕДЕЛЯ"), "ДФ=dd.MM.yy")
    КОГДА &Периодичность = 8
    ТОГДА Формат(Период, "ДФ=dd.MM.yy") + "-" + Формат(КонецПериода(Период, "ДЕКАДА"), "ДФ=dd.MM.yy")
    КОГДА &Периодичность = 9
    ТОГДА Формат(Период, "ДФ='MMMM yyyy'")
    КОГДА &Периодичность = 10
    ТОГДА Формат(Период, "ДФ='q "кв." yyyy'")
    КОГДА &Периодичность = 11
    ТОГДА ВЫБОР
    КОГДА Период = НачалоПериода(Период, "ГОД")
    ТОГДА Формат(Период, "ДФ='"1 пг." yyyy'")
    ИНАЧЕ Формат(Период, "ДФ='"2 пг." yyyy'")
    КОНЕЦ
    КОГДА &Периодичность = 12
    ТОГДА Формат(Период, "ДФ='yyyy'")
    ИНАЧЕ
    Формат(Период, "ДФ=dd.MM.yyyy")
    КОНЕЦ
```

Результаты на снимках. Пример во вложении.

P.S. Пока писал демо-пример, пришел к выводу, что в некоторых ситуациях я бы пошел другим путем:
- в запросе в качестве периодичности указал бы "Авто", в фигурных скобках никакой параметры бы не указывал;
- выбрал бы все поля периода (ПериодСекунда, ПериодДень, ..., Регистратор)
- в зависимости от внешних условий программно бы менял поле группировки, подставляя нужное: "ПериодСекунда", "ПериодДень" и т.д.
---
В параметрах таблицы выберите периодичность Регистратор, тогда в полях для выбора появится Период, его и подставляйте в выбор когда тогда.

```1c
    ВЫБОР &ШагПериода
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.День)
    ТОГДА НАЧАЛОПЕРИОДА(ВиртуальнаяТаблица.Период, ДЕНЬ)
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Неделя)
    ТОГДА НАЧАЛОПЕРИОДА(ВиртуальнаяТаблица.Период, НЕДЕЛЯ)
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Месяц)
    ТОГДА НАЧАЛОПЕРИОДА(ВиртуальнаяТаблица.Период, МЕСЯЦ)
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Квартал)
    ТОГДА НАЧАЛОПЕРИОДА(ВиртуальнаяТаблица.Период, КВАРТАЛ)
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Год)
    ТОГДА НАЧАЛОПЕРИОДА(ВиртуальнаяТаблица.Период, ГОД)
    КОНЕЦ КАК Период
```
---
```1c
    ВЫБОР
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.День) = &ШагПериода
    ТОГДА НАЧАЛОПЕРИОДА(ПериодКоторыйВЗапросе, ДЕНЬ)
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Неделя) = &ШагПериода
    ТОГДА НАЧАЛОПЕРИОДА(ПериодКоторыйВЗапросе, НЕДЕЛЯ)
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Месяц) = &ШагПериода
    ТОГДА НАЧАЛОПЕРИОДА(ПериодКоторыйВЗапросе, МЕСЯЦ)
```

и т.д.
---
у меня в запросе 2 параметра &НачалоПериода и &КонецПериода,как быть тогда?
---
Данные откуда выбираете?
---
из регистра накопления
---
Там есть такое поле под названием Период, так? Вот его в выражение НАЧАЛОПЕРИОДА и надо пихать.
---
у меня оборотный регистр накопления и почему-то не выбирается период в запрос
---
Выборка из виртуальной таблицы идет? Остатки, ОстаткиИОбороты?
---
выборка из виртуальной таблицы, где есть &НачалоПериода и &КонецПериода
---
в параметрах виртуальной таблицы есть еще периодичность.
---
Можете помочь, пожалуйста, как период из виртуальной таблицы правильнее вставить

ВЫБОР
  КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.День) = &ШагПериода
   ТОГДА НАЧАЛОПЕРИОДА(Период, ДЕНЬ)
  ИНАЧЕ ВЫБОР
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Неделя) = &ШагПериода
     ТОГДА НАЧАЛОПЕРИОДА(&НачалоПериода, НЕДЕЛЯ)
    ИНАЧЕ ВЫБОР
      КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Месяц) = &ШагПериода
       ТОГДА НАЧАЛОПЕРИОДА(&НачалоПериода, МЕСЯЦ)
      ИНАЧЕ ВЫБОР
        КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Квартал) = &ШагПериода
         ТОГДА НАЧАЛОПЕРИОДА(&НачалоПериода, КВАРТАЛ)
        ИНАЧЕ ВЫБОР
          КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Год) = &ШагПериода
           ТОГДА НАЧАЛОПЕРИОДА(&НачалоПериода, ГОД)
         КОНЕЦ
       КОНЕЦ
     КОНЕЦ
   КОНЕЦ
 КОНЕЦ КАК Период
ИЗ
 РегистрНакопления.ТоварыНаСкладах.Обороты(&НачалоПериода, &КонецПериода, Период, Склад = &Склад) КАК ТоварыНаСкладахОбороты
---
В параметрах таблицы выберите периодичность Регистратор, тогда в полях для выбора появится Период, его и подставляйте в выбор когда тогда.

```1c
    ВЫБОР &ШагПериода
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.День)
    ТОГДА НАЧАЛОПЕРИОДА(ВиртуальнаяТаблица.Период, ДЕНЬ)
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Неделя)
    ТОГДА НАЧАЛОПЕРИОДА(ВиртуальнаяТаблица.Период, НЕДЕЛЯ)
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Месяц)
    ТОГДА НАЧАЛОПЕРИОДА(ВиртуальнаяТаблица.Период, МЕСЯЦ)
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Квартал)
    ТОГДА НАЧАЛОПЕРИОДА(ВиртуальнаяТаблица.Период, КВАРТАЛ)
    КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Год)
    ТОГДА НАЧАЛОПЕРИОДА(ВиртуальнаяТаблица.Период, ГОД)
    КОНЕЦ КАК Период
```
---
огромное вам спасибо! Просто начинаю только программировать и задаю глупые вопросы
---
Ну вот после обеда еще подскажут что-нибудь)
---
тоже жду)
---
(5) Еще более элегантным решением будет использовать параметр указания периодичности прямо в параметре "Периодичность" виртуальной таблицы регистра. Тогда можно будет избавиться от громоздкой конструкции "Выбор...Когда...Тогда".
---
динамически текст запроса формировать что ли?
---
Нет. Использовать как обычный параметр, правда исключительно в фигурных скобках.
---
У меня, честно, смутное представление было всегда об этих скобках) А по периоду можно будет группировать?
---
У меня сейчас обед. :-) Через полчасика накидаю демопример для УТ.
---
(20) Итак, текст запроса следующий:

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

В настройках параметра "Периодичность" указан тип "Число" и для удобства пользователя установлены доступные значения с нормальным представлением (см. рис.). При этом параметр используется всегда, т.к. на него будет завязано представление периода, следовательно флажок использования в пользовательских настройках недопустим.

Чтобы поле периода было красиво отформатировано в зависимости от выбранной периодичности, на закладке наборов данных ему установлено выражение представления (к сожалению, обещание не сдержал и громоздкой конструкции таки нашлось место):

```1c
    ВЫБОР
    КОГДА &Периодичность = 6
    ТОГДА Формат(Период, "ДФ=dd.MM.yyyy")
    КОГДА &Периодичность = 7
    ТОГДА Формат(Период, "ДФ=dd.MM.yy") + "-" + Формат(КонецПериода(Период, "НЕДЕЛЯ"), "ДФ=dd.MM.yy")
    КОГДА &Периодичность = 8
    ТОГДА Формат(Период, "ДФ=dd.MM.yy") + "-" + Формат(КонецПериода(Период, "ДЕКАДА"), "ДФ=dd.MM.yy")
    КОГДА &Периодичность = 9
    ТОГДА Формат(Период, "ДФ='MMMM yyyy'")
    КОГДА &Периодичность = 10
    ТОГДА Формат(Период, "ДФ='q "кв." yyyy'")
    КОГДА &Периодичность = 11
    ТОГДА ВЫБОР
    КОГДА Период = НачалоПериода(Период, "ГОД")
    ТОГДА Формат(Период, "ДФ='"1 пг." yyyy'")
    ИНАЧЕ Формат(Период, "ДФ='"2 пг." yyyy'")
    КОНЕЦ
    КОГДА &Периодичность = 12
    ТОГДА Формат(Период, "ДФ='yyyy'")
    ИНАЧЕ
    Формат(Период, "ДФ=dd.MM.yyyy")
    КОНЕЦ
```

Результаты на снимках. Пример во вложении.

P.S. Пока писал демо-пример, пришел к выводу, что в некоторых ситуациях я бы пошел другим путем:
- в запросе в качестве периодичности указал бы "Авто", в фигурных скобках никакой параметры бы не указывал;
- выбрал бы все поля периода (ПериодСекунда, ПериодДень, ..., Регистратор)
- в зависимости от внешних условий программно бы менял поле группировки, подставляя нужное: "ПериодСекунда", "ПериодДень" и т.д.
---
Коллеги, а подскажите есть задача вывести отчет в формате 5 лет 6 последних кварталов, как настроить группировку
---
5 лет или 6 кварталов? Это две разные вещи
---
ну вот так хочет заказчик, есть идеи может в разные таблицы?
---
Мне кажется четко шесть кварталов нереально поставить. Но можно группировку год.. а там начало периода и конец пеиода хоть пять лет ставь, если есть данные(вручную пользователь ставит), но внутри периода год можно сделать период квартал в виде группировок. Но увидит клиент данные за 2, а не за полтора года.. Мне кажется оно не смертельно, тем более что вывод итогов по каждой группировке выводится, если только их вручную в настройках не убрать.
 Хотелось бы понять.. как клиент видит данное И...И... Но подозреваю, что как один из вариантов это вложенный отчет. Если его с основным отчетом не настроить по периоду, то данные будут розниться. Как вариант делать основной отчет с группировкой по периоду года, а вложенный отчет с группировкой по кварталам, если так надо)
Иначе говоря это будут в одной форме два разных отчета)
---
вот и я не понимаю как именно сделать 6 или 5 последних кварталов от конечной даты отчета
---
Знать бы точно ТЗ.. как должен выглядеть этот отчет, то как вариант это либо отдельно два отчета, либо вложенный отчет
---
при этом такую группировку хотят на любом отчете, например на фин результате или ддс
---
5 лет и 6 последних кварталов