Подсчитываем дни с помощью регистра сведений РегламентированныйПроизводственныйКалендарь.
* Стоит условие что дата окончания должна попадать на рабочий день.
* Начальная дата не проверяется на то, что должна быть рабочим днем.
* Начальная дата за рабочий день не считается.
* Нет проверок что календарь не заполнен, это можно сделать отдельно.
ВЫБРАТЬ
Даты.ДатаНачала КАК ДатаНачала,
Даты.ДатаОкончания КАК ДатаОкончания,
КОЛИЧЕСТВО(РПК.ДатаКалендаря) - 1 КАК КоличествоРабочихДней
ИЗ
(ВЫБРАТЬ
ПодсчетРабочихДней.ДатаНачала КАК ДатаНачала,
ПодсчетРабочихДней.ДатаОкончания КАК ДатаОкончания
ИЗ
(ВЫБРАТЬ
Календарь1.ДатаКалендаря КАК ДатаНачала,
Календарь2.ДатаКалендаря КАК ДатаОкончания
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь1,
(ВЫБРАТЬ
Календарь2.ДатаКалендаря КАК ДатаКалендаря
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь2
ГДЕ
(Календарь2.ДатаКалендаря > &Дата1
И Календарь2.ДатаКалендаря < &Дата2)
И Календарь2.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)) КАК Календарь2
ГДЕ
Календарь1.ДатаКалендаря >= &Дата1
И Календарь1.ДатаКалендаря <= &Дата2
И Календарь1.ДатаКалендаря < Календарь2.ДатаКалендаря) КАК ПодсчетРабочихДней) КАК Даты,
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РПК
ГДЕ
РПК.ДатаКалендаря МЕЖДУ Даты.ДатаНачала И Даты.ДатаОкончания
И РПК.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
СГРУППИРОВАТЬ ПО
Даты.ДатаНачала,
Даты.ДатаОкончания
из типовой упп
Запрос.Текст = "
|ВЫБРАТЬ
| ЕстьNull(СУММА(ВЫБОР
| КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня = &РабочийДень
| ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = &ПредпраздничныйДень
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ),0) КАК ЧислоРабочихДней
|ИЗ
| РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
|ГДЕ
| РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНач И &ДатаКон
(3) Дело в том что есть еще другой запрос в котором соответственно есть дата начальная и число рабочих дней и нужно получить дату окончания.
Этот запрос не поможет, так как даты это параметры. А мой можно прицепить к другому запросу и получить дату окончания исходя из даты начала и количества рабочих дней.
(2) Нет, просто искал готовое решение и не нашел, выложил может кому пригодится.
В моем случае есть бизнес процесс который начинается с определенной даты, а закончится должен через сколько то рабочих дней и какой датой он должен окончится нужно вычислить.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший