rezaei manesh
چهارشنبه 06 مهر 1384, 15: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
با کلی تغییر الان همون کد توی برنامه اجرا می شه اما وقتی همونو توی فرمول می زارم جواب رو اشتباه می ده؟
انم کد من؟!!!!
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