ระบบที่ส่งไฟล์โอนเงินให้ธนาคารเอง มักทำงานเป็นรอบ เช้า สาย บ่าย และเย็น แต่ละรอบดึงรายการจ่ายที่อนุมัติแล้วจาก ERP ออกไฟล์ แล้วส่งให้ธนาคาร ฟังดูเหมือนแค่ตั้งเวลา แต่ธนาคารไม่ได้ทำงานทุกวันที่บริษัททำงาน และไม่ได้ทำทุกไฟล์ทันทีที่ได้รับ
โพสต์นี้รวมเรื่องวันและเวลาที่ระบบแบบนี้ต้องรู้ จากงานที่เราทำระบบส่งรายการจ่ายเงินให้ธนาคารโอนอัตโนมัติ ส่วนเรื่องตัวไฟล์อยู่ในเตรียมไฟล์โอนเงินให้ธนาคารรับได้ทั้งไฟล์
วันทำการของธนาคารไม่ใช่วันทำงานของบริษัท
ธนาคารพาณิชย์ทำการวันจันทร์ถึงศุกร์ และหยุดตามวันหยุดของสถาบันการเงินที่ธนาคารแห่งประเทศไทยประกาศทุกปี รายการนี้ใกล้กับวันหยุดราชการ แต่ไม่จำเป็นต้องตรงกันทุกวัน
ตัวอย่างจากปี 2569
- วันที่ราชการหยุดแต่ธนาคารไม่หยุด เช่นวันพืชมงคล ซึ่งไม่อยู่ในรายการวันหยุดของสถาบันการเงิน
- วันหยุดพิเศษที่ต้องมีประกาศแยก ครม. ประกาศวันหยุดพิเศษในกรุงเทพฯ ช่วงประชุม IMF และธนาคารโลก แต่ธนาคารปิดวันที่ 16 ตุลาคม 2569 ก็ต่อเมื่อธนาคารแห่งประเทศไทยออกประกาศของตัวเอง และวันนั้นงดโอนเงินผ่าน BAHTNET เคลียร์ริงเช็คระหว่างธนาคาร และ bulk payment ระหว่างธนาคาร ส่วนแอปธนาคารและ ATM ยังใช้ได้
- สงกรานต์ ปีนี้ธนาคารหยุด 13 ถึง 15 เมษายน ตรงกับวันจันทร์ถึงพุธ
แอปธนาคารที่ใช้ได้ทุกวันทำให้ลืมได้ง่ายว่า การโอนแบบเป็นชุดของบริษัทยังเดินตามวันทำการของธนาคาร
บริษัทเองก็มีวันทำงานของตัวเอง บางบริษัททำงานวันเสาร์ บางบริษัทหยุดวันที่ธนาคารเปิด ระบบส่งไฟล์ธนาคารจึงควรยึดวันทำการของธนาคาร ไม่ใช่ปฏิทินของบริษัท
เก็บวันหยุดไว้ที่เดียว
วันหยุดธนาคารเปลี่ยนทุกปี และบางปีมีวันหยุดพิเศษที่ประกาศกลางปี ถ้าวันหยุดเขียนตายไว้ในโค้ด ต้องให้นักพัฒนาแก้และ deploy ทุกครั้ง ทางที่ดีกว่าคือเก็บไว้ที่เดียวที่ฝ่ายการเงินดูแลอยู่แล้ว ในงานของเรา ฝ่ายการเงินบันทึกวันหยุดไว้ใน ERP อยู่แล้วเพื่อใช้คำนวณวันครบกำหนดจ่าย ระบบดึงวันหยุดจาก ERP มาทุกเที่ยงคืน แล้วทุกรอบเวลาเช็กก่อนทำงานว่าวันนี้หยุดหรือไม่
เช็กตอนจะทำงานแทนการคำนวณตารางล่วงหน้า มีข้อดีคือ ถ้าวันหยุดพิเศษเพิ่งประกาศเมื่อวาน ฝ่ายการเงินเพิ่มลง ERP แล้วรอบของวันนั้นก็หยุดเองโดยไม่ต้องแก้อะไรในระบบ
วันหยุดยาวต้องนับครบทุกวันในช่วง
ERP ที่เราทำงานด้วยบันทึกวันหยุดเป็นช่วง มีวันเริ่มกับวันสิ้นสุด สงกรานต์จึงเป็นแถวเดียวที่ครอบหลายวัน วันขึ้นปีใหม่ก็เช่นกัน

