Страницы: 1
RSS
Как считать сроки наступления событий с учетом праздников и нерабочих дней
 
Прошу помощи в объяснении "почему не работает".

Идея: отслеживать граничный срок для ответа на полученный документ (например, в судебном процессе).
Цель: информировать пользователя о таком граничном сроке с учетом положений законодательства, которые предусматривают, что "если граничная дата выпадает на праздник или нерабочий день, то граничной датой есть следующий рабочий день".

Пример: документ пришел 28.12.2018 года и есть 10 дней на ответ.
Код
28.12.2018 + 10 = 07.01.2019

07.01.2019 - праздник, следовательно нужно выдать в ячейке 08.01.2019

Код
=ЕСЛИМН([@[Дата получения документа]]+10=ДАТА(2019;1;7); ([@[Дата получения документа]]+10)+1) 

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

Но в 2019 году гораздо больше праздников. Как их все включить в качестве списка, с которым сверяется значение, в формулу?
Формула вида
Код
ЕСЛИМН(
               [@[Дата получения документа]]+10=ИЛИ(
                         ДАТА(2019;1;1);
                         ДАТА(2019;1;7);
                         ДАТА(2019;3;8);
                        );  [@[Дата получения документа]]+10+1)
не работает.

Файл во вложении.
 
=РАБДЕНЬ(стартовая дата;10; диапазон где указаны праздничные даты)
Лень двигатель прогресса, доказано!!!
 
Увы, но там считаются рабочие дни, когда мне нужны - календарные.
Т.е. 28.12.2019 - отсчитать 10 РАБОЧИХ дней - 11.01.2019 + учесть праздники 01.01.2019 + 07.01.2019 = 14.01.2019, а в моем случае должно быть 08.01.2019.
 
Составить список всех дат-исключений и от полученного числа дней отнять количество дат из списка, которые попадают в выбранный диапазон.
Если не справитесь сами, прикрепите новый пример со списком
 
Цитата
vikttur написал:
Составить список всех дат-исключений и от полученного числа дней отнять количесво дат из списка, которые попадают в выбранный диапазон
Но почему же отнимать?
Наоборот добавлять +1 день, если конечная дата попадает на дату из числа исключений.

Вот как в этом примере:
Код
=ЕСЛИМН([@[Дата получения документа]]+10=ДАТА(2019;1;7); ([@[Дата получения документа]]+10)+1)
 
да чет у вас ваще не понятно какие праздники нормальный пример дайте с праздничными днями которые нужно учесть и несколько стартовых дат и посчитанный вручную контрольный срок
Лень двигатель прогресса, доказано!!!
 
Добавить, ошибся... Я Вам даю направление, а не решение.
 
Простите, но в теме я четко описал, что формула ИЛИ (перечень дат) не работает.
Спасибо за направление, но я его уже испытал и не заработало: ни с диапазоном, ни с ДВССЫЛ на умную таблицу, ни просто со значениями, ни с датами через формулу ДАТА().
Потому и написал на форум.
 
derwagenistrot, контрольный выстрел в голову почему должно получится 08.01 если у вас в расчетный период попадает 2 праздничных дня 1.01 и 7.01
Лень двигатель прогресса, доказано!!!
 
Цитата
Сергей написал:
почему должно получится 08.01 если у вас в расчетный период попадает 2 праздничных дня 1.01 и 7.01
Вводная описана в первом посте "если граничная дата выпадает на праздник или нерабочий день, то граничной датой есть следующий рабочий день".
Когда
Код
28.12.2018 + 10 календарных дней = 07.01.2019
то формула должна выдать 08.01.2019, потому что
Код
 если 07.01.2019 = одна из дат списка исключений, то +1 день, т.е. 07.01.2019 +1 = 08.01.2019.
Это юридические аспекты, не математические.
Понимаю, что их сложно вместить в формулу, но вдруг можно.
 
долго думаете  
Лень двигатель прогресса, доказано!!!
 
