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

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

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

В наличии

Возникла задача добавить рабочие дни к дате в запросе. Нашел кучу различных вариантов. Все варианты оказались требовательны к ресурсам. Предлагаю вашему вниманию очень простое решение. Основная идея в том, чтобы рассчитывать индекс даты к которой необходимо добавить рабочие дни, и, выполняя разницу между индексом предполагаемой рабочей даты и индексом текущей даты, искать количество дней, которое мы изначально хотели добавить.
Но есть один нюанс: прибавить рабочие дни можно только к рабочим дням. Ну это не проблема, доработать очень просто. Для моей задачи такого решения было достаточно.

Категория:

Описание

ВЫБРАТЬ
    &ДатаККоторойНужноДобавитьДни КАК Дата,
    &КоличествоДней КАК КоличествоДней
ПОМЕСТИТЬ втДаты
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    ДанныеКалендаря.Дата
ПОМЕСТИТЬ втДанныеКалендаря
ИЗ
    РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеКалендаря
ГДЕ
    ДанныеКалендаря.ПроизводственныйКалендарь.Код = "РФ"
    И (ДанныеКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
            ИЛИ ДанныеКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
    И ДанныеКалендаря.Дата >= &ДатаДляКалендаря
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    ДанныеКалендаря1.Дата,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДанныеКалендаря2.Дата) КАК Индекс
ПОМЕСТИТЬ втДанныеКалендаряСИндексами
ИЗ
    втДанныеКалендаря КАК ДанныеКалендаря1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ втДанныеКалендаря КАК ДанныеКалендаря2
        ПО ДанныеКалендаря1.Дата >= ДанныеКалендаря2.Дата

СГРУППИРОВАТЬ ПО
    ДанныеКалендаря1.Дата

ИНДЕКСИРОВАТЬ ПО
    Индекс
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    ВТ.Дата,
    ВТ.КоличествоДней,
    ДанныеКалендаря.Индекс КАК Индекс
ПОМЕСТИТЬ втДатыСИндексами
ИЗ
    втДаты КАК ВТ
        ЛЕВОЕ СОЕДИНЕНИЕ втДанныеКалендаряСИндексами КАК ДанныеКалендаря
        ПО ВТ.Дата = ДанныеКалендаря.Дата
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    Даты.Дата,
    ДанныеКалендаря.Дата КАК ДатаПослеДобавленияДней
ИЗ
    втДатыСИндексами КАК Даты
        ЛЕВОЕ СОЕДИНЕНИЕ втДанныеКалендаряСИндексами КАК ДанныеКалендаря
        ПО (ДанныеКалендаря.Индекс - Даты.Индекс = Даты.КоличествоДней)

 

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