Skriv ut tal som text

by Martin 27. September 2010 11:27
En fd kollega till mig stötte på ett problem där han ville skriva ut ett tal i textform, ungefär som det brukar stå på presentkort osv, t ex så 112 etthundraelva. Han googlade lite, hittade [url:en blogg där någon skrivit en kodsnutt för det i SQL|http://www.novicksoftware.com/udfofweek/Vol2/T-SQL-UDF-Vol-2-Num-9-udf_Num_ToWords.htm], men valde sedan att konvertera det till att använda i Reporting Services istället. Klistra in koden nedan under Custom code och anropa sedan koden i rapporten enligt följande: {{ =Code.ExpandPrice(Fields!Amount.Value,",") }} Kod: {code:vb.net} Shared suffixes As String() = _ {"Tusen", "Miljoner", "Miljarder", "Biljoner", "Biljard", "Triljon", "Triljard"} Shared units As String() = _ {"", "Ett", "Två", "Tre", "Fyra", "Fem", "Sex", "Sju", "Åtta", "Nio"} Shared tens As String() = _ {"Tjugo", "Trettio", "Förtio", "Femtio", "Sextio", "Sjuttio", "Åttio ", "Nittio"} Shared digits As String() = _ {"Tio ", "Elva ", "Tolv ", "Tretton ", "Fjorton ", "Femton ", "Sexton ", "Sjutton ", "Arton ", "Nitton"} Shared expr As New _ System.Text.RegularExpressions.Regex("^-?\d+(\,\d{2})?$", _ System.Text.RegularExpressions.RegexOptions.None) Public Function ExpandPrice(ByVal Price As Double, Optional ByVal pSeparator As String = ".") As String Dim pPrice As String pPrice = FORMAT(Price, "##############.00") Dim temp As New System.Text.StringBuilder() If expr.IsMatch(pPrice) Then Dim parts As String() = pPrice.Split(pSeparator) Dim dollars As String = parts(0) Dim cents As String = parts(1) If CDbl(dollars) >= 1 Then temp.Append(ExpandIntegerNumber(dollars) & "Kronor") ElseIf CDbl(dollars) = 0 Then temp.Append(ExpandIntegerNumber(dollars) & "Noll Kronor") End If If CDbl(cents) >= 1 Then temp.Append(" och ") temp.Append(ExpandIntegerNumber(cents) & " Öre") End If End If Return temp.ToString() End Function Function ExpandIntegerNumber(ByVal pNumberStr As String) As String Dim temp2 As New System.Text.StringBuilder() Dim number As String = StrDup(3 - Len(pNumberStr) Mod 3, "0") & pNumberStr Dim i As Integer, j As Integer = -1 Dim numPart As String For i = Len(number) - 2 To 1 Step -3 numPart = Mid(number, i, 3) If CLng(numPart > 0) Then If j > -1 Then temp2.Insert(0, suffixes(j), 1) End If End If temp2.Insert(0, GetNumberUnder1000Str(numPart), 1) j += 1 Next Return temp2.ToString() End Function Function GetNumberUnder1000Str(ByVal pNumber As String) As String Dim temp1 As New System.Text.StringBuilder() If Len(pNumber) = 3 Then If CLng(Left(pNumber, 1)) > 0 Then temp1.Append(GetNumberUnder100Str(Left(pNumber, 1)) & "Hundra") End If End If temp1.Append(GetNumberUnder100Str(Right("0" & pNumber, 2))) Return temp1.ToString() End Function Function GetNumberUnder100Str(ByVal pNumber As String) As String If pNumber > 19 Then Return tens(Left(pNumber, 1) - 2) & units(Right(pNumber, 1)) ElseIf pNumber >= 10 And pNumber <= 19 Then Return digits(Right(pNumber, 1)) Else Return units(Right(pNumber, 1)) End If End Function {code:vb.net}

Hämta klientdatorns namn eller ip-adress

by Martin 21. June 2010 10:01
Ibland vore det smidigt att kunna skriva ut på en rapport från vilken dator en användare skapade den, t ex om användaren Lisa exekverade rapporten från hennes arbetsstation kallad CorpComp1. Det finns ingen inbyggd funktion för detta i Reporting Services. Däremot finns ju alltid möjligheten att nyttja Custom Code. Följande kod skulle kunna användas: {code:vb.net} Public Function GetClientIP() As String Dim result as String result = System.Web.HttpContext.Current.Request.ServerVariables("REMOTE_ADDR") return result End Function Public Function GetClientHostName() As String Dim result as String result = System.Net.Dns.GetHostEntry(System.Web.HttpContext.Current.Request.ServerVariables("remote_addr")).HostName return result End Function {code:vb.net} Där du då vill skriva ut användarens datornamn skriver du följande uttryck (expression) {{ =Code.GetClientHostName() }} Vill du istället skriva ut IP-adressen så görs det med följande uttryck (expression) {{ =Code.GetClientIP() }}