1С рабочие дни в запросе

Разрабатывая некий функционал в 1С, бывает, необходимо посчитать количество рабочих дней после какой-то даты.

В этой статье примеры кода и запросы в которых считается количество рабочих дней:

Код, при вычислении определяет только по дню недели, викидывая выходные. Праздники не учитывает!

В запросе, с использованием производственного календаря и учетом всех праздников:

Еще один вариант, в котором допустим, что:

1) Регистр сведений Календарь имеет структуру (Измерения=<ДатаКалендаря>, Ресурсы=<ВидДня>), а перечисление ВидыДня задано как <Рабочий, Предпразничный>и праздничные дни в календаре отсутствуют.

2) В документе Реализация заданы поля Дата и ОтсрочкаДней. Тогда:

Собственно, если календарь содержит и праздничные дни, то можно добавить секцию ГДЕ, и там отобрать только рабочие дни. В секции ГДЕ можно отобрать и интересующий календарь, если ведется несколько календарей.

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

Если все же нужно вычислить рабочие дни без праздников и выходных, по данным производственного календаря, то функция ЧислоРабочихДней, которая есть в некоторых конфигурациях (воспользуйтесь глобальным поиском) очень сэкономит вам время.

Итак получился вот такой код, чисто арифметика без запросов к БД:

Постановка задачи:

Есть таблица, в которой указаны дата возникновения долга и допустимое количество дней просрочки в рабочих днях. Для простоты добавим сам документ в таблицу.

Док 1
04.03.2015 90
Док 2 04.03.2015 5
Док 3 04.03.2015 10
Док 4 05.03.2015 60

В результате должны получить таблицу вида

Ссылка
Дата возникновения долга Кол-во дней отсрочки Дата возникновения просроченного долга
Док 1 04.03.2015 90
Док 2 04.03.2015 5
Док 3 04.03.2015 10
Док 4 05.03.2015 60
Читайте также:  Телефон мейзу икс 5

Первоначально был сделан отчет на СКД, куда помещался внешний набор данных. Но, посидев-покурив, решили сварганить запрос. И вот о нем и расскажу вам.

Реализация:

Первоначальные данные получаются следующим куском кода

Само собой получим Регламентированный производственный календарь.

Здесь необходимо установить параметр "ВидДня" (значения перечисления Рабочий и Предпраздничный). Далее соединяем таблицу календаря саму с собой и получаем индекс даты (т.е. порядок следования записей) в нашей таблице

Тут соединим таблицу ВТ и ВТ_РеглКалендарьСИндексами для того, что бы узнать какой индекс будет у нашей даты возникновения долга. Дополнительно добавим индексацию по расчетному полю для дальнейших соединений.

Здесь приведу результаты промежуточной таблицы для наглядности.

Док 1
04.03.2015 90 1 293
Док 2 04.03.2015 5 1 293
Док 3 04.03.2015 10 1 293
Док 4 05.03.2015 60 1 294

Здесь колонка “Индекс даты долга” показывает индекс поля “Дата возникновения долга” в таблице ВТ_РеглКалендарьСИндексами.

Далее мы можем получить результат ” Дата возникновения просроченного долга ” для каждой даты долга с учетом дней просрочки. Для этого соединим две таблицы.

Здесь условие соединения означает, что мы хотим получить только ту дату из таблицы ВТ_РеглКалендарьСИндексами, у которой разница Индекса регламентированного календаря и Индекса даты долга будет равно именно количеству дней отсрочки.

Результирующая таблица выглядит следующим образом:

“>

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock detector