ผลงาน

เชื่อม SAP Business One กับคลังสินค้าพาร์ทเนอร์และระบบจัดเก็บอัตโนมัติ

ระบบกลางที่ดึงเอกสารคลังจาก SAP Business One ทุกไม่กี่นาที แล้วส่งต่อให้คลังของพาร์ทเนอร์ ระบบจัดเก็บอัตโนมัติ และพนักงานคลัง โดยไม่ต้องคีย์เอกสารซ้ำในแต่ละระบบ

ปี
2563
Stack
Laravel, Livewire, SAP Business One, Horizon, MySQL, SOAP
เผยแพร่
เวลาอ่าน
4 นาที

โจทย์

ลูกค้าของเราเป็นบริษัทจัดจำหน่ายที่ใช้ SAP Business One เปิดเอกสารทุกอย่าง ทั้งใบจัดสินค้า ใบรับสินค้า ใบโอนสินค้า และใบรับคืน แต่สินค้าจริงอยู่หลายที่ ส่วนหนึ่งฝากไว้ที่คลังของพาร์ทเนอร์ซึ่งใช้ระบบคลังของตัวเอง อีกส่วนอยู่ในระบบจัดเก็บอัตโนมัติในคลังของบริษัท

แต่ละที่มีระบบของตัวเอง ถ้าไม่มีอะไรเชื่อม ทุกครั้งที่ SAP มีเอกสารใหม่ ก็ต้องมีคนเอาไปคีย์ในระบบปลายทาง แล้วคอยถามกลับว่าจัดของเสร็จหรือยัง สต็อกเหลือเท่าไหร่

เราทำระบบกลางขึ้นมาหนึ่งตัว คอยดึงเอกสารจาก SAP แล้วส่งต่อให้ทุกปลายทางเอง พร้อมดึงสถานะกลับมาให้พนักงานดูได้ในที่เดียว

ภาพรวมการทำงาน

flowchart LR
  SAP[(SAP Business One)] -->|ดึงเอกสารทุก 1–5 นาที| H[ระบบกลาง]
  H <-->|API: ส่งคำสั่ง รับสถานะและสต็อก| P[คลังพาร์ทเนอร์]
  H -->|วางไฟล์คำสั่ง| M[ระบบจัดเก็บอัตโนมัติ]
  H -->|ส่งยอดสต็อกทุกชั่วโมง| C[ระบบเช็กสต็อกภายใน]
  H --> U[พนักงานคลัง<br/>ดู ยืนยัน พิมพ์สติกเกอร์]

SAP เป็นที่เปิดเอกสาร ระบบกลางเป็นคนส่งต่อ และแต่ละปลายทางได้ข้อมูลในรูปแบบที่ตัวเองรับได้

ตัวอย่างงานจัดส่งหนึ่งรอบ ตั้งแต่ฝ่ายขายเปิดใบจัดสินค้าใน SAP จนคลังพาร์ทเนอร์จัดของเสร็จ

sequenceDiagram
  participant S as SAP
  participant H as ระบบกลาง
  participant P as คลังพาร์ทเนอร์
  S->>H: ใบจัดสินค้าใหม่ (ดึงทุกนาที)
  H->>P: ส่งคำสั่งจัดสินค้า ทีละรายการ
  P-->>H: รับคำสั่งแล้ว
  Note over P: พนักงานพาร์ทเนอร์จัดของ
  H->>P: ถามสถานะตามรอบ
  P-->>H: จัดเสร็จ พร้อมเลข batch
  S->>H: ออกใบกำกับแล้ว
  H->>P: แจ้งเลขใบกำกับให้ผูกกับงานจัดส่ง

พนักงานไม่ต้องคีย์คำสั่งซ้ำ และเห็นสถานะของแต่ละใบจากหน้าจอของระบบกลาง

เชื่อมข้อมูลสามแบบ ตามที่ปลายทางรับได้

ปลายทางแต่ละที่รับข้อมูลได้ไม่เหมือนกัน ระบบกลางจึงเลือกวิธีส่งตามที่แต่ละที่รับได้

