สมอง SML

คลังความรู้ / ถาม-ตอบ

#faq#period#year-end#gl#closing

ปิดบัญชีสิ้นงวด/สิ้นปี (โอนรายได้-ค่าใช้จ่ายเข้ากำไรสะสม) ทำอย่างไร ระบบลงบัญชีอะไร

ตอบสั้น: ใช้เมนูประมวลผลสิ้นงวด (1998) หรือประมวลผลสิ้นปี (1999) ระบบรวมยอดคงเหลือของบัญชีรายได้/ค่าใช้จ่าย (account_type 3, 4) ในช่วงวันที่ แล้วกลับรายการทุกบัญชี ยอดสุทธิ (กำไร/ขาดทุน) ลงบัญชีที่ผู้ใช้เลือกเป็น "บัญชีที่ปิดเข้า" ไม่มีรหัสกำไรสะสมตายตัวในโค้ด

รายละเอียด

ดู งวดบัญชี ปิดงวด/ปิดปี และประมวลผล GL ใหม่ (Period & Year Close, GL Rebuild) และ งวดบัญชีและด่านตรวจงวดปิด (Accounting Period Guard)

เมนู (ทุกเมนูไปที่จอ gl_close_period)

  • menu_gl_end_of_period "ประมวลผลสิ้นงวด" → โหมด period (1998)
  • menu_gl_end_of_year "ประมวลผลสิ้นปี" และ menu_close_account_process "ประมวลผลกำไร/ขาดทุน และต้นทุนขาย" → โหมด year (1999)
  • เมนูอยู่หมวด "③ ตรวจสอบ ผ่านรายการ สอบถามบัญชี และปิดงวด" เฉพาะผู้ดูแล (adminOnly)

ช่วงวันที่ (resolveCloseDates)

  • period: อ่าน date_start, date_end ของงวดที่เลือก ไม่พบ → "ไม่พบงวดบัญชีที่ %d"
  • year: min(date_start) ถึง max(date_end) ของ period_year ไม่พบ → "ไม่พบงวดบัญชีของปี %d"
  • หรือส่งช่วงวันที่เอง

การคำนวณ (computeGLClose, glCloseFromSums)

  • ยอดต่อบัญชี = SUM(debit − credit) ของ gl_journal_detail (หัวสมุดรายวันทั่วไป (gl_journal)) ในช่วงวันที่
  • ยอดเดบิตคงเหลือ → Cr บัญชีนั้น, ยอดเครดิตคงเหลือ → Dr บัญชีนั้น (ปัด 2 ตำแหน่ง)
  • กำไร = เครดิต − เดบิต; กำไร > 0 → Cr บัญชีที่ปิดเข้า, ขาดทุน → Dr บัญชีที่ปิดเข้า

การบันทึก (GLClose)

  1. กดดูตัวอย่างก่อน (ไม่บันทึก) จอถามยืนยันก่อนบันทึกจริง
  2. ต้องระบุเลขที่เอกสาร (≤ 25 ตัว), สมุดรายวัน, บัญชีที่ปิดเข้า
  3. checkGLCloseDoc: สมุดต้องมีจริง, บัญชีที่ปิดเข้าต้องเป็นบัญชีย่อย (status = 0) ไม่ใช่ → "ไม่พบบัญชีที่ปิดเข้า X (ต้องเป็นบัญชีย่อย)", เลขที่ถูกใช้กับเอกสารอื่น → conflict
  4. ลบเอกสารปิดเลขเดิม (gl_trans, gl_trans_detail, gl_journal, gl_journal_detail) แล้วสร้างใหม่ จึงรันซ้ำเลขเดิมได้
  5. ไม่มียอด → "ไม่มียอดรายได้/ค่าใช้จ่ายในช่วงวันที่ ..."
  6. เขียน gl_journal journal_type 2, trans_direct 1, วันที่ = วันสุดท้ายของช่วง และบันทึก process log

ข้อควรระวัง

ดูเพิ่ม

ที่มาในโค้ด

  • backend/internal/application/process/workflow.go:723 resolveCloseDates (:741 ไม่พบงวดของปี)
  • backend/internal/application/process/workflow.go:754 closeLine ปัด 2
  • backend/internal/application/process/workflow.go:766 computeGLClose (account_type IN (3, 4))
  • backend/internal/application/process/workflow.go:791 glCloseFromSums
  • backend/internal/application/process/workflow.go:817 GLClose (1998/1999, ลบแล้วสร้างใหม่)
  • backend/internal/application/process/workflow.go:868 checkGLCloseDoc; :891 insertGLCloseDoc
  • frontend/account/process/SystemProcessWorkbenchScreen.tsx:149 เลือกโหมด year/period; :530 runGLClose
  • frontend/account/tabs/screenRegistry.tsx:1163 เมนูที่ไปจอ gl_close_period
  • frontend/src/config/smlMenu.json:9638 menu_gl_end_of_period; :9652 menu_gl_end_of_year; :9666 menu_close_account_process