1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
//Начало, Конец - начало и конец периода //Периодичность - строка "День", "Месяц", "Неделя", "Год", "Квартал" //Возвращает таблицу значений с колонками: // Начало - начало интервала // Конец - конец интервала // Номер - номер интервала (начиная с единицы) Функция обПериодыЗаИнтервал(Начало, Конец, Периодичность="День", ВыравниваниеПоПериоду=истина) Перем Р, Номер, ТекПериод, СледПериод; Р=Новый ТаблицаЗначений(); Р.Колонки.Добавить("Начало"); Р.Колонки.Добавить("Конец"); Р.Колонки.Добавить("Номер"); ТекПериод=Начало; Номер=1; Пока истина Цикл Если Периодичность="День" Тогда Если ВыравниваниеПоПериоду Тогда ТекПериод=НачалоДня(ТекПериод); СледПериод=КонецДня(ТекПериод); Иначе СледПериод=обДобавитьДни(ТекПериод, 1); КонецЕсли; ИначеЕсли Периодичность="Месяц" Тогда Если ВыравниваниеПоПериоду Тогда ТекПериод=НачалоМесяца(ТекПериод); СледПериод=КонецМесяца(ТекПериод); Иначе СледПериод=обДобавитьМесяцы(ТекПериод, 1); КонецЕсли; ИначеЕсли Периодичность="Год" Тогда Если ВыравниваниеПоПериоду Тогда ТекПериод=НачалоГода(ТекПериод); СледПериод=КонецГода(ТекПериод); Иначе СледПериод=обДобавитьМесяцы(ТекПериод, 12); КонецЕсли; ИначеЕсли Периодичность="Квартал" Тогда Если ВыравниваниеПоПериоду Тогда ТекПериод=НачалоКвартала(ТекПериод); СледПериод=КонецКвартала(ТекПериод); Иначе СледПериод=обДобавитьМесяцы(ТекПериод, 3); КонецЕсли; ИначеЕсли Периодичность="Неделя" Тогда Если ВыравниваниеПоПериоду Тогда ТекПериод=НачалоНедели(ТекПериод); СледПериод=КонецНедели(ТекПериод); Иначе СледПериод=обДобавитьДни(ТекПериод, 7); КонецЕсли; Иначе ВызватьИсключение "Неизвестная периодичность времени:"+Периодичность; КонецЕсли; Если ТекПериод>Конец И НЕ Номер=1 Тогда Прервать; КонецЕсли; Стр=Р.Добавить(); Стр.Начало=ТекПериод; Стр.Конец=СледПериод; Стр.Номер=Номер; ТекПериод=СледПериод+1; //Переходим на следующий период (добавляем одну секунду) Номер=Номер+1; КонецЦикла; Возврат Р; КонецФункции |