Расчет рабочих дней между 2 датами в SSRS 2016 - PullRequest
0 голосов
/ 29 мая 2019

Я использую приведенный ниже код, найденный на этом сайте. Как-то работает, но не правильно, когда FromDate попадает в пятницу, так как добавляет еще один день сверху.

Смотрите скриншот для демонстрации.
Что не так в самом коде?

= (DateDiff(DateInterval.day,Fields!FromDate.Value,Fields!UntilDate.Value)+1)
- (DateDiff(DateInterval.WeekOfYear,Fields!FromDate.Value,Fields!UntilDate.Value)*2)
- IIF(Weekday(Fields!FromDate.Value,1) = 1,1,0)
- IIF(Weekday(Fields!FromDate.Value,1) = 7,1,0)
- IIF(Weekday(Fields!UntilDate.Value,1) = 1,1,0)
- IIF(Weekday(Fields!UntilDate.Value,1) = 7,1,0)

enter image description here

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Код в порядке.Проблема в том, что ваш компьютер может использовать другой первый день недели в настройках региона и языка, чем компьютер, на котором был сделан код (или мой).

enter image description here

Для проверки установите текстовое поле на =WEEKDAY(TODAY).Компьютер, на котором работает этот код, имеет 1 как воскресенье, что сегодня (среда) составит 4 .Я предполагаю, что вы получите 3.

Если ваш первый день недели - понедельник, вам нужно изменить будние дни на 6 и 7, а не на 1 и 7, которые используются в данный момент.

= (DateDiff(DateInterval.day,Parameters!START.Value,Parameters!END.Value)+1)
- (DateDiff(DateInterval.WeekOfYear,Parameters!START.Value,Parameters!END.Value)*2)
- IIF(Weekday(Parameters!START.Value,1) = 6,1,0)
- IIF(Weekday(Parameters!START.Value,1) = 7,1,0)
- IIF(Weekday(Parameters!END.Value,1) = 6,1,0)
- IIF(Weekday(Parameters!END.Value,1) = 7,1,0)

Если это суббота, вам нужно использовать 1 и 2 в качестве выходных.

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

РЕШЕНИЕ

В моем случае мне пришлось ввести CDate(format(Fields!FromDate.Value,"MM-dd-yyyy")), чтобы правильно рассчитать дни

I had to use the CDATE() in the code:
=(DateDiff(DateInterval.day,CDate(format(Fields!FromDate.Value,"MM-dd-yyyy")), 
CDate(format(Fields!UntilDate.Value,"MM-dd-yyyy")))+1)
-(DateDiff(DateInterval.WeekOfYear,CDate(format(Fields!FromDate.Value,"MM-dd-yyyy")), 
CDate(format(Fields!UntilDate.Value,"MM-dd-yyyy")))*2) 
- IIF(Weekday( CDate(format(Fields!FromDate.Value,"MM-dd-yyyy")),1) = 1,1,0)
- IIF(Weekday( CDate(format(Fields!FromDate.Value,"MM-dd-yyyy")),1) = 7,1,0)
- IIF(Weekday( CDate(format(Fields!UntilDate.Value,"MM-dd-yyyy")),1) = 1,1,0)
- IIF(Weekday( CDate(format(Fields!UntilDate.Value,"MM-dd-yyyy")),1) = 7,1,0)
...