Как написать эту формулу Crystal Report в выражении SSRS?
У меня возникла проблема с преобразованием формулы Crystal Report в выражение SSRS. Может ли кто-нибудь мне помочь?
Формула 1:
Dim fromExDay as String
Dim toExDay as String
Dim sYr as String
Dim sMonth as String
Dim sDay as String
fromExDay = ToText({wk_TORIO0460_a.HktrExchngDayFrom})
fromExDay = Replace (fromExDay, ",", "" )
fromExDay = Replace (fromExDay, ".", "" )
toExDay = ToText({wk_TORIO0460_a.HktrExchngDayTo})
toExDay = Replace (toExDay, ",", "" )
toExDay = Replace (toExDay, ".", "" )
if Len (Trim(fromExDay)) > 0 and Len (Trim(toExDay)) > 0 then
sYr = Right(Left(fromExDay, 4),2)
if sYr <> "99" then
sYr = LEFT(CStr(CDbl(sYr) + 12),2)
end if
sMonth = Mid(fromExDay, 5, 2)
sDay = Left(Right(fromExDay, 4),2)
'fromExDay = sYr + sMonth + sDay
fromExDay = sYr + sMonth + sDay
sYr = Right(Left(toExDay, 4),2)
if sYr <> "99" then
sYr = LEFT(CStr(CDbl(sYr) + 12),2)
end if
sMonth = Mid(toExDay, 5, 2)
sDay = Left(Right(toExDay, 4),2)
toExDay = sYr + sMonth + sDay
'toExDay = Right(fromExDay, 2)
Formula = fromExDay + " ~ " + toExDay
Else
Formula = ""
End If
Значение ExchangeFrom и ExchangeTO исходит из базы данных. Значение ExchangeFrom = 20031031 Значение ExchangeTo = 200 в базе данных
2 ответа
Возвращаемое значение должно быть
151010 ~ 1220
На самом деле не было много изменений, необходимых для преобразования его в функцию SSRS VB. В SSRS функция не работает напрямую с полем, поэтому вам необходимо передать их в функцию в качестве параметров. Большинство остальных VB в вашей старой функции должны работать так же в SSRS - я просто удалил функции ToText, которых нет в SSRS.
Когда вы вызываете функцию из текстового поля, вы передаете поля.
=code.Formula1(Fields!HktrExchngDayFrom.Value, Fields!HktrExchngDayTo.Value)
А вот и функция:
Public Function Formula1(ByVal fromExDay as String, ByVal toExDay as String) as String
Dim sYr as String
Dim sMonth as String
Dim sDay as String
fromExDay = Replace (fromExDay, ",", "" )
fromExDay = Replace (fromExDay, ".", "" )
toExDay = Replace (toExDay, ",", "" )
toExDay = Replace (toExDay, ".", "" )
if Len (Trim(fromExDay)) > 0 and Len (Trim(toExDay)) > 0 then
sYr = Right(Left(fromExDay, 4),2)
if sYr <> "99" then
sYr = LEFT(CStr(CDbl(sYr) + 12), 2)
end if
sMonth = Mid(fromExDay, 5, 2)
sDay = Left(Right(fromExDay, 4), 2)
fromExDay = sYr + sMonth + sDay
sYr = Right(Left(toExDay, 4), 2)
if sYr <> "99" then
sYr = LEFT(CStr(CDbl(sYr) + 12), 2)
end if
sMonth = Mid(toExDay, 5, 2)
sDay = Left(Right(toExDay, 4), 2)
toExDay = sYr + sMonth + sDay
Formula1 = fromExDay + " ~ " + toExDay
Else
Formula1 = ""
End If
End Function
Я думаю, что расчеты sDay неверны.
sDay = Left(Right(fromExDay, 4),2)
Кажется, месяц снова получается. Наверное должно быть
sDay = Right(fromExDay, 2)
или, если это может быть более длинная строка, используйте MID:
sDay = Mid(fromExDay, 7, 2)
Что меняет результат на:
151031 ~ 12
Для создания этой формулы я взял два текстовых поля на странице активного отчета и разделил эту формулу на две части.
Textbox1:
=iif(Right(Left( Fields!ExchngDayFrom.Value , 4),2) <> 99 ,LEFT(CStr(CDbl((Right(Left( Fields!ExchngDayFrom.Value , 4),2) ) + 12),2) + Mid( Fields!ExchngDayFrom.Value , 5, 2) + Left(Right( Fields!ExchngDayFrom.Value , 2),2 ) ," ")
Предполагая, что значение ExchangeDayfrom равно: 20031031, вывод равен 151031.
TextBox2:
="~ " & iif(Right(Left( Fields!ExchngDayTo.Value , 4),2) <> 99 ,LEFT(CStr(CDbl((Right(Left( Fields!ExchngDayTo.Value , 4),2)) + 12),2) + Mid( Fields!ExchngDayTo.Value , 5, 2) + Left(Right( Fields!ExchngDayTo.Value , 2),2 ) , Right(Left( Fields!ExchngDayTo.Value , 4),2) + Mid( Fields!ExchngDayTo.Value , 5, 2) + Left(Right( Fields!ExchngDayTo.Value , 2),2 )
Предполагая, что значение ExchangeDayTo равно: 99999999, вывод равен 999999
Вот как я решаю свою проблему. Большое спасибо @Hannover Fist, сэр, спасибо за ваше ценное решение и да, ваше решение правильно, оно также работает отлично