กระทู้เก่าบอร์ด อ.Yeadram
2,454 1
URL.หัวข้อ /
URL
อยากทราบนับวันลา
อยากทราบวิธีการเขียน code สำหรับคำนวณวันลาของเจ้าหน้าที่ในสำนักงาน โดยมีวันที่เริ่มลา (from_days) และวันลาสิ้นสุด(to_days) โดยจัดเก็บแบบ datetime ซึ่งจะต้องหักลบวันหยุด เสาร์-อาทิตย์และวันหยุดราชการออกด้วย และหากมีวันลาครึ่งวัน ก็ให้นับ ครึ่งวันนั้นด้วย เช่น
ลาตั้งแต่ 6/2/52 - 11/2/52 12:00:00 ก็จะได้ผลลัพธ์เป็น 2 วันครึ่ง
ลาตั้งแต่ 6/2/52 - 11/2/52 12:00:00 ก็จะได้ผลลัพธ์เป็น 2 วันครึ่ง
1 Reply in this Topic. Dispaly 1 pages and you are on page number 1
Time: 0.4128s
" .... เช่น
ลาตั้งแต่ 6/2/52 - 11/2/52 12:00:00 ก็จะได้ผลลัพธ์เป็น 2 วันครึ่ง"
โปรแกรมมันจะรู้ได้อย่างไร ว่า วันที่เริ่มต้นน่ะ มันเวลาเท่าไหร่ ถ้าเป็นกรณีการเอาวันที่มาลบกันนะครับ แบบจบแน่นอน แม้แต่คนยังมีข้อกังขาได้ ยิ่งโปรแกรมไม่มีทางได้ผลที่ถูกต้อง
ลองคิดแทน VBA หรือ Access ดูครับว่าถ้ามันพูดได้ แล้วถามคุณว่า ....
1) หน่วยย่อยที่สุด คือเท่าไหร่ครับ
เท่าที่อ่านและตีความ
หน่วยใหญ่ที่สุด คือ "วัน"
หน่วยรองลงมา คือ "ครึ่งวัน"
มีหน่วยย่อยกว่านี้อีกมั้ย เช่น "ชั่วโมง" หรือว่าไม่มีแล้ว
2) ต่อเนื่องจากข้อ 1 หากมีการนับครึ่งวัน หมายถึงอย่างไรบ้าง
-จาก 0800 - 1200 นับเป็นครึ่งวัน
-จาก 1200 - 1700 นับเป็นครึ่งวัน
- แล้วจาก 10.00 - 14.00 นับเป็นครึ่งวันหรือไม่ (การยืดหยุ่นเวลา เริ่ม-จบ)
- แล้วจาก 1130 - 1330 นับอย่างไร (ขอออกก่อนเที่ยงไปธุระด่วน จะพยายามกลับมาให้ทันบ่าย แต่แจ้งล่วงหน้า 3 วันก่อนนี้)
- แล้วจาก 1600 - 1700 นับอย่างไร (รีบไปงานศพ ขอออกก่อนเวลา แต่แจ้งล่วงหน้า 3 วันก่อนนี้)
2) การเก็บข้อมูล เฉพาะ Date หรือเก็บ Time ไว้ด้วย (ทั้งจุดเริ่มลา และจุดสิ้นสุดการลา)
3) ปฎิทินวันหยุด กำหนดโดยใคร หรืออะไร (อ้างอิงถึงตารางอื่นหรือไม่ อย่างไร)
บางบริษัทอาจใช้ Datediff ได้เลย หักกลบลบกัน ตัดเป็นวินาที
แต่บางบริษัท "ผมไม่ต้องการละเอียดขนาดนั้น ผมแค่ต้องการง่ายๆ เอาแค่วันครึ่งวันก็พอ" ไอ้ที่เค้าคิดว่ามันง่ายน่ะ โปรแกรมยากครับ ถ้าคุณต้องการแค่ วันครึ่งวัน คุณอาจต้อง....
สร้างตาราง period ขึ้นมาเอง ทั้งปีเลยครับ เช่น
สร้างตาราง (
id : Text
bgPeriod : DateTime
fnPriod : DateTime
)
ตัวอย่างข้อมูล
0101A 01/01/2009 08:00 am 01/01/2009 11:59 am
0101B 01/01/2009 13:00 pm 01/01/2009 16:59 pm
0201A 02/01/2009 08:00 am 02/01/2009 11:59 am
0201B 02/01/2009 13:00 pm 02/01/2009 16:59 pm
0301A 03/01/2009 08:00 am 03/01/2009 11:59 am
0301B 03/01/2009 13:00 pm 03/01/2009 16:59 pm
0401A 04/01/2009 08:00 am 04/01/2009 11:59 am
0401B 04/01/2009 13:00 pm 04/01/2009 16:59 pm
เมื่อต้องการเช็คว่า จากวันเวลานี้ ถึงเวลานี้ นับเป็นกี่วัน
คุณก็
ss = dcount(..., ....., "[fnPeriod] > วันเวลาเริ่มลา and [stPeriod] > วันเวลาสิ้นสุด)
ss = ss/2
ถ้าได้คำตอบเป็นจำนวนเต็มนั่นคือ หน่วยเป็นวัน
ถ้าได้คำตอบเป็นมีเศษ .5 นั่นคือ เศษครึ่งวัน
การกรอกข้อมูลลงตารางนี้ ก็ง่ายครับ วันไหนเป็นวันหยุด คุณไม่ต้องกรอกเข้าไป
แล้วมันจะนับแม่นยำแน่นอน