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

14.06.14

Разработка - Универсальные функции

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
ТаблицаДатЗаПериод(v1).epf
.epf 8,24Kb ver:1.01
46 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

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

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

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

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

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

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


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

Вступайте в нашу телеграмм-группу Инфостарт

Даты даты за период

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    4641    Abysswalker    11    

46

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    8612    DeerCven    15    

62

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    56525    dimanich70    85    

174

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7962    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    71015    atdonya    31    

72

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    9968    ke.92@mail.ru    17    

68
Отзывы
13. Tapochki-tmn 43 06.11.24 09:33 Сейчас в теме
(12) Все работает, только не в консоли запросов, а именно с

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

Третий параметр "ВСЕ" имеет решающее значение:

https://its.1c.ru/db/metod8dev/content/2660/hdoc

и да, правильно внесли корректировку про:

| НАЧАЛОПЕРИОДА(&НачДата, "+Интервал+") КАК НачИнтервала
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. monkbest 114 25.06.14 08:51 Сейчас в теме
Статья очень полезная. Сама обработка наверное тут не нужна, а вот кусок запроса, который формирует таблицу дата - круто. Раньше всегда решал задачу получения таблицы дат за период обращением к производственному календарю, соответсвенно все зависило от его заполненности. А тут, оказывается, можно без обращения к данным сформировать таблицу дат. Уже столько запросов в своей жизни накатал, но про итоги периодами узнал впервые, век живи, век учись))
2. Программулькин 302 26.06.14 04:34 Сейчас в теме
какая область применения?
3. ignor 237 09.10.14 09:24 Сейчас в теме
Можно утащить к своей статье Ваш вариант заполнения таблицы
http://1cniku.ru/Articles/regqery.html#RegQuery
4. mtv:) 1028 09.10.14 10:32 Сейчас в теме
(3) ignor, Утащить можно :), пользуйтесь на здоровье.
5. agent00mouse 261 22.05.18 20:09 Сейчас в теме
А если хочется этот же результат но во временную таблицу в скд да ещё и с произвольным шагом в днях?
6. VKuser260537212 22.02.19 09:29 Сейчас в теме
все отлично, но вместо:
"| НАЧАЛОПЕРИОДА(&НачДата, День) КАК НачИнтервала"
надо
"| НАЧАЛОПЕРИОДА(&НачДата, "+Интервал+") КАК НачИнтервала"

Иначе в случае если начало периода не совпадает с началом интервала, то будет в результат будет попадать лишняя дата (начало интервала), а в целом супер, спасибо за сэкономленное время!)
rusness; mtv:); +2 Ответить
7. ig-efrem 22 16.10.20 14:38 Сейчас в теме
8. pauk7878 12.11.21 02:56 Сейчас в теме
В каком формате нужно передать в функцию эти параметры - НачДата, КонДата, Интервал ?
9. sertrain 23.07.23 20:39 Сейчас в теме
Может спустя 8 лет итоги начали по другому работать, но у меня в результате запроса всего одна группировка с начальной датой
user1027191; uralkit@uralkit.ru; kassbar; +3 Ответить
10. ivanleb 05.09.23 16:11 Сейчас в теме
11. Briolin1C 22.11.23 13:14 Сейчас в теме
12. slauter77 20 06.09.24 11:28 Сейчас в теме
Не работает так больше, 1с прикрыла лавочку :(
13. Tapochki-tmn 43 06.11.24 09:33 Сейчас в теме
(12) Все работает, только не в консоли запросов, а именно с

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

Третий параметр "ВСЕ" имеет решающее значение:

https://its.1c.ru/db/metod8dev/content/2660/hdoc

и да, правильно внесли корректировку про:

| НАЧАЛОПЕРИОДА(&НачДата, "+Интервал+") КАК НачИнтервала
Для отправки сообщения требуется регистрация/авторизация