Предновогодняя пора это не только беготня по магазинам, но и время отчетности. К сожалению, с отчетами тоже иногда бывают проблемы. ВОт одна из них: при попытке запустить любой отчет в SCSM вы можете получить вот такую ошибку:
System.Exception: Произошла ошибка при обработке отчета. ---> System.Exception: В выражении Value для параметр запроса "@StartDate" содержится ошибка: Предоставленные DateTime представляет недопустимое время. Например, если часы переведены вперед, любое время в периоде, который пропущен, является недопустимым.
Имя параметра: dateTime
--- Конец трассировки внутреннего стека исключений ---
в Microsoft.Reporting.WinForms.ServerReport.ServerUrlRequest(Boolean isAbortable, String url, Stream outputStream, String& mimeType, String& fileNameExtension)
в Microsoft.Reporting.WinForms.ServerReport.InternalRender(Boolean isAbortable, String format, String deviceInfo, NameValueCollection urlAccessParameters, Stream reportStream, String& mimeType, String& fileNameExtension)
в Microsoft.Reporting.WinForms.ProcessingThread.ProcessThreadMain(Object arg)
System.Exception: В выражении Value для параметр запроса "@StartDate" содержится ошибка: Предоставленные DateTime представляет недопустимое время. Например, если часы переведены вперед, любое время в периоде, который пропущен, является недопустимым.
Имя параметра: dateTime
Проблема кроется не в самом SCSM, а в переводе времени. Такая ошибка может возникнуть, если вы выберете дату и время в текущем часовом поясе, которая не существует в UTC.
Напомню, все даты в базе SCSM хранятся в UTC. Когда вы запускаете отчет у вас есть возможность выбрать дату и часовой пояс. По умолчанию, используется текущий часовой пояс (Moscow, St. Petersburg, Volgograd (RTZ 2) для московского времени). Осень этого года мы перевели часы на час назад. В связи с этим в новом часовом поясе “отсутствует” один час, и чтобы не сильно “заморачиваться”, этот час убрали из начала текущего года. Т.е. при выборе часового пояса Moscow, St. Petersburg, Volgograd (RTZ 2) (и некоторых других RTZ #), в нем будет отсутствовать один час с 01.01.2014 00:00 по 01.01.2014 00:59:59
Это легко проверить с помощью PowerShell
$tzi = [TimeZoneInfo]::FindSystemTimeZoneById("Russian Standard Time")
$dtZero = new-object DateTime(2014,1,1,0,0,0,0)
$dtZero # 1 января 2014 г. 0:00:00
[TimeZoneInfo]::ConvertTimeToUtc($dtZero, $tzi) # error
$dtZero.AddHours(-1) # 31 декабря 2013 г. 23:00:00
[TimeZoneInfo]::ConvertTimeToUtc($dtZero.AddHours(-1), $tzi) # OK, 31 декабря 2013 г. 20:00:00
$dtZero.AddHours(1) # 1 января 2014 г. 1:00:00
[TimeZoneInfo]::ConvertTimeToUtc($dtZero.AddHours(1), $tzi) # OK, 31 декабря 2013 г. 21:00:00
Обратите внимание, что в UTC разница всего в один час, а не два.
Возвращаясь к отчетам SCSM, можно понять, что ошика будет возникать только если выбрано начало года. Для того, чтобы избежать ошибки, необходимо выбрать либо другой часовой пояс, либо указать дату и время начала отчета отличную от 01.01.2014 00:00