Имя: Пароль:
1C
1С v8
Получить количество рабочих дней между двумя датами запросом
0 Kuzen
 
09.08.11
15:54
Подсчитываем дни с помощью регистра сведений РегламентированныйПроизводственныйКалендарь.

* Стоит условие что дата окончания должна попадать на рабочий день.
* Начальная дата не проверяется на то, что должна быть рабочим днем.
* Начальная дата за рабочий день не считается.
* Нет проверок что календарь не заполнен, это можно сделать отдельно.

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

СГРУППИРОВАТЬ ПО
   Даты.ДатаНачала,
   Даты.ДатаОкончания

УПОРЯДОЧИТЬ ПО
   ДатаНачала,
   ДатаОкончания
1 lubja
 
09.08.11
16:02
в чем вопрос?
2 Defender aka LINN
 
09.08.11
16:02
Хвастаешься?
3 dadmitrii
 
09.08.11
16:19
из типовой упп
Запрос.Текст = "
   |ВЫБРАТЬ
   |    ЕстьNull(СУММА(ВЫБОР
   |            КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня = &РабочийДень
   |                ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = &ПредпраздничныйДень
   |                ТОГДА 1
   |            ИНАЧЕ 0
   |        КОНЕЦ),0) КАК ЧислоРабочихДней
   |ИЗ
   |    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
   |ГДЕ
   |    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНач И &ДатаКон
4 Kuzen
 
09.08.11
16:45
(3) Дело в том что есть еще другой запрос в котором соответственно есть дата начальная и число рабочих дней и нужно получить дату окончания.

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

(2) Нет, просто искал готовое решение и не нашел, выложил может кому пригодится.

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