Friday, December 7, 2012

เพื่อนสมาชิกแจ้งมาว่าระบบวันที่ใน FileMaker นั้น น่าจะมีปัญหา เพราะการเลือก format ในการแสดงผลวันที่นั้นมันกลายเป็น Format แบบของญี่ปุ่นตามภาพ

ผมลองค้นหาดูคำตอบแล้ว พบว่ามันเป็น Bug ของ Filemaker ใน version 11 แถมยังเป็นใน version 12 อีกด้วย เท่าที่อ่านดูเขาว่าให้ทำการ Update FileMaker ให้เป็น version ล่าสุด แต่เท่าที่ผมลอง update ดูแล้ว มันก็ไม่หายแหะ ดังนั้นคำตอบสำหรับปัญหานี้ ผมขอใช้เวลาหาสักหน่อยนะครับ

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



มาดูกันว่าทำอย่างไร  ทางที่ผมว่านี้เป็นเทคนิคที่ผมใช้ประจำสำหรับเรื่องการแสดงผลวันที่ ภาษาไทยโดยเฉพาะ ในเมื่อระบบ auto มันมีปัญหา ก็ทำเป็นแบบ manual เสียเลยครับ

ดูตัวอย่างได้เลย
- อย่างแรก ผมทำการสร้าง field ในการรับข้อมูลวันที่ ชื่อ date en โดยมี data type เป็น date เป้าหมายก็คือผมจะรับวันที่เข้าใส่ใน field นี้เท่านั้น
- ต่อมาผมสร้างอีก field ชื่อ date th ใช้ data type แบบ calculation เพื่อทำการเปลี่ยนข้อมูลวันที่ ที่ใส่เข้าไปใน date en ให้เป็น วัน เดือน ปี ภาษาไทย โดยให้ผลการ calculate เป็นแบบ text 

ซึ่งใน field date th นั้นมีการคำนวณด้วยสูตรดังนี้

Day ( date en ) & " " & 
Case ( 
Month ( date en ) = 1 ; "มกราคม";
Month ( date en ) = 2 ; "กุมภาพันธ์";
Month ( date en ) = 3 ; "มีนาคม";
Month ( date en ) = 4 ; "เมษายน";
Month ( date en ) = 5 ; "พฤษภาคม";
Month ( date en ) = 6 ; "มิถุนายน";
Month ( date en ) = 7 ; "กรกฏาคม";
Month ( date en ) = 8 ; "สิงหาคม";
Month ( date en ) = 9 ; "กันยายน";
Month ( date en ) = 10 ; "ตุลาคม";
Month ( date en ) = 11 ; "พฤศจิกายน";
Month ( date en ) = 12 ; "ธันวาคม";
) & " " & 
Year ( date en ) + 543


อธิบายได้ความว่า ให้ทำการแสดงเฉพาะวันที่ของข้อมูลที่ใส่เข้าไปใน date en [ Day ( date en )  จากนั้นคั่นด้วยช่องว่าง [ & " " & ] แล้วก็ต่อด้วยการเลือกว่า เดือนที่ใส่เข้าไปใน date en เป็นเดือนอะไร [ ใช้ case ในการเปรียบเทียบ ] แล้วก็แปลงให้เป็นเดือนภาษาไทยเสีย จากนั้นก็คั่นด้วยช่องว่างอีกที แล้วก็ตามด้วยปี คศ + ไปอีก 543 ปี เพราะ พศ ของเรา นำหน้า คศ อยู่ 543 ปีแนะ

ตัวอย่าง ถ้าเรากรอกข้อมูลใน date en เป็น 1/1/2012 ข้อมูลใน date th ก็จะเป็น 1 มกราคม 2555 โดยอัตโนมัติ

ด้วยวิธีการนี้ ผมแค่สั่งให้ date en ป้อนข้อมูลโดยใช้ drop down calendar และผมไม่ต้องไปสนใจจัด format ของ date en เลย เพราะยังไงเสีย มันก็จะถูกแสดงผลเป็นภาษาไทยอย่างเดียวเท่านั้น


ส่วน date th ที่ต้องทำก็แค่เลือก font ภาษาไทยให้มันก็เท่านั้้น

คราวนี้ มาดูว่า ได้ผลเป็นเช่นไร ... เมื่อ click เลือกที่ date en วันที่ไหนก็ได้  date th ก็จะทำการคำนวณแล้วเปลี่ยนให้เป็นภาษาไทยให้เอง

แต่ถามว่า ตรงวัตถุประสงค์ไหม ? เราไม่ต้องการให้มี 2 field ใช่ไหมหล่ะ ? แบบว่าต้องการให้มี field เดียวเลือกวันที่แล้วแสดงเป็นภาษาไทยเลยได้ไหม ?

ได้ครับ ไม่มีปัญหา เขาถึงเรียกว่าเทคนิคไง สิ่งที่ผมทำก็คือ การซ้อนตำแหน่งของ Filed ครับ โดยการเอา field date th ไปวางทับบน field date en แล้วสั่งให้ date en เนี่ย แสดงผลเมื่อมีการ input ข้อมูลเท่านั้น ส่วน date th นั่น ให้แสดงผลอย่างเดียว

date en ให้ติ๊ก browse mode

date th เอา browse mode ออก

ดูสิ่งที่เปลี่ยนไปนะครับ อย่างแรกผมปรับ font และ size ของ field ทั้งคู่ให้เหมือนกัน ( หรือจะไม่เหมือนกันก็ได้ แต่ขนาดควรจะเท่ากัน) และปรับขนาดของ field ให้เท่าๆกัน เพื่อให้มันซ้อนกันได้สนิท แล้วผมก็วาง date th อยู่บน date en เปลี่ยน title ให้เป็น date เฉยๆ เท่าที่ก็เสร็จพิธี


เมื่อลองเลือก field ที่ซ้อนกันใน browse mode ก็จะได้ความดังภาพด้านล่าง


เมื่อเลือกวันที่ได้ แล้ว ออกจาก field ก็จะได้ผลแบบภาพด้านล่าง


เทคนิคนี้ ผู้ใช้งานไม่รู้เรื่องหรอกว่ามันมี 2 field ดูยังไงก็เหมือนกมี field เดียวตรงตามวัตถุประสงค์ครับ

อย่างไรแล้ว ก็ลอง download file ตัวอย่างที่ผมใช้อธิบาย post นี้ ได้จาก link ด้านล่างนะครับ

Download : http://goo.gl/Ltsvv

หมายเหตุ : ผมใช้งาน filemaker pro version 12 ในการทำตัวอย่างนะครับ ดังนั้น version 11 มันจะเปิดไม่ได้ หากใครอยากได้ตัวอย่าง version 11 comment มาก็แล้วกันนะครับ 







1 ความคิดเห็น:

  1. ขอบคุณสำหรับ Trick ดีๆ คะ

    ReplyDelete

บทความอื่นๆ