อยากทราบนับวันลา
กระทู้เก่าบอร์ด อ.Yeadram

 2,396   1
URL.หัวข้อ / URL
อยากทราบนับวันลา

อยากทราบวิธีการเขียน code สำหรับคำนวณวันลาของเจ้าหน้าที่ในสำนักงาน โดยมีวันที่เริ่มลา (from_days) และวันลาสิ้นสุด(to_days) โดยจัดเก็บแบบ datetime ซึ่งจะต้องหักลบวันหยุด เสาร์-อาทิตย์และวันหยุดราชการออกด้วย และหากมีวันลาครึ่งวัน ก็ให้นับ ครึ่งวันนั้นด้วย เช่น

ลาตั้งแต่ 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

1 @R01469
คิดกันยาวๆ คิดกันกว้างๆ ครับ เอาให้ทุกมุม ข้อมูลคำถามแค่นี้ อาจจะทำให้คุณได้คำตอบไม่ตรงตามต้องการ หรือไม่ได้คำตอบเลย
" .... เช่น
ลาตั้งแต่ 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 นั่นคือ เศษครึ่งวัน
การกรอกข้อมูลลงตารางนี้ ก็ง่ายครับ วันไหนเป็นวันหยุด คุณไม่ต้องกรอกเข้าไป
แล้วมันจะนับแม่นยำแน่นอน






@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2554s