เทมเพลตข้อมูลการจัดการห่วงโซ่อุปทาน
เทมเพลตข้อมูลการจัดการห่วงโซ่อุปทาน
- แอตทริบิวต์ที่แนะนำให้รวบรวม
- กิจกรรมสำคัญที่ควรติดตาม
- คำแนะนำในการดึงข้อมูล
แอตทริบิวต์การจัดการห่วงโซ่อุปทาน
| ชื่อ | คำอธิบาย | ||
|---|---|---|---|
| คำสั่งซื้อด้านโลจิสติกส์ LogisticsOrder | รหัสเฉพาะของกระบวนการซัพพลายเชนแบบครบวงจรหนึ่งรายการ ตั้งแต่เริ่มมีความต้องการจนถึงการยืนยันการส่งมอบขั้นสุดท้าย. | ||
| คำอธิบาย คำสั่งซื้อด้านโลจิสติกส์ทำหน้าที่เป็นรหัสเคสหลักที่เชื่อมโยงกิจกรรมทั้งหมดซึ่งเกี่ยวข้องกับความต้องการหรือคำขอให้ดำเนินการตามคำสั่งซื้อรายการหนึ่งในซัพพลายเชน วิธีนี้ช่วยติดตามวงจรชีวิตของสินค้าได้ตั้งแต่การวางแผนและจัดซื้อ ไปจนถึงการผลิตและกระจายสินค้า ทำให้เห็นภาพกระบวนการทั้งหมด ใน process mining การวิเคราะห์ตามคำสั่งซื้อด้านโลจิสติกส์ช่วยให้เห็นเส้นทางทั้งหมดที่ใช้ตอบสนองความต้องการ ช่วยระบุรูปแบบกระบวนการที่พบบ่อย คอขวด และจุดที่เบี่ยงเบนไปทั่วทั้งซัพพลายเชน แทนการดูแยกเฉพาะกระบวนการจัดซื้อหรือการขาย. เหตุผลที่สำคัญ นี่คือคีย์สำคัญที่ใช้เชื่อมเหตุการณ์ที่เกี่ยวข้องทั้งหมดให้เป็นกระบวนการเดียว และช่วยให้วิเคราะห์ซัพพลายเชนได้ตั้งแต่ต้นจนจบ. แหล่งข้อมูล รหัสนี้เป็นแนวคิดที่อาจต้องสร้างขึ้นโดยเชื่อมโยงหมายเลขเอกสารหลายรายการ เช่น หมายเลขคำสั่งขายกับหมายเลขใบสั่งซื้อและเอกสารส่งมอบที่ตามมา โปรดดูเอกสาร SAP S/4HANA Supply Chain หรือสอบถามผู้เชี่ยวชาญในเรื่องนี้. ตัวอย่าง LO-4500078192LO-4500078193LO-4500078194 | |||
| ชื่อกิจกรรม ActivityName | ชื่อกิจกรรมทางธุรกิจหรือเหตุการณ์ที่เกิดขึ้น ณ จุดหนึ่งในกระบวนการซัพพลายเชน. | ||
| คำอธิบาย แอตทริบิวต์นี้อธิบายขั้นตอนหรือเหตุการณ์สำคัญในวงจรชีวิตของคำสั่งซื้อด้านโลจิสติกส์ เช่น 'ออกใบสั่งซื้อแล้ว' หรือ 'บันทึกการตัดจ่ายสินค้าแล้ว' กิจกรรมเหล่านี้เรียงต่อกันเป็นลำดับเหตุการณ์ของกระบวนการ. การวิเคราะห์ลำดับกิจกรรมเป็นหัวใจของ process mining ช่วยค้นหาเส้นทางกระบวนการที่เกิดขึ้นจริง เปรียบเทียบกับวิธีปฏิบัติงานมาตรฐาน และระบุขั้นตอนที่ทำให้เกิดความล่าช้าหรือต้องทำงานซ้ำ. เหตุผลที่สำคัญ แอตทริบิวต์นี้กำหนดขั้นตอนของกระบวนการ ซึ่งเป็นพื้นฐานสำหรับค้นหาแผนผังกระบวนการ วิเคราะห์รูปแบบกระบวนการ และวัดระยะเวลาระหว่างกิจกรรม. แหล่งข้อมูล สร้างขึ้นระหว่างการแปลงข้อมูล โดยจับคู่รหัสธุรกรรมหรือการเปลี่ยนสถานะจากตาราง SAP ต่างๆ เช่น EKKO, LIKP และ VBUK กับชื่อกิจกรรมที่ผู้ใช้เข้าใจได้. ตัวอย่าง ออกใบสั่งซื้อบันทึกรับสินค้าตามใบสั่งซื้อสร้างเอกสารส่งมอบขาออกยืนยันหลักฐานการส่งมอบแล้ว | |||
| เวลาที่เกิดเหตุการณ์ EventTime | วันและเวลาที่ระบุว่ากิจกรรมเกิดขึ้นเมื่อใด. | ||
| คำอธิบาย แอตทริบิวต์นี้ระบุวันและเวลาที่แน่นอนของแต่ละกิจกรรมในกระบวนการ และเป็นแกนเวลาของบันทึกเหตุการณ์ที่ใช้เรียงขั้นตอนตามลำดับที่เกิดขึ้นจริง. เวลาที่เกิดเหตุการณ์สำคัญต่อการวิเคราะห์ตามเวลา ใช้คำนวณระยะเวลาระหว่างกิจกรรม วัดเวลานำทั้งหมดของกระบวนการ ดูแนวโน้มประสิทธิภาพตามช่วงเวลา และระบุช่วงที่มีแนวโน้มเกิดคอขวด. เหตุผลที่สำคัญ เวลานี้จำเป็นต่อการคำนวณระยะเวลาและตัวชี้วัดประสิทธิภาพทั้งหมด ช่วยวิเคราะห์คอขวดและเวลานำของกระบวนการ. แหล่งข้อมูล ดึงข้อมูลจากฟิลด์เวลาในตาราง SAP หลักที่เกี่ยวข้องกับการสร้างเอกสารหรือการเปลี่ยนสถานะ เช่น CDHDR/CDPOS สำหรับเอกสารการเปลี่ยนแปลง หรือฟิลด์วันที่และเวลาเฉพาะ เช่น ERDAT/ERZET ในตารางส่วนหัว. ตัวอย่าง 2023-04-15T10:25:00Z2023-04-18T14:00:00Z2023-04-22T08:15:00Z | |||
| ระบบต้นทาง SourceSystem | ระบบที่เป็นแหล่งที่มาของข้อมูล. | ||
| คำอธิบาย ระบุอินสแตนซ์ของระบบต้นทางที่สร้างข้อมูลเหตุการณ์ ในสภาพแวดล้อมที่ซับซ้อน บริษัทอาจมี SAP S/4HANA หลายอินสแตนซ์สำหรับภูมิภาคหรือหน่วยธุรกิจที่แตกต่างกัน. แอตทริบิวต์นี้สำคัญต่อการกำกับดูแลข้อมูลและการแบ่งกลุ่มการวิเคราะห์ ช่วยให้นักวิเคราะห์เปรียบเทียบประสิทธิภาพกระบวนการระหว่างระบบ หรือแยกดูข้อมูลจากแหล่งข้อมูลหลักที่เชื่อถือได้เพียงแหล่งเดียว. เหตุผลที่สำคัญ ให้บริบทสำคัญเกี่ยวกับที่มาของข้อมูล ซึ่งจำเป็นต่อการตรวจสอบความถูกต้องและเปรียบเทียบกระบวนการในสภาพแวดล้อมของระบบที่แตกต่างกัน. แหล่งข้อมูล โดยทั่วไปจะเพิ่มค่าคงที่นี้ระหว่างการดึงข้อมูลเพื่อระบุแหล่งที่มา เช่น SAP System ID (SAPSID). ตัวอย่าง S4H_PROD_EUS4H_PROD_NAS4H_DEV | |||
| อัปเดตข้อมูลล่าสุด LastDataUpdate | เวลาที่รีเฟรชหรือดึงข้อมูลจากระบบต้นทางครั้งล่าสุด. | ||
| คำอธิบาย แอตทริบิวต์นี้ระบุเวลาล่าสุดที่มีการอัปเดตข้อมูลในบันทึกเหตุการณ์ ช่วยให้ทราบว่าข้อมูลที่นำมาวิเคราะห์เป็นข้อมูลล่าสุดเพียงใด. การทราบว่าข้อมูลเป็นปัจจุบันแค่ไหนมีความสำคัญต่อการตัดสินใจอย่างมีข้อมูล เวลานี้ช่วยให้ผู้ใช้เชื่อมั่นในข้อมูลและเข้าใจช่วงเวลาที่แดชบอร์ดและ KPI ครอบคลุม. เหตุผลที่สำคัญ ช่วยให้เห็นชัดเจนว่าข้อมูลเป็นปัจจุบันเพียงใด ผู้ใช้จึงทราบได้ว่าการวิเคราะห์กระบวนการอ้างอิงข้อมูลล่าสุดแค่ไหน. แหล่งข้อมูล โดยทั่วไปเครื่องมือดึงข้อมูลหรือ ETL จะสร้างและกรอกฟิลด์เมทาดาทานี้เมื่อรีเฟรชข้อมูลสำเร็จ. ตัวอย่าง 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| ชื่อผู้จัดจำหน่าย SupplierName | ชื่อผู้จัดจำหน่ายหรือผู้ขายที่เกี่ยวข้องกับกิจกรรมจัดซื้อ. | ||
| คำอธิบาย แอตทริบิวต์นี้ระบุผู้จัดจำหน่ายที่จัดหาสินค้าหรือบริการ โดยมักเชื่อมโยงกับกิจกรรม เช่น 'สร้างใบขอซื้อแล้ว' และ 'ออกใบสั่งซื้อแล้ว'. ชื่อผู้จัดจำหน่ายเป็นข้อมูลสำคัญสำหรับแดชบอร์ดประสิทธิภาพการส่งมอบของผู้จัดจำหน่าย ใช้กรองและแบ่งกลุ่มข้อมูลเพื่อเปรียบเทียบอัตราการส่งมอบตรงเวลา เวลานำ และคุณภาพของผู้จัดจำหน่ายแต่ละราย ซึ่งเป็นข้อมูลสำคัญสำหรับการจัดหาเชิงกลยุทธ์และการบริหารความสัมพันธ์กับผู้จัดจำหน่าย. เหตุผลที่สำคัญ ช่วยวิเคราะห์ประสิทธิภาพแยกตามผู้จัดจำหน่าย ซึ่งสำคัญต่อการปรับปรุงกระบวนการจัดซื้อและประเมินความน่าเชื่อถือของผู้จัดจำหน่าย. แหล่งข้อมูล หมายเลขผู้จัดจำหน่าย (LIFNR) จัดเก็บอยู่ในเอกสารจัดซื้อ เช่น ตาราง EKKN และ EBAN ส่วนชื่อดึงจากตารางข้อมูลหลักผู้ขายส่วนกลาง LFA1. ตัวอย่าง Global Components Inc.Advanced Materials LLCPrecision Parts Co. | |||
| ชื่อลูกค้า CustomerName | ชื่อลูกค้าที่บริษัทกำลังดำเนินการตามคำสั่งซื้อให้. | ||
| คำอธิบาย แอตทริบิวต์นี้ระบุลูกค้าปลายทางที่เกี่ยวข้องกับคำสั่งขายและกิจกรรมดำเนินการตามคำสั่งซื้อที่ตามมา ช่วยให้เข้าใจด้านความต้องการของกระบวนการซัพพลายเชน. การวิเคราะห์ตามลูกค้าใน process mining ช่วยให้เห็นรูปแบบการดำเนินการตามคำสั่งซื้อหรือระดับประสิทธิภาพที่แตกต่างกันของลูกค้ารายสำคัญ ใช้ในแดชบอร์ด เช่น การวิเคราะห์ความล่าช้าในการยืนยันหลักฐานการส่งมอบ เพื่อดูว่าลูกค้าบางรายยืนยันล่าช้าเป็นประจำหรือไม่. เหตุผลที่สำคัญ ช่วยแบ่งการวิเคราะห์ตามลูกค้า เพื่อให้เห็นพฤติกรรมเฉพาะของลูกค้า คอขวด หรือผลการดำเนินงานตามข้อตกลงระดับการให้บริการ. แหล่งข้อมูล หมายเลขลูกค้า (KUNNR) จัดเก็บอยู่ในเอกสารการขาย เช่น ตาราง VBAK ส่วนชื่อดึงจากตารางข้อมูลหลักลูกค้าส่วนกลาง KNA1. ตัวอย่าง Retail CorpInnovate SolutionsManufacturing Partners | |||
| ผลการตรวจสอบคุณภาพ QualityInspectionResult | ผลการตรวจสอบคุณภาพ เช่น 'ผ่าน' หรือ 'ไม่ผ่าน'. | ||
| คำอธิบาย แอตทริบิวต์นี้บันทึกผลการตรวจสอบคุณภาพของสินค้าที่ผลิตหรือรับเข้า ผลตรวจจะกำหนดว่าสินค้าจะไปยังขั้นตอนถัดไปได้หรือไม่ หรือต้องแก้ไข ส่งคืน หรือทิ้ง. แอตทริบิวต์นี้เป็นข้อมูลสำคัญสำหรับแดชบอร์ดและ KPI อัตราการปฏิเสธจากการควบคุมคุณภาพ การวิเคราะห์ความถี่และสาเหตุของการตรวจไม่ผ่านช่วยระบุปัญหาคุณภาพที่เกิดซ้ำในผลิตภัณฑ์ ผู้จัดจำหน่าย หรือสายการผลิตบางรายการ. เหตุผลที่สำคัญ ใช้คำนวณ KPI ด้านคุณภาพโดยตรง และช่วยระบุแหล่งที่มาของปัญหาคุณภาพในซัพพลายเชน. แหล่งข้อมูล โดยทั่วไปข้อมูลนี้จัดเก็บในโมดูล Quality Management (QM) โดยอาจมาจากตารางล็อตตรวจสอบ เช่น QALS และรหัสการตัดสินใจด้านการใช้งานใน QAVE. ตัวอย่าง ผ่านไม่ผ่านต้องแก้ไขผ่านโดยมีข้อเบี่ยงเบน | |||
| ผู้ใช้ที่ดำเนินการ ExecutingUser | รหัสผู้ใช้ของผู้ที่ดำเนินกิจกรรม. | ||
| คำอธิบาย แอตทริบิวต์นี้บันทึกชื่อผู้ใช้หรือรหัสผู้ใช้ SAP ของพนักงานที่ทำกิจกรรม เช่น สร้างใบสั่งซื้อหรือบันทึกรับสินค้า จึงเชื่อมโยงขั้นตอนของกระบวนการกับบุคลากรที่เกี่ยวข้อง. การวิเคราะห์ตามผู้ใช้ช่วยให้เข้าใจการกระจายภาระงาน ระบุความต้องการในการฝึกอบรม และเห็นความแตกต่างด้านประสิทธิภาพระหว่างบุคคลหรือทีม นอกจากนี้ยังช่วยวิเคราะห์การปฏิบัติตามข้อกำหนด โดยตรวจสอบได้ว่าใครเป็นผู้ดำเนินการในขั้นตอนสำคัญ. เหตุผลที่สำคัญ ระบุผู้ใช้ที่ทำกิจกรรมแต่ละรายการ ช่วยวิเคราะห์ภาระงาน เปรียบเทียบประสิทธิภาพ และตรวจสอบการดำเนินการที่ไม่เป็นไปตามข้อกำหนด. แหล่งข้อมูล ดูได้จากฟิลด์ 'Created by' หรือ 'Changed by' ในตาราง SAP หลายรายการ เช่น ERNAM ใน EKKO (ส่วนหัวใบสั่งซื้อ), LIKP (ส่วนหัวเอกสารส่งมอบ) และ VBRK (ส่วนหัวใบแจ้งหนี้). ตัวอย่าง CBROWNJSMITHASINGH | |||
| โรงงาน Plant | สถานที่ผลิตหรือกระจายสินค้าที่เกิดกิจกรรม. | ||
| คำอธิบาย โรงงานเป็นหน่วยงานในโครงสร้างองค์กรของ SAP ซึ่งหมายถึงสถานที่ผลิต จัดเก็บ หรือกระจายสินค้า ช่วยระบุบริบทด้านภูมิศาสตร์หรือหน้าที่ของกิจกรรมในกระบวนการ. การวิเคราะห์ประสิทธิภาพกระบวนการแยกตามโรงงานเป็นสิ่งที่หลายองค์กรต้องการ ช่วยเปรียบเทียบประสิทธิภาพ ปริมาณงาน และการปฏิบัติตามข้อกำหนดระหว่างสถานที่ปฏิบัติงานต่างๆ เพื่อค้นหาวิธีปฏิบัติที่ดีหรือสถานที่ที่ควรปรับปรุง. เหตุผลที่สำคัญ ให้มิติด้านภูมิศาสตร์หรือองค์กรสำหรับการวิเคราะห์ และช่วยเปรียบเทียบประสิทธิภาพระหว่างสถานที่ต่างๆ. แหล่งข้อมูล ดูได้จากตารางรายการเอกสารหลายประเภท เช่น VBAP (การขาย), EKPO (การจัดซื้อ) และ LIPS (การส่งมอบ) โดยทั่วไปฟิลด์นี้ใช้ชื่อ WERKS. ตัวอย่าง 100021003500 | |||
| วันที่ขอให้ส่งมอบ RequestedDeliveryDate | วันที่ขอให้ผู้จัดจำหน่ายส่งมอบสินค้า. | ||
| คำอธิบาย วันที่ส่งมอบที่ระบุไว้ในใบสั่งซื้อ ซึ่งเป็นวันที่เป้าหมายที่ผู้จัดจำหน่ายต้องส่งสินค้า ใช้เป็นเกณฑ์อ้างอิงสำหรับวัดผลการส่งมอบจริง. วันที่นี้จำเป็นต่อการคำนวณ KPI อัตราการส่งมอบตรงเวลาของผู้จัดจำหน่าย เมื่อนำวันที่รับสินค้าจริงมาเปรียบเทียบกับวันที่ขอส่งมอบ ธุรกิจจะวัดได้อย่างเป็นรูปธรรมว่าผู้จัดจำหน่ายทำตามข้อตกลงหรือไม่. เหตุผลที่สำคัญ วันที่นี้เป็นเกณฑ์อ้างอิงสำหรับคำนวณ KPI 'อัตราการส่งมอบตรงเวลาของผู้จัดจำหน่าย' จึงสำคัญต่อการบริหารประสิทธิภาพของผู้จัดจำหน่าย. แหล่งข้อมูล ดูได้จากตารางรายการใบสั่งซื้อ EKPO ในฟิลด์ EINDT (วันที่ส่งมอบ). ตัวอย่าง 2023-05-20T00:00:00Z2023-06-15T00:00:00Z2023-07-01T00:00:00Z | |||
| หมายเลขวัสดุ MaterialNumber | รหัสเฉพาะของผลิตภัณฑ์หรือวัสดุที่กำลังดำเนินการ. | ||
| คำอธิบาย หมายเลขวัสดุ ซึ่งมักเรียกว่า SKU คือรหัสเฉพาะของผลิตภัณฑ์แต่ละรายการใน SAP โดยเชื่อมโยงกิจกรรมในกระบวนการกับสินค้าจริงหรือสินค้าดิจิทัลที่ผลิต จัดซื้อ หรือจัดส่ง. แอตทริบิวต์นี้สำคัญต่อการวิเคราะห์ตามผลิตภัณฑ์ ช่วยระบุว่าผลิตภัณฑ์บางรายการมีแนวโน้มเกิดปัญหาคุณภาพ การผลิตล่าช้า หรือสินค้าขาดสต็อกมากกว่ารายการอื่นหรือไม่ คุณสามารถกรองแดชบอร์ดตามวัสดุเพื่อวิเคราะห์ประสิทธิภาพของกลุ่มผลิตภัณฑ์ที่ต้องการได้. เหตุผลที่สำคัญ ช่วยวิเคราะห์ระดับผลิตภัณฑ์ เพื่อดูว่าปัญหาในกระบวนการ เช่น ความล่าช้าหรือคุณภาพไม่ผ่าน กระจุกตัวอยู่ที่วัสดุบางรายการหรือไม่. แหล่งข้อมูล ดูได้จากตารางระดับรายการของเอกสารส่วนใหญ่ เช่น VBAP สำหรับคำสั่งขาย, EKPO สำหรับใบสั่งซื้อ และ LIPS สำหรับเอกสารส่งมอบ โดยทั่วไปฟิลด์นี้ใช้ชื่อ MATNR. ตัวอย่าง FG-100-ARM-2034-BSA-5500 | |||
| ชื่อผู้ขนส่ง CarrierName | ชื่อบริษัทขนส่งหรือผู้รับจัดการขนส่งสินค้าที่รับผิดชอบการขนส่ง. | ||
| คำอธิบาย ชื่อผู้ขนส่งระบุผู้ให้บริการโลจิสติกส์ที่รับผิดชอบขนส่งสินค้าระหว่างสถานที่ต่างๆ เช่น จากคลังสินค้าไปยังลูกค้า. แอตทริบิวต์นี้จำเป็นต่อแดชบอร์ดวิเคราะห์ระยะเวลารอบการขนส่ง ช่วยเปรียบเทียบเวลาขนส่ง ต้นทุน และความน่าเชื่อถือของผู้ขนส่งแต่ละราย เพื่อวางแผนโลจิสติกส์และเลือกผู้ขนส่งได้เหมาะสมยิ่งขึ้น. เหตุผลที่สำคัญ ช่วยวิเคราะห์ประสิทธิภาพแยกตามผู้ให้บริการขนส่ง ซึ่งเป็นข้อมูลสำคัญในการปรับปรุงต้นทุนโลจิสติกส์และระยะเวลาส่งมอบ. แหล่งข้อมูล รหัสผู้ขนส่ง (ตัวแทนรับจัดการขนส่ง) จัดเก็บอยู่ในเอกสารการขนส่ง เช่น ตาราง VTTK (ส่วนหัวการขนส่ง) ส่วนชื่อดึงจากตารางข้อมูลหลัก เช่น LFA1. ตัวอย่าง DHLFedExMaersk Logistics | |||
| ปริมาณสินค้าในคำสั่งซื้อ OrderQuantity | จำนวนวัสดุในรายการสินค้าของคำสั่งซื้อ. | ||
| คำอธิบาย แอตทริบิวต์นี้ระบุจำนวนหน่วยของวัสดุที่ขอในรายการสินค้าของคำสั่งขายหรือใบสั่งซื้อ ใช้แสดงปริมาณของแต่ละธุรกรรม. การวิเคราะห์ตามปริมาณช่วยจัดลำดับความสำคัญของคำสั่งซื้อปริมาณมาก ซึ่งอาจส่งผลต่อธุรกิจมากกว่า นอกจากนี้ยังใช้ปรับมาตรฐานตัวชี้วัดอื่น เช่น คำนวณต้นทุนต่อหน่วย หรือดูว่าขนาดคำสั่งซื้อส่งผลต่อเวลาที่ใช้ดำเนินการอย่างไร. เหตุผลที่สำคัญ แสดงบริบทด้านปริมาณของธุรกรรม ช่วยวิเคราะห์ผลกระทบและแบ่งกลุ่มเคสตามขนาด. แหล่งข้อมูล ดูได้จากตารางระดับรายการ เช่น MENGE ใน EKPO (ใบสั่งซื้อ) หรือ KWMENG ใน VBAP (คำสั่งขาย). ตัวอย่าง 100500025 | |||
| เป็นการทำงานซ้ำหรือไม่ IsRework | ค่าสถานะที่ระบุว่ากิจกรรมหรือชุดกิจกรรมเป็นการทำงานซ้ำหรือไม่. | ||
| คำอธิบาย แอตทริบิวต์แบบบูลีนนี้ระบุกิจกรรมที่ทำซ้ำจากขั้นตอนก่อนหน้าในกระบวนการ ซึ่งบ่งชี้ว่ามีการแก้ไขหรือทำงานซ้ำ ตัวอย่างเช่น หากกิจกรรม 'ตรวจสอบคุณภาพ' ตามด้วยขั้นตอน 'สร้างคำสั่งผลิต' แล้วมี 'ตรวจสอบคุณภาพ' อีกครั้ง การตรวจสอบครั้งที่สองอาจถูกระบุว่าเป็นการทำงานซ้ำ. การระบุงานที่ต้องทำซ้ำช่วยให้เข้าใจความไม่มีประสิทธิภาพและต้นทุนแฝงของกระบวนการ ค่าสถานะนี้ช่วยวัดความถี่และผลกระทบของวงจรการทำงานซ้ำ ใช้คำนวณ KPI อัตราข้อผิดพลาดในการดำเนินการตามคำสั่งซื้อ และชี้จุดที่ควรปรับปรุงกระบวนการ. เหตุผลที่สำคัญ ช่วยวัดความไม่มีประสิทธิภาพของกระบวนการ โดยระบุและนับกิจกรรมที่อยู่ในวงจรการทำงานซ้ำได้อย่างชัดเจน. แหล่งข้อมูล โดยทั่วไปจะคำนวณภายในเครื่องมือ process mining ด้วยการค้นหาลำดับกิจกรรมที่เกิดซ้ำในเคสเดียวกัน. ตัวอย่าง truefalse | |||
| เวลาสิ้นสุด EndTime | เวลาที่ระบุว่ากิจกรรมเสร็จสิ้น ใช้คำนวณเวลาที่ใช้ดำเนินการ. | ||
| คำอธิบาย เวลาสิ้นสุดระบุว่ากิจกรรมหนึ่งเสร็จเมื่อใด ส่วนเวลาเริ่มต้น (EventTime) ระบุว่ากิจกรรมเริ่มเมื่อใด การมีเวลาสิ้นสุดช่วยให้ทราบว่ากิจกรรมใช้เวลาดำเนินการนานเท่าใด โดยเฉพาะกิจกรรมที่ไม่ได้เกิดขึ้นทันที. การวิเคราะห์ที่มีทั้งเวลาเริ่มต้นและเวลาสิ้นสุดช่วยวัดเวลาทำงานและเวลารอได้อย่างแม่นยำ ทำให้แยกเวลาที่ใช้ลงมือทำงานออกจากเวลาที่รอขั้นตอนถัดไป ซึ่งเป็นข้อมูลสำคัญในการหาโอกาสเพิ่มประสิทธิภาพ. เหตุผลที่สำคัญ ช่วยคำนวณเวลาที่ใช้ดำเนินกิจกรรมได้อย่างแม่นยำ และแยกเวลาทำงานที่สร้างคุณค่าออกจากเวลารอ. แหล่งข้อมูล อนุมานได้จากการเปลี่ยนสถานะใน SAP เช่น เวลาเริ่มต้นคือเวลาที่สถานะเปลี่ยนเป็น 'กำลังดำเนินการ' และเวลาสิ้นสุดคือเวลาที่เปลี่ยนเป็น 'เสร็จสมบูรณ์' ในตารางอย่าง JEST/JCDS สำหรับเหตุการณ์ที่เกิดขึ้นทันที EndTime อาจเท่ากับ StartTime. ตัวอย่าง 2023-04-15T11:30:00Z2023-04-18T14:05:00Z2023-04-22T09:00:00Z | |||
| ส่งมอบล่าช้าหรือไม่ IsLateDelivery | ค่าสถานะแบบบูลีนที่ระบุว่าผู้จัดจำหน่ายส่งสินค้าหลังวันที่ขอให้ส่งมอบหรือไม่. | ||
| คำอธิบาย ค่าสถานะที่คำนวณนี้ระบุอย่างง่ายว่าการส่งมอบตรงเวลาหรือไม่ โดยเปรียบเทียบเวลาของกิจกรรม 'บันทึกรับสินค้าสำหรับ PO แล้ว' กับแอตทริบิวต์ 'วันที่ขอให้ส่งมอบ'. แอตทริบิวต์นี้ช่วยให้สร้างแดชบอร์ดและ KPI ด้านประสิทธิภาพของผู้จัดจำหน่ายได้ง่ายขึ้น คุณสามารถกรองและรวบรวมข้อมูลอย่างรวดเร็วเพื่อคำนวณอัตราการส่งมอบตรงเวลาของผู้จัดจำหน่าย และระบุผู้จัดจำหน่าย วัสดุ หรือภูมิภาคที่มีความล่าช้าบ่อยที่สุด. เหตุผลที่สำคัญ ช่วยวิเคราะห์ประสิทธิภาพของผู้จัดจำหน่ายได้ง่ายขึ้น โดยระบุผลของการส่งมอบแต่ละรายการอย่างชัดเจนว่าเป็นไปตามกำหนดหรือไม่ ซึ่งจำเป็นต่อ KPI การส่งมอบตรงเวลา. แหล่งข้อมูล ฟิลด์นี้คำนวณจากเงื่อนไข: IF ('Goods Receipt For PO Posted'.EventTime > PurchaseOrder.RequestedDeliveryDate) THEN True ELSE False. ตัวอย่าง truefalse | |||
| หมายเลขคำสั่งขาย SalesOrderNumber | รหัสเฉพาะของเอกสารคำสั่งขาย (SO). | ||
| คำอธิบาย หมายเลขคำสั่งขายคือหมายเลขเอกสารอย่างเป็นทางการที่ยืนยันการขายให้ลูกค้า และเป็นรหัสสำคัญในส่วนกระบวนการตั้งแต่รับคำสั่งซื้อจนถึงรับชำระเงินของซัพพลายเชน. แอตทริบิวต์นี้สำคัญต่อการติดตามการดำเนินการตามคำสั่งซื้อของลูกค้าแต่ละรายการ ช่วยเชื่อมคำขอเริ่มต้นของลูกค้ากับกิจกรรมที่ตามมาทั้งหมด เช่น การส่งมอบและการออกใบแจ้งหนี้ เพื่อใช้วิเคราะห์เวลานำในการดำเนินการตามคำสั่งซื้อ. เหตุผลที่สำคัญ ใช้เป็นรหัสสำคัญของกระบวนการย่อยในการดำเนินการตามคำสั่งซื้อ โดยเชื่อมโยงความต้องการของลูกค้ากับงานโลจิสติกส์และการชำระบัญชีทางการเงิน. แหล่งข้อมูล ดูได้จากตารางส่วนหัวคำสั่งขาย VBAK และตารางรายการ VBAP โดยฟิลด์ใช้ชื่อ VBELN. ตัวอย่าง 100023451000234610002347 | |||
| หมายเลขใบสั่งซื้อ PurchaseOrderNumber | รหัสเฉพาะของเอกสารใบสั่งซื้อ (PO). | ||
| คำอธิบาย หมายเลขใบสั่งซื้อคือหมายเลขเอกสารอย่างเป็นทางการที่ใช้สั่งซื้อวัสดุจากผู้จัดจำหน่าย และเป็นรหัสสำคัญในส่วนการจัดซื้อของซัพพลายเชน. แอตทริบิวต์นี้ช่วยเจาะลึกกระบวนการจัดซื้อ ใช้ในแดชบอร์ดระยะเวลารอบการจัดซื้อแบบครบวงจร และคำนวณ KPI อัตราการส่งมอบตรงเวลาของผู้จัดจำหน่าย โดยเชื่อมโยงกิจกรรมการขอซื้อ การสั่งซื้อ การรับสินค้า และการชำระเงินเข้าด้วยกัน. เหตุผลที่สำคัญ ใช้เป็นรหัสสำคัญสำหรับเจาะลึกลงหนึ่งระดับในกระบวนการย่อยด้านการจัดซื้อและเชื่อมโยงเหตุการณ์จัดซื้อที่เกี่ยวข้อง. แหล่งข้อมูล ดูได้จากตารางส่วนหัวใบสั่งซื้อ EKKO และตารางรายการ EKPO โดยฟิลด์ใช้ชื่อ EBELN. ตัวอย่าง 450007819245000781934500078194 | |||
กิจกรรมการจัดการห่วงโซ่อุปทาน
| กิจกรรม | คำอธิบาย | ||
|---|---|---|---|
| บันทึกการตัดจ่ายสินค้าแล้ว | กิจกรรมนี้หมายถึงการนำสินค้าออกจากคลังทั้งในทางกฎหมายและทางกายภาพ ทำให้สินค้าคงคลังลดลงและบันทึกต้นทุนขาย พร้อมยืนยันอย่างเป็นทางการว่ามีการจัดส่งคำสั่งซื้อแล้ว. | ||
| เหตุผลที่สำคัญ เหตุการณ์สำคัญนี้เป็นจุดเริ่มต้นของช่วงที่สินค้าอยู่ระหว่างขนส่ง และเป็นจุดยืนยันชัดเจนว่าสินค้าออกจากการครอบครองของบริษัทเพื่อจัดส่งแล้ว. แหล่งข้อมูล เหตุการณ์นี้เกิดขึ้นอย่างชัดเจนและทำให้มีการสร้างเอกสารวัสดุ ระบบบันทึกเวลาไว้ในส่วนหัวเอกสารวัสดุ (MKPF, ฟิลด์ BUDAT) และอัปเดตสถานะการเคลื่อนย้ายสินค้าในเอกสารส่งมอบ (LIKP, ฟิลด์ WBSTK). บันทึก ใช้วันที่ลงบัญชี (MKPF-BUDAT) จากเอกสารวัสดุการตัดจ่ายสินค้าที่เชื่อมโยงกับการส่งมอบขาออก. ประเภทเหตุการณ์ explicit | |||
| บันทึกรับสินค้าตามใบสั่งซื้อ | หมายถึงการรับวัตถุดิบหรือสินค้าจากซัพพลายเออร์ตามใบสั่งซื้อจริง โดยบันทึกเหตุการณ์นี้เมื่อสินค้ามาถึงคลังสินค้าหรือโรงงาน. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้ทำให้ขั้นตอนการส่งมอบจากซัพพลายเออร์ในรอบการจัดซื้อเสร็จสมบูรณ์ มีความสำคัญต่อการคำนวณอัตราการส่งมอบตรงเวลาของซัพพลายเออร์และทำความเข้าใจผลการดำเนินงานด้านโลจิสติกส์ขาเข้า. แหล่งข้อมูล ระบบบันทึกเหตุการณ์นี้ไว้อย่างชัดเจนผ่านการลงรายการเอกสารวัสดุ เวลาของเหตุการณ์อยู่ในตารางส่วนหัวเอกสารวัสดุ (MKPF, ฟิลด์ BUDAT) ส่วนการเชื่อมโยงกับใบสั่งซื้ออยู่ในตารางรายการ (MSEG). บันทึก ใช้วันที่ลงรายการ (MKPF-BUDAT) จากเอกสารวัสดุที่เชื่อมโยงกับใบสั่งซื้อ. ประเภทเหตุการณ์ explicit | |||
| ผลิตสินค้าเสร็จ | กิจกรรมนี้หมายถึงการยืนยันว่าผลิตสินค้าเสร็จแล้ว โดยทั่วไปจะบันทึกเป็นการรับสินค้าจากใบสั่งผลิต ทำให้สินค้าสำเร็จรูปเข้าสู่สินค้าคงคลัง. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้เป็นจุดสิ้นสุดของรอบการผลิต เวลาตั้งแต่สร้างใบสั่งผลิตจนถึงเหตุการณ์นี้คือระยะเวลาการผลิต ซึ่งเป็นตัวชี้วัดสำคัญของประสิทธิภาพการผลิต. แหล่งข้อมูล บันทึกเหตุการณ์นี้ได้โดยตรงผ่านการลงรายการเอกสารวัสดุ (รับสินค้าจากใบสั่งผลิต) หรืออนุมานจากการยืนยันขั้นสุดท้ายของใบสั่งผลิต (ตาราง AFRU) หรือการเปลี่ยนสถานะเป็น 'ส่งมอบแล้ว'. บันทึก อนุมานจากวันที่ลงรายการของเอกสารวัสดุรับสินค้าครั้งสุดท้ายสำหรับใบสั่งผลิต หรือจากการเปลี่ยนสถานะ. ประเภทเหตุการณ์ inferred | |||
| ยืนยันหลักฐานการส่งมอบแล้ว | หมายถึงการยืนยันอย่างเป็นทางการจากลูกค้าหรือผู้ขนส่งว่าสินค้าได้รับครบตามที่ระบุ โดยมักบันทึกด้วยการอัปเดตข้อมูล POD ในรายการส่งมอบขาออก. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้เป็นจุดสิ้นสุดที่ชัดเจนของกระบวนการดำเนินการตามคำสั่งซื้อ ข้อมูลนี้สำคัญต่อการออกใบแจ้งหนี้ การจัดการข้อโต้แย้ง และการวัดช่วงสุดท้ายของรอบการส่งมอบ. แหล่งข้อมูล เหตุการณ์นี้บันทึกไว้อย่างชัดเจน วันที่ยืนยันการส่งมอบจะอยู่ในตารางส่วนหัวการส่งมอบ (LIKP, ฟิลด์ PODAT) หรือตาราง POD ที่เกี่ยวข้อง (VLPOD). บันทึก ใช้วันที่ยืนยันการส่งมอบ (LIKP-PODAT) จากเอกสารส่งมอบ. ประเภทเหตุการณ์ explicit | |||
| สร้างคำสั่งซื้อขาย | กิจกรรมนี้หมายถึงการสร้างคำสั่งซื้อขายใหม่ ซึ่งบันทึกคำขอซื้อสินค้าของลูกค้าอย่างเป็นทางการ ระบบจะบันทึกเหตุการณ์นี้เมื่อผู้ใช้บันทึกเอกสารคำสั่งซื้อขายใหม่. | ||
| เหตุผลที่สำคัญ นี่คือจุดเริ่มต้นหลักของกระบวนการตั้งแต่รับคำสั่งซื้อจนถึงรับชำระเงิน การวิเคราะห์เวลาตั้งแต่เหตุการณ์นี้ไปจนถึงเหตุการณ์อื่นช่วยให้เห็นระยะเวลาการดำเนินการตามคำสั่งซื้อโดยรวมและระบุความล่าช้าในช่วงแรก. แหล่งข้อมูล ระบบบันทึกเหตุการณ์นี้ไว้อย่างชัดเจน โดยดูได้จากเอกสารการเปลี่ยนแปลงของตารางคำสั่งซื้อขาย (CDHDR/CDPOS) หรือใช้เวลาที่สร้างในตารางส่วนหัวคำสั่งซื้อขาย (VBAK, ฟิลด์ ERDAT). บันทึก ใช้วันที่สร้าง (VBAK-ERDAT) และเวลา (VBAK-ERZET) ของเอกสารคำสั่งซื้อขาย. ประเภทเหตุการณ์ explicit | |||
| ออกใบสั่งซื้อ | หมายถึงการสร้างและออกใบสั่งซื้ออย่างเป็นทางการให้ซัพพลายเออร์ภายนอก เพื่อจัดหาวัสดุที่จำเป็น ขั้นตอนนี้เปลี่ยนใบขอซื้อให้เป็นข้อผูกพันทางกฎหมายกับผู้ขาย. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้เป็นหมุดหมายสำคัญสำหรับวัดระยะเวลานำส่งของซัพพลายเออร์และรอบเวลาจัดซื้อ อีกทั้งเป็นจุดเริ่มต้นสำหรับประเมินผลงานการส่งมอบตรงเวลาของซัพพลายเออร์. แหล่งข้อมูล ระบบบันทึกเหตุการณ์นี้ไว้อย่างชัดเจนเมื่อสร้างใบสั่งซื้อ โดยจัดเก็บเวลาที่สร้างในตารางส่วนหัวใบสั่งซื้อ (EKKO, ฟิลด์ AEDAT). บันทึก ใช้วันที่สร้างเอกสาร (EKKO-AEDAT) ของใบสั่งซื้อ. ประเภทเหตุการณ์ explicit | |||
| ขนถ่ายสินค้าถึงปลายทางแล้ว | กิจกรรมนี้หมายถึงการขนถ่ายสินค้าจริง ณ สถานที่ของลูกค้า SAP อาจไม่ได้บันทึกเหตุการณ์นี้ไว้อย่างชัดเจน จึงมักต้องอนุมานจากข้อมูลของผู้ขนส่งหรือเหตุการณ์ที่เกิดขึ้นภายหลัง. | ||
| เหตุผลที่สำคัญ เหตุการณ์นี้เป็นจุดสิ้นสุดของช่วงการขนส่ง ระยะเวลาตั้งแต่ตัดจ่ายสินค้าจนถึงจุดนี้คือเวลาขนส่ง ซึ่งเป็นข้อมูลสำคัญสำหรับการปรับปรุงงานโลจิสติกส์. แหล่งข้อมูล โดยทั่วไป ERP หลักจะไม่ได้บันทึกเหตุการณ์นี้ไว้อย่างชัดเจน อาจอนุมานจากข้อความ EDI ของผู้ขนส่ง ข้อมูลจากโมดูล Transportation Management (TM) หรือเวลาที่ระบุในเอกสารยืนยันการส่งมอบ หากมีข้อมูลดังกล่าว. บันทึก อนุมานจากการอัปเดตสถานะของผู้ขนส่ง เช่น EDI 214 หรือใช้เวลาจากเอกสารยืนยันการส่งมอบเป็นค่าประมาณใกล้เคียง. ประเภทเหตุการณ์ inferred | |||
| ดำเนินการตรวจสอบคุณภาพ | หมายถึงการตรวจสอบคุณภาพสินค้าที่ผลิตเสร็จแล้ว โดยบันทึกผลการตรวจว่า ผ่านหรือไม่ผ่าน ไว้ในการตัดสินใจการใช้งาน. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้สำคัญต่อการติดตามคุณภาพสินค้าและระบุปัญหาในการผลิต อัตราการปฏิเสธสินค้าสูงหรือเวลาตรวจสอบนานอาจเป็นคอขวดสำคัญ. แหล่งข้อมูล ระบบบันทึกเหตุการณ์นี้ไว้อย่างชัดเจนเมื่อมีการตัดสินใจการใช้งานสำหรับล็อตตรวจสอบคุณภาพ โดยวันที่ตัดสินใจอยู่ในตาราง QALS (ฟิลด์ PASTRTERM) หรือ QAVE. บันทึก ใช้เวลาที่บันทึกการตัดสินใจการใช้งานสำหรับล็อตตรวจสอบคุณภาพ (ตาราง QALS/QAVE). ประเภทเหตุการณ์ explicit | |||
| ตรวจสอบความพร้อมของสินค้าคงคลัง | หมายถึงการตรวจสอบโดยระบบหรือผู้ใช้ เพื่อดูว่ามีสินค้าที่ร้องขอในสต็อกเพียงพอสำหรับคำสั่งซื้อขายหรือไม่ โดยมักเป็นขั้นตอนอัตโนมัติระหว่างสร้างคำสั่งซื้อขาย แต่อาจไม่มีการบันทึกเป็นเหตุการณ์แยกต่างหาก. | ||
| เหตุผลที่สำคัญ การทำความเข้าใจเวลาระหว่างการสั่งซื้อกับการตรวจสอบนี้ รวมถึงผลการตรวจสอบ ช่วยวิเคราะห์ผลกระทบของระดับสินค้าคงคลังต่อเวลาการดำเนินการตามคำสั่งซื้อ ความล่าช้าในขั้นตอนนี้มักทำให้ต้องจัดซื้อหรือผลิตสินค้าเพิ่มเติม. แหล่งข้อมูล โดยทั่วไปไม่มีการบันทึกเป็นเหตุการณ์โดยตรง แต่อาจอนุมานได้จากการสร้างบรรทัดกำหนดส่งรายการแรกที่ยืนยันแล้วในตารางรายการคำสั่งซื้อขาย (VBEP) หรือจากการเปลี่ยนสถานะภายในรายการคำสั่งซื้อ. บันทึก อนุมานจากการอัปเดตสถานะการยืนยันของบรรทัดกำหนดส่งในคำสั่งซื้อขาย (ตาราง VBEP). ประเภทเหตุการณ์ inferred | |||
| สร้างใบขอซื้อ | กิจกรรมนี้หมายถึงการสร้างคำขอภายในเพื่อจัดซื้อสินค้าหรือวัตถุดิบที่จำเป็น มักเกิดขึ้นเมื่อสินค้าคงคลังไม่เพียงพอต่อการดำเนินการตามคำสั่งซื้อขาย หรือมีปริมาณต่ำกว่าจุดสั่งซื้อซ้ำ. | ||
| เหตุผลที่สำคัญ นี่คือขั้นตอนแรกของรอบการจัดซื้อ การติดตามเวลาที่สร้างใบขอซื้อช่วยระบุความล่าช้าในการเริ่มจัดซื้อและสนับสนุนการวิเคราะห์กระบวนการจัดซื้อตั้งแต่ต้นจนจบ. แหล่งข้อมูล ระบบบันทึกเหตุการณ์นี้ไว้อย่างชัดเจน โดยบันทึกเวลาที่สร้างในตารางส่วนหัวใบขอซื้อ (EBAN, ฟิลด์ BADAT). บันทึก ใช้วันที่สร้าง (EBAN-BADAT) ของเอกสารใบขอซื้อ. ประเภทเหตุการณ์ explicit | |||
| สร้างใบแจ้งหนี้ลูกค้าแล้ว | กิจกรรมนี้หมายถึงการสร้างเอกสารเรียกเก็บเงินจากลูกค้าตามสินค้า或บริการที่ส่งมอบ และเป็นจุดเริ่มต้นของขั้นตอนสุดท้ายในการชำระบัญชีทางการเงินของกระบวนการ. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้เป็นข้อมูลสำคัญสำหรับวิเคราะห์ระยะเวลาของรอบการเรียกเก็บเงิน หากการออกใบแจ้งหนี้ล่าช้าหลังยืนยันการส่งมอบ อาจส่งผลเสียต่อกระแสเงินสด. แหล่งข้อมูล เหตุการณ์นี้บันทึกไว้อย่างชัดเจน เวลาที่สร้างเอกสารจะอยู่ในตารางส่วนหัวเอกสารเรียกเก็บเงิน (VBRK, ฟิลด์ ERDAT). บันทึก ใช้วันที่สร้าง (VBRK-ERDAT) จากส่วนหัวเอกสารเรียกเก็บเงิน. ประเภทเหตุการณ์ explicit | |||
| สร้างใบสั่งผลิต | หมายถึงการสร้างใบสั่งผลิตเพื่อผลิตสินค้าสำเร็จรูปตามที่ต้องการในคำสั่งซื้อขาย นี่คือจุดเริ่มต้นอย่างเป็นทางการของกระบวนการผลิตภายในองค์กร. | ||
| เหตุผลที่สำคัญ การสร้างใบสั่งผลิตเป็นจุดเริ่มต้นของระยะเวลาการผลิต การวิเคราะห์ขั้นตอนนี้ช่วยระบุความล่าช้าระหว่างสัญญาณความต้องการกับการเริ่มผลิต. แหล่งข้อมูล ระบบบันทึกเหตุการณ์นี้ไว้อย่างชัดเจน โดยบันทึกวันที่สร้างในตารางส่วนหัวใบสั่งผลิต (AUFK, ฟิลด์ ERDAT). บันทึก ใช้วันที่สร้าง (AUFK-ERDAT) จากตารางส่วนหัวใบสั่งผลิต. ประเภทเหตุการณ์ explicit | |||
| สร้างเอกสารการขนส่งแล้ว | หมายถึงการสร้างเอกสารการขนส่ง ซึ่งใช้รวมการส่งมอบตั้งแต่หนึ่งรายการขึ้นไปเพื่อวางแผนการขนส่ง เอกสารนี้มีรายละเอียดเกี่ยวกับผู้ขนส่ง เส้นทาง และรูปแบบการขนส่ง. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้เป็นจุดเริ่มต้นของการวางแผนการขนส่งอย่างเป็นทางการ การวิเคราะห์เวลาตั้งแต่ตัดจ่ายสินค้าจนถึงการขนส่งเสร็จสิ้นช่วยให้เห็นประสิทธิภาพของกระบวนการขนส่ง. แหล่งข้อมูล เหตุการณ์นี้บันทึกไว้อย่างชัดเจนในตารางส่วนหัวการขนส่ง (VTTK, ฟิลด์ ERDAT) ซึ่งเป็นส่วนหนึ่งของโมดูล LE-TRA ที่บางองค์กรอาจไม่ได้ใช้งาน. บันทึก ใช้วันที่สร้าง (VTTK-ERDAT) จากส่วนหัวเอกสารการขนส่ง. ประเภทเหตุการณ์ explicit | |||
| สร้างเอกสารส่งมอบขาออก | หมายถึงการสร้างเอกสารส่งมอบ ซึ่งอนุญาตให้หยิบและจัดส่งสินค้าให้ลูกค้า กิจกรรมนี้เป็นจุดเปลี่ยนจากการจัดการคำสั่งซื้อไปสู่การดำเนินงานด้านโลจิสติกส์. | ||
| เหตุผลที่สำคัญ นี่คือขั้นตอนสำคัญที่เริ่มกระบวนการส่งมอบสินค้าจริง ความล่าช้าระหว่างการสร้างคำสั่งซื้อกับการสร้างเอกสารส่งมอบอาจบ่งชี้ถึงปัญหาด้านการวางแผนหรือความพร้อมของสินค้า. แหล่งข้อมูล ระบบบันทึกเหตุการณ์นี้ไว้อย่างชัดเจน โดยบันทึกเวลาที่สร้างในตารางส่วนหัวเอกสารส่งมอบ (LIKP, ฟิลด์ ERDAT). บันทึก ใช้วันที่สร้าง (LIKP-ERDAT) และเวลา (LIKP-ERZET) จากส่วนหัวเอกสารส่งมอบ. ประเภทเหตุการณ์ explicit | |||
| หยิบสินค้าเสร็จ | กิจกรรมนี้หมายถึงการหยิบสินค้าจากคลังสินค้าเพื่อเตรียมส่งมอบขาออกเสร็จสมบูรณ์ ในหลายระบบจะยืนยันเมื่อมีการอัปเดตสถานะการหยิบของเอกสารส่งมอบ. | ||
| เหตุผลที่สำคัญ การหยิบสินค้าที่มีประสิทธิภาพสำคัญต่อปริมาณงานที่คลังสินค้ารองรับได้ การติดตามกิจกรรมนี้ช่วยระบุคอขวดในการปฏิบัติงานคลังสินค้าและวัดผลการหยิบสินค้า. แหล่งข้อมูล เหตุการณ์นี้มักไม่ได้เกิดขึ้นเป็นรายการแยกต่างหาก แต่อนุมานได้จากการเปลี่ยนสถานะ ระบบจะบันทึกเมื่อสถานะการหยิบสินค้าในตารางรายการส่งมอบ (LIPS, ฟิลด์ KOSTA) เปลี่ยนเป็น 'C' (ดำเนินการครบแล้ว). บันทึก อนุมานจากเอกสารการเปลี่ยนแปลง เมื่อสถานะการหยิบสินค้า (LIPS-KOSTA) เปลี่ยนเป็นหยิบสินค้าครบแล้ว. ประเภทเหตุการณ์ inferred | |||
คู่มือการดึงข้อมูล
ขั้นตอน
- ข้อกำหนดเบื้องต้น: ตรวจสอบว่าคุณมีผู้ใช้ที่ได้รับสิทธิ์เพียงพอในการเข้าถึง SAP S/4HANA Core Data Services (CDS) view ที่จำเป็น โดยทั่วไปทีมรักษาความปลอดภัย SAP จะกำหนดบทบาทเฉพาะให้ นอกจากนี้คุณต้องมี SQL client เช่น DBeaver หรือ SAP HANA Studio ที่เชื่อมต่อกับฐานข้อมูล SAP HANA ได้.
- เชื่อมต่อฐานข้อมูล: ตั้งค่า SQL client ให้เชื่อมต่อกับฐานข้อมูล SAP S/4HANA โดยต้องใช้ชื่อโฮสต์เซิร์ฟเวอร์ฐานข้อมูล พอร์ต (เช่น 3xx15 โดย xx คือหมายเลข instance) ชื่อผู้ใช้ฐานข้อมูล และรหัสผ่าน.
- เตรียม SQL query: คัดลอก SQL query ฉบับเต็มจากส่วน query ในเอกสารนี้ไปวางในตัวแก้ไขของ SQL client โดย query นี้ออกแบบมาเพื่อดึงกิจกรรมทั้งหมดที่ระบุจากโมดูลโลจิสติกส์และการขายต่างๆ.
- กำหนดพารามิเตอร์การดึงข้อมูล: ก่อนเรียกใช้ query ให้ค้นหาเงื่อนไขตัวแทนในส่วน
WHEREของแต่ละ subquery แล้วแทนที่'YourCompanyCode'ด้วยรหัสบริษัทที่ต้องการวิเคราะห์ และปรับตัวแทนช่วงวันที่ เช่น'YYYY-MM-DD'เพื่อกำหนดช่วงเวลาที่ต้องการดึงข้อมูล. - เรียกใช้ query: เรียกใช้ SQL script ฉบับเต็ม ระยะเวลาประมวลผลขึ้นอยู่กับช่วงวันที่ที่เลือกและปริมาณข้อมูลในระบบ แนะนำให้เรียกใช้ในช่วงที่มีการใช้งานน้อย เพื่อลดภาระของระบบ.
- ตรวจสอบผลลัพธ์เบื้องต้น: เมื่อ query ทำงานเสร็จ ให้ตรวจดูผลลัพธ์ใน SQL client คร่าวๆ ตรวจสอบว่ามีจำนวนแถวเหมาะสม คอลัมน์อย่าง LogisticsOrder, ActivityName และ EventTime มีข้อมูล และพบชื่อกิจกรรมหลายรายการ.
- ส่งออกข้อมูลเป็น CSV: ส่งออกผลลัพธ์ทั้งหมดจาก SQL client เป็นไฟล์ CSV แล้วเลือกการเข้ารหัส UTF-8 เพื่อป้องกันปัญหาอักขระพิเศษ.
- จัดรูปแบบเพื่ออัปโหลด: ตรวจสอบว่าชื่อหัวคอลัมน์ในไฟล์ CSV ตรงกับชื่อแอตทริบิวต์ที่ต้องใช้ในการนำเข้าทุกประการ เช่น
LogisticsOrder,ActivityNameและEventTimeหากใช้ SQL query ตามที่ให้มา ก็ไม่จำเป็นต้องแปลงข้อมูลเพิ่มเติม.
การกำหนดค่า
- ข้อกำหนดเบื้องต้น: ต้องเข้าถึงฐานข้อมูล SAP HANA ที่เกี่ยวข้อง ผู้ใช้ฐานข้อมูลต้องมีสิทธิ์
SELECTใน CDS view ทั้งหมดที่อ้างถึงใน query รวมถึง I_SalesOrderItem, I_PurchaseOrderItem, I_OutboundDeliveryItem, I_MaterialDocumentItem, I_ProductionOrder, I_QualityInspection, I_Shipment และ I_BillingDocumentItem. - การกรองช่วงวันที่: query ที่ให้มามีตัวแทนสำหรับตัวกรองช่วงวันที่ ซึ่งโดยทั่วไปใช้ฟิลด์วันที่สร้าง (
CreationDateหรือDocumentDate) สำหรับการวิเคราะห์เบื้องต้น แนะนำให้ใช้ช่วง 3 ถึง 6 เดือน เพื่อให้ได้ชุดข้อมูลที่เป็นตัวแทนโดยไม่เพิ่มภาระให้ระบบมากเกินไป. - ตัวกรองธุรกิจหลัก: ควรกรองข้อมูลตามหน่วยงานที่เกี่ยวข้อง เพื่อให้ผลลัพธ์ตรงกับขอบเขตการวิเคราะห์ query ตั้งค่าตัวแทน
CompanyCodeไว้แล้ว คุณอาจเพิ่มตัวกรองSalesOrganization,DistributionChannelหรือPlantได้ตามขอบเขตการวิเคราะห์. - ข้อควรพิจารณาด้านประสิทธิภาพ: query นี้ซับซ้อนและเชื่อม CDS view ขนาดใหญ่หลายรายการ การประมวลผลอาจใช้ทรัพยากรระบบมาก ควรกำหนดเวลาการดึงข้อมูลนอกเวลาทำการ หากชุดข้อมูลมีขนาดใหญ่มาก ให้แบ่งเรียกใช้ query เป็นชุดย่อยตามเดือนตามลำดับ.
ตัวอย่างคำค้น sql
WITH SalesOrderLink AS (
SELECT DISTINCT
sd.SalesDocument AS SalesOrder,
pr.PurchaseRequisition AS PurchaseRequisition,
po.PurchaseOrder AS PurchaseOrder,
od.DeliveryDocument AS OutboundDelivery,
bd.BillingDocument AS BillingDocument
FROM I_SalesDocItemProcessFlow AS pf
LEFT JOIN I_SalesDocumentItem AS sd ON pf.PrecedingDocument = sd.SalesDocument AND pf.PrecedingDocumentItem = sd.SalesDocumentItem
LEFT JOIN I_PurchaseRequisitionItem AS pr ON pf.SubsequentDocument = pr.PurchaseRequisition AND pf.SubsequentDocumentItem = pr.PurchaseRequisitionItem
LEFT JOIN I_PurchaseOrderItem AS po ON pf.SubsequentDocument = po.PurchaseOrder AND pf.SubsequentDocumentItem = po.PurchaseOrderItem
LEFT JOIN I_OutboundDeliveryItem AS od ON pf.SubsequentDocument = od.DeliveryDocument AND pf.SubsequentDocumentItem = od.DeliveryDocumentItem
LEFT JOIN I_BillingDocumentItem AS bd ON pf.SubsequentDocument = bd.BillingDocument AND pf.SubsequentDocumentItem = bd.BillingDocumentItem
WHERE sd.SalesDocument IS NOT NULL
)
SELECT
so.SalesOrder AS "LogisticsOrder",
'Sales Order Created' AS "ActivityName",
so.CreationDate || ' ' || so.CreationTime AS "EventTime",
so.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
soi.Material AS "MaterialNumber",
soi.Plant AS "Plant",
soi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_SalesOrder AS so
JOIN I_SalesOrderItem AS soi ON so.SalesOrder = soi.SalesOrder
LEFT JOIN I_Customer AS cust ON so.SoldToParty = cust.Customer
WHERE so.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
so.SalesOrder AS "LogisticsOrder",
'Inventory Availability Checked' AS "ActivityName",
so.CreationDate || ' ' || so.CreationTime AS "EventTime",
so.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
soi.Material AS "MaterialNumber",
soi.Plant AS "Plant",
soi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_SalesOrder AS so
JOIN I_SalesOrderItem AS soi ON so.SalesOrder = soi.SalesOrder
LEFT JOIN I_Customer AS cust ON so.SoldToParty = cust.Customer
WHERE so.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Purchase Requisition Created' AS "ActivityName",
pr.CreationDate || ' ' || '00:00:00' AS "EventTime",
pr.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
pri.Material AS "MaterialNumber",
pri.Plant AS "Plant",
pri.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_PurchaseRequisition AS pr
JOIN I_PurchaseRequisitionItem AS pri ON pr.PurchaseRequisition = pri.PurchaseRequisition
JOIN SalesOrderLink sl ON pr.PurchaseRequisition = sl.PurchaseRequisition
WHERE pr.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND pr.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Purchase Order Issued' AS "ActivityName",
po.PurchaseOrderDate || ' ' || '00:00:00' AS "EventTime",
po.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
sup.SupplierName AS "SupplierName",
poi.Material AS "MaterialNumber",
poi.Plant AS "Plant",
poi.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_PurchaseOrder AS po
JOIN I_PurchaseOrderItem AS poi ON po.PurchaseOrder = poi.PurchaseOrder
LEFT JOIN I_Supplier AS sup ON po.Supplier = sup.Supplier
JOIN SalesOrderLink sl ON po.PurchaseOrder = sl.PurchaseOrder
WHERE po.PurchaseOrderDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND po.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Goods Receipt For PO Posted' AS "ActivityName",
md.DocumentDate || ' ' || md.CreationTime AS "EventTime",
md.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
sup.SupplierName AS "SupplierName",
mdi.Material AS "MaterialNumber",
mdi.Plant AS "Plant",
poi.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_MaterialDocumentHeader AS md
JOIN I_MaterialDocumentItem AS mdi ON md.MaterialDocument = mdi.MaterialDocument AND md.MaterialDocumentYear = mdi.MaterialDocumentYear
JOIN I_PurchaseOrderItem AS poi ON mdi.PurchaseOrder = poi.PurchaseOrder AND mdi.PurchaseOrderItem = poi.PurchaseOrderItem
LEFT JOIN I_Supplier AS sup ON poi.Supplier = sup.Supplier
JOIN SalesOrderLink sl ON poi.PurchaseOrder = sl.PurchaseOrder
WHERE md.DocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND mdi.GoodsMovementType = '101' AND mdi.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Production Order Created' AS "ActivityName",
po.CreationDate || ' ' || po.CreationTime AS "EventTime",
po.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
po.Material AS "MaterialNumber",
po.ProductionPlant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_ProductionOrder AS po
JOIN SalesOrderLink sl ON po.SalesOrder = sl.SalesOrder
WHERE po.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Goods Produced' AS "ActivityName",
md.DocumentDate || ' ' || md.CreationTime AS "EventTime",
md.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
mdi.Material AS "MaterialNumber",
mdi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_MaterialDocumentHeader AS md
JOIN I_MaterialDocumentItem AS mdi ON md.MaterialDocument = mdi.MaterialDocument AND md.MaterialDocumentYear = mdi.MaterialDocumentYear
JOIN I_ProductionOrder AS po ON mdi.ManufacturingOrder = po.ManufacturingOrder
JOIN SalesOrderLink sl ON po.SalesOrder = sl.SalesOrder
WHERE md.DocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND mdi.GoodsMovementType = '101'
UNION ALL
SELECT
qi.SalesOrder AS "LogisticsOrder",
'Quality Inspection Performed' AS "ActivityName",
qi.InspLotUsageDecisionDate || ' ' || qi.InspLotUsageDecisionTime AS "EventTime",
qi.InspLotUsageDecisionMadeByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
qi.Material AS "MaterialNumber",
qi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
qi.InspLotUsageDecisionCode AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_QualityInspection AS qi
WHERE qi.InspLotUsageDecisionDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND qi.SalesOrder IS NOT NULL
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Outbound Delivery Created' AS "ActivityName",
od.CreationDate || ' ' || od.CreationTime AS "EventTime",
od.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Picking Completed' AS "ActivityName",
od.PickingDate || ' ' || od.PickingTime AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.PickingDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallPickingStatus = 'C'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Goods Issue Posted' AS "ActivityName",
od.ActualGoodsMovementDate || ' ' || od.ActualGoodsMovementTime AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.ActualGoodsMovementDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallGoodsMovementStatus = 'C'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Shipment Created' AS "ActivityName",
sh.CreationDate || ' ' || sh.CreationTime AS "EventTime",
sh.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
NULL AS "MaterialNumber",
sh.ShippingPoint AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_Shipment AS sh
JOIN I_ShipmentDelivery AS sd ON sh.Shipment = sd.Shipment
JOIN SalesOrderLink sl ON sd.Delivery = sl.OutboundDelivery
WHERE sh.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Proof Of Delivery Confirmed' AS "ActivityName",
od.PODActualDate || ' ' || '00:00:00' AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.PODActualDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallPODStatus = 'C'
UNION ALL
SELECT
bdi.SalesDocument AS "LogisticsOrder",
'Customer Invoice Created' AS "ActivityName",
bd.BillingDocumentDate || ' ' || bd.CreationTime AS "EventTime",
bd.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
bdi.Material AS "MaterialNumber",
bdi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_BillingDocument AS bd
JOIN I_BillingDocumentItem AS bdi ON bd.BillingDocument = bdi.BillingDocument
LEFT JOIN I_Customer AS cust ON bd.SoldToParty = cust.Customer
WHERE bd.BillingDocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND bd.CompanyCode = 'YourCompanyCode' AND bdi.SalesDocument IS NOT NULL; ขั้นตอน
- ตรวจสอบว่ามีสิทธิ์อ่านโดยตรงใน SAP HANA schema ที่มีข้อมูลโลจิสติกส์ การขาย การจัดซื้อ สินค้าคงคลัง การผลิต คุณภาพ การส่งมอบ การขนส่ง หลักฐานการส่งมอบ และการเรียกเก็บเงิน ขอชื่อ schema รายละเอียดการเชื่อมต่อ และสิทธิ์จากทีม SAP Basis หรือทีมแพลตฟอร์มข้อมูล ห้ามเขียนข้อมูลลงในระบบต้นทาง.
- ตรวจสอบโมเดลข้อมูล S/4HANA ที่ใช้งานจริงในระบบเป้าหมาย โดยใช้ EKKO และ EKPO สำหรับใบสั่งซื้อ และ LIKP กับ LIPS สำหรับการส่งมอบขาออก ส่วนออบเจ็กต์อื่นต้องกำหนดค่าสำหรับใบสั่งขาย ใบขอซื้อ เอกสารวัสดุ ใบสั่งผลิต ผลการตรวจสอบคุณภาพ การขนส่ง หลักฐานการส่งมอบ และการเรียกเก็บเงิน แทนที่ตัวแทนออบเจ็กต์หรือคอลัมน์ในวงเล็บเหลี่ยมแต่ละรายการด้วยออบเจ็กต์ที่ตรวจสอบแล้วในพจนานุกรมข้อมูลของระบบ.
- กำหนดกฎเชื่อมโยง LogisticsOrder วิธีที่แนะนำคือใช้ความสัมพันธ์ของลำดับเอกสารที่ตรวจสอบแล้ว ตั้งแต่ใบสั่งขายไปยังเอกสารส่งมอบ เอกสารวัสดุ เอกสารการผลิตหรือจัดซื้อ และเอกสารเรียกเก็บเงิน หากไม่มีความสัมพันธ์โดยตรง ให้กำหนดตารางเชื่อมโยงที่มีเอกสารกำกับ หรือใช้การจับคู่ตามธุรกิจ ห้ามเชื่อมโยงเคสโดยใช้หมายเลขวัสดุหรือวันที่เพียงอย่างเดียว.
- กำหนดช่วงเวลาการดึงข้อมูลด้วย [Start date parameter] และ [End date parameter] ใช้ช่วงเวลาเดียวกันกับเวลาประทับของเหตุการณ์ แต่ให้เก็บเอกสารที่สร้างก่อนช่วงเวลาดังกล่าวไว้ด้วย หากจำเป็นต่อการอธิบายเหตุการณ์ที่เกิดขึ้นภายในช่วงนั้น.
- กำหนดรหัสบริษัท องค์กรฝ่ายขาย โรงงาน องค์กรจัดซื้อ ประเภทเอกสาร และตัวกรองธุรกิจอื่นๆ ในส่วนตัวกรองที่ทำเครื่องหมายไว้ ใช้ตัวกรองหลังจากตรวจสอบค่าที่ถูกต้องในระบบเป้าหมายแล้วเท่านั้น.
- แทนที่การอ้างอิงตารางและคอลัมน์ในวงเล็บเหลี่ยมของทุกสาขากิจกรรมด้วยชื่อที่ตรวจสอบแล้ว แต่ละสาขาต้องส่งคืนคอลัมน์ชุดเดียวกันและชนิดข้อมูลที่เข้ากันได้ query จะสร้างหนึ่งแถวต่อกิจกรรมที่จำเป็นทั้ง 15 รายการอย่างชัดเจน เนื่องจาก ProcessMind ไม่ได้อนุมานเหตุการณ์ที่ขาดหายไป.
- เรียกใช้ query ใน SAP HANA Database Explorer, SAP HANA cockpit SQL Console หรือ SQL client ที่ได้รับอนุมัติ ทดสอบแต่ละสาขากิจกรรมแยกกันก่อนเรียกใช้ query UNION ALL ฉบับเต็ม ตรวจสอบแผนการประมวลผลและจำกัดช่วงวันที่ให้สั้นในการทดสอบครั้งแรก.
- ตรวจสอบความสัมพันธ์ของเอกสาร เวลาประทับ รหัสผู้ใช้ ค่าผู้จัดจำหน่ายและลูกค้า ค่าวัสดุและโรงงาน รวมถึงผลการตรวจสอบคุณภาพ ตรวจสอบแถวซ้ำที่เกิดจากการเชื่อมข้อมูลระดับรายการ และใช้กฎกำหนดระดับเหตุการณ์ที่ตั้งค่าไว้ เช่น หนึ่งเหตุการณ์ต่อเอกสาร หรือหนึ่งเหตุการณ์ต่อรายการเอกสาร.
- ส่งออกผลลัพธ์เป็น UTF-8 CSV หรือรูปแบบตารางอื่นที่ ProcessMind รองรับ รักษาชื่อคอลัมน์ผลลัพธ์ให้ตรงตามนี้: LogisticsOrder, ActivityName, EventTime, SourceSystem, LastDataUpdate, ExecutingUser, SupplierName, CustomerName, MaterialNumber, Plant, RequestedDeliveryDate และ QualityInspectionResult ตรวจสอบว่า EventTime เป็นเวลาประทับ และ LastDataUpdate มีค่าอย่างสม่ำเสมอ.
- อัปโหลดไฟล์ไปยัง ProcessMind แล้วกำหนด LogisticsOrder เป็นรหัสเคส, ActivityName เป็นกิจกรรม และ EventTime เป็นเวลาประทับของเหตุการณ์ ตรวจสอบว่าป้ายกิจกรรมทั้ง 15 รายการถูกนำเข้าเป็นเหตุการณ์อย่างชัดเจน และกำหนดเวลาการรีเฟรชแบบควบคุมหลังจากตรวจสอบการดึงข้อมูลส่วนเพิ่มแล้ว.
การกำหนดค่า
- ช่วงวันที่: เริ่มจากข้อมูล 3 ถึง 6 เดือน ใช้ช่วงที่สั้นกว่าสำหรับการทดสอบเบื้องต้น และขยายช่วงหลังจากตรวจสอบประสิทธิภาพกับความสัมพันธ์ของเอกสารแล้วเท่านั้น.
- Source schema: กำหนด [SAP HANA schema name] ให้เป็น schema ที่มีตารางหรือ view ของ S/4HANA ซึ่งตรวจสอบแล้ว อย่าสันนิษฐานว่าทุกระบบ S/4HANA จะมีตาราง ERP แบบเดิมในชื่อเดียวกัน.
- ขอบเขตเอกสาร: กำหนด [Company Code filter], [Sales Organization filter], [Plant filter], [Purchasing Organization filter] และ [Document Type filter] ให้ตรงกับขอบเขตกระบวนการ.
- การเชื่อมโยง: กำหนด [Your document flow or correlation object] เพื่อให้แต่ละเหตุการณ์เชื่อมกับ LogisticsOrder รายการเดียว หากเชื่อมโยงไม่ได้หรือมีความกำกวม ให้รายงานปัญหาแทนการกำหนดค่าโดยไม่แจ้งให้ทราบ.
- ระดับเหตุการณ์: เลือกหนึ่งเหตุการณ์ต่อเอกสาร ต่อรายการเอกสาร หรือการเปลี่ยนสถานะที่เกี่ยวข้องกับธุรกิจ ใช้กฎเดียวกันในทุกสาขา และลบเฉพาะแถวที่ซ้ำทางเทคนิคเท่านั้น.
- ลำดับความสำคัญของเวลาประทับ: ใช้เวลาผ่านรายการ เวลาสร้าง เวลายืนยัน เวลาเปลี่ยนสถานะ เวลาตรวจสอบ เวลาส่งมอบ เวลาขนถ่าย เวลาหลักฐานการส่งมอบ หรือเวลาเรียกเก็บเงินที่ตรวจสอบแล้วสำหรับแต่ละกิจกรรม ห้ามใช้เวลาที่ดึงข้อมูลแทนเวลาที่เกิดเหตุการณ์ทางธุรกิจ.
- ป้ายแหล่งที่มา: กำหนด [Source system label] เป็นค่าคงที่ เช่น รหัสระบบ SAP S/4HANA ที่ได้รับอนุมัติ.
- เวลาที่รีเฟรชข้อมูล: กำหนด [Last data update expression] เป็นเวลาที่ดึงข้อมูลหรือเวลารีเฟรชจากแหล่งข้อมูลที่ได้รับอนุมัติ.
- ประสิทธิภาพ: จำกัดตัวกรองวันที่และหน่วยงานตั้งแต่ต้น เลือกเฉพาะคอลัมน์ที่จำเป็น หลีกเลี่ยงการเชื่อมข้อมูลระดับรายการโดยไม่มีเงื่อนไข ตรวจสอบแผนการประมวลผล และพิจารณาใช้ view สำหรับดึงข้อมูลหรือตาราง staging ที่บันทึกไว้สำหรับการโหลดซ้ำ.
- สิทธิ์: ต้องมีสิทธิ์อ่านออบเจ็กต์ใน SAP HANA schema ที่เกี่ยวข้องและสิทธิ์เรียกใช้ SQL การตรวจสอบโดยฝ่ายธุรกิจต้องเข้าถึงข้อมูลการขาย การจัดซื้อ สินค้าคงคลัง การผลิต คุณภาพ การปฏิบัติงานด้านโลจิสติกส์ การขนส่ง และการเรียกเก็บเงินที่เกี่ยวข้อง.
- ขอบเขตการทำงาน: ตรวจสอบว่าระบบที่ใช้งานมีขั้นตอนธุรกิจตามกิจกรรมที่ร้องขอ ข้อมูลการขนส่ง การขนถ่าย POD คุณภาพ การผลิต และการเรียกเก็บเงินอาจอยู่ในแอปพลิเคชันหรือส่วนขยายแยกกัน.
- ความปลอดภัย: ปฏิบัติตามกฎขององค์กรเกี่ยวกับข้อมูลลูกค้า ผู้จัดจำหน่าย วัสดุ การเงิน และผู้ใช้ ปกปิดหรือจำกัดการเข้าถึงฟิลด์ที่มีข้อมูลอ่อนไหวเมื่อจำเป็น.
ตัวอย่างคำค้น sql
WITH
parameters AS (
SELECT
CAST('[Start date parameter]' AS TIMESTAMP) AS start_ts,
CAST('[End date parameter]' AS TIMESTAMP) AS end_ts,
CAST('[Last data update expression]' AS TIMESTAMP) AS last_data_update,
CAST('[Source system label]' AS NVARCHAR(100)) AS source_system,
CAST('[Company Code filter]' AS NVARCHAR(20)) AS company_code_filter,
CAST('[Sales Organization filter]' AS NVARCHAR(20)) AS sales_org_filter,
CAST('[Plant filter]' AS NVARCHAR(20)) AS plant_filter,
CAST('[Purchasing Organization filter]' AS NVARCHAR(20)) AS purchasing_org_filter,
CAST('[Document Type filter]' AS NVARCHAR(20)) AS document_type_filter
FROM DUMMY
),
base_events AS (
SELECT
CAST('[Sales order correlation column]' AS NVARCHAR(100)) AS LogisticsOrder,
CAST('Sales Order Created' AS NVARCHAR(100)) AS ActivityName,
CAST('[Sales order creation timestamp]' AS TIMESTAMP) AS EventTime,
CAST('[Executing user column]' AS NVARCHAR(100)) AS ExecutingUser,
CAST('[Supplier name column]' AS NVARCHAR(255)) AS SupplierName,
CAST('[Customer name column]' AS NVARCHAR(255)) AS CustomerName,
CAST('[Material number column]' AS NVARCHAR(100)) AS MaterialNumber,
CAST('[Plant column]' AS NVARCHAR(100)) AS Plant,
CAST('[Requested delivery date column]' AS DATE) AS RequestedDeliveryDate,
CAST('[Quality inspection result column]' AS NVARCHAR(100)) AS QualityInspectionResult
FROM [Your sales order source object]
CROSS JOIN parameters p
WHERE CAST('[Sales order creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Sales order creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Sales order company code column]' AS NVARCHAR(20)) = p.company_code_filter
AND CAST('[Sales order sales organization column]' AS NVARCHAR(20)) = p.sales_org_filter
AND CAST('[Sales order document type column]' AS NVARCHAR(20)) = p.document_type_filter
UNION ALL
SELECT
CAST('[Inventory check correlation column]' AS NVARCHAR(100)),
CAST('Inventory Availability Checked' AS NVARCHAR(100)),
CAST('[Inventory check timestamp]' AS TIMESTAMP),
CAST('[Inventory check user column]' AS NVARCHAR(100)),
CAST('[Inventory supplier name column]' AS NVARCHAR(255)),
CAST('[Inventory customer name column]' AS NVARCHAR(255)),
CAST('[Inventory material number column]' AS NVARCHAR(100)),
CAST('[Inventory plant column]' AS NVARCHAR(100)),
CAST('[Inventory requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your inventory availability source object]
CROSS JOIN parameters p
WHERE CAST('[Inventory check timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Inventory check timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Inventory company code column]' AS NVARCHAR(20)) = p.company_code_filter
AND CAST('[Inventory sales organization column]' AS NVARCHAR(20)) = p.sales_org_filter
UNION ALL
SELECT
CAST('[Purchase requisition correlation column]' AS NVARCHAR(100)),
CAST('Purchase Requisition Created' AS NVARCHAR(100)),
CAST('[Purchase requisition creation timestamp]' AS TIMESTAMP),
CAST('[Purchase requisition user column]' AS NVARCHAR(100)),
CAST('[Purchase requisition supplier name column]' AS NVARCHAR(255)),
CAST('[Purchase requisition customer name column]' AS NVARCHAR(255)),
CAST('[Purchase requisition material number column]' AS NVARCHAR(100)),
CAST('[Purchase requisition plant column]' AS NVARCHAR(100)),
CAST('[Purchase requisition requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your purchase requisition source object]
CROSS JOIN parameters p
WHERE CAST('[Purchase requisition creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Purchase requisition creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Purchase requisition plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Purchase order correlation column]' AS NVARCHAR(100)),
CAST('Purchase Order Issued' AS NVARCHAR(100)),
CAST('[Purchase order issue timestamp]' AS TIMESTAMP),
CAST('[Purchase order user column]' AS NVARCHAR(100)),
CAST('[Purchase order supplier name column]' AS NVARCHAR(255)),
CAST('[Purchase order customer name column]' AS NVARCHAR(255)),
CAST('[Purchase order material number column]' AS NVARCHAR(100)),
CAST('[Purchase order plant column]' AS NVARCHAR(100)),
CAST('[Purchase order requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM EKKO po_header
INNER JOIN EKPO po_item
ON po_header.[Purchase order number column] = po_item.[Purchase order number column]
CROSS JOIN parameters p
WHERE CAST('[Purchase order issue timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Purchase order issue timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Purchase order company code column]' AS NVARCHAR(20)) = p.company_code_filter
AND CAST('[Purchase order purchasing organization column]' AS NVARCHAR(20)) = p.purchasing_org_filter
AND CAST('[Purchase order document type column]' AS NVARCHAR(20)) = p.document_type_filter
UNION ALL
SELECT
CAST('[Goods receipt correlation column]' AS NVARCHAR(100)),
CAST('Goods Receipt For PO Posted' AS NVARCHAR(100)),
CAST('[Goods receipt posting timestamp]' AS TIMESTAMP),
CAST('[Goods receipt user column]' AS NVARCHAR(100)),
CAST('[Goods receipt supplier name column]' AS NVARCHAR(255)),
CAST('[Goods receipt customer name column]' AS NVARCHAR(255)),
CAST('[Goods receipt material number column]' AS NVARCHAR(100)),
CAST('[Goods receipt plant column]' AS NVARCHAR(100)),
CAST('[Goods receipt requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your material document header source object] material_header
INNER JOIN [Your material document item source object] material_item
ON material_header.[Material document number column] = material_item.[Material document number column]
AND material_header.[Material document year column] = material_item.[Material document year column]
CROSS JOIN parameters p
WHERE CAST('[Goods receipt posting timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Goods receipt posting timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Goods receipt plant column]' AS NVARCHAR(20)) = p.plant_filter
AND CAST('[Goods receipt movement type column]' AS NVARCHAR(20)) = '[Goods receipt movement type value]'
UNION ALL
SELECT
CAST('[Production order correlation column]' AS NVARCHAR(100)),
CAST('Production Order Created' AS NVARCHAR(100)),
CAST('[Production order creation timestamp]' AS TIMESTAMP),
CAST('[Production order user column]' AS NVARCHAR(100)),
CAST('[Production order supplier name column]' AS NVARCHAR(255)),
CAST('[Production order customer name column]' AS NVARCHAR(255)),
CAST('[Production order material number column]' AS NVARCHAR(100)),
CAST('[Production order plant column]' AS NVARCHAR(100)),
CAST('[Production order requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your production order source object]
CROSS JOIN parameters p
WHERE CAST('[Production order creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Production order creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Production order plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Production receipt correlation column]' AS NVARCHAR(100)),
CAST('Goods Produced' AS NVARCHAR(100)),
CAST('[Production receipt timestamp]' AS TIMESTAMP),
CAST('[Production receipt user column]' AS NVARCHAR(100)),
CAST('[Production receipt supplier name column]' AS NVARCHAR(255)),
CAST('[Production receipt customer name column]' AS NVARCHAR(255)),
CAST('[Production receipt material number column]' AS NVARCHAR(100)),
CAST('[Production receipt plant column]' AS NVARCHAR(100)),
CAST('[Production receipt requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your production receipt source object]
CROSS JOIN parameters p
WHERE CAST('[Production receipt timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Production receipt timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Production receipt plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Quality inspection correlation column]' AS NVARCHAR(100)),
CAST('Quality Inspection Performed' AS NVARCHAR(100)),
CAST('[Quality inspection completion timestamp]' AS TIMESTAMP),
CAST('[Quality inspection user column]' AS NVARCHAR(100)),
CAST('[Quality supplier name column]' AS NVARCHAR(255)),
CAST('[Quality customer name column]' AS NVARCHAR(255)),
CAST('[Quality material number column]' AS NVARCHAR(100)),
CAST('[Quality plant column]' AS NVARCHAR(100)),
CAST('[Quality requested delivery date column]' AS DATE),
CAST('[Quality inspection result column]' AS NVARCHAR(100))
FROM [Your quality inspection source object]
CROSS JOIN parameters p
WHERE CAST('[Quality inspection completion timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Quality inspection completion timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Quality plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Outbound delivery correlation column]' AS NVARCHAR(100)),
CAST('Outbound Delivery Created' AS NVARCHAR(100)),
CAST('[Outbound delivery creation timestamp]' AS TIMESTAMP),
CAST('[Outbound delivery user column]' AS NVARCHAR(100)),
CAST('[Outbound delivery supplier name column]' AS NVARCHAR(255)),
CAST('[Outbound delivery customer name column]' AS NVARCHAR(255)),
CAST('[Outbound delivery material number column]' AS NVARCHAR(100)),
CAST('[Outbound delivery plant column]' AS NVARCHAR(100)),
CAST('[Outbound delivery requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM LIKP delivery_header
INNER JOIN LIPS delivery_item
ON delivery_header.[Delivery number column] = delivery_item.[Delivery number column]
CROSS JOIN parameters p
WHERE CAST('[Outbound delivery creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Outbound delivery creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Outbound delivery plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Picking correlation column]' AS NVARCHAR(100)),
CAST('Picking Completed' AS NVARCHAR(100)),
CAST('[Picking completion timestamp]' AS TIMESTAMP),
CAST('[Picking user column]' AS NVARCHAR(100)),
CAST('[Picking supplier name column]' AS NVARCHAR(255)),
CAST('[Picking customer name column]' AS NVARCHAR(255)),
CAST('[Picking material number column]' AS NVARCHAR(100)),
CAST('[Picking plant column]' AS NVARCHAR(100)),
CAST('[Picking requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your picking status source object]
CROSS JOIN parameters p
WHERE CAST('[Picking completion timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Picking completion timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Picking plant column]' AS NVARCHAR(20)) = p.plant_filter
AND CAST('[Picking completion status column]' AS NVARCHAR(50)) = '[Picking completed status value]'
UNION ALL
SELECT
CAST('[Goods issue correlation column]' AS NVARCHAR(100)),
CAST('Goods Issue Posted' AS NVARCHAR(100)),
CAST('[Goods issue posting timestamp]' AS TIMESTAMP),
CAST('[Goods issue user column]' AS NVARCHAR(100)),
CAST('[Goods issue supplier name column]' AS NVARCHAR(255)),
CAST('[Goods issue customer name column]' AS NVARCHAR(255)),
CAST('[Goods issue material number column]' AS NVARCHAR(100)),
CAST('[Goods issue plant column]' AS NVARCHAR(100)),
CAST('[Goods issue requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your goods issue source object]
CROSS JOIN parameters p
WHERE CAST('[Goods issue posting timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Goods issue posting timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Goods issue plant column]' AS NVARCHAR(20)) = p.plant_filter
AND CAST('[Goods issue movement type column]' AS NVARCHAR(20)) = '[Goods issue movement type value]'
UNION ALL
SELECT
CAST('[Shipment correlation column]' AS NVARCHAR(100)),
CAST('Shipment Created' AS NVARCHAR(100)),
CAST('[Shipment creation timestamp]' AS TIMESTAMP),
CAST('[Shipment user column]' AS NVARCHAR(100)),
CAST('[Shipment supplier name column]' AS NVARCHAR(255)),
CAST('[Shipment customer name column]' AS NVARCHAR(255)),
CAST('[Shipment material number column]' AS NVARCHAR(100)),
CAST('[Shipment plant column]' AS NVARCHAR(100)),
CAST('[Shipment requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your shipment source object]
CROSS JOIN parameters p
WHERE CAST('[Shipment creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Shipment creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Shipment plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Unloading correlation column]' AS NVARCHAR(100)),
CAST('Goods Unloaded at Destination' AS NVARCHAR(100)),
CAST('[Unloading timestamp]' AS TIMESTAMP),
CAST('[Unloading user column]' AS NVARCHAR(100)),
CAST('[Unloading supplier name column]' AS NVARCHAR(255)),
CAST('[Unloading customer name column]' AS NVARCHAR(255)),
CAST('[Unloading material number column]' AS NVARCHAR(100)),
CAST('[Unloading plant column]' AS NVARCHAR(100)),
CAST('[Unloading requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your unloading or carrier event source object]
CROSS JOIN parameters p
WHERE CAST('[Unloading timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Unloading timestamp]' AS TIMESTAMP) < p.end_ts
UNION ALL
SELECT
CAST('[POD correlation column]' AS NVARCHAR(100)),
CAST('Proof Of Delivery Confirmed' AS NVARCHAR(100)),
CAST('[POD confirmation timestamp]' AS TIMESTAMP),
CAST('[POD user column]' AS NVARCHAR(100)),
CAST('[POD supplier name column]' AS NVARCHAR(255)),
CAST('[POD customer name column]' AS NVARCHAR(255)),
CAST('[POD material number column]' AS NVARCHAR(100)),
CAST('[POD plant column]' AS NVARCHAR(100)),
CAST('[POD requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your proof of delivery source object]
CROSS JOIN parameters p
WHERE CAST('[POD confirmation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[POD confirmation timestamp]' AS TIMESTAMP) < p.end_ts
UNION ALL
SELECT
CAST('[Billing correlation column]' AS NVARCHAR(100)),
CAST('Customer Invoice Created' AS NVARCHAR(100)),
CAST('[Billing creation timestamp]' AS TIMESTAMP),
CAST('[Billing user column]' AS NVARCHAR(100)),
CAST('[Billing supplier name column]' AS NVARCHAR(255)),
CAST('[Billing customer name column]' AS NVARCHAR(255)),
CAST('[Billing material number column]' AS NVARCHAR(100)),
CAST('[Billing plant column]' AS NVARCHAR(100)),
CAST('[Billing requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your billing document source object]
CROSS JOIN parameters p
WHERE CAST('[Billing creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Billing creation timestamp]' AS TIMESTAMP) < p.end_ts
)
SELECT
LogisticsOrder,
ActivityName,
EventTime,
parameters.source_system AS SourceSystem,
parameters.last_data_update AS LastDataUpdate,
ExecutingUser,
SupplierName,
CustomerName,
MaterialNumber,
Plant,
RequestedDeliveryDate,
QualityInspectionResult
FROM base_events
CROSS JOIN parameters
WHERE LogisticsOrder IS NOT NULL
AND ActivityName IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY LogisticsOrder, EventTime, ActivityName; ขั้นตอน
- ข้อกำหนดเบื้องต้น: ตรวจสอบว่าคุณมี developer key และสิทธิ์ที่จำเป็นในระบบ SAP S/4HANA สำหรับสร้างและเรียกใช้โปรแกรม ABAP (เข้าถึงธุรกรรม SE38) รวมถึงอ่านตารางห่วงโซ่อุปทาน เช่น VBAK, LIKP, EKKO และ MKPF.
- สร้างโปรแกรม: เปิด ABAP Editor ด้วยรหัสธุรกรรม
SE38ตั้งชื่อโปรแกรมใหม่ เช่นZ_PM_SCM_EXTRACTIONแล้วคลิก 'Create' ระบุชื่อเรื่องที่สื่อความหมายและตั้งประเภทโปรแกรมเป็น 'Executable Program'. - ใส่โค้ด: คัดลอกโค้ด ABAP ฉบับเต็มจากส่วน 'query' ด้านล่าง แล้ววางลงใน ABAP Editor ของโปรแกรมใหม่.
- กำหนดองค์ประกอบข้อความ: ไปที่ Go To > Text Elements > Selection Texts แล้วเปิดใช้ป้ายหน้าจอการเลือกที่เสนอทั้งหมด เพื่อให้หน้าจอใช้งานเข้าใจง่าย.
- เปิดใช้งานโปรแกรม: บันทึกและเปิดใช้งานโปรแกรมโดยกด CTRL+S แล้วกด CTRL+F3 หรือคลิกไอคอนเปิดใช้งานบนแถบเครื่องมือ แก้ไขข้อผิดพลาดทางไวยากรณ์ที่อาจเกิดจากการตั้งค่าเฉพาะของระบบ.
- เรียกใช้โปรแกรม: กด F8 หรือใช้ปุ่ม 'Direct Processing' เพื่อเรียกใช้โปรแกรม หน้าจอการเลือกจะปรากฏขึ้นเพื่อให้คุณกรองข้อมูลที่จะดึง.
- กำหนดพารามิเตอร์การดึงข้อมูล: ระบุช่วงวันที่สำหรับวันที่สร้างใบสั่งขายในหน้าจอการเลือก แนะนำให้กรองตามรหัสบริษัทหรือองค์กรฝ่ายขายที่ต้องการด้วย เพื่อลดปริมาณข้อมูล ระบุพาธแบบเต็มของไฟล์ผลลัพธ์บนเซิร์ฟเวอร์แอปพลิเคชัน SAP.
- เรียกใช้ในเบื้องหลัง: หากดึงข้อมูลปริมาณมากครอบคลุมหลายเดือน ควรเรียกใช้โปรแกรมในเบื้องหลังเพื่อป้องกันธุรกรรมหมดเวลา จากเมนู เลือก Program > Execute in Background แล้วกำหนดเวลางาน.
- รับไฟล์ข้อมูล: เมื่อโปรแกรมทำงานเสร็จ ให้ใช้รหัสธุรกรรม
AL11ไปยังไดเรกทอรีบนเซิร์ฟเวอร์แอปพลิเคชันที่ระบุไว้ ค้นหาไฟล์ที่สร้างขึ้นและดาวน์โหลดมายังคอมพิวเตอร์ด้วยธุรกรรมCG3Y. - เตรียมไฟล์เพื่ออัปโหลด: ตรวจสอบว่าไฟล์ที่ดาวน์โหลดเป็นข้อความธรรมดา เช่น CSV ที่คั่นด้วยจุลภาคหรืออัฒภาค และใช้การเข้ารหัส UTF-8 จากนั้นไฟล์ก็พร้อมอัปโหลดไปยังเครื่องมือ process mining.
การกำหนดค่า
- ช่วงวันที่ที่เลือก (S_ERDAT): เป็นตัวกรองที่สำคัญที่สุด ใช้กำหนดช่วงเวลาสำหรับเลือกใบสั่งขายเบื้องต้นตามวันที่สร้าง (
VBAK-ERDAT) เริ่มจากช่วงที่จัดการได้ เช่น 3 ถึง 6 เดือนล่าสุด เพื่อควบคุมปริมาณข้อมูล. - องค์กรฝ่ายขาย (S_VKORG): ตัวกรองเสริมสำหรับจำกัดข้อมูลเฉพาะองค์กรฝ่ายขายที่กำหนด เหมาะสำหรับวิเคราะห์หน่วยธุรกิจหรือภูมิภาคใดภูมิภาคหนึ่ง.
- รหัสบริษัท (S_BUKRS): ตัวกรองเสริมสำหรับจำกัดข้อมูลตามรหัสบริษัทที่กำหนด แนะนำให้ใช้เพื่อลดขอบเขตข้อมูลและเพิ่มประสิทธิภาพ.
- พาธไฟล์ผลลัพธ์ (P_FILE): พาธแบบเต็มบนเซิร์ฟเวอร์แอปพลิเคชัน SAP ที่ใช้บันทึกไฟล์บันทึกเหตุการณ์ ผู้ใช้ที่เรียกใช้โปรแกรมต้องมีสิทธิ์เขียนในไดเรกทอรีนี้ ตัวอย่าง:
/usr/sap/trans/tmp/scm_event_log.csv. - โหมดการเรียกใช้: เรียกใช้โปรแกรมในโหมด foreground ได้เมื่อต้องการทดสอบดึงข้อมูลปริมาณน้อย หากมีข้อมูลจำนวนมาก ต้องประมวลผลในเบื้องหลังเพื่อป้องกันการหมดเวลาและลดภาระระบบในช่วงที่มีการใช้งานสูง.
- สิทธิ์ในระบบ: ผู้ใช้ที่เรียกรายงานต้องมีสิทธิ์อ่านตารางพื้นฐานทั้งหมด ซึ่งรวมถึง VBAK, VBAP, EKKO, EKPO, MSEG, MKPF, LIKP, LIPS, VBRK, AUFK, QAVE, KNA1 และ LFA1.
ตัวอย่างคำค้น abap
REPORT Z_PM_SCM_EXTRACTION.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
PARAMETERS: p_file TYPE string LOWER CASE DEFAULT '/usr/sap/trans/tmp/scm_event_log.csv'.
SELECT-OPTIONS: s_erdat FOR sy-datum OBLIGATORY,
s_vkorg FOR vbak-vkorg,
s_bukrs FOR vbak-bukrs.
*&---------------------------------------------------------------------*
*& Data Type Definitions
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
LogisticsOrder TYPE vbeln_va,
ActivityName TYPE string,
EventTime TYPE string,
SourceSystem TYPE sysysid,
LastDataUpdate TYPE string,
ExecutingUser TYPE ernam,
SupplierName TYPE name1_gp,
CustomerName TYPE name1_gp,
MaterialNumber TYPE matnr,
Plant TYPE werks_d,
RequestedDeliveryDate TYPE vdatu,
QualityInspectionResult TYPE string,
END OF ty_event_log.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
DATA: lt_event_log TYPE TABLE OF ty_event_log,
ls_event_log TYPE ty_event_log,
lv_sysid TYPE sysysid,
lv_last_update TYPE string.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
lv_sysid = sy-sysid.
CONCATENATE sy-datum sy-uzeit INTO lv_last_update.
" Select base data: Sales Orders
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, h~kunnr, h~bukrs, h~vdatu, i~posnr, i~matnr, i~werks
INTO TABLE @DATA(lt_so)
FROM vbak AS h
INNER JOIN vbap AS i ON h~vbeln = i~vbeln
WHERE h~erdat IN @s_erdat
AND h~vkorg IN @s_vkorg
AND h~bukrs IN @s_bukrs.
IF lt_so IS INITIAL.
MESSAGE 'No sales orders found for the given criteria.' TYPE 'I'.
RETURN.
ENDIF.
" Select related documents using Document Flow (VBFA)
SELECT *
INTO TABLE @DATA(lt_vbfa)
FROM vbfa
FOR ALL ENTRIES IN @lt_so
WHERE vbelv = @lt_so-vbeln
AND posnv = @lt_so-posnr.
" Collect all unique document numbers
DATA: lt_vbeln_pr TYPE RANGE OF banfn,
lt_vbeln_po TYPE RANGE OF ebeln,
lt_vbeln_dn TYPE RANGE OF vbeln_vl,
lt_vbeln_gi TYPE RANGE OF mblnr,
lt_vbeln_auf TYPE RANGE OF aufnr,
lt_vbeln_inv TYPE RANGE OF vbeln_vf,
lt_vbeln_shp TYPE RANGE OF tknum.
LOOP AT lt_vbfa INTO DATA(ls_vbfa).
CASE ls_vbfa-vbtyp_n.
WHEN 'H'. " Purchase Requisition
APPEND ls_vbfa-vbeln TO lt_vbeln_pr.
WHEN 'K'. " Purchase Order
APPEND ls_vbfa-vbeln TO lt_vbeln_po.
WHEN 'J'. " Delivery
APPEND ls_vbfa-vbeln TO lt_vbeln_dn.
WHEN 'R'. " Goods Movement (GI)
APPEND ls_vbfa-vbeln TO lt_vbeln_gi.
WHEN 'L'. " Production Order
APPEND ls_vbfa-vbeln TO lt_vbeln_auf.
WHEN 'M'. " Invoice
APPEND ls_vbfa-vbeln TO lt_vbeln_inv.
WHEN '8'. " Shipment
APPEND ls_vbfa-vbeln TO lt_vbeln_shp.
ENDCASE.
ENDLOOP.
SORT lt_vbeln_pr. DELETE ADJACENT DUPLICATES FROM lt_vbeln_pr.
SORT lt_vbeln_po. DELETE ADJACENT DUPLICATES FROM lt_vbeln_po.
SORT lt_vbeln_dn. DELETE ADJACENT DUPLICATES FROM lt_vbeln_dn.
SORT lt_vbeln_gi. DELETE ADJACENT DUPLICATES FROM lt_vbeln_gi.
SORT lt_vbeln_auf. DELETE ADJACENT DUPLICATES FROM lt_vbeln_auf.
SORT lt_vbeln_inv. DELETE ADJACENT DUPLICATES FROM lt_vbeln_inv.
SORT lt_vbeln_shp. DELETE ADJACENT DUPLICATES FROM lt_vbeln_shp.
" Select detailed data for each document type
SELECT banfn, badat, ernam FROM eban INTO TABLE @DATA(lt_eban) FOR ALL ENTRIES IN @lt_so WHERE bnfpo = @lt_so-posnr AND banfn IN @lt_vbeln_pr.
SELECT ebeln, aedat, ernam, lifnr FROM ekko INTO TABLE @DATA(lt_ekko) WHERE ebeln IN @lt_vbeln_po.
SELECT vbeln, erdat, erzet, ernam, kodat, wadat_ist, podat FROM likp INTO TABLE @DATA(lt_likp) WHERE vbeln IN @lt_vbeln_dn.
SELECT mblnr, mjahr, budat, usnam FROM mkpf INTO TABLE @DATA(lt_mkpf) WHERE mblnr IN @lt_vbeln_gi.
SELECT mblnr, mjahr, zeile, bwart, lfbnr, ebeln, aufnr FROM mseg INTO TABLE @DATA(lt_mseg) FOR ALL ENTRIES IN @lt_mkpf WHERE mblnr = @lt_mkpf-mblnr AND mjahr = @lt_mkpf-mjahr.
SELECT aufnr, erdat, ernam FROM aufk INTO TABLE @DATA(lt_aufk) WHERE aufnr IN @lt_vbeln_auf.
SELECT prueflos, vdatum, vcode FROM qave INTO TABLE @DATA(lt_qave) FOR ALL ENTRIES IN @lt_so WHERE aufnr IN @lt_vbeln_auf.
SELECT vbeln, erdat, erzet, ernam FROM vbrk INTO TABLE @DATA(lt_vbrk) WHERE vbeln IN @lt_vbeln_inv.
SELECT tknum, erdat, erzet FROM vttk INTO TABLE @DATA(lt_vttk) WHERE tknum IN @lt_vbeln_shp.
SELECT kunnr, name1 FROM kna1 INTO TABLE @DATA(lt_kna1) FOR ALL ENTRIES IN @lt_so WHERE kunnr = @lt_so-kunnr.
SELECT lifnr, name1 FROM lfa1 INTO TABLE @DATA(lt_lfa1) FOR ALL ENTRIES IN @lt_ekko WHERE lifnr = @lt_ekko-lifnr.
" Assemble Event Log
LOOP AT lt_so INTO DATA(ls_so).
CLEAR ls_event_log.
READ TABLE lt_kna1 INTO DATA(ls_kna1) WITH KEY kunnr = ls_so-kunnr BINARY SEARCH.
ls_event_log-LogisticsOrder = ls_so-vbeln.
ls_event_log-SourceSystem = lv_sysid.
ls_event_log-LastDataUpdate = lv_last_update.
ls_event_log-CustomerName = ls_kna1-name1.
ls_event_log-MaterialNumber = ls_so-matnr.
ls_event_log-Plant = ls_so-werks.
ls_event_log-RequestedDeliveryDate = ls_so-vdatu.
" 1. Sales Order Created
ls_event_log-ActivityName = 'Sales Order Created'.
CONCATENATE ls_so-erdat ls_so-erzet INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_so-ernam.
APPEND ls_event_log TO lt_event_log.
" 2. Inventory Availability Checked (proxy event)
ls_event_log-ActivityName = 'Inventory Availability Checked'.
CONCATENATE ls_so-erdat ls_so-erzet INTO ls_event_log-EventTime. " Using SO creation time as a proxy
ls_event_log-ExecutingUser = ls_so-ernam.
APPEND ls_event_log TO lt_event_log.
" Find related documents for this SO item
LOOP AT lt_vbfa INTO ls_vbfa WHERE vbelv = ls_so-vbeln AND posnv = ls_so-posnr.
CASE ls_vbfa-vbtyp_n.
WHEN 'H'. " 3. Purchase Requisition Created
READ TABLE lt_eban INTO DATA(ls_eban) WITH KEY banfn = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Purchase Requisition Created'.
CONCATENATE ls_eban-badat '000000' INTO ls_event_log-EventTime. " PR has no time field
ls_event_log-ExecutingUser = ls_eban-ernam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
WHEN 'K'. " 4. Purchase Order Issued
READ TABLE lt_ekko INTO DATA(ls_ekko) WITH KEY ebeln = ls_vbfa-vbeln.
IF sy-subrc = 0.
READ TABLE lt_lfa1 INTO DATA(ls_lfa1) WITH KEY lifnr = ls_ekko-lifnr BINARY SEARCH.
ls_event_log-ActivityName = 'Purchase Order Issued'.
CONCATENATE ls_ekko-aedat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_ekko-ernam.
ls_event_log-SupplierName = ls_lfa1-name1.
APPEND ls_event_log TO lt_event_log.
ENDIF.
WHEN 'L'. " 6. Production Order Created
READ TABLE lt_aufk INTO DATA(ls_aufk) WITH KEY aufnr = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Production Order Created'.
CONCATENATE ls_aufk-erdat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_aufk-ernam.
APPEND ls_event_log TO lt_event_log.
" 8. Quality Inspection Performed
READ TABLE lt_qave INTO DATA(ls_qave) WITH KEY prueflos = ls_vbfa-vbeln. " Approximation linking lot to order
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Quality Inspection Performed'.
CONCATENATE ls_qave-vdatum '000000' INTO ls_event_log-EventTime.
ls_event_log-QualityInspectionResult = ls_qave-vcode.
APPEND ls_event_log TO lt_event_log.
CLEAR ls_event_log-QualityInspectionResult.
ENDIF.
ENDIF.
WHEN 'J'. " 9. Outbound Delivery Created
READ TABLE lt_likp INTO DATA(ls_likp) WITH KEY vbeln = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Outbound Delivery Created'.
CONCATENATE ls_likp-erdat ls_likp-erzet INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_likp-ernam.
APPEND ls_event_log TO lt_event_log.
" 10. Picking Completed
IF ls_likp-kodat IS NOT INITIAL.
ls_event_log-ActivityName = 'Picking Completed'.
CONCATENATE ls_likp-kodat '120000' INTO ls_event_log-EventTime. " Using Picking Date as proxy
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 14. Proof Of Delivery Confirmed
IF ls_likp-podat IS NOT INITIAL.
ls_event_log-ActivityName = 'Proof Of Delivery Confirmed'.
CONCATENATE ls_likp-podat '000000' INTO ls_event_log-EventTime.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDIF.
WHEN 'M'. " 15. Customer Invoice Created
READ TABLE lt_vbrk INTO DATA(ls_vbrk) WITH KEY vbeln = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Customer Invoice Created'.
CONCATENATE ls_vbrk-erdat ls_vbrk-erzet INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_vbrk-ernam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
WHEN '8'. " 12. Shipment Created
READ TABLE lt_vttk INTO DATA(ls_vttk) WITH KEY tknum = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Shipment Created'.
CONCATENATE ls_vttk-erdat ls_vttk-erzet INTO ls_event_log-EventTime.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDCASE.
ENDLOOP.
" Find material movements (MSEG) not directly in VBFA
" 5. Goods Receipt For PO Posted
LOOP AT lt_mseg INTO DATA(ls_mseg_po) WHERE ebeln IN (SELECT ebeln FROM ekpo WHERE banfn IN (SELECT banfn FROM eban WHERE vbeln = ls_so-vbeln) ) AND bwart = '101'.
READ TABLE lt_mkpf INTO DATA(ls_mkpf_po) WITH KEY mblnr = ls_mseg_po-mblnr mjahr = ls_mseg_po-mjahr.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Goods Receipt For PO Posted'.
CONCATENATE ls_mkpf_po-budat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_mkpf_po-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 7. Goods Produced
LOOP AT lt_mseg INTO DATA(ls_mseg_pp) WHERE aufnr IN (SELECT aufnr FROM afpo WHERE kdauf = ls_so-vbeln) AND bwart = '101'.
READ TABLE lt_mkpf INTO DATA(ls_mkpf_pp) WITH KEY mblnr = ls_mseg_pp-mblnr mjahr = ls_mseg_pp-mjahr.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Goods Produced'.
CONCATENATE ls_mkpf_pp-budat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_mkpf_pp-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 11. Goods Issue Posted
LOOP AT lt_mseg INTO DATA(ls_mseg_gi) WHERE lfbnr IN (SELECT vbeln FROM lips WHERE vgbel = ls_so-vbeln) AND bwart = '601'.
READ TABLE lt_mkpf INTO DATA(ls_mkpf_gi) WITH KEY mblnr = ls_mseg_gi-mblnr mjahr = ls_mseg_gi-mjahr.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Goods Issue Posted'.
CONCATENATE ls_mkpf_gi-budat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_mkpf_gi-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
ENDLOOP.
" Remove duplicate events for the same case
SORT lt_event_log BY LogisticsOrder ActivityName EventTime.
DELETE ADJACENT DUPLICATES FROM lt_event_log COMPARING LogisticsOrder ActivityName EventTime.
" Write data to file
DATA: lt_output TYPE TABLE OF string.
APPEND 'LogisticsOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate,ExecutingUser,SupplierName,CustomerName,MaterialNumber,Plant,RequestedDeliveryDate,QualityInspectionResult' TO lt_output.
LOOP AT lt_event_log INTO ls_event_log.
DATA(lv_line) = |
{ ls_event_log-LogisticsOrder },
{ ls_event_log-ActivityName },
{ ls_event_log-EventTime },
{ ls_event_log-SourceSystem },
{ ls_event_log-LastDataUpdate },
{ ls_event_log-ExecutingUser },
{ ls_event_log-SupplierName },
{ ls_event_log-CustomerName },
{ ls_event_log-MaterialNumber },
{ ls_event_log-Plant },
{ ls_event_log-RequestedDeliveryDate },
{ ls_event_log-QualityInspectionResult }|
.
REPLACE ALL OCCURRENCES OF ',' IN lv_line WITH ' '.
REPLACE ALL OCCURRENCES OF REGEX '\s+' IN lv_line WITH '' LEADING.
CONDENSE lv_line.
APPEND lv_line TO lt_output.
ENDLOOP.
cl_gui_frontend_services=>gui_download(
EXPORTING
filename = p_file
filetype = 'ASC'
CHANGING
data_tab = lt_output
EXCEPTIONS
OTHERS = 24
).
IF sy-subrc <> 0.
MESSAGE 'Error downloading file.' TYPE 'E'.
ELSE.
MESSAGE |File downloaded successfully to { p_file }| TYPE 'S'.
ENDIF. พร้อมเริ่มต้นหรือยัง?
ใช้เทมเพลตนี้เตรียมข้อมูลและเริ่มปรับปรุงประสิทธิภาพห่วงโซ่อุปทานได้เลย เราพร้อมช่วยเหลือคุณในทุกขั้นตอน.
เริ่มปรับปรุงการจัดการห่วงโซ่อุปทานของคุณ
มองเห็นกระบวนการตั้งแต่ต้นจนจบ พร้อมเพิ่มความแม่นยำในการพยากรณ์เป็น 90% ภายในไม่กี่วัน.
ทดลองใช้ฟรี 14 วัน ไม่ต้องใช้บัตรเครดิต.