📲 03 วิธีนำ Work Order จาก SAP เข้าระบบ Tulip (5 แนวทาง)
📲

วิธีนำ Work Order จาก SAP เข้าระบบ Tulip (5 แนวทาง)

ภาพรวมสั้น ๆ

  1. SAP API → Tulip Connector & Automation – อัตโนมัติที่สุด

  2. Manual CSV Import – ง่าย เร็ว ไม่ต้องโค้ด

  3. Tulip App Upload + Parser – มี UI ให้ Planner/Operator อัปโหลด

  4. Microsoft Excel Connector – ดึงไฟล์จาก OneDrive/SharePoint อัตโนมัติ

  5. SAP API → Ignition WebDev → Tulip – ใช้ Ignition เป็น Gateway ก่อน

ทั้ง 5 วิธีสุดท้ายจะสร้าง/อัปเดต Tulip Table “Work Order” ซึ่งถูกใช้ต่อโดย Tulip Scheduling App และระบบ OEE ใน Ignition

1) SAP API → Tulip Connector & Automation

หัวข้อ รายละเอียด
Use case IT เปิด OData/RFC API ใน SAP, ต้องการ Real-time syncing
Component Tulip HTTP Connector (Cloud หรือ Host) + Automation
Flow ① Tulip Connector ดึง Work Order (GET) → ② Automation On connector run ตรวจ/แมป field → ③ Upsert เข้า Tulip Table
Pros - Fully automated - Latency ต่ำ - ไม่ต้องจับไฟล์ใด ๆ
Cons - ต้องตั้งค่า CSRF token, Firewall, Service Account ใน SAP - ต้องมี Error-handling/Retry

ขั้นตอนย่อ

  1. ขอ Endpoint เช่น /sap/opu/odata/sap/ZPP_WORKORDER_SRV/Orders

  2. สร้าง Connector Function แบบ GET

  3. สร้าง Automation (Schedule ทุก 5 นาที หรือ Webhook Trigger)

  4. ใช้ “Upsert by key (WO_ID)” เพื่อเลี่ยง duplicated records

2) Manual CSV Import (Planner CSV Upload)

หัวข้อ รายละเอียด
Use case Pilot / Low-volume; Planner export Excel จาก SAP เอง
Component Tulip Table UI (ปุ่ม ⋮ → Import CSV)
Flow ① Planner กด Export → ② แก้ไฟล์ถ้าจำเป็น → ③ Import เข้า Tulip Table
Pros - Zero code - เริ่มได้ทันที
Cons - Manual; เสี่ยง human error - ไม่เหมาะกับความถี่สูง

Tip: เพิ่ม Tulip Automation “On record created” เพื่อตรวจ duplicated WO_ID แล้วแจ้งเตือนได้

3) Tulip App Upload + Parser

หัวข้อ รายละเอียด
Use case ต้องการ UI ให้อัปโหลดใน Shop-floor + Validation ในตัว
Component Tulip File Input Widget, Connector Host (Node.js / Python)
Flow ① Planner/Operator เลือกไฟล์ใน App → ② Trigger ดึง Signed URL → ③ Connector Function โหลดไฟล์, ใช้ xlsx library แปลงเป็น JSON → ④ Upsert Tulip Table
Pros - UX ดี; ทุกอย่างอยู่ใน Tulip App - ใส่ Validation/Logging ได้ละเอียด
Cons - ต้องเขียน Code Parsing - File size limit ~5 MB (เพิ่มได้ด้วย chunking)

ตัวอย่างโค้ด (Node.js ใน Connector Host)

const XLSX = require('xlsx');
exports.run = async ({ fileUrl }) => {
  const buf = await fetch(fileUrl).then(r => r.arrayBuffer());
  const wb = XLSX.read(buf, { type: 'buffer' });
  const json = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
  // map fields & POST /tables/work_order/records
};

4) Microsoft Excel Connector (Graph API)

