Имя: Пароль:
1C
1С v8
(ДобавленииКДате) Как можно исключить Выходные и Праздничные дни?
,
0 Артем12345
 
17.11.16
07:55
Приветствую! Подскажите как правильно исключить Выходные и Праздничные дни в Документообороте 1.3. Суть задачи: нужно ДобавитьКДате учитывая только рабочие. Например сегодня 17.11 четверг, пользователь ставит, что нужно добавить 2 дня, в итоге дата должна получиться 21.11, а не 19.11. Что сделал (Перетянул из ЗУП 2.5 Производственный календарь, далее во вложенном запросе получаю все рабочии и предпраздничные дни). А дальше завис, надо как то прибавить по датам полученным во вложенном запросе, а как понять не могу.

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

СГРУППИРОВАТЬ ПО
    ДОБАВИТЬКДАТЕ(Жалоба.Дата, ДЕНЬ, &КолДней)
1 aleks_default
 
17.11.16
08:59
Тебе надо посчитать количество тех дней, которые ты выбрал из производственного календаря
2 patria0muerte
 
17.11.16
09:31
3 patria0muerte
 
17.11.16
09:35
Если грубо - тебе надо пронумеровать производственный календарь, и джойнить его по дата+ количество дней
4 patria0muerte
 
17.11.16
09:43
Точнее - не так.

Джойнишь из пр. календаря строку с номером равным 1 + Количество дней.

Ну ты понел.
5 patria0muerte
 
17.11.16
09:44
А вообще по идее - в ДО все это (и отчеты и функции которые все это делают) должно уже быть, так что лучше юзай типовое.
6 Артем12345
 
17.11.16
10:28
Спасибо,
(4) что то подробное пытаюсь сделать, пока не получилось;
(5)версия конфы ДО 1.3.1.6, ничего не нашел. Посмотрю в других конфигурациях может встречу то, что подтолкнет в нужном направлении)
7 Vladal
 
17.11.16
10:36
Перетянул РегламентированныйПроизводственныйКалендарь?
Вот и отлично!
Теперь просто за период календаря получить только необходимое количество рабочих дней и в итоге будет искомая дата.

Примерно так:
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ " + ЧислоДней + "
|    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
|ИЗ
|    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
|ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря > &ДатаНач
|     И (РегламентированныйПроизводственныйКалендарь.ВидДня = &РабочийДень
|      ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = &ПредпраздничныйДень)
|";
8 Vladal
 
17.11.16
10:39
хотя... более кузяво будет параметры задать так:

И (РегламентированныйПроизводственныйКалендарь.ВидДня = Значение(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
    ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = Значение(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)
9 mistеr
 
17.11.16
11:05
(7) Упорядочить забыл.
10 Артем12345
 
18.11.16
07:53
Всем спасибо, особенно (7) Vladal, всё получилось
11 Лефмихалыч
 
18.11.16
08:47
(8) более кузяво было бы выкинут в пень ИЛИ. Либо объединение, либо "И" и равенство.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.