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