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