PDA

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



hadi2345
چهارشنبه 04 مهر 1386, 13:05 عصر
چگونه می توان توسط فرمولا فیلد در کریستال ریپورت عدد را به حروف تبدیل کرد
یا
چگونه میتوانیم یک dll را به توابع کریستال ریپورت اضافه کرد

sm
شنبه 07 مهر 1386, 08:28 صبح
شما میتونین توی کریستال با Syntax زبان VB و C کدنویسی انجام بدین که البته در این مورد خاص منطقی نیست.
شما میتونین DLL مربوط به این عمل رو که کم هم نیست به کریستال اضافه کنین و بعد استفاده بشه... البته DLL هایی که میخوان توی کریستال استفاده بشن باید دارای شرایط خاصی باشن.
روش دیگه اینه که از توی بانک حروفی رو بسازین و به گزارش رد کنین.
راه دیگه هم اینه که از توی محیط برنامه نویسی این کار رو انجام بدین.

موفق باشید

hamed_bostan
شنبه 07 مهر 1386, 14:05 عصر
شما میتونین توی کریستال با Syntax زبان VB و C کدنویسی انجام بدین که البته در این مورد خاص منطقی نیست.
منظورتون vb.net , c#.net هست؟ یا vba و c خودمون؟

sm
شنبه 07 مهر 1386, 15:34 عصر
vb اون نزدیک به دات نت هست ولی C نه... خاصه

موفق باشید

شایان کدینگ
چهارشنبه 11 مهر 1386, 20:08 عصر
از چه نسخه کریستال ریپورت استفاده می کنی

اگر با کریستال 8.5 کار می کنی کافیه این فایل dll را در vb فعال کنی سپس در ریپورت مورد نظرت کد زیر را تایپ کنی


Dim a As New ConvertyAdadToHorof.ConvertAdadToHorof





Private Sub Section9_Format (By Val pFormattingInfo As Object)


Target field.SetText (a.Adad (Source field.Value))


End Sub

vb341
پنج شنبه 19 مهر 1386, 13:13 عصر
با این dll می تونین تو وی بی 6 با کریستال 9 کار مورد نظر رو انجام بدین

Hamid Reza Rahimi
یک شنبه 20 آبان 1386, 13:56 عصر
به نام خدا
دوستان سلام من در کریستال 10 یک چارتی درست کردم که در اون مثلا 400 رکورد وجود دارد. اما مشکل اینجاست که همه این رکورد ها در یک صفحه نمایش داده می شود. آیا راه حلی موجود می باشد که با نمودار مثل Detailes کریستال رفتار کرد و با پر شدن تعداد معینی رکورد ادامه چارت در صفحه های بعد نمایش داده شود. خیلی فوریه

aminpourazadeh
دوشنبه 09 شهریور 1388, 14:16 عصر
چگونه می توان توسط فرمولا فیلد در کریستال ریپورت عدد را به حروف تبدیل کرد
یا
چگونه میتوانیم یک dll را به توابع کریستال ریپورت اضافه کرد
نحوه تبدیل عدد به حروف در کریستال ریپورت?

Hamed228
پنج شنبه 21 آبان 1388, 08:39 صبح
با این روش به راحتی هر عددی رو میشه تو خود کریستال به حروف گذاشت و احتیاجی به هیچ Dll و کد توی لرنامه نداره


Digit2Alpha ({sp_tbl_axCashHeadSql.Mablag}, 0) + Del + 'ريال'



