Страницы: 1
RSS
Нюансы работы функции «РАБДЕНЬ.МЕЖД», The nuances of «WorkDay_Intl» function
 
Приветствую!

Нюанс№1
Если в функции =РАБДЕНЬ.МЕЖД(ДатаНачала, ЧислоДней, [Выходные], [Праздники]) указать 0 в качестве ЧислоДней, то она перестаёт работать и выдаёт просто ДатаНачала без учёта выходных и праздников.
Всё надо тестить у мелкомягких :evil:

Выход:
проверять на 0 и, в таком случае, ставить 1 для  ЧислоДней и отнимать 1 от ДатаНачала.

Пример:
я получаю дату начала работ на объекте и передаю в эту функцию, чтобы получить первый рабочий день с учётом выходных и праздников, начиная с этой даты.
Просто это сделать, как выяснилось, не получится…

Очередной ни хрена не очевидный и неудобный нюанс, о котором, к тому же, в справке — ни слова
Продолжение следует…

UPD: Та же функция, но с нормальным названием и описанием  :)
=РАБДЕНЬ.ПОСЛЕД(НачДата, КолРабДней, [Выходные], [Праздники])
    • Функция возвращает дату последнего рабочего дня после НачДата спустя КолРабДней.
    • То есть, между НачДата и результатом функции находится КолРабДней, с учётом настроек выходных и праздничных дней.
    • НачДата НЕ входит в их число, а результат функции входит, т.к. является последним рабочим днём из числа указанных.
    • При указании 0 в качестве КолРабДней, функция вернёт НачДата.

Аналог на VBA. Файл и коды (я неожиданно проиграл)
Изменено: Jack Famous - 20.05.2022 14:22:33
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
в описании функции:
Количество_дней    Обязательный. Количество рабочих дней до или после начальной даты. Положительное значение обозначает дату в будущем, отрицательное — дату в прошлом. Смещение усекается до целого числа.
сказано что количество дней должно быть ПОЛОЖИТЕЛЬНЫМ или ОТРИЦАТЕЛЬНЫМ числом
с нулем нет смысла пытаться что-то считать
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, знал, что вы обязательно заглянете, чтобы меня поучить) Рад, что в этот раз с какими-никакими, а аргументами  :)

Итак, вы правы, и я видел что ЭТО там написано, НО:
    • также там написано, что будет, если передавать в качестве "необычных аргументов", но про 0 - ни слова.
    • что мешало дать пользователям вводить 0 и получать корректный и ожидаемый результат работы функции?
Зачем эти сложности? Это как дать калькулятор, в котором нельзя использовать цифру 4 потому что "иди лесом" — вот почему.
    • этот аргумент даже не является опциональным (при неуказании которого был бы 0 и хоть как-то можно бы было понять тупую логику).
Изменено: Jack Famous - 18.05.2022 16:23:42
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
Очередной ни хрена не очевидный и неудобный нюанс
это почему? если ты указываешь, что прибавлять надо "нифига" - то это и прибавляется :) По-моему более чем очевидно.
Если к сегодня прибавить 0 дней - то получится как ни крути сегодня, а не какая-то другая дата. В этом весь принцип.
Для меня как раз было бы совсем неочевидным, если я указываю никуда не смещать дату(т.е. у меня идет ссылка на ячейку, где 0 дней), а она куда-то смещается.  
Изменено: Дмитрий(The_Prist) Щербаков - 18.05.2022 16:23:30
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Ігор Гончаренко: с нулем нет смысла пытаться что-то считать
Цитата
Дмитрий(The_Prist) Щербаков: Если к сегодня прибавить 0 дней - то получится как ни крути сегодня
абсолютно верно, если только не учитывать, что функция работает с выходными и праздниками. В таком случае, я хочу найти первый рабочий день, начиная прямо с указанной даты.
Изменено: Jack Famous - 18.05.2022 16:26:25
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, выше дополнил. На мой взгляд все корректно. Уже обсуждалось не раз - всем не угодишь. И делать какое-то смещение там, где пользователь его не указал - это еще большая подлость, чем сделать ожидаемо-прогнозируемое "ничего".
Представь два столбца:
1 - дата
2 - кол-во дней для прибавления
Ты вписываешь начальные даты и если не хочешь ничего смещать - пишешь 0 дней, т.к. все завершилось одним днем, пусть и выходным. Вполне жизненная ситуация, у меня были такие проекты. Протягиваешь формулу с указанием в качестве аргументов ссылки на эти столбцы и БАЦ! У тебя вместо ожидаемой даты начала(она же окончание) - какой-то другой день...Так себе фишка.
Изменено: Дмитрий(The_Prist) Щербаков - 18.05.2022 16:27:17
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков: если не хочешь ничего смещать - пишешь 0 дней
логика есть, но проще обойти 0 и писать дату начала в третьем столбце в таком случае, чем менять при нуле 2 аргумента функции…

