แท็บรับ/จ่ายชำระ (เงินสด โอน เช็ค บัตร PromptPay ภาษีหัก) เก็บและลงบัญชีอย่างไร ทำไมขึ้น "ยอดการจ่ายเงินไม่สมบูรณ์"
ตอบสั้น: ยอดรวมแต่ละช่องทางเก็บใน cb_trans และแถวย่อยใน cb_trans_detail (โอน 1, เช็ค 2, บัตร 3, PromptPay 21, ค่าใช้จ่ายอื่น 11, รายได้อื่น 12) ตอนบันทึก ผลรวมช่องทาง + ภาษีถูกหัก + รายได้อื่น ต้องเท่ายอดสุทธิ + ค่าใช้จ่ายอื่น ถ้าไม่เท่าจะขึ้น "ยอดการจ่ายเงินไม่สมบูรณ์" GL แยกบรรทัดตามช่องทาง
รายละเอียด
ดู แท็บรับ/จ่ายเงิน และการชำระหนี้ตามบิล (Payment Tab & Bill Settlement), การรับ/จ่ายเงินในเอกสาร เงินสด โอน เช็ค บัตร (payment tenders / cb_trans / doc_type), หัวสรุปการรับ/จ่ายเงิน (cb_trans), รายละเอียดรับ/จ่ายเงินแยกรายการ (cb_trans_detail)
แท็บเปิดเมื่อ (payTabEnabled) เอกสารที่ไม่มีช่องเงินสด/เงินเชื่อ เปิดเสมอ ที่มีช่องนี้:
- 11 จ่ายมัดจำ:
inquiry_type0 - 16, 317: inquiry 2 หรือ 3
- 48 รับคืน/ลดหนี้ขาย: inquiry 1, 3 หรือ 5
- อื่นๆ (12, 44, 250, 260, 315 ฯลฯ): inquiry 1 หรือ 3 (ประเภทรายการ เงินสด/เงินเชื่อ (inquiry type / inquiry_type))
การเก็บ (payStmts)
- ลบ
cb_trans_detail,cb_trans,cb_chq_list(ตามdoc_ref) ของเอกสารเดิม แล้วเขียนใหม่ทั้งชุด - ฝั่งรับเงิน (
payReceiveFlags: 16, 20, 25, 40, 44, 46, 99, 110, 239, 250, 254, 262, 300, 317, 402, 416)pay_type= 1 อื่นๆ = 2 - เช็ค/บัตรสร้างแถว
cb_chq_listด้วย เช็ครับใช้ธนาคารของลูกค้า เช็คจ่ายใช้สมุดบัญชีบริษัท (เช็ครับ ตั้งแต่รับ-นำฝาก-ผ่าน-คืน-ขาดสิทธิ์ ลงบัญชีและเปลี่ยนสถานะอย่างไร, เช็คจ่าย ตั้งแต่จ่ายเช็ค-เช็คผ่าน-คืน-ขาดสิทธิ์-เปลี่ยนเช็ค ลงบัญชีอย่างไร) - ช่องรับเงิน/เงินทอน (
pay_cash_amount,money_change) มีเฉพาะ 44 และ 144 - ยอดติดลบ → "ยอดรับ/จ่ายชำระต้องไม่ติดลบ"
ตรวจยอด (payCompleteCheck, checkPayTotal)
- ปัดแต่ละช่องแบบ HALF_UP ที่
item_amount_decimalก่อนรวม (ระบบปัดเศษทศนิยมเงินอย่างไร ทำไมยอดต่างกัน 0.01) - ภาษีถูกหัก =
cb_trans.total_tax_at_payหรือผลรวมgl_wht_list.tax_value(ภาษีหัก ณ ที่จ่าย บันทึกตรงไหน ออก ภ.ง.ด.3 / ภ.ง.ด.53 / 50 ทวิ ได้จากเมนูไหน) - ไม่เท่า → "ยอดการจ่ายเงินไม่สมบูรณ์ (ยอดสุทธิ X ยอดชำระ Y)" ตัวเลขมีจุลภาค
- รหัสรายได้/ค่าใช้จ่ายอื่นตรวจที่
parsePayOther(รายได้อื่นๆ (250) / ค่าใช้จ่ายอื่นๆ (260) ลงบัญชีเข้าบัญชีไหน ตั้งรหัสบัญชีที่ไหน)
GL (payTenders ใน buildStandardGLLines)
| ช่องทาง | ฝั่งรับเงิน (Dr) | ฝั่งจ่ายเงิน (Cr) |
|---|---|---|
| เงินสด | 1111/1110/1100 | เดียวกัน |
| โอน + wallet | ธนาคาร | ธนาคาร |
| เช็ค | 1122 | 2112 |
| บัตร | ลูกหนี้ (รอขึ้นเงิน 461) | ธนาคาร |
| ภาษีถูกหัก | 1153/1154/1152/2122 | 2122/2123/2120 |
- แยกบรรทัดเฉพาะเมื่อผลรวมช่องทาง (ปัด 2) เท่ายอดเงิน ไม่เท่าลงเงินสดบรรทัดเดียว
- มีแค่ภาษีถูกหักโดยไม่มีช่องทางอื่น เงินสด = ยอด − ภาษีหัก
- ธนาคารใช้สมุดบัญชีจาก
ic_trans_detail.item_code/cb_trans_detail.pass_book_code/ic_trans.pass_book_codeถ้ามี
จ่ายเกินยอดค้าง (payExceedsBalance) ใบรับ/จ่ายชำระคำนวณยอดค้างใหม่จากหนี้ที่เก็บจริง ยอดค้าง 0 แต่จ่าย ≠ 0 ถูกปฏิเสธ (รับชำระหนี้ (239) / จ่ายชำระหนี้ (19) ลงบัญชี GL ยังไง เช็ค โอน ภาษีหัก ไปไหน)
ข้อควรระวัง
- คอมเมนต์ของ
payExceedsBalanceเขียนว่ายอดค้างศูนย์ "is not checked" แต่โค้ดคืนpay != 0คือปฏิเสธ (pay_check.go:261-270) total_tax_at_payเก็บ 2 ตำแหน่งตายตัว (pay_check.go:78)- ชื่อคอลัมน์
cb_trans.tranfer_amountสะกดแบบนี้ในฐานข้อมูล - แท็บรับชำระลงเช็คที่ 1122 แต่เอกสารนำฝากเช็คใช้ 1122-00 ก่อน
- บัตรฝั่งรับเงินลง Dr บัญชีลูกหนี้ (ไม่ใช่บัญชีบัตรแยก)
ดูเพิ่ม
- แท็บรับ/จ่ายเงิน และการชำระหนี้ตามบิล (Payment Tab & Bill Settlement)
- บทเรียนบั๊กการชำระเงิน เช็ค และช่องทางรับจ่าย (Payment, Cheque & Tender Bugs)
- รับชำระหนี้ (239) / จ่ายชำระหนี้ (19) ลงบัญชี GL ยังไง เช็ค โอน ภาษีหัก ไปไหน
- รายได้อื่นๆ (250) / ค่าใช้จ่ายอื่นๆ (260) ลงบัญชีเข้าบัญชีไหน ตั้งรหัสบัญชีที่ไหน
- บัตรเครดิต: ขึ้นเงิน/ยกเลิก (Credit Card Pass/Cancel)
ที่มาในโค้ด
backend/internal/application/process/pay_check.go:36payTabEnabled;:57payCompleteCheck(:78ภาษีหัก 2 ตำแหน่ง)backend/internal/application/process/pay_check.go:86sumPayTenderRows;:110payTenders;:131payAllTendersbackend/internal/application/process/pay_check.go:142checkPayTotal(ข้อความ:151);:263payExceedsBalancebackend/internal/application/process/pay_other.go:43payCashFlags;:60parsePayOtherbackend/internal/application/process/trans.go:1331payReceiveFlags;:1338payStmtsbackend/internal/application/process/service.go:1860payTendersGL;:1861เช็คจ่าย 2112;:1865เช็ครับ 1122backend/internal/application/process/service.go:2329บัตร 461/462/463