gifts2017

Универсальная функция получения таблицы дат за период. С любым интервалом (день, неделя, месяц, квартал и т.д.)

Опубликовал Ю М (mtv:)) в раздел Программирование - Практика программирования

Небольшая функция, возвращающая таблицу значений со всеми датами за период. Интервал дат можно задать любой: Секунда, Минута, Час, День, Неделя, Месяц, Квартал, Полугодие, Год.

При разработке очередного отчета понадобилось получить таблицу дат за период, но с разными интервалами (День, Месяц, Квартал, Год). Поиск готовых решений в интернетене не дал приемлемых результатов. Пришлось разбираться самому. И вот, что из этого получилось.

Универсальная функция получения таблицы дат за период

// Возвращает таблицу значений с датами за период
//
// Параметры:
//  НачДата  - Дата - Начало периода
//  КонДата  - Дата - Конец периода
//  Интервал - Строка - одно из следующих значений:
//             (Секунда, Минута, Час, День, Неделя, Месяц, Квартал, Полугодие, Год)
//
// Возвращаемое значение:
//   Таблица значений с датами за период. Содержит одну колонку "НачИнтервала"
//
Функция ПолучитьТаблицуДатЗаПериод(НачДата, КонДата, Интервал)

   
тзИнтервалов = Новый ТаблицаЗначений;
   
тзИнтервалов.Колонки.Добавить("НачИнтервала", Новый ОписаниеТипов("Дата"));

   
Запрос = Новый Запрос;
   
Запрос.Текст = "ВЫБРАТЬ
    |   НАЧАЛОПЕРИОДА(&НачДата, День) КАК НачИнтервала
    |УПОРЯДОЧИТЬ ПО
    |   НачИнтервала
    |ИТОГИ ПО
    |   НачИнтервала ПЕРИОДАМИ("
+Интервал+", &НачДата, &КонДата)";
   
//Параметры запроса
   
Запрос.УстановитьПараметр("НачДата", НачДата);
   
Запрос.УстановитьПараметр("КонДата", КонДата);

   
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "НачИнтервала", "ВСЕ");
    Пока
Выборка.Следующий() Цикл
       
НоваяСтрока = тзИнтервалов.Добавить();
       
НоваяСтрока.НачИнтервала = Выборка.НачИнтервала;
    КонецЦикла;

    Возврат 
тзИнтервалов;

КонецФункции
//ПолучитьТаблицуДатЗаПериод()


Для примера прилагаю демонстрационную обработку. В ней можно выбрать Период, Интервал и сгенерировать таблицу Дат. Внешний вид обработки представлен на скриншотах.

Скачать файлы

Наименование Файл Версия Размер
ТаблицаДатЗаПериод(v1).epf 32
.epf 8,24Kb
14.06.14
32
.epf 1.01 8,24Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Антон Антонов (monkbest) 25.06.14 08:51
Статья очень полезная. Сама обработка наверное тут не нужна, а вот кусок запроса, который формирует таблицу дата - круто. Раньше всегда решал задачу получения таблицы дат за период обращением к производственному календарю, соответсвенно все зависило от его заполненности. А тут, оказывается, можно без обращения к данным сформировать таблицу дат. Уже столько запросов в своей жизни накатал, но про итоги периодами узнал впервые, век живи, век учись))
2. Программулькин (Программулькин) 26.06.14 04:34
какая область применения?
3. Андрей Бертыш (ignor) 09.10.14 09:24
Можно утащить к своей статье Ваш вариант заполнения таблицы
http://1cniku.ru/Articles/regqery.html#RegQuery
4. Ю М (mtv:)) 09.10.14 10:32
(3) ignor, Утащить можно :), пользуйтесь на здоровье.