ปกติแล้ว Crystral Report ในการ set format date นั้น สามารถเลือก format ปี เป็น ค.ศ. หรือพ.ศ. ได้ และ เดือนนั้น จะขึ้นกะ Regional ของเครื่ือง (หรือเปล่า ^^'')
ทีนี้สำหรับเครื่องที่แสดงผล date เป็น ปี ค.ศ. และ เดือนเป็นอังกฤษ (เซิร์ฟเวอร์ database T-T) หรืออะไรก็ตาม
พล่ามมาทำไมเนี่ย ว่าง่ายๆ ก็คือ เปนการเขียนฟังก์ชั่นใช้เอง ไม่ต้องแคร์เครื่อง
เปิด Crystral Report มาเลยครับ
1. เปิด Formula Editor สร้าง Function ขึ้นมาในส่วน Report Custom Fucntion ในรูปสร้าง toThaiDate
2. รายละเอียดใน Function
'เริ่มฟังก์ชั่น
Function (datetimeVar d)
'เช็คเงื่อนไข ถ้าปี เป็น ค.ศ. เปลี่ยนเป็น พ.ศ. (+543)
if(Year (d) <2500) then
d := DateTime (Year (d)+543,Month (d) ,Day (d) )
else
d;
'แปลง date to string ให้อยู่ใน format (อันนี้แล้วแต่ถนัด)
Local StringVar y;
y:= Totext(d,"dd MM yyyy");
' ทำการ replace เดือนที่เป็นหมายเลข 01-12 ด้วย คำที่ต้องการ
'(ในที่นี้จะใช้ การค้นหา " 01 " ด้วย " มกราคม " แทนการใช้ "01"
' เนื่องจาก จะไปเจอวันที่ "01" เข้า >< หากใช้ format เป็น dd/MM/yyyy
' ก็จะเป็น Replace (y,"/01/","/มกราคม/") แทนครับ
if(mid(y,4,2)="01") then
Replace (y," 01 "," มกราคม ")
else if(mid(y,4,2)="02") then
Replace (y," 02 "," กุมภาพันธ์ ")
else if(mid(y,4,2)="03") then
Replace (y," 03 "," มีนาคม ")
else if(mid(y,4,2)="04") then
Replace (y," 04 "," เมษายน ")
else if(mid(y,4,2)="05") then
Replace (y," 05 "," พฤษภาคม ")
else if(mid(y,4,2)="06") then
Replace (y," 06 "," มิถุนายน ")
else if(mid(y,4,2)="07") then
Replace (y," 07 "," กรกฎาคม ")
else if(mid(y,4,2)="08") then
Replace (y," 08 "," สิงหาคม ")
else if(mid(y,4,2)="09") then
Replace (y," 09 "," กันยายน ")
else if(mid(y,4,2)="10") then
Replace (y," 10 "," ตุลาคม ")
else if(mid(y,4,2)="11") then
Replace (y," 11 "," พฤศจิกายน ")
else if(mid(y,4,2)="12") then
Replace (y," 12 "," ธันวาคม ")
else
y
'ค่าที่ return ออกมาจะเป็นค่า y ที่ถูก replace
3.วิธีเรียกใน formula ก็ใส่ชื่อ function & parameter เลยครับ
จบแล้วครับ
หวังว่าคงจะได้นำไปใช้กัน หรือเป็นตัวอย่างในการเขียน custom function ใช้เองกันนะครับ
No comments:
Post a Comment