PDA

View Full Version : تبدیل فیلد عددی به حروفی در کریستال رپورت



rezaei manesh
چهارشنبه 06 مهر 1384, 14:36 عصر
من می خوام توی کریستال رپورت یه فرمول بنویسم که این کار رو بکنه البته یه کلاس دارم که این کار رو می کنه اما نتونستم اونو تبدیل کنم
با کلی تغییر الان همون کد توی برنامه اجرا می شه اما وقتی همونو توی فرمول می زارم جواب رو اشتباه می ده؟
انم کد من؟!!!!
Dim Yekan(20) As String
Yekan(1) = ("صفر")
Yekan(2) = ("یک")
Yekan(3) = ("دو")
Yekan(4) = ("سه")
Yekan(5) = ("چهار")
Yekan(6) = ("پنج")
Yekan(7) = ("شش")
Yekan(8) = ("هفت")
Yekan(9) = ("هشت")
Yekan(10) = ("نه")
Yekan(11) = ("ده")
Yekan(12) = ("یازده")
Yekan(13) = ("دوازده")
Yekan(14) = ("سیزده")
Yekan(15) = ("چهارده")
Yekan(16) = ("پانزده")
Yekan(17) = ("شانزده")
Yekan(18) = ("هفده")
Yekan(19) = ("هیجده")
Yekan(20) = ("نوزده")
Dim Dahgan(11) As String
Dahgan(1) = ("")
Dahgan(2) = ("ده")
Dahgan(3) = ("بیست")
Dahgan(4) = ("سی")
Dahgan(5) = ("چهل")
Dahgan(6) = ("پنجاه")
Dahgan(7) = ("شصت")
Dahgan(8) = ("هفتاد")
Dahgan(9) = ("هشتاد")
Dahgan(10) = ("نود")
Dahgan(11) = ("")


Dim Sadgan(10) As String
Sadgan(1) = ("")
Sadgan(2) = ("یکصد")
Sadgan(3) = ("دویست")
Sadgan(4) = ("سیصد")
Sadgan(5) = ("چهارصد")
Sadgan(6) = ("پانصد")
Sadgan(7) = ("ششصد")
Sadgan(8) = ("هفتصد")
Sadgan(9) = ("هشتصد")
Sadgan(10) = ("نُه‌صد")

Dim h(6) As String
h(1) = ("")
h(2) = (" هزار")
h(3) = (" میلیون")
h(4) = (" میلیارد")
h(5) = (" تریلیون")
h(6) = (" تریلیارد")

Dim va As String
Dim Price As number
Price = 6000000 'sum({result.price})

va = " و "

If Price = 0 Then formula = Yekan(1) ' اگر عددی صفر باشد

Dim strDigit As String 'جهت ذخیره عدد ورودی به صورت استرینگ
Dim strSubDigit(6) As String ' جهت ذخیره قسمتهای 3تایی عدد
Dim sDigit As String
sDigit = "" 'جهت ذخیره عدد بصورت متن فارسی
Dim n As number

strDigit = CStr(Price)

Do Until Len(strDigit) Mod 3 = 0
strDigit = "0" & strDigit
Loop

For n = 3 To Len(strDigit) Step 3
strSubDigit(n / 3) = Mid(strDigit, (Len(strDigit)) - n + 1, 3)
Next
For n = 6 To 1 Step -1

If Val(strSubDigit(n)) <> 0 Then
Dim yek, dah, sad As number
Dim s As String
s = ""
yek = Val(Mid(strSubDigit(n), 3, 1)) + 1
dah = Val(Mid(strSubDigit(n), 2, 1)) + 1
sad = Val(Mid(strSubDigit(n), 1, 1))+ 1
If sDigit <> "" Then
sDigit = sDigit + va
End If

If sad > 1 And (dah > 1 Or yek > 1) Then
s = s + Sadgan(sad) & va
Else
s = s + Sadgan(sad)
End If

If dah = 2 And yek > 1 Then
s = s + Yekan(dah * 10 + yek)
End If

If dah > 2 And yek > 1 Then
s = s + Dahgan(dah) & va & Yekan(yek)
End If

If dah >= 2 And yek = 1 Then
s = s + Dahgan(dah)
End If

If dah = 1 And yek > 1 Then
s = s + Yekan(yek)
End If
sDigit = sDigit + s + h(n)
End If
Next
formula = sDigit