Каталог решений - Банковские дни запросом

Банковские дни запросом

Банковские дни запросом

В наличии

Часто в отчетах требуется получить дату через 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/

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