'************************************************* ********************
* Creation Date : ? *
'************************************************* ********************
'* Modification History: *
* a) this fuction always returned *
'* "FixDigitToAlpha(FixPart) + " مميز " + *
'* DecimalDigitToAlpha(DecimalPart) and if decimaldigit *
'* part was null the "ممیز" was returned again and it was*
'* wrong , so this problem was solved *
'************************************************* ********************
'Convert a number(integer or decimal) to farsi alphabet.
'Parameters: 1- Value: is the number should be convert.
' 2- CurrencyDecimal: digit of rounding.
Function Digit2Alpha (Value As Number,CurrencyDecimal As Number) As String
Dim DecimalPart,FixPart As Number
DecimalPart = Value - Truncate(Value)
FixPart = Truncate(Value)
DecimalPart = Round (DecimalPart,CurrencyDecimal)
If(CurrencyDecimal = 0)Then
If(DecimalPart = 1)Then
FixPart = FixPart + 1
End If
Digit2Alpha = FixDigitToAlpha(FixPart)
Else
'1383-06-21 By A.Behnam: was Added this condition.
If DecimalDigitToAlpha(DecimalPart) <> "" Then
Digit2Alpha = FixDigitToAlpha(FixPart) + " مميز " + DecimalDigitToAlpha(DecimalPart)
Else
Digit2Alpha = FixDigitToAlpha(FixPart)
End If
End If

End Function


'************************************************* ******************
'* Creation Date : ? *
'************************************************* ******************
'* Modification History: *
'* a) was checked if the input Parameter "value" was *
'* not null the body of function is done else *
'* it shouldn't be done . *
'************************************************* ******************
'Convert a 9 digital decimal number to farsi alphabet.
'This Function use by Digit2Alpha.
'Parameter: 1- Value: is the number should be convert.
Function DecimalDigitToAlpha (Value As Number) As String
Dim Str1,Str2,Result,s,Temp As String
Dim i,ExterZero As Number
'1383-06-21 By A.Behnam:was added "If Value <> 0 Then"
If Value <> 0 Then
Temp = ToText(Value ,10)
For i =1 To 10 Step 1
s = Mid(StrReverse(Temp),i,1)
If(s = "0")Then
ExterZero = ExterZero + 1
Else
Exit For
End if
Next i
Str1 = Mid(Temp,3,(len(Temp) - ExterZero -2))
Str2 = FixDigitToAlpha(ToNumber(Str1))
Select Case len(Str1)
Case 1
Result = Str2 + " دهم "
Case 2
Result = Str2 + " صدم "
Case 3
Result = Str2 + " هزارم "
Case 4
Result = Str2 + " ده هزارم "
Case 5
Result = Str2 + " صد هزارم "
Case 6
Result = Str2 + " ميليونيم "
Case 7
Result = Str2 + " ده ميليونيم "
Case 8
Result = Str2 + " صد ميليونيم "

End Select
DecimalDigitToAlpha = Result
End If
End Function


'Determine the actual decimals digits of Value
'Parameters: 1- Value: the number that will be determined the actual decimals digits of it.
' 2- CurrencyDecimal: decimals digits that determine by user.
Function DetermineDecimals (Value As Number,CurrencyDecimal As Number)As Number
Dim CurrencyDecimalTemp As Number
Dim i As Number
Dim j As Number
Dim k As Number
CurrencyDecimalTemp = 0
j = 1
k = 1
For i = 1 To CurrencyDecimal Step 1
if(Remainder (Value,j ))<> 0 Then
CurrencyDecimalTemp = CurrencyDecimalTemp + 1
k = k* 10
j = 1/k
else
Exit For
end if
Next i
DetermineDecimals = CurrencyDecimalTemp
End Function


