Страницы: 1
RSS
Определение даты завершения процесса от даты начала процесса с учётом рабочего календаря и рабочего времени
 
Уважаемые спецы, добрый день!

У меня возникла вот такая задача (образец во вложении). Есть дата начала какого-то процесса или события (DateTime Start), и есть плановое количество часов на его выполнение(Duration in hours), исходя из этих данных надо рассчитать ДатаВремя завершения этого процесса (как вычисляемую колонку в файле pbix), но с учётом рабочих-нерабочих дней и рабочего времени (с понедельника по четверг с 9 до 18, пятница с 9 до 16).

Кто-нибудь сталкивался с подобной задачей?

Заранее спасибо!
Изменено: IADmitriy - 11.08.2021 10:35:55
 
а обеденное время предусмотрено распорядком рабочего дня?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, нет этого не требуется. Таймер тикает и в обеденное время, а обеденное время у всех разное.
 
ну, как знаете
но если какой-то процесс должен был бы завершен сегодня в 13:40, и с 13:45 предполагается передать результаты другому технологическому процессу, а у человека обед с 13:00 до 14:00, то закончит он эту работу только в 14:40 и это ломает стройный план с 13:45, не нужно на это время разжигать мартеновскую печь, потому что заготовки будут готовы в 14:40 и вы сожжете много ресурсов))
и кроме того с 9:00 до 18:00 это 9 рабочих часов или 8?
берем первую же задачу 160 часов при 8-часововм рабочем дне это 20 дней работы, а при 9-часовом - меньше 18!!! разница больше 2-х дней
с учетом пятниц в итоге будет по-больше но нужна точная продолжительность рабочего дня в пятницу тоже
Изменено: Ігор Гончаренко - 11.08.2021 10:32:40
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
у нас благо без мартеновских печей, хотя чисто теоретически было бы интересно. В моём случае Бизнес-процесс выглядит несколько иначе: я анализирую заявки в Jira, в них есть таймер и он по любому тикает с 9.00 до 18.00 с пн по чт, и с 9 до 16 в пт (это время оказания сервиса). В предпразничные дни на один час меньше. И сейчас требуется посчитать ДатаВремя когда этот таймер истечёт.
Изменено: IADmitriy - 11.08.2021 10:50:29
 
хорошо)))
но вопрос-то остался
если нечто было в работе весь понедельник, сколько времени уже прошло 9 или 8 часов???
аналогично для пятницы???
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, спросил у заказчика. Вы правы 8 часов.
 
мы теперь вместе работаем на вашего заказчика?
спросите когда у них обед
Изменено: Ігор Гончаренко - 11.08.2021 15:16:07
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, с часа до двух у нас перерыв (мы внутри одной организации)
 
строка 10 в вашем файле
что за время начала = 28.07.2021  19:32:12
при рабочем дне с 9:00 до 18:00, почему не 29.07.2021  9:00 ???

аналогично, строка 17 = 31.07.2021  20:17:29
как удалось начать работу в субботу после 20, если в пятницу после 16:00 все ушли домой
что делать с такими "началами"
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, да такое и такое вполне может быть, т.к. не все мы работает строго по расписанию, а часто много перерабатываем. В этом случае таймер запускается в следующее рабочее окно. Скажем если сотрудник открыл заявку  01/07/2021 в 23.37, то таймер начинает тикать в 02/07/2021 в 09.00. В общем и целом у меня то ещё веселье, до этого как-то удавалось выплывать)))
Изменено: IADmitriy - 11.08.2021 16:40:12
 
Цитата
Скажем если сотрудник открыл заявку  01/07/2021 в 23.37, то таймер начинает тикать в 02/07/2021 в 09.00
вот об этом и нужно говорить в постановке задачи, что имеем время открытия заявки и продолжительность работы в часах, нужно вычислить момент окончания работы с учетом графика работы... и описываете точный график работы, а не все это нужно из вас клещами вытягивать
этой формулой (если я ничего не упустил)
Код
=ЕСЛИ((ОСТАТ(B2;1)-13.5/24)^2<(1/48)^2;ЦЕЛОЕ(B2)+7/12;ЕСЛИ(ОСТАТ(B2;1) >3/4;ЦЕЛОЕ(B2)+1+3/8+ЕСЛИ(ДЕНЬНЕД(B2;2)>4;7-ДЕНЬНЕД(B2;2););ЕСЛИ(И(ДЕНЬНЕД(B2;2)=5;ОСТАТ(B2;1)>2/3);ЦЕЛОЕ(B2)+3+3/8;ЕСЛИ(ДЕНЬНЕД(B2;2)>5;ЦЕЛОЕ(B2)+3/8+8-ДЕНЬНЕД(B2;2);B2))))+ЕСЛИ(ОСТАТ(B2;1)<3/8;3/8-ОСТАТ(B2;1);)
вы можете посчитать время реального начало работы, с момента размещения заявки
дальше пишете + и добавляете к этому аналогичную формулу, которая добавит продолжительность работы в часах и  - дело сделано!))
Изменено: Ігор Гончаренко - 14.08.2021 11:02:40
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, большое спасибо. Попробую разобраться что к чему и перенести на DAX.
Я кстати в DAX кое-как решил задачу, но более менее нормально заработало только с точностью до часа, тут моё VBA - прошлое играет злую шутку. Я сделал структуру которая по факту напоминает цикл until, и это в отсутствии самих циклов на DAX.
Чуть попозже сброшу, может вам для спортивного интереса будет любопытно.

Ещё раз большое спасибо!
 
Цитата
IADmitriy написал:
более менее нормально заработало
видите-ли, в математике все строго, любая формула или работает или нет
не более менее, а работает или нет
если что-то не работает - это значит не работает все, это значит нельзя доверять результату расчетов
понимаете, как в макросах - если макрос не ВСЕГДА решает поставленную задачу это непотребный макрос (гавнокод), понимаете, использование такого макроса приводит к получению соответствующих результатов
в определении
Цитата
IADmitriy написал:
более менее нормально заработало
исключите слова "более" и "заработало", то что осталось - определяет степень работоспособности полученного решения
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Решение от SQLBI: https://www.youtube.com/watch?v=2HkBbqxBzF0&t=4s
Страницы: 1
Наверх