Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 108,132

HOME > .NET Framework > Forum > เรื่องวันที่ใน Crystal Report คศ เป็น พศ ครับ (ขออนุญาติลงไว้เผื่อผู้ที่ยังไม่รู้)



 

เรื่องวันที่ใน Crystal Report คศ เป็น พศ ครับ (ขออนุญาติลงไว้เผื่อผู้ที่ยังไม่รู้)

 



Topic : 054968



โพสกระทู้ ( 4 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook



หลังจากที่ผมเองได้ประสบปัญหาเรื่องวันที่อยู่พักนึงในเรื่องของ Print Date ที่ทำยังไงก็ปรับไม่ได้สักทีก็เลยลองใช้ Code ที่ลงไว้ตามนี้เลยครับ

ใช้ Code นี้นะครับสำหรับผู้ที่ปรับไม่ได้

Code สำหรับ Print Date
cdate(Year(PrintDate)+543,Month(PrintDate),day(PrintDate))


Code สำหรับ Data Field
cdate(Year({bill_damage.dam_date})+543,Month({bill_damage.dam_date}),day({bill_damage.dam_date}))


'/// สีแดงคือ Data Field นะครับ

วิธีทำ Print Date
1. คลิกขวาที่ส่วนของ Formula Fields แล้วเลือก New
2. ตั้งชื่อเลยครับ แล้วกด Enter
3. ใส่ cdate(Year(PrintDate)+543,Month(PrintDate),day(PrintDate))
4. กดเซฟเลยครับ

วิธีทำ Data Field
1. ทำข้อที่ 1-2 ในแบบของ Print Date ครับ
2. ใส่

cdate(Year({bill_damage.dam_date})+543,Month({bill_damage.dam_date}),day({bill_damage.dam_date}))

4. กดเซฟเลยครับ

หมายเหตุ** Data Field สีแดง จะเปลี่ยนไปตาม Database ของใครของมันนะครับ และหวังว่าจะมีประโยชน์บ้างสำหรับผู้ที่ยังไม่รู้นะครับ



Tag : .NET, Crystal Report, VB.NET, VS 2008 (.NET 3.x)







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2011-01-24 09:56:15 By : toekungs View : 24711 Reply : 30
 

 

No. 1



โพสกระทู้ ( 19 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณอยากสุดซึ้ง ถ้าไม่ได้ความรู้นี้ พรุ่งนี้คงแย่แน่เลย ขอบคุณครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-06-16 02:06:45 By : artto81
 


 

No. 2



โพสกระทู้ ( 74,054 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

+1 สำหรับความตั้งใจและนำใจงามครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-06-16 08:43:45 By : webmaster
 

 

No. 3



โพสกระทู้ ( 13 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณมากคับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-14 15:14:48 By : Angie_mink
 


 

No. 4



โพสกระทู้ ( 3,748 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์
Facebook

+1ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-14 15:16:04 By : Dragons_first
 


 

No. 5



โพสกระทู้ ( 320 )
บทความ ( 0 )



สถานะออฟไลน์


ถ้าเป็น Data Field เดียว 2012 ให้ได้เป็น 2555 ต้องเป็นแบบไหนครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-03-02 00:00:54 By : โต้ง
 


 

No. 6



โพสกระทู้ ( 106 )
บทความ ( 1 )



สถานะออฟไลน์


สุดยอดครับ ขอบคุณครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-03-12 00:28:33 By : worajito
 


 

No. 7



โพสกระทู้ ( 18 )
บทความ ( 0 )



สถานะออฟไลน์


+1 ขอบคุณนะค่ะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-03-12 08:47:49 By : athaneekul
 


 

No. 8



โพสกระทู้ ( 7 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-03-12 22:27:43 By : day1989
 


 

No. 9

Guest


จากโค้ด

cdate(Year({command.date_vats})+543,Month({command.date_vats}),day({command.date_vats}))


วันที่ 29/2/2012 จะถูกเปลี่ยนเป็น 29/2/2555

เมื่อเข้าฟังชันก์ cdate แล้ว 29/2/2555 จะถูกเห็นเป็น ค.ศ. 2555 ซึ่งในปี ค.ศ. 2555 ไม่มีวันที่ 29/2 ทำให้เกิด error

จะแก้ไขอย่างไรครับ ..
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-03-13 09:21:37 By : ดำรงศักดิ์
 


 

No. 10

Guest


ตอบความคิดเห็นที่ : 9 เขียนโดย : ดำรงศักดิ์ เมื่อวันที่ 2012-03-13 09:21:37
รายละเอียดของการตอบ ::

เข้าใจผิดแล้วมั้งครับ เมื่อ ปี ค.ศ. +543เข้าไปในปี ก็จะเป็น ปี พ.ศ. แล้วครับ ไม่ใช่ว่า +543 แล้วยังคงเป็น ค.ศ.

วันที่ 29/2/2012 อ่านว่า วันที่ 29 เดือน 2 ค.ศ. 2012 จะถูกเปลี่ยนเป็น 29/2/2555 อ่านว่า วันที่ 29 เดือน 2 พ.ศ. 2555

ขอบคุณที่แบ่งปันโค๊ดดีๆครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-28 18:49:44 By : หมูอ้วน
 


 

No. 11

Guest


โห ลึกล้ำๆ ใช้

cdate(Year({command.date_vats})+543,Month({command.date_vats}),day({command.date_vats}))

ซะด้วย

นึกว่าใช้ system.globalization.cultureinfo("th_TH") ซะอีก ลูกทุ่งมากเลย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-29 09:32:14 By : พี่หมี
 


 

No. 12



โพสกระทู้ ( 33 )
บทความ ( 0 )



สถานะออฟไลน์


แล้วถ้าเกิดว่าผมอยากเปลี่ยนในตอนเอามาแสดงใน Gridview กับ ใน Label ล่ะครับ ใช้โค้ดนี้ได้ป่ะ
หรือว่าต้องทำยังไงอ่ะครับ


ประวัติการแก้ไข
2012-05-31 15:20:06
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-31 15:18:22 By : KuNgbAng
 


 

No. 13

Guest


ตอบความคิดเห็นที่ : 10 เขียนโดย : หมูอ้วน เมื่อวันที่ 2012-05-28 18:49:44
รายละเอียดของการตอบ ::
การบวก 543 เข้าไปใน ค.ศ. ไม่ได้ทำให้ ค.ศ. กลายเป็น พ.ศ. หรอกครับ แค่เป็นการหลอกเพื่อให้แสดงคล้าย พ.ศ. เท่านั้น
เช่น ปี 2012 + 543 = 2555 เรามองเห็นแล้วคิดว่าเป็น พ.ศ. แต่โปรแกรมจะคิดว่าเป็นปี ค.ศ. 2555
ซึ่งเมื่อเจอวันที่ 29/2/2555 จึงเกิด error เพราะไม่มีวันนั้นจริง ตาม คห.9

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-08-13 19:49:30 By : ss
 


 

No. 14



โพสกระทู้ ( 0 )
บทความ ( 0 )



สถานะออฟไลน์


มีประโยชน์มากครับผมขอบคุณมากครับ
ไม่ทราบว่ามีกันหรือยังนะครับ พอดีได้นำ Code ของพี่ไปใช้แล้วแสดง PrintDate เป็นของไทยแล้ว คือ 24/1/2556
แต่ต้องการให้แสดงเป็น 24 มกราคม 2556 เลยนำมาประยุกต์กับ Code ที่มีอยุ่เลยได้ผลตามที่ต้องการดังนี้

Code
Local stringVar m; m:= ToText(cdate(PrintDate),Month(PrintDate),day(PrintDate)),"dd/MM/yyyy"); local stringVar m2; m2:= mid(m,4,2); if m2="01" then m2:="มกราคม" else if m2="02" then m2:="กุมภาพันธ์" else if m2="03" then m2:="มีนาคม" else if m2="04" then m2:="เมษายน" else if m2="05" then m2:="พฤษภาคม" else if m2="06" then m2:="มิถุนายน" else if m2="07" then m2:="กรกฏาคม" else if m2="08" then m2:="สิงหาคม" else if m2="09" then m2:="กันยายน" else if m2="10" then m2:="ตุลาคม" else if m2="11" then m2:="พฤษจิกายน" else if m2="12" then m2:="ธันวาคม"; (mid(m,1,2)) + " " + m2 + " " + ToText(ToNumber(mid(m,7,4))+543,"####",0);



ปล.ไม่ทราบว่าท่านอื่นมีวิธีที่ง่ายกว่านี้ไหมคับเพื่อ Code จะได้สั้นๆหน่อย


ประวัติการแก้ไข
2013-01-24 16:55:34
2013-01-24 16:56:09
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-01-24 16:51:17 By : cannon
 


 

No. 15

Guest


ขอบคุณมากค่ะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-21 17:41:34 By : JOY
 


 

No. 16



โพสกระทู้ ( 14 )
บทความ ( 0 )



สถานะออฟไลน์


ลองทำตามโค้ดด้านบนแล้ว ใช้งานได้
แต่ติดตรง ถ้าเป็นวันที่ 29 กุมภา 2559 มันจะเกิด Error ไม่สามารถแสดงผลได้ครับ

Error ตอน 29 กุมภา พศ 2559

มีใครเจอปัญหานี้ หรือรู้วิธีแก้บ้างมั้ยครับ?

ผมทำโปรเจคจบอยู่ ทำงานเกี่ยวกับวันที่เยอะมาก ใกล้จะส่งแล้ว
ขอความกรุณาด้วยครับ


ประวัติการแก้ไข
2013-04-11 09:55:52
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-04-11 09:48:16 By : Tsumine
 


 

No. 17

Guest


ถ้าเราใช้แค่แสดงผลให้เป็นปีพ.ศ. เราก็ประยุกต์โดยการจัดรูปแบบการแสดงผลใหม่ดีไหมครับ
โดยที่เราไม่ต้องเปลี่ยนค่าเหมือนในตัวอย่าง
เช่น เราก็เอา ปีค.ศ. มา +543 แล้วแปลงเป็น string ไปต่อท้ายกับ วันและเดือน โดยไม่ใช้ cdate
เพราะ cdate จะเปลี่ยนค่าให้กลายเป็นวันที่ ตามที่หลายท่านเข้าใจ ซึ่งจะเกิดปัญหากับ 29/2/2559

เช่น
ToText({MyDate},"d MMM ") + ToText(CDATE(Year({MyDate}) + 543,01,01),"yy")

ก็จะได้ผลลัพธ์ เป็น 2 ก.พ. 59
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-04-18 22:52:58 By : calgop
 


 

No. 18

Guest


ตอบความคิดเห็นที่ : 14 เขียนโดย : cannon เมื่อวันที่ 2013-01-24 16:51:17
รายละเอียดของการตอบ ::
แค่ใส่รูปแบบก็ได้แล้วครับ เช่น ToText(PrintDate,"dd MMMM yyyy")

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-04-18 23:06:12 By : calgop
 


 

No. 19



โพสกระทู้ ( 14 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 9 เขียนโดย : ดำรงศักดิ์ เมื่อวันที่ 2012-03-13 09:21:37
รายละเอียดของการตอบ ::
ไปเจอวิธีนี้มาครับ เป็นการแปลงค่าเก็บไว้ที่ Formula Field โดยแยกวันที่ เดือน และปี ออกจากกัน



http://www.youtube.com/watch?v=M2ndXlfJ55Q

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-04-19 21:11:08 By : Tsumine
 


 

No. 20



โพสกระทู้ ( 1 )
บทความ ( 0 )



สถานะออฟไลน์


ตามไปดูมาแล้วครับ มีประโยชน์มากครับ
แต่ก็ค่อนข้างยุ่งยาก เพราะแปลงเป็นตัวเลข ต้องมาคอยจัด format
และการตั้งเงื่อนไขแสดงผลเดือนก็อาจเกิดข้อผิดพลาดได้ง่าย เช่น ลืมเปลื่ยนเงื่อนไข
และลืมเปลื่ยนเงื่อนไข ไม่ได้ทำให้ผิดไวยากรณ์นะครับ บันทึก formula ได้ แต่อาจไปผิดพลาดในรายงาน

ที่จริง crystal report ก็แสดงเดือนเป็นภาษาไทยได้ถูกต้องอยู่แล้ว แต่ที่เป็นปัญหาคือ ปี ที่แสดงเป็น ค.ศ.

ซึ่งวิธีของคุณ ToeKungS ก็ได้ผล และกระชับ เข้าใจง่าย หาข้อผิดพลาดได้ง่ายอยู่แล้ว
เพียงแต่การใช้ cdate เป็นการแปลงค่าให้เป็นวันที่ (ความเห็นที่ 9 เข้าใจถูกต้องแล้วนะครับ ไม่ได้เข้าใจผิด)

ทีนี้ ถ้าเราประยุกต์ โดยการจัดรูปแบบวันที่ของเราให้แสดงแค่ วันและเดือน จากนั้น นำ ปี มาบวก 543 แล้วนำมาต่อท้ายก็จะได้รูปแบบตามต้องการ

เช่น
ToText({MyDate},"d MMM ") + ToText(CDATE(Year({MyDate}) + 543,01,01),"yy")

( ตามความเห็นที่ 17 ซึ่งผมโพสต์ไว้ก่อนสมัครสมาชิกนะครับ )

จากตัวอย่างที่ผมนำมาใช้ จะเห็นว่าผมใช้ ToText ในการจัดรูปแบบวันที่จาก data filed MyDate (เดือนเป็นภาษาไทยอยู่แล้วครับ)
ให้แสดงผลแค่ วันและเดือน ก่อน จากนั้น ใช้ CDATE ในการเพิ่มปีของ MyDate ไปอีก 543 ปี (ยังคงเป็น ค.ศ. นะครับ) แต่ใช้วันที่ 1 เดือน 1 เพราะมีแน่นอนทุกปี แล้วใช้ ToText ครอบ เพื่อให้แสดงผลแค่ ปี อย่างเดียว

ตามความเห็นที่ 13 ครับ เราบอกให้ crystal report แสดงปี ค.ศ. ให้เราเห็นเป็นปี พ.ศ.

ขอนอกเรื่องนิดนึงครับ
ผมเองเขียนโปรแกรมบน .net มาหลายปีครับ แต่ก็ไม่ได้เก่งกาจอะไรนะครับ crystal report ก็งูๆปลาๆ ครับ อาศัยหาตัวอย่างจาก googleเอา
และปัญหาที่ทำให้ผมต้องปวดหัวมาแล้วหลายครั้งก็คือการใช้ if.... else if .... ครับ โดยเฉพาะถ้ามีเงื่อนไขเยอะ มี code เป็นพันบรรทัด
ซึ่งเรามักประหยัดเวลาด้วยการ copy แล้ว paste เพราะบางที เราก็ลืมเปลื่ยนเงื่อนไข และไม่ทำให้เกิด syntax error

เขาถึงบอกว่า เขียนโปรแกรมให้ สั้น กระชับ เข้าใจง่าย หลีกเลี่ยงการใช้เงื่อนไข ถ้าไม่จำเป็น เพราะการหาข้อผิดพลาดของเงื่อนไข
แม้จะเป็นโปรแกรมที่เราเขียนเองทั้งหมด ก็ไม่ใช่เรื่องง่ายนะครับ ^_^

ขอบคุณ คุณ ToeKungS ด้วยครับ สำหรับเทคนิคดีๆ
เพราะผมก็เจอปัญหานี้อยู่เหมือนกัน แต่ได้เอามาประยุกต์ และนำมาลง เพื่อต่อยอดให้
หวังว่าคงเป็นประโยชน์กับท่านอื่นๆ บ้างนะครับ ^_^


ประวัติการแก้ไข
2013-04-20 02:10:38
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-04-20 02:03:10 By : calgop
 


 

No. 21



โพสกระทู้ ( 3 )
บทความ ( 0 )



สถานะออฟไลน์



ขอบพระคุณมากครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-05-22 18:34:53 By : komkit
 


 

No. 22

Guest


แนมไปอึกวิธีละกัน ถ้าเป็น SQL SERVER ใช้เยี่ยงนี้มันก็ได้นะ ไม่ต้องบวกอะไรมากมาย
แถมจะเอาชื่อวันเดือนแบบไทยก็ได้ จริงๆมันก็ได้ทุกภาษา

SELECT FORMAT(getdate(), 'ddd dd-MMM-yyyy', 'th-TH');

คือกับตัวทำรายงานอย่าง CR เนี่ยผมเองจะไไม่สนับสนุนให้ทำอะไรกับมันมาก
ให้มันทำหน้าที่แค่อกรายงานให้ก็พอ พวกคำนวณหรือ format อะไรนี่ควรจะทำเอง
เพราะมันเคยล่มมาหลายครั้งละ ซึ่งมีทั้งที่แก้เองได้ ต้องรอ patch
หนักหน่อยก็ต้องใช้โดนบังคับให้ซื้อตัวจริง จริงจะได้ support
(ตอนที่ seagate ขาย CR ให้ SAP ใหม่ๆนั่นแหละครัช bug งี้มาเป็นฟาร์ม)

เสริมนิสในทุก database ที่ค่อนข้างมาตรฐานเค้าจะเตรียมเรื่อง region format ไว้แล้วนะ
หาวิธีเรียกก็พอไม่เพฃหนื่อยอะไรมากมายครัช
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-05-24 16:37:12 By : DOG{B}
 


 

No. 23

Guest


ปัจจุบันใช้ MS SQL Server 2008 R2 มันไปอยู่ไหนหว่าฟังก์ชั่น FORMAT
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-05-24 20:27:14 By : ...
 


 

No. 24

Guest


แนมไปอึกวิธีละกัน HACKS CRUFL

เขียนเอาไว้ตั้งนานนมก่อนที่จะรู้จักคำว่า Lampd/LINQ

Code (VB.NET)
Imports System.Runtime.InteropServices

<ComVisible(True), InterfaceType(ComInterfaceType.InterfaceIsDual), GuidAttribute("D5447A7B-FDD0-4869-8B12-69EB1A56E6E0")> _
Public Interface IEHacksCRUfl

    Function NumberThai(ByVal strPass As String) As String                              'แปลงตัวเลขอารบิคเป็นตัวเลขไทย เช่น 123 --> ๑๒๓
    Function ThaiDate(ByVal dPass As DateTime, ByVal strFormat As String) As String     'for support era ไทย/คริสศักราช
    Function BahtText(ByVal dblPass As Double) As String                                'คำตัวเลขเป็นคำอ่านภาษาไทย  เช่น 12.25 --> สิบสองบาทยี่สิบห้าสตางค์

End Interface



Code (VB.NET)
Imports System.Runtime.InteropServices

<ComVisible(True), ClassInterface(ClassInterfaceType.None), GuidAttribute("F2AFEC0E-B776-41a7-A4CD-CF7F09386AE5")> _
Public Class CRUFLWaroot : Implements IEHacksCRUfl
    '
    'แปลงตัวเลขอารบิค เป็นตัวเลขไทย เช่น 123 เป็น ๑๒๓ เป็นต้น
    '
    Public Function NumberThai(ByVal strPass As String) As String Implements IEHacksCRUfl.NumberThai
        If String.IsNullOrEmpty(strPass) = True OrElse strPass.Trim.Length = 0 Then Return String.Empty
        For iSub As Byte = 0 To 9   'Byte 1-255
            strPass = strPass.Replace(iSub.ToString, Chr(iSub + 240))   'อักษรตัวอื่นคงไว้ที่เดิม
        Next
        Return strPass
    End Function
    '
    'กำหนดรูปแบบวันที่ในรายงาน Crystal Reports  /Support Era ทั้งแบบ พุทธและคริสต์
    '
    Public Function ThaiDate(ByVal dPass As Date, ByVal strFormat As String) As String Implements IEHacksCRUfl.ThaiDate
        Dim strSubValue As String = String.Empty
        Try
            strSubValue = String.Format(strFormat, dPass)
        Catch ex As Exception
            'Ignore error and return String.Empty
        End Try
        Return strSubValue
    End Function
    '
    'แปลงตัวเลขเป็นคำอ่านภาษาไทย เช่น 101 -> หนึ่งร้อยหนึ่งบาทถ้วน
    '
    Function BahtText(ByVal dblPass As Double) As String Implements IEHacksCRUfl.BahtText
        Dim dbSubMgr As New clsMy.DigitManager
        Return dbSubMgr.BahtText(dblPass)
    End Function

End Class



Code (VB.NET)
    Public Class DigitManager
        '
        'อ่านตัวเลขเป็นคำอ่านภาษไทย เช่น 101 -> หนึ่งร้อยหนึ่งบาทถ้วน
        'Lastupdate : 01/05/2005
        '
        Public Function BahtText(ByVal dblPassNumber As Double) As String
            Return ThaiBahtText(dblPassNumber)
        End Function
        Private Function ThaiBahtText(ByVal strPriNumber As String) As String
            Dim dblSubNumber As Double
            If Not Double.TryParse(strPriNumber, Globalization.NumberStyles.AllowDecimalPoint Or _
                    Globalization.NumberStyles.AllowThousands Or Globalization.NumberStyles.AllowCurrencySymbol _
                    , Nothing, dblSubNumber) Then
                Return "ตัวเลขไม่ถูกต้อง"
                Exit Function
            End If

            Dim strSubNumValue As String = Format(dblSubNumber, "###0.00").ToString.PadLeft(15, Space(1)) 'เอาเครื่องหมายคั่นหลักพันออกให้หมด
            Dim strSubThaiBaht As String = ""       'เก็บค่าการอ่านตัวเลขเป็นคำอ่านภาษาไทย

            If Val(strSubNumValue) = 0 Then Return "ศูนย์บาท"
            If strSubNumValue.Length > 15 Then Return "ตัวเลขเกินหลักแสนล้าน โปรแกรมสามารถอ่านได้ไม่เกินเก้าแสนเก้าหมื่นเก้าพันเก้าร้อยเก้าสิบเก้าล้านบาท"
            '
            strSubThaiBaht = IIf(Val(strSubNumValue.Substring(0, 6)) > 0, ThaiHundredThousand(strSubNumValue.Substring(0, 6)) & "ล้าน", "")
            strSubThaiBaht &= ThaiHundredThousand(strSubNumValue.Substring(6, 6)) & IIf(Val(strSubNumValue) >= 1, "บาท", "")
            strSubThaiBaht &= IIf(strSubNumValue.Substring(13, 2) = "00", "ถ้วน", ThaiHundredThousand(Space(4) & strSubNumValue.Substring(13, 2)) & "สตางค์ขะแมร์")
            '
            Return strSubThaiBaht
        End Function
        Private Function ThaiHundredThousand(ByVal strPassNum As String) As String
            Dim arrSubCount() As String = {"", "หนึ่ง", "สอง", "สาม", "สี่", "ห้า", "หก", "เจ็ด", "แปด", "เก้า", ""}
            Dim arrSubCountTen() As String = {"", "สิบ", "ยี่สิบ", "สามสิบ", "สี่สิบ", "ห้าสิบ", "หกสิบ", "เจ็ดสิบ", "แปดสิบ", "เก้าสิบ", ""}
            Dim arrSubCountHund() As String = {"", "แสน", "หมื่น", "พัน", "ร้อย", "สิบ", ""}
            Dim iSub, iSubNumVal As Byte    '0,1,2,...,9 only
            Dim strSubReturn As String = ""
            For iSub = 1 To 6               'รอบแรกคือ หลักแสน  รอบสุดท้ายคือ หลักหน่วย
                iSubNumVal = Val(strPassNum.Substring(iSub - 1, 1))     'split มาประมวลผลทีละตัวเท่านั้น ( 0,1,2,...,9)
                strSubReturn &= IIf(iSubNumVal > 0, IIf(iSub = 6 AndAlso iSubNumVal = 1 AndAlso Val(strPassNum) > 1 _
                                    AndAlso strPassNum.Substring(4, 1) <> "0", "เอ็ด", IIf(iSub <> 5, _
                                    arrSubCount(iSubNumVal) & arrSubCountHund(iSub), arrSubCountTen(iSubNumVal))), "")
            Next
            Return strSubReturn             'Max(เก้าแสนเก้าหมื่นเก้าพันเก้าร้อยเก้าสิบเก้าบาท)
        End Function
    End Class

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-05-24 21:00:25 By : ...
 


 

No. 25

Guest


จาก #NO 24
แถมให้อีกนิดหนึ่ง Function NumberThai สมัยโน้น (เก่าเก็บ)

อันนี้ยุคสมัย
Code (VB.NET)
'ตัวอย่างการใช้งาน : Dim แก่เพราะอยู่นาน = New RegularExpressions.Regex("[0-9]").Replace("987654321", New RegularExpressions.MatchEvaluator(AddressOf NumberThai))

    Private Function NumberThai(ByVal s As RegularExpressions.Match) As String
        Return {"๐", "๑", "๒", "๓", "๔", "๕", "๖", "๗", "๘", "๙"}(Integer.Parse(s.Value))
    End Function

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-05-24 21:15:03 By : ...
 


 

No. 26

Guest


@ {Dog B ที่ไม่มีหาร}

จาก #NO 24 สมมุติว่าคุณมองภาพไม่ออก มันก็คล้ายฯ (อันเดียวกันนั่นแหละ CLR) บน SQL Server นั่นแหละครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-05-24 21:21:34 By : ...
 


 

No. 27

Guest


ตอบความคิดเห็นที่ : 23 เขียนโดย : ... เมื่อวันที่ 2015-05-24 20:27:14
รายละเอียดของการตอบ ::
งืม นี่ใช้ SQL Server 2012 Enterprize Ed. test น่ะครัช มันมีมานานแล้วไม่ใช่หรอ format นี่น่ะ
ผมว่าผมใช้มานานอยู่นะ อาจจะ 2005 เลยมั้ย ไม่แน่ใจดิ


ความสนุกของ programming คือมันเขียนได้หลายแบบ แต่ออกตัวนิสว่าผมเป็นคนขี้เกียจ
อะไรที่ขโมยหน้าด้านๆมาใช้ได้ผมก็จะขโมยมันมาเลย
และนิยมทำอะไรให้มันเสร็จใน Query
จากนั้นก็ยัดลงใน view สะ มันจะแก้ปัญหาเสียก่อนแล้วที่ต้นทาง
ทีนี้ปลายทางจะภาษาอันใด หรือจะ Report engine ตัวไหนก็สุดแต่บุญกรรมเถิด



แนมอีกวิธี ของ CLR >> เอา BathText ของ Excel มาใช้
อันนี้ต้อง add reference [Microsoft.Office.Interop.Excel] ใน project ด้วยนะแจ๊ะ

Code (C#)
using System.Text;
using System.Threading.Tasks;
using Microsoft.Office.Interop.Excel;

using System.Runtime.InteropServices;

namespace ThaiInterface
{   
    class Program
    {             
        static void Main(string[] args)
        {
            double MoneyMoney = 123154546544.00;
            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.WorksheetFunction xlFunction = xlApp.WorksheetFunction;
            string MoneyStr = xlFunction.BahtText(MoneyMoney);
            System.Console.WriteLine("BATHTEXT OF {0} IS {1}", MoneyMoney, MoneyStr);
            System.Console.ReadLine();
        }
    }
}


ปล.

1. ตอนมัน output อาจจะเห็นเป็นตัวหนังสือยึกยือพองาม
อย่างไรเสียลอง debug ดูจะเห็นว่ามันแสดงได้ถูกโต้งโล้วว
เนื่องจากเป็น pure clr แล้ว ก้อปย้ายเครื่องจึงไม่น่าจะมีปัญหาเช่น COM แบบเก่า
แต่ใน server อาจจะต้องติดตั้ง excel ไว้เสียด้วย (เครื่องนี้ใช้ OFFICE 2013)
ส่วน วันเดือนปี หรือพี่น้องที่ต้องการเรื่อง ตัวเลขแบบไทย มันเตรียมมาให้แว้ว
ลองๆหาดู

2.Microsoft.Office.Interop.Excel มันอยู่ตรงนี้นะแจ๊ะ
Microsoft.Office.Interop.Excel

3. บำเพ็ญเพียรครบ 100 เมื่อไร จะงอกหางงามๆออกมาให้ชมครัช
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-05-24 23:25:40 By : DOG{B}
 


 

No. 28

Guest


เอ้ย นี่มันเรื่อง thai date format นี่เนอะ ลืมๆ

Code (C#)
 static void Main(string[] args)
        {
            double MoneyMoney = 123154546544.00;
            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.WorksheetFunction xlFunction = xlApp.WorksheetFunction;
            string MoneyStr = xlFunction.BahtText(MoneyMoney);

            DateTime myDate = DateTime.Now;

            string ThaiDateStr = xlFunction.Text(myDate, "[$-D07041E]วววว ดด ดดดด ปปปป");


            System.Console.WriteLine("THAIDATE OF {0} IS {1}", myDate.ToString("dd-MM-yyyy"), ThaiDateStr);
            System.Console.WriteLine("BATHTEXT OF {0} IS {1}", MoneyMoney, MoneyStr);
            System.Console.ReadLine();
        }


คือในตัว .net มันก็ convert ได้อยู่แล้ว แต่หากใช้ Excel จะเพิ่มการเปลี่ยนตัวเลขเป็นเลขไทยให้ด้วย
tip อยู่ที่ Flag ในการ covert >> [$-D07041E]
D >> เปลี่ยนเป็นเลขไทย ถ้าอยากคงอารบิกไว้ก็เอา D นี่ออก
07 >> เป็นปี Buddhist ไม่ใช่ Anno Domini >> ปี พศ. ไม่ใช่ คศ.
041E >> LCIDS ของภาษาไทยจ่ะ

ปล. ใช้ date format pattern ด้วยภาษาไทยได้ด้วยนะแจะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-05-25 00:17:27 By : DOG{B}
 


 

No. 29

Guest


@ {DOG B ที่ไม่มีหาร}
Code
ความสนุกของ programming คือมันเขียนได้หลายแบบ


คุณพูดได้ถูกต้องแล้วครับและคุณไม่ได้ใช้ปากเขียนโปรแกรมเหมือนคนส่วนใหญ่



เล่าสู่กันฟัง สำหรับนาย/นาง/นางสาว ปัญหาและอุปสรรค

ASP.NET Web form
Master Page + Routing + BootStrap 3.x.x + AdminLTE 2.1.1

ของเดิมมันก็ดีอยู่แล้ว แต่แอบรู้สึกลึกลึกในใจว่า
ยืนแค่สองขามันไม่มั่นคง และอยากลองใช้ Routing ดูบ้าง
ปัญหาโปรแกรมมิ่งมันตามมาทุกทิศทุกทาง ใช้เวลาเปลืองไปมากโข

ปัญหา Sys is undefined
http://stackoverflow.com/questions/75322/sys-is-undefined

ปัญหา โหลด CSS/JavaScript/Jquery ไม่ได้
http://www.instanceofanobject.com/2012/06/include-javascript-and-css-on-your.html

ปัญหา หลงทางชี้ไม่ถูก
./FAKE_GL/page123
./FAKE_SO/page123
./FAKE_SO/SomeFolder/page123

http://stackoverflow.com/questions/6016298/how-to-create-a-asp-net-4-0-route-based-on-databinded-value
http://weblogs.asp.net/scottgu/url-routing-with-asp-net-4-web-forms-vs-2010-and-net-4-0-series
http://forumarray.com/web-forms-getrouteurl-not-working-on-master-page-543715
http://forums.asp.net/t/1597506.aspx



MasterPage Markup

<!-- Sidebar Menu -->
<ul class="sidebar-menu">
    <li class="header">HEADER</li>
    <!-- Optionally, you can add icons to the links -->
    <li id="sidebar_menu_0">
        <!--class="active" -->
        <a id="sidebar_menu_0a" href='<%:Page.GetRouteUrl("MainMenu_Left", New With {.page = "test0"})%>'><i class='fa fa-link'></i><span>Sales & Marketing</span></a></li>
    <li id="sidebar_menu_1">
        <a id="sidebar_menu_1a" href='<%:Page.GetRouteUrl("MainMenu_Left", New With {.page = "test1"})%>'><i class='fa fa-link'></i><span>Inventory Control</span></a>
    </li>
    <li id="sidebar_menu_2">
        <a id="sidebar_menu_2a" href='<%:Page.GetRouteUrl("MainMenu_Left", New With {.page = "test2"})%>'><i class='fa fa-link'></i><span>Purchase Orders</span></a>
    </li>
    <li id="sidebar_menu_4">
        <cc1:my_LinkButton ID="lnkHelloWorld" runat="server" NavigateURL="ข้อความตามใจฉัน">
                            <i class='fa fa-link'></i><span>Account Payable</span>
        </cc1:my_LinkButton>
    </li>
</ul>
<!-- /.sidebar-menu -->




Coding ไฟล์ Global.asax(VB.NET)
    Sub RegisterRoutes(ByVal routes As RouteCollection)
        'http://weblogs.asp.net/psheriff/using-friendly-urls-in-web-forms
        'Dim settings = New FriendlyUrlSettings()
        'settings.AutoRedirectMode = RedirectMode.Permanent
        'routes.EnableFriendlyUrls(settings)

        routes.Ignore("{*allaspx}", New With {.allaspx = ".*\.aspx(/.*)?"})
        routes.Ignore("{resource}.axd/{*pathInfo}") 'Fixed Sys undefined
        routes.Add("MainMenu_Left_GL", New Route("FAKE_GL/{page}", New DirectoryRouteHandler(virtualDir:="~/GL")))
        routes.Add("MainMenu_Left", New Route("FAKE_MAIN/{page}", New DirectoryRouteHandler(virtualDir:="~/")))
        routes.Add("MainMenu_Left_SO", New Route("FAKE_SO/{page}", New DirectoryRouteHandler(virtualDir:="~/SO/FOLDER69")))
    End Sub



รูปภาพประกอบ

FAKE_ROUTE_01



มาถึงจุดนี้เริ่มรู้สึกว่า ตัวเองยืนด้วย 4 ขา (เมื่อก่อนยืนแค่ 2 ขา)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-05-25 10:19:46 By : หน้าฮี
 


 

No. 30



โพสกระทู้ ( 4 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

โอ้ว ไม่ได้เข้ามาดูนาน มีคนมาต่อยอดเพียบเลย ฮิฮิ ดีครับๆ ตอนนั้นที่ทำผมก็แค่ น.ศ. คนนึงครับ ความรู้ไม่มากมายอะไร
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-10-14 15:33:18 By : toekungs
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : เรื่องวันที่ใน Crystal Report คศ เป็น พศ ครับ (ขออนุญาติลงไว้เผื่อผู้ที่ยังไม่รู้)
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: Voake, Comcube, รับทำเว็บไซต์ รับเขียนโปรแกรม , รับทำบัญชี , โรงงานผลิตครีม , สำนักงานบัญชี , รับจดทะเบียนบริษัท

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2020 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 , 08-9968-0655 อัตราราคา คลิกที่นี่