Формула Salesforce: Формула рабочих часов не работает для времени начала вне рабочих часов и времени окончания в рабочие часы - PullRequest
0 голосов
/ 24 мая 2019

Я наткнулся на контрольно-пропускной пункт, и мне интересно, может ли кто-нибудь здесь помочь мне.Я ищу формулу, которая показывает рабочие часы между фактической датой окончания (BMCServiceDesk__Actual_End_Date__c) и фактической датой начала (BMCServiceDesk__Actual_Start_Date__c).Ниже приведены ссылки, помогающие создать формулу:

https://success.salesforce.com/answers?id=9063A000000iXTlQAM

Формула Salesforce: рассчитать рабочие часы между двумя датами

У меня естьформула изменилась, как показано ниже.У нас 9-часовой рабочий день (с 8:00 до 17:00), и мы находимся в центральном часовом поясе, поэтому мы используем «13: 00: 00» в формуле (13:00:00 GMT = 13:00 GMT = 8AM CT).Мы также хотим округлить значения часов до 2 десятичных знаков.

ROUND(9*(
(5*FLOOR((DATEVALUE(BMCServiceDesk__Actual_Start_Date__c)- 
DATE(1996,01,01))/7) +
MIN(5,
MOD(DATEVALUE(BMCServiceDesk__Actual_Start_Date__c)-DATE(1996,01,01), 7) +
    MIN(1, 24/9*(MOD(BMCServiceDesk__Actual_Start_Date__c-DATETIMEVALUE('1996-01-01 13:00:00'), 1)))
))
-
(5*FLOOR((DATEVALUE(BMCServiceDesk__Actual_End_Date__c)-DATE(1996,01,01))/7) +
MIN(5,
MOD(DATEVALUE(BMCServiceDesk__Actual_End_Date__c)-DATE(1996,01,01), 7) +
    MIN(1, 24/9*(MOD(BMCServiceDesk__Actual_End_Date__c-DATETIMEVALUE('1996-01-01 13:00:00'), 1)))
))
),2)

В большинстве моих тестовых случаев это работает, как и ожидалось.Когда и начало, и конец не в рабочие часы или в выходные дни, значение возвращается как «0,00».Если начало находится в пределах рабочих часов, и независимо от того, находится ли оно в пределах рабочих часов или после него, значение рассчитывается правильно.

Проблема возникает, когда начало не в рабочие часы и конецв рабочее времяНапример, изменение с началом «4/19/19 4:45 AM» и концом «19/19/19 9:00 AM» должно составлять «1,00» (с 8:00 до 9:00);вместо этого он рассчитывается как «-8.00».Похоже, что в любое время до 8:00 утра значение «-8,00» возвращается к 1:00 утра - 12:59 утра исправляется до «1,00» и корректно даже в рабочие часы предыдущего дня.

В другом примере, если пересечь весь день с изменением с началом «4/18/19 4:45 AM» и концом «19/19/19 9:00 AM», он должен рассчитываться до «10,00».'(один целый 9-часовой день и 8:00 - 9:00 во второй день);вместо этого он вычисляется как «1,00».

Может ли кто-нибудь помочь изменить вышеприведенную формулу, чтобы получить правильные расчеты рабочего часа для времени начала вне рабочих часов и времени окончания в рабочие часы?

1 Ответ

0 голосов
/ 25 мая 2019

Попробуйте это

FLOOR((BMCServiceDesk__Actual_End_Date__c - BMCServiceDesk__Actual_Start_Date__c)/7)*5*9 + 
MIN(5,FLOOR(MOD((BMCServiceDesk__Actual_End_Date__c - BMCServiceDesk__Actual_Start_Date__c),7)))*9+

IF((TIMEVALUE(BMCServiceDesk__Actual_End_Date__c)-TIMEVALUE("12:00:00.00"))/(3600*1000)>16,0,MIN(9,(TIMEVALUE(BMCServiceDesk__Actual_End_Date__c)-TIMEVALUE("12:00:00.00"))/(3600*1000))) - IF((TIMEVALUE(BMCServiceDesk__Actual_Start_Date__c)-TIMEVALUE("12:00:00.00"))/(3600*1000)>16,0,MIN(9,(TIMEVALUE(BMCServiceDesk__Actual_Start_Date__c)-TIMEVALUE("12:00:00.00"))/(3600*1000)))
...