Как написать эту формулу Crystal Report в выражении SSRS? - PullRequest
1 голос
/ 13 марта 2019

У меня проблема с преобразованием формулы 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 ]

0 голосов
/ 18 марта 2019

Для создания этой формулы я взял два текстовых поля на странице активного отчета и разделил эту формулу на две части.

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, сэр, спасибо за ваше ценное решение и да, ваше решение правильно, оно также работает отлично

0 голосов
/ 14 марта 2019

Возвращаемое значение должно быть

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...