نمایش نتایج 1 تا 6 از 6

نام تاپیک: نمایش اعداد به صورت متن فارسی در کریستال ریپورت

  1. #1
    کاربر دائمی آواتار bsng110
    تاریخ عضویت
    آبان 1386
    محل زندگی
    اصفهان
    سن
    36
    پست
    104

    Smile نمایش اعداد به صورت متن فارسی در کریستال ریپورت

    هوالحکیم
    سلام
    جسارتاً میون این همه استاد من دوباره بعد از مدت ها برگشتم! شرمنده ام! تو را به خدا بهم نخندین ها!
    من تازه یک کم سی شارپ یاد گرفتم. این کارفرمام به من گفت باید برنامه شما مثل برنامه داس ما در زیر سند به صورت فارسی مبلغ سند را بنویسه مثلاً "مبلغ به حروف: یک صد و بیست و چهار ریال". خلاصه اینکه من با بدبختی رفتم و یک تابع با گرامر VB در کریستال نوشتم.
    این هم کدش:

    Function PersianNumber (xNumber As Number) as String
    ' Global Variables
    Dim GroupMax As Number
    Dim Zero as String
    Dim Units() as String, Teens() as String, Group() as String, Tens() as String, Hunds()
    as String ' مقدار دهی اولیه متغییر های سراسری
    GroupMax = 4
    Zero = "صفر"
    Units = Array("يك", "دو", "سه", "چهار", "پنج", "شش", "هفت", "هشت", "نه")
    Teens = Array("يازده", "دوازده", "سيزده", "چهارده", "پانزده", "شانزده", "هفده", "هجده",
    "نوزده") Tens = Array("ده", "بيست", "سي", "چهل", "پنجاه", "شصت", "هفتاد", "هشتاد", "نود")
    Hunds = Array("يكصد", "دويست", "سيصد", "چهارصد", "پانصد", "ششصد", "هفتصد", "هشتصد", "نهصد")
    Group = Array("", "‌هزار", "‌ميليون", "‌ميليارد", "‌بيليون")
    ' Local Variables
    Dim sRet as String, Temp as String
    Dim bNegative as Boolean
    Dim i As Number, R As Number, RMod100 As Number
    ' Hundreds, Tens, Units
    Dim H As Number, T As Number, U As Number
    ' مقدار دهی اولیه متغییر های محلی
    bNegative = false
    ' شروع تابع
    If xNumber = 0 Then
    PersianNumber = Zero ' ****** return
    exit function
    ElseIf xNumber < 0 Then
    bNegative = true
    xNumber = -xNumber
    End If
    i = 1
    sRet = ""
    while i = 1
    Temp = ""
    R = xNumber MOD 1000
    H = Fix(R / 100)
    RMod100 = R MOD 100
    T = Fix(RMod100 / 10)
    U = RMod100 MOD 10
    xNumber = Fix(xNumber / 1000)
    if H >= 1 Then
    Temp = Temp + Hunds(H) + " و "
    End If
    If RMod100 >= 11 AND RMod100 = 1 Then
    Temp = Temp + Tens(T) + " و "
    End If
    If U >= 1 Then
    Temp = Temp + Units(U) + " و "
    End If
    End If
    If Len(Temp) > 3 Then
    Temp = Left (Temp, Length(Temp) - 3) 'Deleting Extra " و "
    End If
    If R 0 Then
    If sRet = "" Then
    sRet = Temp + Group(i)
    Else
    sRet = Temp + Group(i) + " و " + sRet
    End If
    End If
    i = i + 1
    Wend
    If bNegative Then
    sRet = "منفي " + sRet
    End If
    If sRet = "" Then
    sRet = "امکان تبدیل عدد وجود ندارد"
    End If
    PersianNumber = sRet
    End Function
    طریقه ساختش هم به این صورت است که وقتی Crystal Report بازه(مثلاً یک گزارش باز کردیم)، در نوار ابزار اصلی ویژوال استودیو، دکمه Crystal Reports (یا Alt+R) را بزنید. بعد در زیر منوی Report (دکمه R را هم بزنید سریع تر بهش می رسید)، دکمه Formula WorkShop(یا F) را می زنیم. در پنجره باز شده، در پنل سمت چپ، روی Report Custom Function که شبیه یک چرخ دنده است، راست کلیک می کنیم و گزینه New را انتخاب می کنیم. حالا نام تابع را می نویسیم که اسم تابع من PersianNumber بود. بعد گزینه Use Editor را می زنیم. حالا از نوار ابزار دوم، اون آخر، جعبه انتخاب شدنی را که در آن Crystal Syntax انتخاب شده است را باز کرده و Basic Syntax را انتخاب می کنیم. آخه گرامر کریستال بیشتر شبیه پاسکال و دلفی بود و من ازش خوشم نمی اومد، با وجود اینکه این گرامر بیشتر شبیه C هست و من می میرم برای C ولی یک کم کار کردن با این گرامر سخت بود. خلاصه حالا در پنل بزرگه که وسط پنجره است و مربوط به کد نوشتن است، کد بالا را بنویسید و ذخیره کنید. حالا می تونید مثل یک تابع تو همه جا از این تابع استفاده کنید. مثلاً من یک فورمول ساختم و توش این تابع را برای یک عدد ثابت صدا زدم و گذاشتم تو صفحه. کار می ده. مشکلی هم نداره ولی تنها مشکلش حروف فارسیه! حتی فونت را هم عوض کردم و درست نشد. مثلاً به جای اینکه بنویسه : &quot;هزار و دویست&quot; می نویسه &quot;ه ز ا ر و د و ی س ت&quot;(البته بین حروف فضای خالی نیست، بلکه حروف جدا از هم نوشته می شن). نمی دونم عیب از تابع اتصال رشته کریستال ریپورته یا چیز دیگه؟ من خود برنامه کریستال ریپورت را ندارم و از همین IDE ویژوال استودیو استفاده می کنم. اگه شما اساتید کریستال ریپورت را دارید، ببینید اونجا مشکلی داره یا نه؟ راستی من هی می بینم شما نوشته اید که Right To Left متن را درست و کن و ... . این Propertie کجاست؟ من ویژوال استودیو 2005 دارم. وقتی روی یک متن کلیک می کنم، در خصوصیاتش چنین عنوانی نمی بینم! نکنه عیب از اینه؟ نکته بعدی که سوال داشتم اینه که من از کجا بفهمم کریستال ریپورتم نشخه چنده آخه ویژوال استودیو وقتی باز می شه می نویسه Crystal Report 2005! همین! هیچ جاش هم من چیزی نجستم که نسخه کریستال ریپورت را بگه؟ ممنون می شم این سوال را هم جواب بدهید.
    منتظر جواب های شما هستم
    یا علی
    حق نگهدارتون
    آخرین ویرایش به وسیله bsng110 : چهارشنبه 30 مرداد 1387 در 19:20 عصر

  2. #2
    کاربر دائمی آواتار ali_md110
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    شیراز
    پست
    1,181

    نقل قول: نمایش اعداد به صورت متن فارسی در کریستال ریپورت

    دوست عزیز من استفاده کردم مشکلی نداشت احتمالا یکبار دیگه کریستا ل رو نصب کنی درست بشه

  3. #3
    کاربر دائمی آواتار el_abdollahi
    تاریخ عضویت
    شهریور 1385
    محل زندگی
    شهر قنات و قنوت و قناعت
    پست
    476

    نقل قول: نمایش اعداد به صورت متن فارسی در کریستال ریپورت

    سلام
    از بابت آموزش نحوه استفاده از تابع توي كريستال ممنون. آموزنده بود.
    من هم از تابع شما استفاده كردم و مشكلي نداشت. احتمالا مشكل از فونت هاي كريستال و يا ويندوزتونه.
    موفق باشيد.

  4. #4
    کاربر دائمی آواتار bsng110
    تاریخ عضویت
    آبان 1386
    محل زندگی
    اصفهان
    سن
    36
    پست
    104

    نقل قول: نمایش اعداد به صورت متن فارسی در کریستال ریپورت

    هوالحکیم سلام از دوستانی که پست بنده را مطالعه کردند، بسیار سپاسگزارم ولی کاشکی جواب سوالاتم را نیز داده بودید! در مورد اون سوال ها باید بگم که ظاهراً نسخه Crystal Report مربوط به Visual Studio 2005 شماره 7 می باشد چرا که در انتخای نام کریستال ریپورت در قسمت About ویژوال نوشته است ...V700! در مورد Right To Left عیب از نصب برنامه بود. متأسفانه جایی که من کار می کردم، ویژوال استودیو ناقص نصب شده و بعضی امکانات را نداشت و با اضافه کردن اون امکانات، حالا زبانه Paragraph را نیز دارم. اما حالا یک سوال خنده دار دیگه دارم! اگه یک فرمول درست کنید و توش بنویسید (PersianNumber(1 تابع درست کار می کنه. اگه بنویسید (PersianNumber(10، و یا (PersianNumber(100 هم درست کار می کنه اما اگه بنویسید (PersianNumber(1000 و یا (PersianNumber(10000 و ... دیگه کار نمی ده! جالبه که (PersianNumber(12345678 کار می ده! به نظر شما عیب از کجاست؟! به نظر من عیب از کریستاله که سه تا صفر به بالا را در انتهای یک عدد نمی تونه قبول کنه و نمی دونم برای رفع این مشکل چیکار کنم! اگه از دوستان کسی پیشنهادی داره، خیلی ممنون می شم که ما را هم در جریان بگذارد. یا علی خدانگهدارتون
    آخرین ویرایش به وسیله bsng110 : چهارشنبه 30 مرداد 1387 در 19:14 عصر

  5. #5
    کاربر دائمی آواتار bsng110
    تاریخ عضویت
    آبان 1386
    محل زندگی
    اصفهان
    سن
    36
    پست
    104

    نقل قول: نمایش اعداد به صورت متن فارسی در کریستال ریپورت

    هوالغفور سلام ببخشید. فهمیدم عیب از کجا بوده. همون کد اولی را اصلاح کردم. یا علی خدانگهدارتون

  6. #6

    نقل قول: نمایش اعداد به صورت متن فارسی در کریستال ریپورت

    سلام
    من از تابع شما استفاده کردم ولی درست کار نمیکنه البته تابع شما اشکال داشت که من به زعم خودم درستشون کردم حالا نمیدونم که درستش کردم یا اینکه اینکار من باعث خرابی اون شده .یه جا دو تا EndIf بود که من یکیشو پاک کردم و یک جای دیگه هم برای شرط R=0 مساوی نداشت که من اضافه کردم ولی حالا تابع درست عمل نمی کنه .
    با تشکر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •