Запросы для работы со временными интервалами

 Ниже буду приводить запросы по работе с временными интервалами. Изначально нижеприведенный способ по генерации временных промежутков подсмотрел где-то на инфостарте и теперь при необходимости его использую.

Получить таблицу интервалов периода в минутах

Параметр «Период» в запросе ниже — это количество минут в каждом интервале, на которые требуется разбить период

Текст запроса под спойлером
ВЫБРАТЬ
	ДОБАВИТЬКДАТЕ(&НачалоПериода, СЕКУНДА, (bb.b * 100 + cc.c * 10 + dd.d) * 3600) КАК Дата
ПОМЕСТИТЬ _0_Часы
ИЗ
	(ВЫБРАТЬ
		0 КАК b
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		1
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		2
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		3
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		4
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		5
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		6
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		7
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		8
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		9) КАК bb
		ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			0 КАК c
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			1
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			2
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			3
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			4
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			5
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			6
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			7
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			8
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			9) КАК cc
		ПО (ИСТИНА)
		ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			0 КАК d
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			1
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			2
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			3
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			4
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			5
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			6
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			7
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			8
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			9) КАК dd
		ПО (ИСТИНА)
ГДЕ
	bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ЧАС)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	bb.b * 100 + cc.c * 10 + dd.d КАК Число_
ПОМЕСТИТЬ _0_Числа
ИЗ
	(ВЫБРАТЬ
		0 КАК b
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		1
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		2
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		3
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		4
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		5
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		6
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		7
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		8
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		9) КАК bb
		ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			0 КАК c
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			1
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			2
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			3
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			4
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			5
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			6
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			7
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			8
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			9) КАК cc
		ПО (ИСТИНА)
		ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			0 КАК d
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			1
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			2
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			3
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			4
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			5
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			6
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			7
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			8
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			9) КАК dd
		ПО (ИСТИНА)
ГДЕ
	bb.b * 100 + cc.c * 10 + dd.d <= 60
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	НАЧАЛОПЕРИОДА(_0_Часы.Дата, ДЕНЬ) КАК День,
	ЧАС(_0_Часы.Дата) КАК Час,
	МИНУТА(ДОБАВИТЬКДАТЕ(_0_Часы.Дата, СЕКУНДА, _0_Числа.Число_ * &Периодичность * 60)) КАК Минута,
	ДОБАВИТЬКДАТЕ(_0_Часы.Дата, СЕКУНДА, _0_Числа.Число_ * &Периодичность * 60) КАК НачалоМинут,
	ВЫБОР
		КОГДА ДОБАВИТЬКДАТЕ(_0_Часы.Дата, СЕКУНДА, (_0_Числа.Число_ + 1) * &Периодичность * 60 - 1) < &КонецПериода
			ТОГДА ДОБАВИТЬКДАТЕ(_0_Часы.Дата, СЕКУНДА, (_0_Числа.Число_ + 1) * &Периодичность * 60 - 1)
		ИНАЧЕ &КонецПериода
	КОНЕЦ КАК КонецМинут
ИЗ
	_0_Часы КАК _0_Часы
		ЛЕВОЕ СОЕДИНЕНИЕ _0_Числа КАК _0_Числа
		ПО (ЧАС(ДОБАВИТЬКДАТЕ(_0_Часы.Дата, СЕКУНДА, _0_Числа.Число_ * &Периодичность * 60)) = ЧАС(_0_Часы.Дата))
ГДЕ
	ДОБАВИТЬКДАТЕ(_0_Часы.Дата, СЕКУНДА, _0_Числа.Число_ * &Периодичность * 60) < &КонецПериода