ผมใช้ประมาณนี้ครับ ถ้าไงก็ลองไปปรับใช้นะครับ {@Currency } => เงินที่ต้องการแปลงครับ
//BahtString
//ประการตัวแปรต่างๆ ::..
Local stringVar array D:=["","สิบ","ร้อย","พัน","หมื่น","แสน","ล้าน"];
Local stringVar array E:=["หนึ่ง","สอง","สาม","สี่","ห้า","หก","เจ็ด","แปด","เก้า"];
Local stringVar array strArrNumSplit;
Local numberVar numLength=0;
Local stringVar strTmp;
Local stringVar strResualt;
Local stringVar strRevertNumber;
Local numberVar i=0;
Local numberVar j=0;
Local numberVar k=0;
Local numberVar numIndex=0;
//แยกจำนวนเต็มกับทศนิยม::.
strArrNumSplit:=Split(Cstr( {@Currency} ,2,""),".");
numLength := Length(strArrNumSplit[1]);
strRevertNumber:=StrReverse(strArrNumSplit[1]);
//วนตัวเลขจนครบจำนวนหลัก(ตัวเลขหน้าจุด)::. Local stringVar array D:=["","สิบ","ร้อย","พัน","หมื่น","แสน","ล้าน"];
Local stringVar array E:=["หนึ่ง","สอง","สาม","สี่","ห้า","หก","เจ็ด","แปด","เก้า"];
Local stringVar array strArrNumSplit;
Local numberVar numLength=0;
Local stringVar strTmp;
Local stringVar strResualt;
Local stringVar strRevertNumber;
Local numberVar i=0;
Local numberVar j=0;
Local numberVar k=0;
Local numberVar numIndex=0;
//แยกจำนวนเต็มกับทศนิยม::.
strArrNumSplit:=Split(Cstr( {@Currency} ,2,""),".");
numLength := Length(strArrNumSplit[1]);
strRevertNumber:=StrReverse(strArrNumSplit[1]);
for i :=1 to numLength do (
//แปลงตัวเลขเป็นตัวหนังสือ::.
for j :=1 to 9 do (
if (Mid(strRevertNumber,i,1)=CSTR(j,0)) then (
strTmp := E[j];
if ((i=1 and Mid(strRevertNumber,i,1)="1" and numLength>1 )) or
((i=7 and Mid(strRevertNumber,i,1)="1" and numLength>7 )) then
(strTmp := "เอ็ด";);
if ((i=2 or i=8) and Mid(strRevertNumber,i,1)="1") then
(strTmp :="";);
if ((i=2 or i=8) and Mid(strRevertNumber,i,1)="2") then
(strTmp := "ยี่";);
//ใส่ค่าประจำหลัก::.
if(i>1 and i<7) then
(strTmp :=strTmp+D[i];)
else if(i=7)then
(strTmp :=strTmp+D[i]; )
else if(i>7)then
( numIndex :=(i mod 7)+ 1;
strTmp := strTmp+D[numIndex];);
//::..
strResualt := strTmp + strResualt;
exit for;
);
);//End For j
);//End For i
//วนตัวเลขจนครบจำนวนหลัก(ตัวเลขหลังจุด)::.
Local stringVar strNum;
Local stringVar num1 := Mid(strArrNumSplit[2],1,1);
Local stringVar num2 := Mid(strArrNumSplit[2],2,1);
strResualt := strResualt+"บาท";
if(num1="0" and num2="0") then
(
strResualt := strResualt+"ถ้วน";
)
else
(
for i := 1 to 2 do
(
strNum :=Mid(strArrNumSplit[2],i,1);
//แปลงตัวเลขเป็นตัวหนังสือ::.
for j:=1 to 9 do
(
if(strNum =CSTR(j,0)) then
(
strTmp :=E[j];
if(i=1 and strNum="1") then (strTmp := "";);
if(i=1 and strNum="2") then (strTmp := "ยี่";);
if(i=1) then (
strTmp := strTmp+ "สิบ";
);
if(i=2 and num1<>"0" and num2="1" ) then strTmp :="เอ็ด";
strResualt := strResualt + strTmp;
exit for;
);
);
);
strResualt := strResualt+ "สตางค์";
);
การใช้งานนะครับ คือ ให้คุณ สร้าง Formula Fields
เช่น ชื่อ BahtString จากนั้นก็เอา code นี้ ไปใส่ครับ
แล้วก็ใช้ BahtString ใน Report
ส่วนตรง {@Currency } ก็คือ จำนวนเงินครับ
คุณอาจลองเทส ผล เช่น การใส่ตัวเลขไปแทน {@Currency }
แล้วพอใช้จริงค่อย ใส่ Field ที่ต้องการแปลง
ถ้าไม่อยากใส่ไปตรงๆ ก็อาจจะสร้าง Formula Fields
อีกตัว ชื่อ Currency แล้วก็นำ Field ที่ต้องการแปลงมาใส่ใน code
ของ Formula Fields Currency ก็ได้ครับ
ref : http://greatfriends.biz/webboards/msg.asp?id=33237
No comments:
Post a Comment