Каталог решений - Добавить к дате рабочие дни в запросе

Добавить к дате рабочие дни в запросе

Добавить к дате рабочие дни в запросе

В наличии

Был отчет, в котором к неким датам прибавлялось 15 дней функцией ДобавитьКДате(). Но вот понадобилось добавлять к дате не все дни, а только рабочие. Сделал запрос, может быть кому понадобится

Категория:

Описание

 Собственно запрос получился такой: 

 ВЫБРАТЬ Даты.Дата,

	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) КАК КоличествоРабочихДней,
	МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) КАК ДатаКалендаря,
	РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря КАК ДатаКалендаряДляГруппировки
ИЗ
	РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Даты КАК Даты
		ПО (Даты.Дата <= РегламентированныйПроизводственныйКалендарь.ДатаКалендаря)
			И (ДОБАВИТЬКДАТЕ(Даты.Дата, ДЕНЬ, &ГлубинаДней) > РегламентированныйПроизводственныйКалендарь.ДатаКалендаря)
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь1
		ПО РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря
ГДЕ
	(РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)
			ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий))

СГРУППИРОВАТЬ ПО
	РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря,
	Даты.Дата

ИМЕЮЩИЕ
	МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря

 Таблица «Даты» может содержать любые данные с датой в виде отдельного поля или в виде реквизита документа.   Параметр «ГлубинаДней»  определяет, как глубоко вперёд просматривать даты относительно входящих дат.

Вот пример работы для одной даты 28.11.2012

    
ДатаКоличествоРабочихДнейДатаКалендаряДатаКалендаряДляГруппировки 
28.11.2012128.11.201228.11.2012 
28.11.2012229.11.201229.11.2012 
28.11.2012330.11.201230.11.2012 
28.11.2012403.12.201203.12.2012 
28.11.2012504.12.201204.12.2012 
28.11.2012605.12.201205.12.2012 
28.11.2012706.12.201206.12.2012 
28.11.2012807.12.201207.12.2012 
28.11.2012910.12.201210.12.2012 
28.11.20121011.12.201211.12.2012 
28.11.20121112.12.201212.12.2012 
28.11.20121213.12.201213.12.2012 
28.11.20121314.12.201214.12.2012 
28.11.20121417.12.201217.12.2012 
28.11.20121518.12.201218.12.2012 
28.11.20121619.12.201219.12.2012 
28.11.20121720.12.201220.12.2012 
28.11.20121821.12.201221.12.2012 
28.11.20121924.12.201224.12.2012 
28.11.20122025.12.201225.12.2012 
28.11.20122126.12.201226.12.2012 
28.11.20122227.12.201227.12.2012 

 

В конец запроса осталось добавить условие

И КОЛИЧЕСТВО(РАЗЛИЧНЫЕРегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = &РабочихДней

и отобрать данные по нужному количеству рабочих дней в параметре «РабочихДней»

Ну и в конце полная верия запроса, если захочется опробовать в консоли запросов

ВЫБРАТЬ
	РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК Дата
ПОМЕСТИТЬ Даты
ИЗ
	РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
	РегламентированныйПроизводственныйКалендарь.ДатаКалендаря В(&ВходящиеДаты)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	Даты.Дата,
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) КАК КоличествоРабочихДней,
	МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) КАК ДатаКалендаря,
	РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря КАК ДатаКалендаряДляГруппировки
ИЗ
	РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Даты КАК Даты
		ПО (Даты.Дата <= РегламентированныйПроизводственныйКалендарь.ДатаКалендаря)
			И (ДОБАВИТЬКДАТЕ(Даты.Дата, ДЕНЬ, &ГлубинаДней) > РегламентированныйПроизводственныйКалендарь.ДатаКалендаря)
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь1
		ПО РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря
ГДЕ
	(РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)
			ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий))

СГРУППИРОВАТЬ ПО
	РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря,
	Даты.Дата

ИМЕЮЩИЕ
	МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря
	И КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = &РабочихДней

 

has been added to your cart:
Оформление заказа