#accounting#period#period-close#validation#gl
งวดบัญชีและด่านตรวจงวดปิด
งวดบัญชีอยู่ในตาราง erp_account_period (ช่วง date_start..date_end, status 0 = เปิด) ด่านตรวจงวดอยู่ที่ period.go เดียว และถูกเรียกจากการบันทึก/ลบ/ยกเลิกเอกสารแต่ละชนิด แต่ไม่ครบทุกเส้นทาง การลง GL เองก็มีพฤติกรรมต่างกันระหว่าง template กับ standard
ทำงานอย่างไร
หางวดของวันที่ (readPeriodStatus period.go:35)
SELECT status FROM erp_account_period WHERE <วันที่> BETWEEN date_start AND date_end ORDER BY period_number, roworder LIMIT 1- วันที่ว่าง =
CURRENT_DATE; รูปแบบวันที่ผิด = "รูปแบบวันที่ไม่ถูกต้อง"
ด่านสองแบบ
checkOpenPeriod(:17, port จาก C#_checkOpenPeriod): ต้องพบงวดและ status = 0 มิฉะนั้น errorcheckPeriodNotClosed(:27): ไม่พบงวดผ่านได้ ปฏิเสธเฉพาะงวดที่ปิด (ใช้กับการลบค่าเสื่อม)- ข้อความเดียวทั้งสองกรณี (
periodError:53): "วันที่เอกสาร dd/mm/yyyy ได้ถูกปิดงวดไปแล้ว หรือยังไม่ได้กำหนดงวดบัญชี ..." (วันที่ว่างใช้คำว่า "วันที่ปัจจุบัน") checkStoredDocPeriod(:68): ตรวจด้วยdoc_dateที่เก็บในตาราง (ตอนลบ); ไม่พบเอกสารผ่านได้ ให้ผู้เรียกแจ้ง not-found
ใครเรียก
| เส้นทาง | บันทึก | ลบ |
|---|---|---|
SaveTrans / DeleteTrans (ic_trans) |
checkTransScreenSave trans_validate.go:44 ตรวจวันที่ใหม่ |
checkTransScreenDelete :106 ตรวจวันที่ที่เก็บ |
SaveDoc / DeleteDoc สมุดรายวัน (flag 0, 1999) และ ap_ar_trans |
checkSaveDocPeriod docs.go:149 |
checkDeleteDocPeriod docs.go:172 |
| ยกเลิกเอกสาร (doc/cancel) | checkCancelPeriod doc_cancel.go:143 ตรวจทั้งวันที่ต้นฉบับและวันที่ใบยกเลิก; undo ตรวจวันที่ใบยกเลิกที่เก็บ |
|
| ขายสินทรัพย์ 1802 | fa_sale.go:431 วันที่ใหม่ และ :448 วันที่เดิมเมื่อแก้ไข | fa_sale.go:422 |
| ค่าเสื่อม 1801 | ไม่ตรวจ (comment fa_depreciation.go:793 ตาม C#) | checkPeriodNotClosed :877 |
ข้อยกเว้น
periodExemptFlags(:128) = 521, 522, 523 (คลังรับฝาก ฝาก/เบิก/รับคืนจากเบิก) บันทึกโดยไม่ตรวจงวด แต่การลบยังตรวจ (comment :126-127)checkSaveDocPeriodตรวจเฉพาะ kind สมุดรายวันและ ap_ar ส่วนทะเบียนเช็คไม่มีด่าน (comment :107-108) ดู วงจรเช็ครับ/เช็คจ่าย บัตรเครดิต และโอนเงินระหว่างบัญชี (Cheque Lifecycle & Bank Transfer)- เอกสาร 54 สต็อกยกมาบันทึกผ่านเส้นทางของตัวเอง ไม่พบการเรียกด่านงวดใน stock_beginning.go ดู เอกสารสต็อกพิเศษ: ยอดยกมา ปรับปรุง Lot และตรวจนับ (Opening Stock, Lot Adjust, Stock Count)
งวดในการลง GL
- template (gl_template.go:1027): หางวดด้วย
ORDER BY roworderถ้าไม่พบหรือ status ≠ 0 จะไม่ลง GL ของเอกสารนั้น (handled แต่ 0 บรรทัด) และคืนคำเตือน "ไม่พบงวดบัญชีที่เปิดอยู่..." ดู เครื่องมือลงบัญชีตามรูปแบบ GL (GL Template Engine) - standard (service.go:1588): หา
period_number/period_yearโดยไม่ดู status ไม่พบงวดได้ 0 (comment ตาม C#) จึงลง GL ในงวดปิดได้ ดู การลงบัญชี Dr/Cr มาตรฐานแยกตามชนิดเอกสาร (Standard GL Posting)
จุดเสี่ยง
- ค่าเสื่อม 1801 และ 54 บันทึกลงงวดที่ปิดแล้วได้
- rebuild GL แบบ standard ไม่ดูสถานะงวด ขณะที่ template ข้ามเอกสารในงวดปิด ผล rebuild จึงต่างกันตามชนิดการลง GL
- ลำดับหางวดต่างกัน: ด่านตรวจใช้
period_number, roworderแต่การลง GL ใช้roworderถ้ามีงวดซ้อนทับกันอาจได้คนละงวด - SaveTrans ตรวจเฉพาะวันที่ใหม่ ไม่พบการตรวจวันที่เดิมของเอกสารที่แก้ไขใน
checkTransScreenSave(เส้นทางอื่นยังไม่ยืนยัน) ต่างจาก 1802 ที่ตรวจทั้งสองวัน
ที่มาในโค้ด
backend/internal/application/process/period.go:17checkOpenPeriodbackend/internal/application/process/period.go:27checkPeriodNotClosedbackend/internal/application/process/period.go:35readPeriodStatusbackend/internal/application/process/period.go:95checkCancelPeriodbackend/internal/application/process/period.go:109checkSaveDocPeriodbackend/internal/application/process/period.go:128periodExemptFlagsbackend/internal/application/process/trans_validate.go:44ด่านตอนบันทึก ic_transbackend/internal/application/process/gl_template.go:1027template ข้ามงวดปิดbackend/internal/application/process/service.go:1588standard GL หางวดไม่ดู status
ดูเพิ่ม
- ลำดับการบันทึกเอกสาร (Transaction Save Flow)
- การลบ แก้ไข และล็อกเอกสาร (Transaction Delete / Edit Guards)
- กระบวนการสร้างสมุดรายวัน GL ใหม่ (GL Rebuild Process)
- ค่าเสื่อมราคาสินทรัพย์ถาวร (Fixed Asset Depreciation)
- ขายสินทรัพย์ถาวร (Fixed Asset Sale 1802)
- ภาพรวมระบบบัญชี SML AI Account (Accounting Overview)