หัวข้อ รายละเอียด
Use case ไฟล์ Work Order ถูกวางบน OneDrive หรือ SharePoint; ต้อง Sync อัตโนมัติ
Component Tulip Cloud Connector + Microsoft Graph API
Flow ① Connector GET /drive/items/{file-id}/workbook/worksheets('Sheet1')/usedRange → ② Automation ทุก X นาที ดึงค่าใหม่ → ③ Upsert Table
Pros - ไม่ต้องอัปโหลดมือ - เหมาะกับ Planner ทำงานใน Office 365 อยู่แล้ว
Cons - ต้องเซ็ต Azure App Registration (OAuth 2.0) - Graph API rate-limits (เลือก poll interval ดี ๆ)

ตั้ง Scope: Files.Read, offline_access เพื่อ refresh token อัตโนมัติ

5) SAP API → Ignition WebDev API → Tulip / Dashboards

หัวข้อ รายละเอียด
Use case ทีม OT เชี่ยวชาญ Ignition, ต้องรวม WO กับ Machine data ใน Layer เดียว
Component SAP APIIgnition WebDev (REST) → PostgreSQL → (Option) Tulip Connector ดึงจาก DB
Flow ① SAP PUSH POST /api/wo (Ignition) → ② WebDev Script INSERT pgSQL wo_table → ③ Tulip Scheduling App ดึงผ่าน Named Query หรือ Tulip HTTP Connector
Pros - Control อยู่ฝั่ง OT - ใช้ Tag/Script เดิมใน Ignition ทำ OEE ได้เร็ว
Cons - Data อยู่ในสองที่ (Ignition & Tulip) → ต้องคิด Sync/Single Source of Truth - เพิ่มงานเขียน Query/REST ใน Ignition

สรุปข้อแนะนำ (สำหรับ Junior Dev)

  1. เริ่มต้นเร็ว (Pilot) → ใช้ Method 2 หรือ 3

  2. ถ้าทีม IT เปิด APIได้ → ย้ายไป Method 1 เพื่อ Automation เต็มรูปแบบ

  3. หาก WO ไฟล์เก็บใน Office 365 → Method 4 เป็นตัวเลือกดี

  4. ถ้า OT อยากรวมทุกอย่างผ่าน Ignition → Method 5 แต่ต้องจัดการ Sync เพิ่ม

Checklist ก่อนลงมือ

  • ตกลง Schema ของ WorkOrder (Primary Key, Required Fields)

  • สร้าง Staging Table ถ้าทำ Validation หลายชั้น

  • ทำ Idempotent Upsert (WO_ID เป็น key)

  • เตรียม Error Log & Notification channel (Email / Tulip App)

  • เขียน Unit Test (File parser / API response)

ทำไม “ชุดข้อมูลจาก SAP” ต้องยืดหยุ่นตามวิธีที่ลูกค้าใช้งาน PP

(Thai explanation + English keywords)

Key idea – เราไม่ควรดึงข้อมูลจาก SAP แบบ one-size-fits-all แต่ต้อง “ปรับระดับความละเอียด (granularity)” ให้ตรงกับ business practice ของลูกค้า เพื่อไม่ให้ข้อมูลขาด / เกิน หรือสร้างภาระ mapping ที่ไม่จำเป็น

2 รูปแบบหลักที่พบในโรงงาน (SAP PP/MM)

รูปแบบ สิ่งที่ SAP ใช้ ลักษณะข้อมูล ผลกระทบต่อ Tulip / Ignition
A. Macro Work Order(“Make X ชิ้นภายในเดือนนี้”) - Production Order Header (AFKO, AUFK)- BOM reserve (RESB) ไม่เสมอไป • Aggregate Qty• Period Start / Finish• ไม่สน Operation/Work Center รายละเอียด • Tulip จะต้อง “explode” เป็น Production Runs เอง (ex. split by shift) • ใช้ตาราง WorkOrder + Run ภายใน Tulip
B. Fine-scheduled Operations(แต่ละ Operation ผูกกับ Work Center) - Order Header + Routing Operations (AFVC)- Work Center (CRHD)- Shift (KAPA, Calendar),- Component allocation (RESB) • Operation-level Qty / Std Time• Scheduled Start/End ต่อ Work Center• มี Shift + Personnel demand • เราดึง Scheduled Work Orders ตรงเข้าตาราง Scheduled_WO • Station App รู้เลยว่าจะทำ Ops#10, Ops#20 ที่ WorkCenter = “STAMP_01”