ปลายทาง วิธีเชื่อม ทิศทาง ความถี่
คลังพาร์ทเนอร์ เรียก API (SOAP) ไปและกลับ ทุก 1–5 นาที
ระบบจัดเก็บอัตโนมัติ วางไฟล์ XML ในโฟลเดอร์ที่แชร์กัน ไปอย่างเดียว ทุกนาที ช่วงเวลาทำงาน
ระบบเช็กสต็อกภายใน ส่งไฟล์สรุปยอดสต็อก ไปอย่างเดียว ทุกชั่วโมง

คุยผ่าน API เมื่อปลายทางมีระบบที่รับคำสั่งได้

คลังพาร์ทเนอร์เปิด API ให้สร้างงานจัดสินค้า แจ้งรับสินค้าเข้า ยกเลิกงาน และถามสถานะหรือยอดสต็อก ระบบกลางจึงส่งคำสั่งได้ทันทีที่ SAP มีเอกสาร และดึงผลกลับมาเองตามรอบ

ข้อดีคือเร็วและรู้ผลทันที แต่ต้องเผื่อวันที่ปลายทางล่ม ระบบกลางจึง

  • เก็บสถานะการส่งของทุกรายการไว้ ถ้าปลายทางไม่ตอบ จะลองใหม่รอบหน้า ถ้าปลายทางปฏิเสธ ก็หยุดส่งรายการนั้นแล้วขึ้นสถานะผิดพลาดให้พนักงานเห็น
  • ถ้าปลายทางหยุดตอบทั้งระบบ จะพักการส่งไว้ 5 นาทีแล้วค่อยลองใหม่ และถ้าพาร์ทเนอร์มีช่องทางสำรอง ก็สลับไปใช้ช่องทางนั้นเอง
  • จดคำขอกับคำตอบของทุกครั้งที่เรียก เวลามีคำถามว่าส่งไปหรือยัง จะได้ดูย้อนหลังได้

วางไฟล์ เมื่อปลายทางเป็นเครื่องที่อ่านแค่ไฟล์

ระบบจัดเก็บอัตโนมัติไม่มี API แต่ซอฟต์แวร์ของเครื่องคอยอ่านไฟล์จากโฟลเดอร์ที่กำหนด ระบบกลางเลยดึงรายการที่ต้องเข้าออกตู้จาก SAP แล้วเขียนเป็นไฟล์ XML ตามรูปแบบที่เครื่องรับ วางลงโฟลเดอร์นั้นทุกนาทีในช่วงเวลาทำงาน ทั้งข้อมูลสินค้าและคำสั่งหยิบหรือเก็บสินค้า

วิธีนี้ง่ายและใช้ได้กับเครื่องจักรหรือซอฟต์แวร์รุ่นเก่าหลายตัว แต่ไม่มีคำตอบกลับทันที ต้องดูผลจากฝั่งเครื่องเอง

รายการสินค้าในคำสั่งหยิบที่ส่งให้ระบบจัดเก็บอัตโนมัติ

คำสั่งหยิบหนึ่งใบที่ส่งเข้าระบบจัดเก็บอัตโนมัติ พนักงานเปิดดูได้ว่าส่งอะไรไปบ้าง (ข้อมูลตัวอย่าง)

ส่งไฟล์สรุปตามรอบ เมื่อปลายทางแค่อยากเห็นตัวเลข

ระบบเช็กสต็อกภายในของบริษัทต้องการแค่ยอดคงเหลือล่าสุด ระบบกลางจึงรวมยอดเป็นไฟล์ CSV บีบอัดแล้วส่งไปทุกชั่วโมง ส่วนข้อมูลจากพาร์ทเนอร์ที่มาเป็นไฟล์รายวัน ระบบก็ดึงมาเก็บให้ทุกคืน

