Каталог решений - Подсчет банковских дней

Подсчет банковских дней

Подсчет банковских дней

В наличии

Алгоритм расчета банковских дней от заданной даты, опираясь на производственный календарь.
Внимание! Предпраздничные дни не учитываются!

Категория:

Описание

Не знаю, кому принадлежит этот алгоритм. Для меня он уже был народным. Здесь выкладываю большей частью и для себя, чтобы не забыть, но буду рад, если это пригодится кому-нибудь.

Часто возникает задача расчета просрочки платежа от даты реализации на текущую дату. Если речь идет о календарных днях, то все просто — это будет разность дат. Но если речь идет о банковских днях, то необходимо в таком расчете опираться на производственный календарь, который, естественно, предварительно необходимо будет заполнить.

Конкретно мы на нашем предприятии решали задачу просроченной задолженности в УТ 10.3. Там производственный календарь — это регистр сведений РегламентированныйПроизводственныйКалендарь.

Теперь привожу непосредственно алгоритм:

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

Так что получается на выходе этого запроса? А на выходе этого запроса получается таблица, состоящая из дат, исключая выходные дни, идущих в диапазоне от &ДатаДокумента до последней даты заполненного производственного календаря. Каждой такой дате будет соответствовать поле КоличествоДнейОтЗаданнойДаты, т.е от &ДатаДокумента. Приведем запрос и его результат на рисунке:

 

Теперь можно взять любую дату, сравнить ее с получившейся таблицей и узнать, какое количество банковских дней между &ДатаДокумента и любой из дат из результирующей таблицы. Правда, если датой из результирующей таблицы должен быть выходной, то придется пойти на какую-нибудь хитрость, поскольку выходные из этой таблицы исключены!

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