การคำนวณจำนวนวันที่เหลืออยู่
กระทู้เก่าบอร์ด อ.Yeadram

 2,698   6
URL.หัวข้อ / URL
การคำนวณจำนวนวันที่เหลืออยู่

คือผมทำโปรเเกรมวันลาของพนักงาน เเล้วมาติดที่การคำนวณจำนวนวันลาของพนักงานครับ โดยเเสดงบน Form รายละเอียดดังนี้
สมมุติ ว่า พนักงานคนหนึ่งมีวันลา 14 วัน ได้ Login เข้ามาในระบบเเล้ว
ที่ช่อง Annual Leave available 14 Days ก็จะเเสดงขึ้นมา
ให้พนักงานกรอกจำนวนวันที่จะลาลงในช่อง No of Days

No of Days   ........   Days

เเล้วให้คำนวณจำนวนวันที่เหลือลงในช่อง Annual Leave actual
ซึ่งผมทำโดยการ เอาค่าของช่อง Annual Leave available ลบออกด้วย
ค่าของช่อง No of Days เเล้วซึ่งครั้งต่อไปที่พนักงานคนนี้จะมาลาอีก จะทำให้เกิดปัญหาคือ การคำนวณวันลาจะผิดพลาดไป เพราะค่าที่เหลืออยู่จริง คือค่าที่ช่อง Annual Leave actual ไม่ใช่ค่าที่กำหนดไว้ตอนเเรกที่ช่องของ
Annual Leave available ดังนั้นจึงต้องนำค่าทีเหลืออยู่จิงมาลบออก

ซึ่งผมติดอยู่ที่ตรงนี้ล่ะครับ รบกวนช่วยเเนะนำทีครับ


Annual Leave available 14 Days
Annual Leave actual       

6 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R01393
ทำไมไม่มีคนตอบให้เลย
2 @R01395
-ต้องดูโครงสร้าง ตาราง ที่เกี่ยวข้อง
- - เลข 14 คุณเก็บที่ตารางไหน
- - ถ้า user บอกขอลา 3 วัน คุณเอา เลข 3 ไปเก็บในตารางไหน
- - เมื่อ user ล็อกอินครั้งต่อมา จะลาอีกครั้ง คุณ เอาเลขอะไรมาโชว์ เอาแต่เลข 14 มา หรือเอามาทั้ง เลข 14 และเลข 3 หรือเอาผลลบ ของ 14 กับ 3 มาโชว์


-ต้องดูลำดับการประมวลผลของโปรแกรม ไม่ได้หมายถึงลำดับการกระทำของ user นะครับ เช่น
- -เมื่อล็อกอินเข้ามา มัน select มาจากไหน
- -เมื่อกดปุ่ม บันทึก มัน insert เข้าที่ไหน มัน เป็นต้น

หรือ... อาจต้องดูหน้าตาของฟอร์ม ของคุณด้วย (เผื่อออกแบบสวย ผมจะแอบเอาไปทำตาม อิอิ)
3 @R01398
ขอบคุณครับที่เข้ามาเเนะนำ

ผมขออธิบายเพิ่มเติม


-- ผมเเยกเก็บจำนวนวันที่สามารถลาได้คือ 14 วัน กับจำนวนของวันลาที่เหลือ อยู่ คนละตารางครับ ที่ตาราง Stocking เเละ Stock ตามลำดับ

-- ถ้า user login เข้ามาเเล้วลา 3 วันผมเอาไปลบออกจาก 14 วันเลยซึ่งวันที่ user ขอลา 3 วันนั้นผมเก็บไปที่ตาราง SellingHistory
-- เมื่อ user ล็อกอินครั้งต่อมา จะลาอีกครั้ง ผมจะเอาผลลบของ 14 กับ 3 มาโชว์เลยคับ ว่าเหลืออยู่กี่วัน

--เเละเมื่อกดบันทึกการลาก็ให้โปรเเกรมคำนวน เเล้วเก็บค่าต่างๆ ลงตามตารางที่บอกไปครับ

4 @R01400
ขอเท้าความตามความเข้าใจนิดหนึ่ง
--------------------------------------
วันลาที่ สามารถลาได้ (14 วัน) เก็บไว้ที่ตาราง Stocking สมมติว่า ชื่อฟิลด์ fds1
เมื่อ user ขอลา 3 วัน คุณเอาค่านี้ ไปเก็บ ใน ตาราง ชื่อ SellingHistory สมมติว่า ชื่อฟิลด์เดียวกัน
เมื่อบันทึกการลา คุณ เอา 14-3    คือ 11 ไปเก็บในตาราง ชื่อ Stock สมมติ ว่าชื่อฟิลด์เดียวกันอีกนั่นแหละ
(ทำไมต้องหลายตารางจัง อิอิ ไม่เป็นไร มาว่ากันต่อ..)
------------------------------------------

วิธีที่คิดว่าเหมาะ น่าจะทำ
ในช่อง Annual Leave Actual ไม่ว่า user จะเริ่มลาไปแล้ว หรือยังก็ตาม มันจะต้องโชว์ maximum คือ 14 ตลอด ดังนั้น ช่องนี้ ใช้ Dlookup ได้เลย เอามาจากตาราง Stocking นั่นเลยครับ
=dlookup("fds1","Stocking", "Stocking.รหัสพนักงาน = คอนโทรลรหัสพนักงาน")

ส่วนในช่อง Annual Leave Available
คุณก็ dlookup เอาจากตาราง STock ไปเลย มันก็จะได้ค่าอยู่แล้ว
-------------------------------------------------------------------------------------

ขอถามย้อน ว่า
ถ้า user คนนี้ไม่เคยมีประวัติการลา (ก็ไม่เคยมีการคำนวน) ในตาราง STock มันเป็นเลขอะไร เป็นเลข 14 หรือ 0 หรือ null
- ถ้ามันเป็น เลข 14 มันเป็นมาได้อย่างไร
- ถ้ามันไม่เป็นเลข 14 เพราะอะไรถึงไม่เป็น กระบวนงานตรงไหนตกหล่นหรือเปล่า
เพราะจริงๆ แล้วมันต้องเป็นเลข 14 (เขายังไม่ใช้สิทธิ์ลา ดังนั้น Quota ของเขายังคงเต็ม)
--------------------------------------------------------------------------

ข้อแนะนำให้สังเกต ตรวจสอบ เพื่อหาสาเหตุของปัญหาคุณ
เมื่อมีการบันทึกว่า user ขอลา 3 วัน

กรณีที่ 1 : สองคอนโทรลดังกล่าวคุณใช้ Dlookup อย่างผมว่า
เมื่อโปรแกรมของคุณทำการคำนวนและบันทึก
- ให้คุณตามไปดูในตารางทั้ง 3 ทันที ว่ามันบันทึกถูกต้องทั้งสามตารางหรือเปล่า
    Stocking ต้องเป็น 14 เลขเดิมเท่านั้น
    Stock ต้องเป็นเลข 11
    SellingHistory ต้องเป็นเลข 3

- ถ้ามันไม่เป็นตามนี้ คุณต้องตามไปดู กระบวนการคำนวนของคุณ (น่าจะอยู่ในคำสั่ง ตรงเหตุการณ์กดปุ่ม Submit)

กรณีที่ 2 : สองคอนโทรลดังกล่าวไม่ได้ใช้ dlookup
- ให้คุณทำงานตาม step เดิมของคุณไปก่อน (บันทึกการขอลา 3 วัน)
- ไปดูในตารางทั้ง 3 ว่าบันทึกถูกต้องทั้งหมดหรือเปล่า (14   3 11)
- - - ถ้าบันทึกไม่ถูกต้อง ให้ไปดูกระบวนงาน คำนวนของคุณใหม่อีกรอบ (น่าจะอยู่ในคำสั่ง ตรงเหตุการณ์กดปุ่ม Submit)
- - - ถ้าบันทึกถูกต้องเป๊ะ เลย ผมคงต้องขอทราบ ว่า สองคอนโทรล ดังกล่าวคุณผูกอยู่กับอะไร ไม่ได้ใช้ dlookup เหรอครับ

5 @R01425
ขอบคุณครับ
หลังจากที่ลองดูเเล้วปัญหาที่พบคือ
--ในช่อง Annual Leave Actual ที่เเสดงวันลาที่เหลืออยู่ ค่าของมันมาจากการเอาช่อง Annual Leave Available - จำนวนที่ลา ซึ่งเมื่อการลาครั้งต่อไป จะเกิดข้อผิดพลาดขึ้นคือ ในครั้งเเรกของการลาวันลาที่สามารถลาได้คือ 14 วัน ก็จะเป็น 14 - 3 = 11 วัน เเล้วครั้งต่อไปที่จะมาลาสมมุติลา 2 วันการคำนวณก็จะเป็นควรจะเป็น 11 - 2   เเต่ค่าที่ช่อง Annual Leave Available ยังคงเป็น 14 อยู่
ผมจะเขียนโค้ดยังไงดีครับ
6 @R01427
"ค่าของมันมาจากการเอาช่อง Annual Leave Available - จำนวนที่ลา"
ผิดครับ ห้ามเอาค่านี้มา

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