พนักงานคลังทำงานจากที่เดียว

  • เอกสารทุกประเภทจาก SAP: ใบจัดสินค้า ใบรับสินค้า ใบโอนเข้าออก และใบรับคืน ค้นหา เปิดดูรายการ และ export เป็น Excel ได้
  • สถานะที่คลังพาร์ทเนอร์: ทุกใบบอกว่าส่งไปแล้วหรือยัง จัดเสร็จหรือยัง และสั่งส่งซ้ำ ตรวจสอบ หรือยกเลิกได้จากหน้าเดียวกัน
  • สต็อก: ค้นสินค้า เช็กยอดคงเหลือที่คลังพาร์ทเนอร์ และดูความเคลื่อนไหวของแต่ละรายการ
  • สติกเกอร์: พิมพ์สติกเกอร์ติดสินค้าและใบโอน ขนาดตรงกับกระดาษที่ใช้

หน้ารวมเอกสารล่าสุด แสดงสถานะส่งคลังพาร์ทเนอร์ ยืนยัน และ batch ของแต่ละใบ

หน้ารวมเอกสาร: สามคอลัมน์ซ้ายบอกว่าแต่ละใบส่งถึงคลังพาร์ทเนอร์แล้วหรือยัง จัดเสร็จหรือยัง และได้เลข batch หรือยัง (ข้อมูลตัวอย่าง)

รายละเอียดใบจัดสินค้า มีการ์ดสถานะและปุ่มส่งข้อมูล ตรวจสอบ และยกเลิก

ใบจัดสินค้าหนึ่งใบ: สี่รายการแรกพาร์ทเนอร์รับแล้ว สองรายการล่างยังไม่ผ่าน พนักงานสั่งส่งซ้ำหรือยกเลิกได้จากปุ่มด้านบน (ข้อมูลตัวอย่าง)

หน้าสต็อก เทียบยอดใน SAP กับยอดที่คลังพาร์ทเนอร์

หน้าสต็อก: ยอดใน SAP อยู่คู่กับยอดที่คลังพาร์ทเนอร์ ตัวเลขที่ไม่ตรงกันเป็นสีแดง (ข้อมูลตัวอย่าง)

สติกเกอร์ติดสินค้า มี QR รหัสสินค้าและ QR จำนวน

สติกเกอร์ขนาด 80×30 มม. พร้อม QR ของรหัสสินค้าและจำนวน (ข้อมูลตัวอย่าง)

ไม่แตะข้อมูลใน SAP

ระบบกลางอ่านข้อมูลจาก SAP อย่างเดียว ด้วย user ที่ไม่มีสิทธิ์แก้ไข แล้วเก็บสำเนาไว้ในฐานข้อมูลของตัวเอง SAP จึงยังเป็นที่เก็บเอกสารจริงที่เดียว ถ้าระบบกลางมีปัญหา งานใน SAP ก็ไม่สะดุดและข้อมูลไม่เพี้ยน

แนวเดียวกันนี้ใช้กับ ERP ตัวอื่นได้ ขอแค่อ่านเอกสารออกมาได้ ไม่ว่าทางฐานข้อมูลหรือ API ส่วนฝั่งปลายทาง จะเป็น API ไฟล์ หรือรายงานตามรอบ ก็เลือกวิธีตามที่ระบบนั้นรับได้

ผลลัพธ์

ระบบใช้งานมาตั้งแต่ปี 2563 และเราดูแลพัฒนาต่อทุกปี ตามปลายทางที่บริษัทเพิ่มเข้ามา พนักงานไม่ต้องคีย์เอกสารจาก SAP ซ้ำในระบบของพาร์ทเนอร์หรือระบบจัดเก็บอัตโนมัติ และเห็นสถานะของทุกใบได้จากหน้าจอเดียว

ระบบเขียนด้วย Laravel 13 ใช้ Livewire กับ Tailwind CSS ทำหน้าจอ งานตามรอบเวลาและงานเบื้องหลังรันบน Horizon ฐานข้อมูลเป็น MySQL และอ่าน SAP HANA ผ่าน SQL proxy ที่เราแยกเป็นแพ็กเกจ laravel-sap-proxy

อ่านต่อ

ล่าสุด

ดูทั้งหมด →