วันหยุดที่บันทึกเป็นช่วง ระบบต้องเช็กว่าวันนี้อยู่ระหว่างวันเริ่มกับวันสิ้นสุด
จุดที่พลาดง่ายคือวิธีเช็กว่าวันนี้หยุดไหม ถ้าเขียนเงื่อนไขกลับด้าน ระบบจะเห็นเฉพาะวันหยุดที่เริ่มและจบในวันเดียว วันหยุดวันเดียวผ่านการทดสอบทั้งหมดแบบบังเอิญ ส่วนวันหยุดหลายวันหายไปเงียบ ๆ เราเจอโค้ดแบบนี้ในงานหนึ่ง ซึ่งถ้าไม่ได้แก้ ระบบจะส่งไฟล์ให้ธนาคารตลอดช่วงสงกรานต์ ทางกันคือให้ทั้งระบบเช็กวันหยุดจากจุดเดียว และมี test ของวันกลางช่วงสงกรานต์ไว้เสมอ
เวลาตัดรอบตัดสินว่าเงินเข้าวันไหน
ธนาคารไม่ได้ทำไฟล์ทันทีที่ได้รับ แต่ละบริการมีเวลาตัดรอบของตัวเอง เช่นโอนภายในธนาคารเดียวกัน โอนต่างธนาคาร และโอนไปต่างประเทศ ไฟล์ที่มาถึงก่อนเวลาตัดรอบได้ทำวันนี้ ไฟล์ที่มาถึงหลังจากนั้นธนาคารเก็บไว้ทำวันทำการถัดไป และบางบริการต้องมีคนอนุมัติในระบบของธนาคารก่อนเวลาปิดของบริการนั้นด้วย
เวลาตัดรอบจึงมีผลกับสองวันในไฟล์
- วันที่เงินเข้า (value date) ถ้ารายการกำหนดให้เงินเข้าวันนี้ แต่ไฟล์ไปถึงหลังเวลาตัดรอบ รายการนั้นจะโอนตามวันที่ตั้งไว้ไม่ได้ ระบบควรกันไว้และเตือนให้ฝ่ายการเงินเลือกวันใหม่ แทนที่จะส่งไปให้ธนาคารปฏิเสธ
- วันแจ้งล่วงหน้า (pre-advice date) บางบริการให้ใส่วันที่ธนาคารแจ้งผู้รับเงินล่วงหน้า ปกติคือหนึ่งวันทำการก่อนวันที่เงินเข้า แต่ธนาคารที่เราทำงานด้วยไม่รับวันแจ้งล่วงหน้าที่อยู่ก่อนวันที่ธนาคารทำไฟล์
กรณีที่ทำให้งงที่สุดคือไฟล์ที่สร้างเย็นวันศุกร์ หลังเวลาตัดรอบ สำหรับรายการที่เงินเข้าวันจันทร์ วันแจ้งล่วงหน้าคือวันศุกร์ ดูถูกต้องตอนสร้าง แต่ธนาคารทำไฟล์วันจันทร์ วันศุกร์จึงกลายเป็นวันที่ผ่านไปแล้ว รายการโดนปฏิเสธ ระบบควรคำนวณวันแจ้งล่วงหน้าใหม่ทุกครั้งก่อนสร้างไฟล์ ไม่ใช้ค่าที่คำนวณไว้ตั้งแต่ตอนดึงรายการ และรายการที่โดนปฏิเสธเพราะเรื่องนี้ควรส่งใหม่พร้อมวันที่คำนวณใหม่ได้เอง ตราบที่วันที่เงินเข้ายังไม่ผ่านไป
ตารางรอบเวลามีที่เดียว ใช้ทั้งตั้งเวลาและแสดงบนหน้าจอ
ฝ่ายการเงินต้องรู้ว่ารอบถัดไปคือกี่โมง และรอบนั้นส่งบริการอะไรบ้าง ระบบจึงมักมีหน้าจอบอกรอบถัดไป ถ้าหน้าจอกับตัวตั้งเวลาอ่านเวลาจากคนละที่ วันหนึ่งที่มีคนแก้ที่เดียว หน้าจอจะบอกรอบที่ไม่มีจริง
ในงานของเรา ตารางรอบเวลาเป็นรายการเดียวในโค้ด แต่ละรอบบอกเวลา งานที่ทำ และหมายเหตุว่าทำไมรอบนั้นถึงส่งบริการที่ส่ง ตัวตั้งเวลาอ่านรายการนี้แล้วตั้งทุกรอบให้ทำเฉพาะวันธรรมดาและข้ามวันหยุด หน้าจอก็อ่านรายการเดียวกัน เวลาฝ่ายการเงินขอเปลี่ยนรอบ ก็แก้ที่เดียว
กรณีที่อาจเจอในงานจริง
- รัฐบาลประกาศวันหยุดพิเศษกะทันหัน ต้องดูว่าธนาคารแห่งประเทศไทยประกาศให้สถาบันการเงินหยุดด้วยหรือไม่ ถ้าหยุด ฝ่ายการเงินเพิ่มลง ERP ก่อนเที่ยงคืนของวันก่อนหน้า ระบบก็หยุดเอง
- ปีใหม่มาถึงแล้วแต่ยังไม่มีวันหยุดของปีหน้า ระบบจะส่งไฟล์ในวันหยุดต้นปีโดยไม่รู้ตัว ควรมีคำเตือนถ้าปีหน้ายังไม่มีวันหยุดในระบบภายในเดือนธันวาคม
- รายการรอวันที่เงินเข้าดูเหมือนค้าง รายการที่ตั้งให้เงินเข้าสัปดาห์หน้ายังไม่ไปเพราะยังไม่ถึงรอบ หน้าจอควรแยกสถานะนี้ออกจากรายการที่ผิดจริง ไม่อย่างนั้นฝ่ายการเงินจะตกใจทุกวันศุกร์
- เซิร์ฟเวอร์ตั้งเขตเวลาผิด ทุกเวลาในตารางควรเป็นเวลาไทย ถ้าเซิร์ฟเวอร์อยู่ที่ UTC รอบ 9 โมงเช้าจะไปทำตอนบ่ายสี่โมง
เรื่องที่ควรถามทีมพัฒนา
- ระบบเอาวันหยุดมาจากไหน และใครเป็นคนเพิ่มวันหยุดพิเศษ
- วันหยุดที่เป็นช่วงหลายวันนับครบทุกวันไหม มี test ของวันกลางช่วงหรือเปล่า
- เวลาตัดรอบของแต่ละบริการอยู่ที่ไหน และรายการที่ไปไม่ทันตัดรอบจะเป็นยังไง
- วันแจ้งล่วงหน้าคำนวณตอนไหน
- ตารางรอบเวลาที่หน้าจอแสดงกับที่ระบบทำจริงมาจากที่เดียวกันไหม