За формулу спасибо, таких еще не встречал и не писал, но не то(
 
еще проще тогда для моего примера
Код
=ЕСЛИ(ЕЧИСЛО(ПОИСКПОЗ(B2+10;$F$1:$F$3;0));B2+10+1;B2+10)
Лень двигатель прогресса, доказано!!!
 
Спасибо огромное!!
Вот это работает!
 
Цитата
derwagenistrot написал:  в теме я четко описал, что формула ИЛИ (перечень дат) не работает
Я Вам не писал об этой функции
Цитата
от полученного числа дней отнять количество дат
Посчитать - не значит перечислить.
 
derwagenistrot, формула сделана только для данного примера если расчетная дата попадет на начало диапазона праздников длительностью хотя бы 2 дня то результат будет неверный вот для этого вас и просят нормальный примеро
Лень двигатель прогресса, доказано!!!
 
Сергей, вы правы.

При добавлении исключающих дат работать перестало.

Прилагаю обновленный файл.
Итого: есть перечень дат, которые нужно исключить из расчетов.
Это праздники и выходные дни.
Если граничная дата для ответа на документ припадает на выходной день, например, субботу, то формула должна указать следующий рабочий день - понедельник.

Признаюсь, загнал себя в угол и не знаю как это реализовать.

Пример:
Код
26.02.2019 + 10 дней = 08.03.2019
А должно быть:
Код
26.02.2019 + 10 дней = 08.03.2019+1+1+1=11.03.2019
Изменено: derwagenistrot - 30.10.2019 16:31:30
 
derwagenistrot,
Я может немного туп НО
в #3 вы пишите
Цитата
derwagenistrot написал:
Увы, но там считаются рабочие дни, когда мне нужны - календарные.
в #10 вы отвечаете вот так
Цитата
derwagenistrot написал:
Цитата
Сергей  написал:почему должно получится 08.01 если у вас в расчетный период попадает 2 праздничных дня 1.01 и 7.01
Вводная описана в первом посте "если граничная дата выпадает на праздник или нерабочий день, то граничной датой есть следующий рабочий день".
а теперь вот так.
Цитата
derwagenistrot написал:
Прилагаю обновленный файл.Итого: есть перечень дат, которые нужно исключить из расчетов.Это праздники и выходные дни.
и в прилагаемом файле есть дата 01.01.2019 про которую вам говорил Сергей, и выходные дни.

это не ваше случаем?)


В итоге формула которая в #2 подходит под ваше описание из #17.
В связи с этим вопрос в чём смысл поста #17?)))))))


Нефига не понятно, но очень интересно. :D
Изменено: Wild.Godlike - 30.10.2019 17:45:18
 
Согласен с Вами, что все запутано вышло.
Формула РАБДЕНЬ не подходит, т.к. ее второй аргумент считает рабочие дни.
Давайте попробую еще раз.

Прежде всего, есть список дат исключений - выходных дней и праздников.
Есть дата начала. Например, 28.12.2018
От нее необходимо отсчитать количество календарных дней. Например, 10.
Если результат формулы 28.12.2018+10 будет равен дате, которая находиться в списке исключений, то формула должна выдать следующий день, который не содержится в списке исключений. Например, 28.12.2018+10=07.01.2019 (дата из списка исключения), значит выдаст 08.01.2019.

Простите за запутанность.
 
а не бывало на Вашем веку такого, что какой-то рабочий день становится праздничным (примыкал к группе праздничных дней) а потом за этот день нужно было отработать в субботу, когда стандартно выходная суббота вдруг стала рабочей
это не нужно учитывать???
задача Ваша криво сформулирована, решать ее бессмысленно, результат будет такой же кривой, как постановка задачи
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
derwagenistrot, вообщем накрутил, накрутил, навертел я вам тут чего то! Вроде бы как понял я вашу задачу, моя крутилка-вертелка с ней справляется.
P.S. моей крутилки-вертелки, не обходимо, только указание праздничных дней, выходные дни она сама выкрутит  :D
Смотрите в примере, потом только дай-те ответ, правильно ли она навыкручивает :D  ;)
Код
=ЕСЛИ(ДЕНЬНЕД(ЕСЛИ(НЕ(ЕНД(ВПР([@[Дата получения документа]]+10;$D$2:$D$114;1;0)));[@[Дата получения документа]]+11;[@[Дата получения документа]]+10);2)=6;ЕСЛИ(НЕ(ЕНД(ВПР([@[Дата получения документа]]+10;$D$2:$D$114;1;0)));[@[Дата получения документа]]+11;[@[Дата получения документа]]+10)+2;ЕСЛИ(ДЕНЬНЕД(ЕСЛИ(НЕ(ЕНД(ВПР([@[Дата получения документа]]+10;$D$2:$D$114;1;0)));[@[Дата получения документа]]+11;[@[Дата получения документа]]+10);2)=7;ЕСЛИ(НЕ(ЕНД(ВПР([@[Дата получения документа]]+10;$D$2:$D$114;1;0)));[@[Дата получения документа]]+11;[@[Дата получения документа]]+10)+1;ЕСЛИ(НЕ(ЕНД(ВПР([@[Дата получения документа]]+10;$D$2:$D$114;1;0)));[@[Дата получения документа]]+11;[@[Дата получения документа]]+10)))
 
Массивная
=[@[Дата получения документа]]+9+MATCH(1;(WEEKDAY(ROW(INDEX(A:A;[@[Дата получения документа]]+10):INDEX(A:A;[@[Дата получения документа]]+30));2)<6)*ISERROR(MATCH(ROW(INDEX(A:A;[@[Дата получения документа]]+10):INDEX(A:A;[@[Дата получения документа]]+30));$D$2:$D$12;));)
Изменено: БМВ - 30.10.2019 23:00:18
По вопросам из тем форума, личку не читаю.
 
БМВ, а у вас то покомпактнее вертелка  ;)  , мне ещё учиться и учится ))
Изменено: Aleksey1107 - 30.10.2019 23:05:52
 
Aleksey1107, покомпактнее, но ни та ни другая не учитывает перенесенные выходные дни, хотя это всего одна доп таблица с указанием таких дней и еще одно условие проверки.
Изменено: БМВ - 30.10.2019 23:20:09
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх