HelpF.pro

Функция вычисляет даты начала/конца периодов за интервал в виде таблицы значений

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

ТекПериод=Начало;
Номер=1;
Пока истина Цикл
Если Периодичность="День" Тогда
Если ВыравниваниеПоПериоду Тогда
ТекПериод=НачалоДня(ТекПериод);
СледПериод=КонецДня(ТекПериод);
Иначе
СледПериод=обДобавитьДни(ТекПериод, 1);
КонецЕсли;
ИначеЕсли Периодичность="Месяц" Тогда
Если ВыравниваниеПоПериоду Тогда
ТекПериод=НачалоМесяца(ТекПериод);
СледПериод=КонецМесяца(ТекПериод);
Иначе
СледПериод=обДобавитьМесяцы(ТекПериод, 1);
КонецЕсли;
ИначеЕсли Периодичность="Год" Тогда
Если ВыравниваниеПоПериоду Тогда
ТекПериод=НачалоГода(ТекПериод);
СледПериод=КонецГода(ТекПериод);
Иначе
СледПериод=обДобавитьМесяцы(ТекПериод, 12);
КонецЕсли;
ИначеЕсли Периодичность="Квартал" Тогда
Если ВыравниваниеПоПериоду Тогда
ТекПериод=НачалоКвартала(ТекПериод);
СледПериод=КонецКвартала(ТекПериод);
Иначе
СледПериод=обДобавитьМесяцы(ТекПериод, 3);
КонецЕсли;
ИначеЕсли Периодичность="Неделя" Тогда
Если ВыравниваниеПоПериоду Тогда
ТекПериод=НачалоНедели(ТекПериод);
СледПериод=КонецНедели(ТекПериод);
Иначе
СледПериод=обДобавитьДни(ТекПериод, 7);
КонецЕсли;
Иначе
ВызватьИсключение "Неизвестная периодичность времени:"+Периодичность;
КонецЕсли;
Если ТекПериод>Конец И НЕ Номер=1 Тогда
Прервать;
КонецЕсли;

Стр=Р.Добавить();
Стр.Начало=ТекПериод;
Стр.Конец=СледПериод;
Стр.Номер=Номер;
ТекПериод=СледПериод+1; //Переходим на следующий период (добавляем одну секунду)
Номер=Номер+1;
КонецЦикла;
Возврат Р;
КонецФункции

Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq8/view/488.html