Банковские дни запросом
Часто в отчетах требуется получить дату через N банковских дней,
данный запрос на выходе дает таблицу:
Дата | Дата_Через_N_Банковских дней.
Параметр (&КоличествоБанковскиДней*1.5 + 20)
не случаен 20 — максимальное количество не банковских дней подряд (примерно)
1,5 — отношение количества банковских дней к календарным дням,
чем он меньше тем быстрее выполняется запрос, но если он слишком мал, не все даты могут попасть в
результат, поэтому взял с запасом.
- Описание
- Подробнее
Описание
// выбрать рабочие (банковские дни)
ВЫБРАТЬ
РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК ДатаКалендаря
ПОМЕСТИТЬ РабочиеДни
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
РегламентированныйПроизводственныйКалендарь.Пятидневка = 1
И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= &Период
ИНДЕКСИРОВАТЬ ПО
ДатаКалендаря
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
РабочиеДни0.ДатаКалендаря КАК ДатаКалендаря0,
РабочиеДни1.ДатаКалендаря КАК ДатаКалендаря1
ПОМЕСТИТЬ ДатаПериода
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РабочиеДни0
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РабочиеДни КАК РабочиеДни1
ПО РабочиеДни0.ДатаКалендаря >= &Период
И РабочиеДни0.ДатаКалендаря <= РабочиеДни1.ДатаКалендаря
И (РабочиеДни1.ДатаКалендаря <= ДОБАВИТЬКДАТЕ(РабочиеДни0.ДатаКалендаря, ДЕНЬ, &КоличествоБанковскиДней*1.5 + 20))
ИНДЕКСИРОВАТЬ ПО
ДатаКалендаря0,
ДатаКалендаря1
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДатаПериода.ДатаКалендаря0 КАК Период,
ДатаПериода.ДатаКалендаря1 КАК ПериодЧерез_Н_Банковскихдней
ИЗ
ДатаПериода КАК ДатаПериода
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДатаПериода КАК ДатаПериода1
ПО ДатаПериода.ДатаКалендаря0 = ДатаПериода1.ДатаКалендаря0
И ДатаПериода.ДатаКалендаря1 >= ДатаПериода1.ДатаКалендаря1
СГРУППИРОВАТЬ ПО
ДатаПериода.ДатаКалендаря0,
ДатаПериода.ДатаКалендаря1
ИМЕЮЩИЕ
СУММА(1) = &КоличествоБанковскиДней
УПОРЯДОЧИТЬ ПО Период
////////////////////////////////////////////////////////////////////////////////
пример результата:
1
Период | ПериодЧерез_Н_Банковскихдней | ||
01.01.2011 | 21.02.2011 | ||
02.01.2011 | 21.02.2011 | ||
03.01.2011 | 21.02.2011 | ||
04.01.2011 | 21.02.2011 | ||
05.01.2011 | 21.02.2011 | ||
06.01.2011 | 21.02.2011 | ||
07.01.2011 | 21.02.2011 | ||
08.01.2011 | 21.02.2011 | ||
09.01.2011 | 21.02.2011 | ||
10.01.2011 | 21.02.2011 | ||
11.01.2011 | 21.02.2011 | ||
12.01.2011 | 22.02.2011 | ||
13.01.2011 | 24.02.2011 | ||
14.01.2011 | 25.02.2011 | ||
15.01.2011 | 28.02.2011 | ||
16.01.2011 | 28.02.2011 | ||
17.01.2011 | 28.02.2011 | ||
18.01.2011 | 01.03.2011 | ||
19.01.2011 | 02.03.2011 | ||
20.01.2011 | 03.03.2011 |
подобные статьи:
ФИФО для любопытных //sale.itcity.ru/public/68225/
ФИФО в Запросе (с пояснениями для начинающих) http://forum.infostart.ru/forum24/topic46871/

