ข้ามไปที่เนื้อหาหลัก

เรื่องของวันที่ ยอดเงินคงเหลือ และการแก้ไขรายการเดิม

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


"น้อง...ระบบน้องไม่ยอดคำนวณยอดเงินให้พี่ใหม่ แบบนี้พี่ก็ทำเอกสารลำบากน่ะสิ ต้องคอยมาพะวงตลอดว่ายอดเงินถูกต้องหรือเปล่า"?

น้ำเสียงที่เต็มไปด้วยความหงุดหงิด เผยออกมาอย่างชัดเจน
ซึ่งผมคิดไว้ก่อนหน้านี้แล้วว่าเคสนี้ไม่วันใดวันหนึ่งมันต้องเกิด...เพียงแต่นี่มันเร็วไป!?


"พี่ครับ ผมต้องขอโทษจริงๆนะครับ เพราะส่วนของการแก้ไขยอดเงินจะอ้างอิงยอดเดิมที่เราทำรายการไว้ก่อนหน้าที่จะเปลี่ยนแปลงยอดเงินในรายการอื่นน่ะครับ ถ้ามีการแก้ไขรายการอื่น พี่ต้องกดปุ่มคำนวณยอดใหม่เองนะครับ ยอดเงินถึงจะแสดงยอด ณ ปัจจุบันได้"


ผมพยายามแนะนำวิธีการซึ่งผมเคยแก้ปัญหาคร่าวๆ ไปแล้วครั้งหนึ่งแต่ดูเหมือนเจ้าปุ่มเล็กๆนั้น ยังไม่ค่อยเป็นที่รู้จักกัน เพราะผมเองก็ไม่ได้ใส่ไว้เป็นส่วนหนึ่งของคู่มือ เพราะสร้างมันมาอย่างเฉพาะกิจ ผมเฝ้าโทษตัวเองไปแก้ไขโค๊ดไปเกือบชั่วโมง เพื่อลดปัญหานี้ในระดับหนึ่ง


1. เมื่อมีการทำรายการใหม่ จะคำนวณยอดคงเหลือทุกครั้ง
2. เมื่อมีการแก้ไขรายการเดิม ให้คงยอดเดิมไว้ หากมีการเปลี่ยนแปลงให้ผู้ใช้คลิกปุ่มคำนวณยอดใหม่


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


2. เมื่อมีการแก้ไขรายการ
    2.1 เมื่อบันทึก ตรวจสอบแล้วยอดเงินคงเหลือตรงกัน ทำงานต่อ
    2.2 เมื่อยอดไม่ตรงกัน
          - ยังมียอดคงเหลือ แจ้งผู้ใช้งานตรวจสอบข้อมูล และคำนวณยอดคงเหลือ ณ ปัจจุบันใหม่
          - ยอดคงเหลือไม่เพียงพอ แจ้งผู้ใช้งานตรวจสอบยอดคงเหลือ และหยุดการทำงาน


ผมมานั่งคิดๆดูแล้ว เหตุการณ์เหล่านี้เกิดจากอะไร??
ถ้าจะบอกว่ามันเป็นบั๊กก็น่าจะใช่ หรือจะบอกว่าเป็นฟังก์ชั่นที่ขาดไปก็ถูก
เพราะก่อนหน้านี้ จะยึดผู้ใช้งานเป็นหลัก และส่วนใหญ่ก็เข้าใจการทำงานของระบบดี


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

"สิ่งไหนไม่จำเป็นตัดทิ้งได้ สิ่งไหนสำคัญแม้มันจะไม่อยู่ในรีไควเมนต์แต่ถ้าจำเป็นจะต้องเพิ่มเข้าไป"


ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

ร้อยละ ทศนิยม 2 ตำแหน่งบวกคืน ไม่เท่ากับ 100 และ ปัญหาการคำนวณเลขทศนิยม เมื่อปัดเศษแล้วค่าที่บวกคืนไม่เท่าเดิม

กรณีนี้เป็นการทดสอบคำนวณเลขที่ต้องหารครึ่ง ตัวอย่างเช่น 2.33 / 2 = 1.165 กรณีนี้ถ้าเก็บค่านี้ในฐานข้อมูลที่กำหนดให้มีทศนิยมเพียง 2 หลัก ในฟิลด์ 2 ฟิลด์ซึ่งแต่ละฟิลด์จะถูกปัดขึ้นเป็น 1.7 เมื่อนำมาบวกกลับ 1.17 + 1.17 = 2.34 ถ้าอย่างนั้นเราก็ต้องกำหนดให้ฟิลด์ที่ใช้เก็บข้อมูลสามารถเก็บเลขทศนิยมได้หลายๆตัว ก็จะเก็บเลขทั้งสามหลักไว้ในฐานข้อมูลเลย 1.165 + 1.165 จะได้ 2.33 พอดี แต่ตอนเราแสดงรายงาน ก็จำเป็นจะต้องแสดงเลขทศนิยมเพียงแค่ 2 หลักอยู่ดี แล้วเราจะทำอย่างไรล่ะทีนี้ ก็เก็บมันเป็นเลขทศนิยมเต็มจำนวนซะแล้วตอนแสดงก็ต้องปัดเศษอยู่ดี เพราะค่า 1.165 ถ้าใช้ฟังก์ชั่นปัดเศษลง ก็จะเหลือ 1.16 แต่ถ้าปัดขึ้นก็จะเป็น 1.17 ซึ่งตัวเลขทั้งสองตัว เมื่อนำมารวมกัน ยังไงๆ ก็ไม่เท่ากับ 2.33 อยู่ดี (1.16+1.16 = 2.32,    1.17+1.17 = 2.34 ) อีกตัวอย่างนึงครับเป็นการถอด VAT ราคาสินค้า การคิดค่าทศนิยม แล้วผลรวมเพี้ยน เนื่องจากการปัดเศษ แล้วยอดเกินบ้าง ขาดบ้าง ตัวอย่างการถอด VAT ซื้อของมา 573.50 บาท ถอด VAT ออกมาได้ (573.50*7) / 100 = 40.145 ราคาสินค้า จะได้เป็น 573.50 - 40.14...