«Возвращает дату в числовом номере, отсвеяданную [прикольное слово] до или после заданного количества рабочих дней с настраиваемой датой выходных»
Есть Дата, есть нолевое смещение, но есть праздники и выходные. Задача функции в таком случае, как мне кажется, вернуть первый рабочий день с учётом настроек. Если указанная Дата не попала в выходные и праздники, то остаётся она, но, если попала — я жду первый рабочий день, всё-таки…

Ладно — для меня главным было описать это, чтобы другие тоже учли, кто увидит…  :idea:
Тем не менее, интересно, сколько найдётся людей с моей точкой зрения, а то пока что 1:2  :(
Изменено: Jack Famous - 18.05.2022 16:35:06
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous,  а не проблема ли просто в том что функция возвращает дату между которой и заданной указанное количество дней, а не первый рабочий день? Другое дело, что применение её может помочь в этом.
Что касается описания 0, то также нет описания того что что указав +- очень большое  число  это приведет к сбою ведь предельные даты  1 (01.01.1900) и 2 958 465 (31.12.9999)
Но главное не это, а то что нужно пользоваться первоисточником
Days    Required. The number of workdays before or after the start_date. A positive value yields a future date; a negative value yields a past date; a zero value yields the start_date. Day-offset is truncated to an integer. И на фоне
Цитата
The nuances of «WorkDay_Intl» function
это еще более комично.
Изменено: БМВ - 19.05.2022 07:55:13
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ: функция возвращает дату между которой и заданной указанное количество дней
ну давай так: подсчётом количества рабочих дней между 2мя датами у нас занимается ЧИСТРАБДНИ.МЕЖД, остаётся только, обратная ей функция — вычисление даты, отстоящей от заданной на указанное количество рабочих дней с указанием выходных и праздников. Чем и занимается РАБДЕНЬ.МЕЖД.
    С одной стороны, действительно, если смещаться на 0 рабочих дней, то останешься на месте, но вся соль-то в том, что заданная дата сама может попадать на выходной или праздник и очень неплохо было бы иметь возможность её легко и быстро проверить. Отнимать там и прибавлять тут мне видится сложнее, чем оставить обязательным только первый аргумент и при нулевом втором проверять саму дату. Это проще и логичнее.
    С другой стороны, разрабы не обязаны делать, как я это вижу  :D . Димин пример с нолём для игнорирования вполне себе наглядный.
    За оригинал спасибо - я подозревал, что он может отличаться и сраной локали нельзя верить (отдельная тема, что огромная многомиллиардная корпорация не может нормально перевести свою документацию). Да - там указано.

    Сделаю свой аналог для VBA и потестирую в нечестном тесте на скорость  :D
Изменено: Jack Famous - 19.05.2022 09:43:16
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
сама может попадать на выходной или праздник
вопрос: сколько рабочих дней нужно прибавить к субботе, чтобы получить понедельник?
Я вот вбил в ячейку А1 дату 21.05.2022(Суббота). В А2 формулу: =РАБДЕНЬ.МЕЖД(A1;1;1)
И получил ожидаемую дату 23.05.2022. Т.е. понедельник. Было бы очень странно, если бы вбивая 0 я бы получал  опять понедельник - ведь я не указал ни одного рабочего дня для прибавления.
Мне кажется ты просто сильно зациклился именно на своём видении работы функции :) Повторюсь: на всех не угодишь, как ни крутись и в формулу на мой взгляд заложена более чем логичная цепочка вычислений, понятная большинству.
Изменено: Дмитрий(The_Prist) Щербаков - 19.05.2022 09:50:04
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, один, при стандартных выходных СбВс  :)
Изменено: Jack Famous - 19.05.2022 09:45:22
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
один, при стандартных выходных СбВс
вот ты и ответил на свой вопрос. Функция именно этой логике и следует. Чуть выше дополнил сообщение, хотя это наверное, лишнее уже :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Jack Famous: С другой стороны, разрабы не обязаны делать, как я это вижу
Цитата
Дмитрий(The_Prist) Щербаков: Мне кажется ты просто сильно зациклился именно на своём видении работы функции
наверное, так и есть  :)
Пример — отличный, ещё лучше, чем со столбцами  ;)  Спасибо! :idea:

UPD:
Дмитрий(The_Prist) Щербаков, а если трактовать "в лоб", то есть "верни мне дату первого рабочего дня, начиная с субботы", то при 0, 1 и 2 в качестве смещения, должно возвращать понедельник  :D

Но я проникся твоей логикой — всё-таки рабочие дни не могут быть нулевыми…
Признаю — функция работает исправно, хотя описание я бы, конечно, другое сделал, как и название функции (добавил в шапку)  :)
Изменено: Jack Famous - 19.05.2022 13:25:48
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
описание я бы, конечно, другое сделал
ну вот как раз это можно применить к 80% функций Excel :) Если описания были бы понятны каждому - то необходимость проводить тренинги точно бы отпала. Так что спасибо Microsoft, что не оставляешь без работы  :D  
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Jack Famous, спасибо за столь развернутое описание данной функции, именно то что я искал, тоже столкнулся с проблемой что не считается корректно если начало периода праздничный день. Ваша статья помогла разобраться
 
Александр Берг, спасибо за отзыв  :)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх