เรียน อจ และผู้รู้ครับ ไม่รู้จะเขียน IIF อย่างไรครับ??



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

28 ก.ค. 63 , 21:27:51
อ่าน 199 ครั้ง

kunlek


รายงานค่าเสื่อม ณ 31/12/62
1 ค่าเสื่อมสะสม  ถ้าทรัพย์สินไหนตัดค่าเสื่อมครบแล้ว จะคงมูลค่าปลายงวด ไว้ "1" และค่าเสื่อมสะสมจะหักออก "1"
2 ค่าเสื่อมสะสม เป็นทรัพย์สินที่ยังมีอายุการใช้งาน เกิน 31/12/62 มูลค่าปลายงวด ยังไม่ต้องสำรองไว้ 1  และค่าเสื่อมสะสมก็ไม่ต้องหัก 1

 

29 ก.ค. 63 , 19:05:37
ตอบกลับ #1

kunlek

ตัวแปร
ค่าเสื่อมสะสม=IIf([status]=-1,0,IIf(([limit_date]<[end_date]),([ค่าเสื่อมต้นงวด]+[ค่าเสื่อมงวดนี้]-1),([ค่าเสื่อมต้นงวด]+[ค่าเสื่อมงวดนี้])))
status   (-1   =ทรัพย์สินอยู่ระหว่างก่อสร้าง  0  =ทรัพย์สินเสร็จ  พร้อมใช้งาน)
limit_date  วันที่หมดอายุการใช้งาน(นับจากวันที่ซื้อ +อายุการใช้งานทรัพย์ ในตัวอย่าง 5 ปี)
end_date  วันที่ออกรายงาน(ในที่นี้ คือ 31/12/62)
ในเงือนไข 
    1 ถ้าทรัพย์สินยังอยู่ระหว่างก่อสร้าง ทรัพย์สินรายการนั้นจะคงมูลค่าไว้ จนกว่าสร้างเสร็จ
      ในรายงาน จึงมีค่า " 0 "
    2 มี 3 เงื่อนไข  คือ  ค่าเสื่อมในงวด หามากจาก (ถ้าทรัพย์สินหมดอายุใช้งานในงวด ค่าเสื่อมในงวด เท่ากับ
        วันในงวด คูณ ค่าเสื่อมทรัพย์สินต่อวัน(depree_day) แต่ถ้าคำนวณแล้ว ได้มากกว่า มูลค่า
        ทรัพย์สินคงเหลือยกมา น้อยกว่า  ให้ใช้มูลค่าทรัพย์สินคงเหลือ
         แต่ถ้าทรัพย์สินใด  หมดอายุตั้งแต่  งวดก่อน  ค่าเสื่อมในงวดจะเท่ากับ "0"
    3 ถ้าทรัพย์สินใดหมดอายุการใช้งาน ให้คงมูลค่าทรัพย์สินไว้ " 1 "  และค่าเสื่อมสะสมทั้งหมดจะถูกหัก "1"
       ทรัพย์สินอื่นที่ยังมีอายุการใช้ในงวดรายงาน  หรือรายงานงวดต่อๆๆไป  ค่าเสื่อมในงวดคำนวณตามปกติ
       สิ่งที่ส่งมาในกระทู้ ยังผิดตรงที่ว่า ค่าเสื่อมสะสมของทรัพย์สินถูกหัก "1" ทุกรายการ ซึ่งรายการที่ยังมีอายุ
     การใช้งานจึง " ผิด "

 

29 ก.ค. 63 , 21:22:54
ตอบกลับ #2

kunlek

ตัวอย่างครับ ประกอบกระทู้

 

30 ก.ค. 63 , 01:46:57
ตอบกลับ #3

สันติสุข

ผมคิดว่าจากสูตร ก็ตรงไปตรงมา ถ้า [limit_date]<[end_date] ค่าเสื่อมสะสมก็จะถูกหักออก 1   ทีนี้ก็อยู่ที่ว่าคุณป้อน limit_date กับ end_date เป็นอะไร  เห็นในโพสบอกว่า end_date เป็น 31/12/62 ซึ่งไม่น่าเป็นค่าวันที่ปัจจุบัน ดังนั้นก็น่าเป็นวันที่ป้อนเอาจากหน้าจอซึ่งมาจากคิวรี่อีกที ถ้าเป็นอย่างนั้น ใน Query Design View คุณจะเห็น Query Tools - Design - Parameters เมื่อคลิกแล้วจะเห็นหน้าต่าง Query Parameter ให้ใส่คอลัมน์ Parameter เป็นข้อความที่ปรากฏตอนถามบนหน้าจอ และคอลัมน์ Data Type เป็นประเภท Date/Time เพื่อให้ระบบรับรู้ว่าสิ่งที่เราใส่นั้นให้ตีความเป็นวันที่ ไม่อย่างงั้นมันจะตีความเป็น text เท่านั้น ซึ่งอาจทำให้นิพจน์ [limit_date]<[end_date] ตีความหมายผิดไปทุกครั้ง
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 

30 ก.ค. 63 , 09:42:42
ตอบกลับ #4

kunlek

แก้ตามที่ท่านแนะนำก็ได้ผลลัพธ์ตามต้องการ  แต่รายการเครื่องดูดฝุ่น hitachi ทำไมยังผิดอยู่ครับ จริง ๅ 106.85+4893.15=5000  แต่ทำไม= 5001.74  (เครื่องดูดฝุ่น อายุใช้งาน 5 ปี ครับในงวดปี 62 ค่าเสื่อมในงวดจึง =106.85+4893.15  ผิดกับรายการอื่น ที่อายุการใช้งานเกินงวด 62 เช่น คอมพิวเตอร์ทั้งชุด  จึงมีค่า =1000+3484.93 ซึ่งถูกต้องแล้ว)
เรียน อจ ช่วยพิจาณาหาสาเหตุทีครับ  ขอบพระคุณอย่างสูงจริงๆๆครับ 

 

30 ก.ค. 63 , 11:29:50
ตอบกลับ #5

สันติสุข

คำตอบที่แล้วผมไม่ได้มีเวลาไล่ตามนิพจน์หรือสูตรจำนวนมากมาตรวจสอบนะครับ ถ้าที่คุณตั้งนั้นถูกอยู่แล้ว สุดท้ายแล้วก็หนีไม่พ้นค่าและประเภทข้อมูลเท่านั้นเอง คุณลองค่อยๆตรวจสอบไปทีละนิพจน์ดูครับ
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa


บอร์ดเรียนรู้ Access สำหรับคนไทย