# پایگاه‌های داده > سایر پایگاه‌های داده > Foxpro > مبتدی: تبدیل ریال به حروف

## Emir New

سلام خدمت اساتید گرامی 
من در این تاپیک 2 تا سوال دارم 
اولی این هست که می تونم یه عدد ریالی رو تبدیل به حروف بکنم 
مثلا 500000 برابر است با (پانصد هزار ریال)
و دومیش این است که چطور می تونم یک جدول رو بین 2 تاریخ خاص فیلتر کنم 
مثلا  فاکتوری برای من صادر کنه که از تاریخ 12/1/1390 تا تاریخ 29/1/1390 باشه

----------


## binyaz2003

لطفا در مورد سئوال اول جستجو کنيد کدهاي زيادي در اين قسمت قرارداده شده است.
در مورد دوم هم در راهنماي فاکس دنبال کلمه filter بگرديد جواب رو پيدا ميکنيد.

----------


## Emir New

با تشکر از اقای بی نیاز 
در مورد سوال دومم به جواب رسیدم ولی در مورد سوال اول من ابتدا جستجو زدم ولی چون به نتیجه ای نرسیدم این تاپیک رو ایجاد کردم

----------


## rahro

> با تشکر از اقای بی نیاز 
> در مورد سوال دومم به جواب رسیدم ولی در مورد سوال اول من ابتدا جستجو زدم ولی چون به نتیجه ای نرسیدم این تاپیک رو ایجاد کردم


سلام 
ميتوني از اين فانکشن استفاده کني 
Example:
   ? numbertoc(500000)
   

FUNCTION numbertoc
PARAMETER number
PRIVATE number, sgn, len, unit,  ;
        lastunit, string, vav,  ;
        bignum1, bignum2, bignum3,  ;
        strs, loc, digit, sub
m.number = IIF(TYPE("M.Number") =  ;
           "N",  ;
           LTRIM(STR(m.number,  ;
           15)), m.number)
IF VAL(m.number) >  ;
   999999999999999  .OR.  ;
   VAL(m.number) < - ;
   999999999999999 
     RETURN ("-1")
ENDIF
m.sgn = IIF(VAL(m.number) < 0,  ;
        "منفي ", "")
IF VAL(m.number) = 0
     RETURN "صفر"
ENDIF
m.number = IIF(LEFT(m.number, 1) =  ;
           "-", SUBSTR(m.number,  ;
           2), m.number)
m.len = LEN(m.number)
STORE " " TO unit, lastunit
m.string = ""
m.vav = "و"
DIMENSION strs(3)
strs(1) = "يك     دو     سه     چهار   پنج    شش     هفت    هشت    نه     ده     يازده  دوازده سيزده  چهارده پانزده شانزده هفده   هجده   نوزده  "
strs(2) =  ;
    "ده     بيست   سي     چهل    پنجاه  شصت    هفتاد  هشتاد  نود    "
strs(3) =  ;
    "يكصد   دويست  سيصد   چهارصد پانصد  ششصد   هفتصد  هشتصد  نهصد   "
DO WHILE .T.
     m.digit = VAL(LEFT(m.number,  ;
               1))
     m.loc = MOD(m.len, 3)
     IF m.loc = 2 .AND. m.digit =  ;
        1
          m.digit = VAL(LEFT(m.number,  ;
                    2))
          m.loc = 1
     ELSE
          IF m.loc = 0
               m.loc = 3
          ENDIF
     ENDIF
     IF m.digit <> 0
          DO CASE
               CASE m.len > 3  ;
                    .AND. m.len <  ;
                    7
                    m.unit = "هزار"
               CASE m.len > 6  ;
                    .AND. m.len <  ;
                    10
                    m.unit = "ميليون"
               CASE m.len > 9  ;
                    .AND. m.len <  ;
                    13
                    m.unit = "ميليارد"
               CASE m.len > 12  ;
                    .AND. m.len <  ;
                    16
                    m.unit = "تريليون"
          ENDCASE
     ENDIF
     m.sub = IIF(m.digit <> 0,  ;
             ALLTRIM(SUBSTR(strs(m.loc),  ;
             (m.digit - 1) * 7 +  ;
             1, 7)), "")
     m.len = m.len -  ;
             LEN(LTRIM(STR(m.digit)))
     m.number = RIGHT(m.number,  ;
                m.len)
     IF m.unit <> m.lastunit  ;
        .AND. ((m.loc = 1 .OR.  ;
        (m.loc = 3 .AND.  ;
        VAL(m.number) = 0)) .OR.  ;
        VAL(m.number) = 0)
          m.sep = IIF(VAL(m.number) >  ;
                  0, m.vav, "")
          m.string = IIF(LEN(m.sub) =  ;
                     0,  ;
                     ALLTRIM(STRTRAN(m.string,  ;
                     m.sep, "",  ;
                     OCCURS(m.sep,  ;
                     m.string),  ;
                     1)),  ;
                     ALLTRIM(m.string)) +  ;
                     " " + m.sub +  ;
                     " " + m.unit +  ;
                     " " + m.sep
          m.lastunit = m.unit
     ELSE
          m.sep = IIF(VAL(m.number) >  ;
                  0 .AND.  ;
                  LEN(m.sub) <> 0  ;
                  .AND. m.len > 0  ;
                  .AND. m.digit <>  ;
                  0, m.vav, "")
          m.string = ALLTRIM(ALLTRIM(m.string) +  ;
                     " " + m.sub +  ;
                     " " +  ;
                     m.sep)
     ENDIF
     IF m.len <= 0 .OR.  ;
        VAL(m.number) = 0
          RETURN m.sgn +  ;
                 ALLTRIM(m.string)
     ENDIF
ENDDO
RETURN m.string
ENDFUNC

----------