'Convert a 3 digital number to farsi alphabet.
'This Function use by FixDigitToAlpha.
'Parameter: 1- Value: is the number should be convert.
Function DigitCalassyfying (Num As Number) As String
Dim s,harf As String
Dim s1,s2,s3,l,i As Number
s = ToText (Num,0)
l = Len (s)
If l<3 Then
For i=1 To 3-l Step 1
s = "0" + s
Next i
End If
s1 = ToNumber (Mid (s,3,1))
s2 = ToNumber (Mid (s,2,1))
s3 = ToNumber (Mid (s,1,1))
harf = " "
Select Case s1
Case 1
harf = "يک"
Case 2
harf = "دو"
Case 3
harf = "سه"
Case 4
harf = "چهار"
Case 5
harf = "پنج"
Case 6
harf = "شش"
Case 7
harf = "هفت"
Case 8
harf = "هشت"
Case 9
harf = "نه"
End Select
's2
Select Case s2
Case 1
Select Case s1
Case 0
harf = "ده"
Case 1
harf = "يازده"
Case 2
harf = "دوازده"
Case 3
harf = "سيزده"
Case 4
harf = "چهارده"
Case 5
harf = "پانزده"
Case 6
harf = "شانزده"
Case 7
harf = "هفده"
Case 8
harf = "هجده"
Case 9
harf = "نوزده"
End Select
Case 2
If(harf = "")Then
harf = "بیست" + harf
Else
harf = "بيست و " + harf
End If
Case 3
If(harf = "")Then
harf = "سی" + harf
Else
harf = "سی و " + harf
End If
Case 4
If(harf = "")Then
harf = "چهل" + harf
Else
harf = "چهل و " + harf
End If
Case 5
If(harf = "")Then
harf = "پنجاه" + harf
Else
harf = "پنجاه و " + harf
End If
Case 6
If(harf = "")Then
harf = "شصت" + harf
Else
harf = "شصت و " + harf
End If
Case 7
If(harf = "")Then
harf = "هفتاد" + harf
Else
harf = "هفتاد و " + harf
End If
Case 8
If(harf = "")Then
harf = "هشتاد" + harf
Else
harf = "هشتاد و " + harf
End If
Case 9
If(harf = "")Then
harf = "نود" + harf
Else
harf = "نود و " + harf
End If
End Select
's3
Select Case s3
Case 1
If(harf = "")Then
harf = "يکصد" + harf
Else
harf = "يکصد و " + harf
End If
Case 2
If(harf = "")Then
harf = "دويست" + harf
Else
harf = "دويست و " + harf
End If
Case 3
If(harf = "")Then
harf = "سيصد " + harf
Else
harf = "سيصد و " + harf
End If
Case 4
If(harf = "")Then
harf = "چهارصد" + harf
Else
harf = "چهارصد و " + harf
End If
Case 5
If(harf = "")Then
harf = "پانصد" + harf
Else
harf = "پانصد و " + harf
End If
Case 6
If(harf = "")Then
harf = "ششصد" + harf
Else
harf = "ششصد و " + harf
End If
Case 7
If(harf = "")Then
harf = "هفتصد" + harf
Else
harf = "هفتصد و " + harf
End If
Case 8
If(harf = "")Then
harf = "هشتصد" + harf
Else
harf = "هشتصد و " + harf
End If
Case 9
If(harf = "")Then
harf = "نهصد" + harf
Else
harf = "نهصد و " + harf
End If
End Select
DigitCalassyfying = Trim(harf)
End Function


'Convert a 15 digital number to farsi alphabet.
'This Function use by Digit2Alpha.
'Parameter: 1- Value: is the number should be convert.
Function FixDigitToAlpha (Value As Number)As String
Dim Separator,s , s1 , s2 , s3 , s4, s5, Part1, Part2, Part3, Part4, TotalParts As String
Dim l,i,ZeroCounter As Number

Part1 =" "
Part2 =" "
Part3 =" "
Part4 =" "
TotalParts =" "
Separator = " "
s = ToText (Value,0)
l = Len (s)
If(l<20)Then
If(l>4)Then
If(Not IsNumeric(Mid (s,(l-3),1)))Then
Separator = Mid (s,(l-3),1)
ZeroCounter = 19
Else
ZeroCounter = 15
End If
Else
ZeroCounter = 15
End If
If(ZeroCounter = 19)Then

If(((l+1) mod 4)<> 0)Then
For i=1 To 3-(l mod 4) Step 1
s = "0" + s
Next i
End If
For i=1 To (ZeroCounter-l)/4 Step 1
s = "000" + Separator + s
Next i

Else
For i=1 To ZeroCounter-l Step 1
s = "0" + s
Next i
End if

If(l>4 And Separator <> " ")Then
s1 = Mid (s,17,3)
s2 = Mid (s,13,3)
s3 = Mid (s,9,3)
s4 = Mid (s,5,3)
s5 = Mid (s,1,3)
Else
s1 = Mid (s,13,3)
s2 = Mid (s,10,3)
s3 = Mid (s,7,3)
s4 = Mid (s,4,3)
s5 = Mid (s,1,3)
End If
If Len(s1)< 3 Then
For i=1 To 3-l Step 1
s1 = "0" + s1
Next i
End If
If Len(s2)< 3 Then
For i=1 To 3-l Step 1
s2 = "0" + s2
Next i
End If
If Len(s3)< 3 Then
For i=1 To 3-l Step 1
s3 = "0" + s3
Next i
End If
If Len(s4)< 3 Then
For i=1 To 3-l Step 1
s4 = "0" + s4
Next i
End If
If Len(s5)< 3 Then
For i=1 To 3-l Step 1
s5 = "0" + s5
Next i
End If
If (ToNumber (s5)<>0) Then
Part4 = DigitCalassyfying(ToNumber (s5)) + " تريليون "
End If
If (ToNumber (s4)<>0) Then
Part3 = DigitCalassyfying(ToNumber (s4)) + " ميليارد "
End If
If (ToNumber (s3)<>0) Then
Part2 = DigitCalassyfying(ToNumber (s3)) + " ميليون "
End If
If (ToNumber (s2)<>0) Then
Part1 = DigitCalassyfying(ToNumber (s2)) + " هزار "
End If
TotalParts = DigitCalassyfying(ToNumber (s1))
If((Part1<>"") And (s1<>"000")) Then
TotalParts = Part1 + "و" + TotalParts
Else
TotalParts = Part1 + TotalParts
End If

If((Part2<>"") And (s2<>"000")) Or ((Part2<>"") And (s1<>"000")) Then
TotalParts = Part2 + "و" + TotalParts
Else
TotalParts = Part2 + TotalParts
End If
If((Part3<>"") And (s3<>"000")) Or ((Part3<>"") And (s2<>"000")) Or ((Part3<>"") And (s1<>"000"))Then
TotalParts = Part3 + "و" + TotalParts
Else
TotalParts = Part3 + TotalParts
End If
If((Part4<>"") And (s4<>"000")) Or ((Part4<>"") And (s3<>"000")) Or ((Part4<>"") And (s2<>"000")) Or ((Part4<>"") And (s1<>"000")) Then
TotalParts = Part4 + "و" + TotalParts
Else
TotalParts = Part4 + TotalParts
End If

Else
TotalParts = " "
End If
FixDigitToAlpha = Trim(TotalParts)
End Function

Alipersia
چهارشنبه 25 آذر 1388, 10:04 صبح
سلام
دوستم من ميتوني يه راهنمايي كني چجوري از اين كد ها استفاده كنم؟

parvizfahimy
شنبه 11 دی 1389, 21:47 عصر
سلام.
من هم ممنون میشم نحوه استفاده از این کدها رو بگید.

parvizfahimy
یک شنبه 12 دی 1389, 00:19 صبح
بالاخره خودم فهیمیدم
اول یه کلاس تعریف میکنیم مثلا من lib تعریف کردم .بعد کد های صفحه قبلو تو کلاس کپی میکنی. فقط کافیه عددی که می خوای را بریزی تو تابع num2str.مثل کد زیر
البته برای دیدن حروف خروجی رو تو label1ریختم.


;int x=12330000

this.label1.Text = lib.num2str(x.ToString());



this.label1.Text = lib.num2str(x.ToString());

saeed-kh
شنبه 23 اردیبهشت 1391, 18:26 عصر
در قسمت Field Explorer مربوط به فایل گزارشت روی Formula Fields کلیک راست کن و New(یک نام بده)
در کادر باز شده
CStr ({CLientParent.Cost})
CLientParent.Cost اسم فیلدی هست که رد دیتاست هست.
گزینه اضافه شده در Formula... رو به گزارش اضافه کن

mseplus
سه شنبه 20 تیر 1396, 14:58 عصر
در قسمت Field Explorer مربوط به فایل گزارشت روی Formula Fields کلیک راست کن و New(یک نام بده)
در کادر باز شده
CStr ({CLientParent.Cost})
CLientParent.Cost اسم فیلدی هست که رد دیتاست هست.
گزینه اضافه شده در Formula... رو به گزارش اضافه کن

سلام
کسی تبدیل تاریخ به حروف رو نداره؟؟؟