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

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

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


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

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


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


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


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.145 = 533.3

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. ดาวน์โหล

FPDI มาทำให้การสร้างเอกสาร PDF ด้วย PHP ง่ายขึ้นกันเถอะ

เคยใช้กันรึยังครับ เหมาะสำหรับงานสร้างแบบฟอร์ม PDF แล้วกรอกข้อมูลตามแบบฟอร์มทีหลัง หลักการคือโหลด PDF เข้ามา แล้วก็เขียนไฟล์ใหม่ขึ้นมา ส่วนที่มันไดนามิกมากๆ คงไม่เหมาะเท่าไหร่ ถ้าให้มองการทำงานของไลบรารี่ตัวนี้ ก็เหมือนกับที่เราสั่งทำใบเสร็จรับเงิน แล้วกรอกข้อมูลทีหลังนั่นเอง 1. สร้าง PDF เปล่าๆ ที่มีแค่ส่วนหัว และส่วนท้าย 2. เติมข้อมูลรายการลงในส่วนกลาง ถ้าเกินจำนวนแถวที่กำหนดให้ขึ้นหน้าใหม่ http://www.setasign.com/products/fpdi/about/ ตัวอย่างในลิงค์ต่อไปนี้ จะเป็นการนำข้อความในไฟล utf8test.txt ไปแทรกในไฟล์ logo.pdf http://www.setasign.com/products/fpdi/demos/tcpdf-demo/ PHP  CI  MANIA   -  PHP Code Generator  โปรแกรมช่วยสร้างโค้ด  "ลดเวลาการเขียนโปรแกรม" ราคาสุดคุ้ม    http://fastcoding.phpcodemania.com

PHP CI MANIA