PDA

View Full Version : مبتدی: تبدیل ریال به حروف



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

binyaz2003
شنبه 27 فروردین 1390, 17:16 عصر
لطفا در مورد سئوال اول جستجو کنيد کدهاي زيادي در اين قسمت قرارداده شده است.
در مورد دوم هم در راهنماي فاکس دنبال کلمه filter بگرديد جواب رو پيدا ميکنيد.

Emir New
شنبه 27 فروردین 1390, 21:21 عصر
با تشکر از اقای بی نیاز
در مورد سوال دومم به جواب رسیدم ولی در مورد سوال اول من ابتدا جستجو زدم ولی چون به نتیجه ای نرسیدم این تاپیک رو ایجاد کردم

rahro
یک شنبه 28 فروردین 1390, 06:50 صبح
با تشکر از اقای بی نیاز
در مورد سوال دومم به جواب رسیدم ولی در مورد سوال اول من ابتدا جستجو زدم ولی چون به نتیجه ای نرسیدم این تاپیک رو ایجاد کردم

سلام
ميتوني از اين فانکشن استفاده کني

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