รายการ Field ที่ “ต้องมี” และ “อาจต้องมี” ตามแต่ละรูปแบบ

กลุ่ม Field Macro WO (A) Fine-schedule (B) SAP Table/Field
Header Key (AUFNR) AUFK
Plant / MRP Area AUFK–WERKS / AFKO
Material (MATNR) AUFK–MATNR
Order Qty (GAMNG) AFKO
Start / Finish Date (GSTRP, GLTRP) AFKO
Status (STAT) JEST
Routing No. (ROUTING) / AUFPL AFVC (header)
Operation No. (VORN, APLZL) AFVC
Work Center (ARBID → CRHD–ARBPL) AFVC/CRHD
Std time / Base qty (VGW01, BMSCH) AFVC
Shift / Capacity load (✔) ถ้าใช้ KAPA, KBED
BOM Components (RESB) (✔) option (✔) RESB
Batch / Lot (CHARG) (✔) (✔) AFKO / MCHB

⚠️ อย่าลืมถาม ลูกค้าว่าใช้ PPDS หรือ external APS ไหม—ถ้าใช้ APS แล้ว Push Schedule กลับ SAP (/PLAF) เราอาจต้องดึงจาก Planned Order แทน Production Order

วิธี Mapping เข้าระบบ Tulip

ขั้นตอน Macro WO (A) Fine-schedule (B)
1. ETL Layer SAP API → Tulip WorkOrder Table ตรง ๆ SAP API → staging JSON → loop สร้าง Head + Operations
2. สร้าง Runs / Schedule Automation แยก WO_ID + Shiftเช่น ทุก 8 ชม. = 1 Run ใช้ข้อมูล AFVC.Start/Finish เป็น Scheduled_WO record
3. Station App ผู้ปฏิบัติงาน “Pick WO + Step” จากใน Tulip เอง App auto-filter WO ตาม WorkCenter + เวลา
4. OEE / Andon Map WO_ID ↔ Station โดยใช้ Run_ID ที่สร้าง ใช้ Operation_ID เป็น Key; aggregation ง่ายกว่า
5. Feedback to SAP (optional) Report Qty_total / Scrap หลังจบเดือน Post Confirmation (BAPI_PRODORDCONF_CREATE_TT) ต่อ Operation

วิธีคุยกับลูกค้า / ทีม SAP

  1. ถามระดับ Scheduling:

    • “Production Planning ใช้แค่ Order Header หรือใช้ Routing & Work Center ด้วย?”

    • “มี system อื่น (MES, APO, PPDS) ทำ detailed schedule ไหม?”

  2. ขอดู Transaction ตัวอย่าง:

    • COOIS layout ของโรงงาน—หัวคอลัมน์ใดถูกใช้งานจริง

    • ถ้าใช้ CM25 / MF50 (capacity planning) → แนวโน้มเป็นรูปแบบ B

  3. ปริมาณข้อมูล & Latency:

    • Macro: อัปเดตวันละครั้งพอ

    • Fine-schedule: ต้องการ near-real-time (เช่น ทุก 15 นาที)

  4. Confirm Interface Direction:

    • One-way (SAP → Tulip) หรือ Two-way (ต้อง Confirm กลับ SAP)

สรุปสำหรับ Junior Dev

  • เวลาถาม requirement อย่าเก็บแต่ชื่อฟิลด์—ต้องถามวิธีการวางแผนจริง ใน SAP

  • เตรียม สอง data-model ภายใน Tulip:

    1. WorkOrder_Header (AUFNR)

    2. WorkOrder_Operation (AUFNR+VORN) – สร้างเมื่อเป็นรูปแบบ B

  • เขียน mapping function ที่เลือกสร้าง Operation record ก็ต่อเมื่อ API payload มี VORN / ARBID.

  • ทำ Config Flag (mode=HEADER_ONLY vs HEADER_OPS) ใน Connector เพื่อรองรับการเปลี่ยนอนาคตโดยไม่ต้องแก้โค้ดใหญ่