FPDF ภาษาไทย กับ วรรณยุกต์ลอย

สำหรับงานเขียนโปรแกรมเว็บแอพฯ ด้วย PHP ที่ต้องทำการส่งออกข้อมูลเป็นไฟล์เอกสาร PDF นั้น เมื่อลองค้นดูแล้วก็เจอกับ FPDF เป็นคลาสที่เขียนขึ้นมาสำหรับงานนี้โดยเฉพาะ แต่กับภาษาไทยแล้วก็ต้องเจอกับปัญหาสุดคลาสสิคคือ รองรับภาษาไทยไม่ร้อยเปอร์เซ็นต์ ^^" บทความที่สอนการใช้งานเบื้องต้นที่ครอบคลุมการทำงานของ FPDF http://www.select2web.com/category/fpdf จะมีบทความแนะนำการใช้ฟอนต์ภาษไทยอยู่ที่ลิงค์นี้ http://www.select2web.com/fpdf/fpdf-lesson-10.html ดาวน์โหลดและสร้างฟอนต์มาใช้เอง http://witkub.blogspot.com/2011/11/fpdf.html สำหรับวิธีแก้ไขปัญหาวรรณยุกต์ลอย ลองดูวิธีจากที่นี่ http://punnawatt.blogspot.com/2009/07/pdf.html สุดท้ายแล้วลองทดลองมาหมด ก็ยังไม่ได้คำตอบที่ตรงใจครับ เพราะไม่สามารถแก้สระลอยได้อย่างแท้จริง เพราะเงื่อนไขข้อมูลจริงไม่อาจจะทำให้เหมือนในตัวอย่างได้ ก็เลยถอดใจเรื่องวรรณยุกต์ลอย นอกจากปัญหาเรื่องวรรณยุกต์ลอย แล้วฟอนต์บางตัวก็เกิดปัญหาวรรณยุกต์ซ้อนทับกันด้วย เช่นคำว่า "นี้" เมื่อผลลัพธ์ออกมา สระอี และวรรณยุกต์โท จะทับกัน สรุป 1. ดาวน์โหล...

การแชร์สแกนเนอร์ ถึงทำไม่ได้แต่ก็มีวิธีช่วยประหยัดขั้นตอนการทำงาน

"พี่ครับขอใช้เครื่องพี่สแกนเอกสารหน่อยครับ" "พี่ครับขอสแกนอีกสักสองแผ่นครับ" "พี่ครับพอดีมีเอกสารต้องสแกนเพิ่มน่ะครับ" ทุกครั้งที่ต้องสแกนเอกสารเป็นไฟล์เก็บไว้ในคอมพิวเตอร์ ผมจะต้องลุกไปขอใช้เครื่องพิมพ์แบบ All-In-One ของพี่โจ้ทุกครั้ง บางครั้งก็เกรงใจแกครับ เห็นกำลังใจจดใจจ่ออยู่กับงานตรงหน้า ไหนจะต้องตอบคำถามคำโน้นคนนี้ทาง MSN บ้าง Facebook บ้าง ^___^ พอไปขอใช้เครื่องทีไรก็ดูแกจะไม่สบอารมณ์เท่าไหร่ พยายามค้นหาวิธีแชร์สแกนเนอร์จากในอินเตอร์เน็ตอยู่หลายวัน ก็ไม่เจอวิธีที่จะสามารถแชร์สแกนเนอร์ให้เครื่องอื่นได้ใช้งานได้เลย แชร์ได้แค่ให้สั่งพิมพ์จากเครื่องอื่นๆได้เท่านั้น สุดท้ายก็เลยตัดสินใจใช้เทคนิคเล็กๆ น้อยๆ ที่ได้พบเจอมาใช้ประหยัดเวลา และไม่รบกวนการทำงานและสนทนาของพี่โจ้ ได้วิธีนึง นั่นก็คือ ตั้งค่าสแกนเนอร์ให้บันทึกอัตโนมัติ ไว้ในโฟลเดอร์ที่กำหนด แล้วก็ทำการแชร์โฟลเดอร์เครื่องพี่โจ้ทิ้งไว้ซะเลย 1. ตั้งค่าให้สแกนอัตโนมัติเมื่อกดปุ่มสแกน 2. กำหนดให้บันทึกลงโฟลเดอร์ที่แชร์ไว้แล้ว (แชร์โฟลเดอร์เก็บเอกสารสแกนของคอมฯเครื่องนั้นไว้) 3. ...

PHP CI MANIA