#tables#ap-ar
ตารางเครดิตวางบิล ar_credit_pay_bill
ตารางตั้งค่า (master เล็ก) ที่แปลง จำนวนวันเครดิต ของลูกค้า (credit_day) เป็น วันครบกำหนดตามรอบวางบิล/รับเงินของบริษัท — แทนที่จะใช้ "วันที่เอกสาร + credit_day" ตรง ๆ. ใช้เมื่อบริษัทเปิดตัวเลือก erp_option.use_credit_pay_bill_calc = 1 (erp_option — ตัวเลือกระบบ (สวิตช์ + ทศนิยมของบริษัท)) เท่านั้น. มาจากหน้าจอ C# ARCreditPayBillForm.
คอลัมน์ที่เห็นในโค้ด
| column | ความหมาย | ใช้ที่ไหน |
|---|---|---|
credit_day |
จำนวนวันเครดิตที่ตารางนี้ตอบ (ค้นด้วย credit_day = <credit_day ของเอกสาร>; แถวที่ credit_day IS NULL ถูกข้าม) |
trans_party.go:240-245; trans_new_defaults.go:50 |
day_to_due |
วันที่ของเดือนที่ถึงกำหนดชำระ (นับจากวันที่ 1) | trans_party.go:240-252 |
month_to_due |
จำนวนเดือนที่เลื่อนไปข้างหน้าจากเดือนของเอกสาร | trans_party.go:240-252 |
day_to_close, month_to_close |
วัน/เดือนที่ปิดรอบวางบิล (โหลดมาแสดงในตัวเลือก ไม่ถูกใช้คำนวณวันครบกำหนด) | trans_new_defaults.go:50 |
line_number, roworder |
ลำดับแถว (เรียงเมื่อ credit_day ซ้ำ ใช้แถวแรก) |
trans_party.go:244; trans_new_defaults.go:50 |
คอลัมน์อื่นไม่ปรากฏใน SQL ที่อ่าน → "(ไม่ชัดจากโค้ด)".
สูตรวันครบกำหนด
payBillDueDate (trans_party.go:252-255): วันที่ 1 ของเดือนเอกสาร + month_to_due เดือน + (day_to_due − 1) วัน. เกิดผลเฉพาะเมื่อ
docDateไม่ว่าง, และerp_option.use_credit_pay_bill_calc = 1(อ่านใน SQL เดียวกันtrans_party.go:240-245), และ- มีแถวที่
credit_dayตรงกับของเอกสาร — ไม่เจอ = คืนค่าว่าง ใช้วันที่เอกสาร +credit_dayตามปกติ.
กลไกที่ใช้ตารางนี้
- เอกสารขายที่
credit_day/วันครบกำหนดแก้ไม่ได้ (ชุดdefaultSaleTypeFlags4 หน้าจอ):payBillTermsคำนวณตอนบันทึก (trans_party.go:198-204); ตั้งเป็นแบบ "locked" ผ่านCreditLockedเมื่อเปิดตัวเลือก (trans_new_defaults.go:30-52). - เอกสารซื้อ: ใช้วันครบกำหนดที่พิมพ์เอง แต่ค่าเริ่มต้นตอนเลือกเจ้าหนี้มาจากตารางนี้ (
trans_party.go:198-204comment "Buy screens keep the typed due date"). - ใบเสนอราคา (flag 30): ตัวเลือก "เปลี่ยนจำนวนวันเครดิต" โหลดทุกแถวของตารางนี้ (แสดงแม้ตัวเลือกปิด) —
trans_new_defaults.go:44-60. - นำเข้าอ้างอิง (ref import): หลังตั้ง
credit_dayสุดท้าย ระบบเรียกคำนวณวันครบกำหนดตามตารางนี้ (trans_ref_import_header.go:56-60). - ค่า
credit_dayตั้งต้นของลูกค้ามาจาก รายละเอียดเงื่อนไขลูกหนี้ (ar_customer_detail) (credit_day) หรือ รายละเอียดเงื่อนไขเจ้าหนี้ (ap_supplier_detail) ฝั่งซื้อ.
ความสัมพันธ์
- อ้างอิงเชิงตรรกะกับ
ar_customer_detail.credit_day/ap_supplier_detail.credit_day(ไม่มี FK) - ควบคุมด้วย erp_option — ตัวเลือกระบบ (สวิตช์ + ทศนิยมของบริษัท) (
use_credit_pay_bill_calc) - ผลลัพธ์ไปอยู่ที่ หัวเอกสารสินค้า/ซื้อ/ขาย (ic_trans) (
due_date/credit_dateของเอกสารขาย-ซื้อ)
ใครเขียน / ใครอ่าน
- เขียน: เป็น master ตั้งค่าผ่านเส้นทาง generic/legacy (อยู่ใน allow-list
write_policy_legacy.go:12). ไม่พบโค้ด backend ที่เขียนเฉพาะตารางนี้. - อ่าน:
trans_party.go:222-255(วันครบกำหนดตอนบันทึก/เลือกคู่ค้า),trans_new_defaults.go:30-60(รายการตั้งต้นเอกสารใหม่),trans_ref_import_header.go:56-60.
ข้อควรระวัง
- ตัวเลือก
use_credit_pay_bill_calcปิดอยู่ → ตารางนี้ ถูกข้ามทั้งหมด แม้มีข้อมูล (ยกเว้นตัวเลือกบนใบเสนอราคา). - ตารางไม่ unique บน
credit_day— ถ้าซ้ำจะใช้แถวแรกตามline_number, roworder(trans_party.go:244). - วันครบกำหนดถูกคำนวณเป็นวันที่ UTC โดยตั้งวันที่ 1 ของเดือนก่อนบวก (
trans_party.go:252-255) — ถ้าday_to_dueเป็น 0 จะได้วันสุดท้ายของเดือนก่อนหน้า (AddDate(0,0,-1)) ซึ่งเป็นพฤติกรรมตามสูตร C# เดิม.
ที่มาในโค้ด
backend/internal/application/process/trans_party.go:198-204,222-255backend/internal/application/process/trans_new_defaults.go:30-60backend/internal/application/process/trans_ref_import_header.go:54-60backend/internal/domain/query/write_policy_legacy.go:12