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

ตัวแทนสั่งผ่านแอป ฝ่ายขายดูแลในหลังบ้าน ระบบหลังบ้านอ่านข้อมูลจาก SAP และส่งออเดอร์เข้า SAP แล้วแจ้งทุกฝ่ายเมื่อสถานะเปลี่ยน
ระบบคุยกับ SAP สองทาง ทางแรกเป็นการอ่าน ระบบดึงราคาประจำวันตามรอบ ส่วนสต๊อกกับวงเงินเครดิตจะถามสดตอนใช้งาน ทางที่สองเป็นการเขียน ระบบส่งออเดอร์ที่ยืนยันแล้วให้ระบบกลางของลูกค้า ระบบกลางสร้างใบเสนอราคาและใบสั่งขาย (SO) ใน SAP แล้วเรียกกลับมาบอกผลเอง หลังบ้านไม่ต้องคอยถาม SAP ว่าเสร็จหรือยัง
สิ่งที่สร้าง
ราคาของวันนี้ คิดให้ตั้งแต่ตอนหยิบใส่ตะกร้า
ราคาตั้งต้นมาจาก SAP ทุกวัน แล้วระบบคิดราคาของแต่ละรายการในตะกร้าตามเงื่อนไขของร้านนั้น ได้แก่
- ราคาประจำวัน ปรับตามกลุ่มราคาของร้าน
- สัญญาสั่งล่วงหน้า: ร้านที่ทำสัญญาซื้อไว้เป็นโควตา ได้ราคาตามสัญญาจนกว่าโควตาจะหมด ตอนยืนยันออเดอร์ ระบบเช็คโควตาที่เหลือกับ SAP อีกครั้ง
- ราคาที่ฝ่ายขายปรับให้ เป็นรายการ ๆ
- เงื่อนไขเครดิตและค่าขนส่ง: เครดิตยาวขึ้น ราคาเพิ่มตามอัตราที่ตั้งไว้ ค่าขนส่งคิดตามน้ำหนักและพื้นที่ส่ง
ทุกครั้งที่ราคาเปลี่ยน ระบบเก็บรายละเอียดไว้ว่าราคานั้นมาจากเงื่อนไขไหน ฝ่ายขายเปิดดูย้อนหลังได้ว่าทำไมรายการนี้ได้ราคานี้

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

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

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

รายการออเดอร์ในหลังบ้าน เห็นทั้งสถานะของออเดอร์และสถานะการส่งเข้า SAP (ข้อมูลตัวอย่าง)
ทุกฝ่ายเห็นเรื่องเดียวกัน
- ห้องแชทของแต่ละร้าน: ร้านตัวแทนแต่ละรายมีห้องแชทหนึ่งห้อง มีทั้งคนในร้าน ฝ่ายขาย และ Service เมื่อออเดอร์เปลี่ยนสถานะ ระบบส่งการ์ดสรุปออเดอร์เข้าห้องให้เอง
- แจ้งเตือนในแอปและอีเมล: ส่งตามเหตุการณ์ของออเดอร์ อีเมลส่งผ่าน Microsoft 365 ของบริษัท และเก็บประวัติว่าส่งถึงใครเมื่อไหร่
- ประวัติของตะกร้า: ทุกการแก้ไขบันทึกไว้ว่าใครแก้อะไร จากฝั่งร้าน ฝ่ายขาย หรือจากที่ SAP ตอบกลับมา ย้อนดูได้เป็นรอบ ๆ
- ใบเสนอราคาและใบสั่งซื้อเป็น PDF: ระบบสร้างไฟล์ในคิวเบื้องหลัง ร้านกดโหลดได้จากแอป

ข้อความแชทในหลังบ้าน: การ์ดแจ้งสถานะออเดอร์ที่ระบบส่งเอง ปนกับข้อความของร้านและฝ่ายขาย (ข้อมูลตัวอย่าง)

ประวัติของตะกร้า: ใครแก้อะไร เมื่อไหร่ แยกเป็นรอบ (ข้อมูลตัวอย่าง)
เชื่อมกับระบบภายนอก
- SAP ทางอ่าน: ราคาประจำวัน สต๊อกตามคลัง วงเงินเครดิต รายการใน SO และโควตาของสัญญาสั่งล่วงหน้า บางอย่างดึงตามรอบ บางอย่างถามสดตอนใช้งาน
- SAP ทางเขียน: ส่งออเดอร์ให้ระบบกลางของลูกค้า แล้วรอรับผลที่ระบบกลางเรียกกลับมา
- แอปของตัวแทน: ทีมพาร์ทเนอร์ทำหน้าแอป และเรียกใช้ API ของระบบหลังบ้านทั้งหมด
- Microsoft 365: ส่งอีเมลจากบัญชีของบริษัท
- แจ้งเตือนและแชท: แจ้งเตือนในแอป และห้องแชทที่อัปเดตทันทีที่มีข้อความใหม่
ระบบที่คุยกับคนอื่นเยอะ ต้องรู้ให้ได้ว่าการเชื่อมต่อไหนช้าหรือล้มอยู่ เราจึงบันทึกทุกครั้งที่ระบบเรียกออกไปข้างนอก และทำหน้ารวมในหลังบ้านให้ทีมดูได้ว่าตอนนี้ระบบไหนตอบช้า หรือมีออเดอร์ไหนค้างอยู่
ใช้กับระบบของคุณได้ยังไง
ถ้าบริษัทขายผ่านตัวแทน และข้อมูลหลักอยู่ใน SAP หรือ ERP ตัวอื่น ลองเริ่มจากคำถามเหล่านี้
- ราคา สต๊อก และเครดิต ตัวไหนเปลี่ยนบ่อยจนต้องถามสดทุกครั้ง ตัวไหนดึงวันละครั้งก็พอ
- ERP รับออเดอร์จากข้างนอกได้ทางไหน และบอกผลกลับมาได้ไหม หรือเราต้องคอยถามเอง
- ก่อนออเดอร์จะเข้า ERP ต้องผ่านใครบ้าง ทั้งในร้านตัวแทนและฝั่งบริษัท
- ถ้า ERP ปฏิเสธบางรายการ ใครต้องรู้ และรู้จากที่ไหน
ผลลัพธ์
- 2565 เริ่มระบบสั่งซื้อ ราคาประจำวันจาก SAP และประวัติการแก้ไขของตะกร้า
- 2566 ห้องแชทของแต่ละร้าน แจ้งเตือนในแอป ขั้นอนุมัติภายในร้าน และส่งออเดอร์เข้า SAP ผ่านระบบกลาง
- 2567 วงเงินเครดิตจาก SAP
- 2569 ส่งอีเมลผ่าน Microsoft 365 ของบริษัท
ระบบหลังบ้านเขียนด้วย Laravel ใช้ Filament ทำหน้าจอฝ่ายขายและแอดมิน ฐานข้อมูลเป็น PostgreSQL งานที่คุยกับ SAP ทั้งหมดวิ่งในคิวเบื้องหลังด้วย Horizon และใช้ Reverb ส่งข้อมูลแบบ realtime ให้ห้องแชท






