เทมเพลตข้อมูลกระบวนการจัดซื้อจนถึงชำระเงินสำหรับใบสั่งซื้อ
เทมเพลตข้อมูลกระบวนการจัดซื้อจนถึงชำระเงินสำหรับใบสั่งซื้อ
- แอตทริบิวต์แนะนำสำหรับการวิเคราะห์โดยละเอียด
- กิจกรรมสำคัญที่ควรติดตามในกระบวนการ
- คำแนะนำการดึงข้อมูลทีละขั้นตอน
แอตทริบิวต์ของกระบวนการจัดซื้อจนถึงชำระเงินสำหรับใบสั่งซื้อ
| ชื่อ | คำอธิบาย | ||
|---|---|---|---|
| Purchase Order PurchaseOrderNumber | รหัสเฉพาะของ Purchase Order (PO) ซึ่งใช้เป็น case ID หลักสำหรับติดตามวงจรการจัดซื้อ. | ||
| คำอธิบาย หมายเลข Purchase Order เป็นรหัสหลักที่เชื่อมโยงกิจกรรมทั้งหมด ตั้งแต่การสร้างครั้งแรกจนถึงการรับสินค้าและปิดรายการ ใช้เป็นรหัสเคสสำหรับการวิเคราะห์ process mining. ในการวิเคราะห์ การจัดกลุ่มเหตุการณ์ตามหมายเลขนี้ช่วยสร้างเส้นทางของ PO แต่ละรายการขึ้นใหม่ได้ ซึ่งจำเป็นต่อการคำนวณระยะเวลาของวงจร วิเคราะห์รูปแบบกระบวนการ และระบุคอขวดหรือจุดเบี่ยงเบนของคำสั่งซื้อแต่ละรายการ. เหตุผลที่สำคัญ เป็นคีย์สำคัญที่เชื่อมเหตุการณ์จัดซื้อทั้งหมดให้เป็นกระบวนการเดียวตั้งแต่ต้นจนจบ ทำให้วิเคราะห์วงจรของ Purchase Order แต่ละรายการได้อย่างละเอียด. แหล่งข้อมูล แอตทริบิวต์นี้อยู่ในตาราง EKKO ของ SAP S/4HANA ในฟิลด์ EBELN. ตัวอย่าง 450001712345000171244500017125 | |||
| กิจกรรม ActivityName | ชื่อเหตุการณ์ทางธุรกิจหรือขั้นตอนที่เกิดขึ้นในกระบวนการ Purchase Order. | ||
| คำอธิบาย แอตทริบิวต์นี้อธิบายการดำเนินการหรือการเปลี่ยนสถานะเฉพาะในวงจรของ Purchase Order เช่น 'สร้าง Purchase Order' 'อนุมัติ Purchase Order' หรือ 'บันทึกรับสินค้า' ลำดับกิจกรรมเหล่านี้ประกอบกันเป็นขั้นตอนการทำงาน. การวิเคราะห์ลำดับและความถี่ของกิจกรรมเป็นหัวใจของ process mining ช่วยค้นพบกระบวนการที่เกิดขึ้นจริง เปรียบเทียบกับโมเดลที่ออกแบบไว้ ระบุคอขวด เช่น การรอนานหลัง 'ได้รับใบแจ้งหนี้' และวัดปริมาณงานที่ต้องทำซ้ำ เช่น กิจกรรม 'แก้ไข Purchase Order' ที่เกิดขึ้นหลายครั้ง. เหตุผลที่สำคัญ แอตทริบิวต์นี้กำหนดขั้นตอนในกระบวนการ ทำให้แสดงภาพและวิเคราะห์ขั้นตอนตั้งแต่ต้นจนจบ วิเคราะห์รูปแบบ และระบุคอขวดได้. แหล่งข้อมูล โดยทั่วไปได้จากการรวมข้อมูลหลายตารางและฟิลด์ เช่น ฟิลด์สถานะใน EKKO/EKPO หรือบันทึกเอกสารการเปลี่ยนแปลงใน CDHDR/CDPOS เพื่อแสดงหมุดหมายสำคัญทางธุรกิจ. ตัวอย่าง สร้าง Purchase Orderอนุมัติ Purchase Orderบันทึกรับสินค้าได้รับใบแจ้งหนี้ | |||
| เวลาเกิดเหตุการณ์ EventTime | เวลาและวันที่ที่ระบุว่ากิจกรรมเกิดขึ้นเมื่อใด. | ||
| คำอธิบาย แอตทริบิวต์นี้บันทึกวันที่และเวลาที่แน่นอนของแต่ละกิจกรรมในกระบวนการ และเป็นพื้นฐานของการวิเคราะห์ตามเวลาใน process mining. ใช้เวลาเกิดเหตุการณ์เรียงกิจกรรมตามลำดับเวลาเพื่อสร้างขั้นตอนการทำงาน นอกจากนี้ยังใช้คำนวณตัวชี้วัดตามระยะเวลาทั้งหมด เช่น ระยะเวลาระหว่างกิจกรรม เวลารอ และเวลาประมวลผล ซึ่งจำเป็นต่อการวิเคราะห์ประสิทธิภาพและระบุคอขวด. เหตุผลที่สำคัญ เวลาเกิดเหตุการณ์นี้สำคัญต่อการเรียงเหตุการณ์ให้ถูกต้องและคำนวณตัวชี้วัดประสิทธิภาพทั้งหมด รวมถึงระยะเวลาดำเนินการ ระยะเวลารอสินค้า และเวลารอ. แหล่งข้อมูล ฟิลด์เวลาที่เกี่ยวข้องกับกิจกรรมเฉพาะ เช่น วันที่สร้าง (EKKO-AEDAT สำหรับการเปลี่ยนแปลง) หรือวันที่ลงบัญชี (MKPF-BUDAT สำหรับการรับสินค้า) โดยมักต้องรวมข้อมูลจากหลายตาราง. ตัวอย่าง 2023-04-15T10:00:00Z2023-04-15T14:30:00Z2023-05-01T09:15:00Z | |||
| ระบบต้นทาง SourceSystem | ระบุระบบต้นทางที่ใช้ดึงข้อมูล. | ||
| คำอธิบาย แอตทริบิวต์นี้ระบุระบบต้นทางของข้อมูลเหตุการณ์ เช่น 'SAP S/4HANA Production' หรือ 'SAP ECC'. ในสภาพแวดล้อมที่มีหลายระบบ ฟิลด์นี้สำคัญต่อการติดตามที่มาของข้อมูล การแก้ไขปัญหา และการตรวจสอบว่าตีความข้อมูลจากแหล่งต่าง ๆ ได้ถูกต้อง ช่วยให้เข้าใจบริบทของข้อมูลและใช้กรองการวิเคราะห์ตามสภาพแวดล้อมของระบบที่ต้องการได้. เหตุผลที่สำคัญ ให้บริบทสำคัญเกี่ยวกับที่มาของข้อมูล ซึ่งจำเป็นต่อการกำกับดูแลข้อมูล การตรวจสอบความถูกต้อง และการวิเคราะห์ในสภาพแวดล้อมที่มีหลายระบบ. แหล่งข้อมูล โดยทั่วไปเป็นค่าคงที่ที่เพิ่มระหว่างกระบวนการดึง แปลง และโหลดข้อมูล (ETL) เพื่อระบุแหล่งที่มาของชุดข้อมูล. ตัวอย่าง S4H_PROD_100ECC_EU_200S4H_US_300 | |||
| อัปเดตข้อมูลล่าสุด LastDataUpdate | เวลาที่รีเฟรชหรือดึงข้อมูลจากระบบต้นทางครั้งล่าสุด. | ||
| คำอธิบาย แอตทริบิวต์นี้แสดงความใหม่ของข้อมูลที่นำมาวิเคราะห์ โดยระบุวันที่และเวลาที่ดึงข้อมูลจาก SAP S/4HANA ล่าสุด. การทราบเวลาอัปเดตข้อมูลล่าสุดช่วยให้ผู้ใช้เข้าใจว่าผลการวิเคราะห์เป็นปัจจุบันเพียงใด และตีความผลลัพธ์ได้ถูกต้องว่าเป็นข้อมูลล่าสุดหรือภาพข้อมูล ณ ช่วงเวลาหนึ่ง ซึ่งส่งผลต่อความเกี่ยวข้องของการดำเนินการที่อ้างอิงจากผลวิเคราะห์. เหตุผลที่สำคัญ แจ้งให้ผู้ใช้ทราบว่าข้อมูลเป็นปัจจุบันเพียงใด เพื่อให้เข้าใจบริบทและความเกี่ยวข้องของผลการวิเคราะห์. แหล่งข้อมูล เป็นเวลาในข้อมูลเมตาที่เพิ่มระหว่างกระบวนการดึง แปลง และโหลดข้อมูล (ETL). ตัวอย่าง 2024-05-21T02:00:00Z2024-05-20T02:00:00Z2024-05-19T02:00:00Z | |||
| ใบขอซื้อ PurchaseRequisitionNumber | รหัสใบขอซื้อ (PR) ที่เป็นต้นทางของ Purchase Order. | ||
| คำอธิบาย แอตทริบิวต์นี้เชื่อม Purchase Order กลับไปยังใบขอซื้อที่เป็นต้นทาง PO บางรายการอาจไม่มี PR หากสร้างขึ้นโดยตรง. การเชื่อมโยงนี้จำเป็นต่อการวิเคราะห์กระบวนการจัดซื้อทั้งหมดตั้งแต่คำขอเริ่มต้น รองรับ KPI เช่น 'เวลารออนุมัติใบขอซื้อ' และเป็นพื้นฐานในการระบุ 'การใช้จ่ายนอกช่องทางที่อนุมัติ' ซึ่งเกิดขึ้นเมื่อสร้าง PO โดยไม่มีใบขอซื้อที่ได้รับอนุมัติก่อนหน้า. เหตุผลที่สำคัญ เชื่อม PO กับคำขอเริ่มต้น ช่วยวิเคราะห์กระบวนการตั้งแต่ต้นจนจบและระบุการใช้จ่ายนอกช่องทางที่ไม่เป็นไปตามข้อกำหนด. แหล่งข้อมูล แอตทริบิวต์นี้อยู่ในตาราง EKPO ของ SAP S/4HANA (ระดับรายการ PO) ในฟิลด์ BANFN. ตัวอย่าง 1001005110010052 | |||
| ประเภทเอกสาร PO DocumentType | การจัดประเภทที่ใช้แยก Purchase Order แต่ละประเภท เช่น PO มาตรฐาน PO สำหรับบริการ หรือคำสั่งโอนย้ายสินค้าในคลัง. | ||
| คำอธิบาย ประเภทเอกสารเป็นองค์ประกอบการกำหนดค่าหลักใน SAP ซึ่งควบคุมขั้นตอนการทำงาน ช่วงหมายเลข และฟิลด์ของ Purchase Order ช่วยให้ธุรกิจปรับกระบวนการจัดซื้อให้เหมาะกับสถานการณ์ต่าง ๆ ได้. การวิเคราะห์กระบวนการตามประเภทเอกสารสำคัญต่อการทำความเข้าใจความแตกต่างของกระบวนการ เช่น ขั้นตอนของ PO สำหรับสินค้ามาตรฐานอาจต่างจาก PO สำหรับบริการหรือการโอนย้ายสินค้า แอตทริบิวต์นี้ช่วยกรองและเปรียบเทียบขั้นตอนการทำงานแต่ละแบบ เพื่อค้นหาโอกาสในการปรับปรุงที่ตรงจุด. เหตุผลที่สำคัญ ใช้จัดหมวดหมู่ Purchase Order เพื่อเปรียบเทียบกระบวนการจัดซื้อแต่ละแบบ และช่วยอธิบายความแตกต่างของขั้นตอนการทำงานกับระยะเวลาดำเนินการ. แหล่งข้อมูล แอตทริบิวต์นี้อยู่ในตาราง EKKO ของ SAP S/4HANA ในฟิลด์ BSART. ตัวอย่าง NBFOUB | |||
| ผู้ใช้ UserName | รหัสของผู้ใช้ที่ดำเนินกิจกรรมหนึ่ง ๆ. | ||
| คำอธิบาย แอตทริบิวต์นี้บันทึกรหัสผู้ใช้ SAP ที่รับผิดชอบการสร้าง แก้ไข หรืออนุมัติเอกสาร ทำให้ตรวจสอบย้อนกลับการดำเนินการในระบบได้. การวิเคราะห์ตามผู้ใช้ช่วยระบุความต้องการด้านการฝึกอบรม การกระจายภาระงาน และประสิทธิภาพของแต่ละคน ตัวอย่างเช่น ใช้ตรวจสอบว่าผู้ใช้บางรายเกี่ยวข้องกับเวลารออนุมัติที่นานหรือการแก้ไขหลังอนุมัติบ่อยครั้งหรือไม่ เพื่อใช้วางแผนการจัดการทรัพยากรและปรับปรุงกระบวนการ. เหตุผลที่สำคัญ ช่วยระบุผู้รับผิดชอบและวิเคราะห์ประสิทธิภาพในระดับบุคคลหรือทีม ทำให้ค้นหาโอกาสในการฝึกอบรมหรือข้อจำกัดด้านทรัพยากรได้. แหล่งข้อมูล ข้อมูลนี้อยู่ในฟิลด์ เช่น ERNAM (ผู้สร้าง) ใน EKKO หรือฟิลด์ผู้ใช้ในตารางเอกสารการเปลี่ยนแปลง (CDHDR-USERNAME). ตัวอย่าง CB9980000012JSMITHRROE | |||
| ยอดสุทธิรวม TotalNetAmount | มูลค่ารวมของ Purchase Order โดยไม่รวมภาษีและค่าขนส่ง. | ||
| คำอธิบาย แอตทริบิวต์นี้แสดงมูลค่าเงินสุทธิของ Purchase Order เป็นตัวเลขทางการเงินสำคัญที่บอกขนาดของธุรกรรมจัดซื้อ. จำนวนเงินนี้จำเป็นต่อการวิเคราะห์ทางการเงิน เช่น แบ่ง PO ตามมูลค่าสูงหรือต่ำเพื่อดูว่าใช้เส้นทางกระบวนการต่างกันหรือไม่ นอกจากนี้ยังใช้จัดลำดับความสำคัญของการวิเคราะห์ โดยเน้นคำสั่งซื้อที่มีมูลค่าสูงซึ่งอาจมีความเสี่ยงทางการเงินหรือส่งผลต่อธุรกิจมากกว่า. เหตุผลที่สำคัญ ช่วยวิเคราะห์ด้านการเงิน โดยแบ่ง Purchase Order ตามมูลค่าและจัดลำดับความสำคัญของการปรับปรุงกระบวนการในส่วนที่มีค่าใช้จ่ายสูง. แหล่งข้อมูล แอตทริบิวต์นี้อยู่ในตาราง EKKO ของ SAP S/4HANA ในฟิลด์ NETWR. ตัวอย่าง 1500.0025000.50125.75 | |||
| รหัสผู้ขาย VendorId | รหัสเฉพาะของซัพพลายเออร์หรือผู้ขายที่จัดหาสินค้าหรือบริการ. | ||
| คำอธิบาย รหัสผู้ขายเป็นข้อมูลหลักสำคัญที่เชื่อม Purchase Order กับซัพพลายเออร์รายหนึ่ง ใช้ตลอดกระบวนการจัดซื้อเพื่อการสื่อสาร การส่งมอบ และการชำระเงิน. ใน process mining แอตทริบิวต์นี้ช่วยแยกวิเคราะห์ประสิทธิภาพตามซัพพลายเออร์ จำเป็นต่อแดชบอร์ด เช่น 'ประสิทธิภาพระยะเวลารอสินค้าจากซัพพลายเออร์' และ 'อัตราการคืนสินค้าตามผู้ขาย' เพื่อระบุซัพพลายเออร์ที่เชื่อถือได้ รวมถึงรายที่อาจทำให้เกิดความล่าช้าหรือปัญหาด้านคุณภาพ. เหตุผลที่สำคัญ ช่วยวิเคราะห์โดยแยกตามซัพพลายเออร์ เพื่อประเมินประสิทธิภาพ ระบุผู้ขายที่ทำผลงานได้ดีหรือควรปรับปรุง และเพิ่มประสิทธิภาพห่วงโซ่อุปทาน. แหล่งข้อมูล แอตทริบิวต์นี้อยู่ในตาราง EKKO ของ SAP S/4HANA ในฟิลด์ LIFNR. ตัวอย่าง 100023100045100088 | |||
| วันที่ร้องขอให้ส่งมอบ RequestedDeliveryDate | วันที่ธุรกิจร้องขอให้ผู้ขายส่งมอบสินค้าหรือบริการ. | ||
| คำอธิบาย แอตทริบิวต์นี้ระบุวันที่เป้าหมายในการส่งมอบตามที่ตกลงไว้ใน Purchase Order และใช้เป็นเกณฑ์ตั้งต้นในการวัดประสิทธิภาพการส่งมอบของซัพพลายเออร์. ใน process mining จะนำวันที่นี้ไปเปรียบเทียบกับวันที่รับสินค้าจริง (เวลาเกิดเหตุการณ์ 'บันทึกรับสินค้า') เพื่อคำนวณ KPI 'อัตราการส่งมอบตรงเวลาของซัพพลายเออร์' การวิเคราะห์ความคลาดเคลื่อนจากวันที่นี้ช่วยประเมินความน่าเชื่อถือของซัพพลายเออร์และจัดการความเสี่ยงในห่วงโซ่อุปทาน. เหตุผลที่สำคัญ ใช้เป็นเกณฑ์ตั้งต้นในการวัดประสิทธิภาพการส่งมอบตรงเวลาของซัพพลายเออร์ ซึ่งเป็น KPI สำคัญสำหรับการจัดการห่วงโซ่อุปทานและการวางแผนการปฏิบัติการ. แหล่งข้อมูล ดูข้อมูลนี้ได้ในตารางกำหนดการ EKET ในฟิลด์ EINDT. ตัวอย่าง 2023-06-012023-06-152023-07-01 | |||
| กลุ่มจัดซื้อ PurchasingGroup | กลุ่มผู้ซื้อที่รับผิดชอบกิจกรรมการจัดซื้อบางประเภท. | ||
| คำอธิบาย กลุ่มจัดซื้อคือผู้ซื้อหนึ่งคนหรือกลุ่มผู้ซื้อที่รับผิดชอบกิจกรรมการจัดซื้อ วัสดุ หรือผู้ขายบางราย และเป็นผู้ติดต่อหลักกับผู้ขาย แอตทริบิวต์นี้ช่วยวิเคราะห์ภาระงานและผลการดำเนินงานได้ละเอียดกว่าองค์กรจัดซื้อ ใช้ระบุทีมที่มีภาระงานมากเกินไป วัดประสิทธิภาพของกลุ่มผู้ซื้อแต่ละกลุ่ม และดูว่ากลุ่มใดมีแนวโน้มเบี่ยงเบนจากกระบวนการ เช่น การจัดซื้อนอกระบบมากกว่า. เหตุผลที่สำคัญ ช่วยให้เห็นผลการดำเนินงานของกลุ่มผู้ซื้อในระดับทีมอย่างละเอียด และวิเคราะห์ภาระงาน ประสิทธิภาพ และการปฏิบัติตามกระบวนการได้. แหล่งข้อมูล แอตทริบิวต์นี้อยู่ในตาราง EKKO ของ SAP S/4HANA ฟิลด์ EKGRP. ตัวอย่าง 001002N00 | |||
| การส่งมอบตรงเวลาของผู้ขาย SupplierOnTimeDelivery | แฟล็กที่คำนวณขึ้นเพื่อระบุว่ามีการบันทึกรับสินค้าในวันที่กำหนดส่งหรือก่อนวันดังกล่าวหรือไม่. | ||
| คำอธิบาย แอตทริบิวต์แบบบูลีนนี้คำนวณโดยเปรียบเทียบเวลาของกิจกรรม 'Goods Receipt Posted' กับ 'Requested Delivery Date' หากรับสินค้าตรงกับวันที่กำหนดหรือก่อนวันดังกล่าว ระบบจะกำหนดค่าเป็น 'true' แอตทริบิวต์นี้รองรับ KPI 'อัตราการส่งมอบตรงเวลาของผู้ขาย' โดยตรง ช่วยให้กรองการส่งมอบตรงเวลาหรือล่าช้าได้ง่ายขึ้น ซึ่งจำเป็นต่อแดชบอร์ดผลการดำเนินงานของผู้ขายและการประเมินผู้ขาย. เหตุผลที่สำคัญ วัดความน่าเชื่อถือของผู้ขายโดยตรง เป็นพื้นฐานสำหรับ KPI การส่งมอบตรงเวลา และช่วยให้บริหารผลการดำเนินงานของผู้ขายได้อย่างมีประสิทธิภาพ. แหล่งข้อมูล คำนวณโดยเปรียบเทียบเวลาของกิจกรรม 'Goods Receipt Posted' กับแอตทริบิวต์ 'RequestedDeliveryDate'. ตัวอย่าง truefalse | |||
| ประเภทสินค้าในรายการ ItemCategory | ใช้จัดประเภทสินค้าในรายการ Purchase Order เช่น สินค้ามาตรฐาน สินค้าฝากขาย งานรับจ้างผลิต หรือบริการ. | ||
| คำอธิบาย ประเภทสินค้าในรายการกำหนดวิธีควบคุมและดำเนินการจัดซื้อวัสดุหรือบริการแต่ละรายการ และมีผลต่อขั้นตอนถัดไป เช่น การรับสินค้าและการตรวจสอบใบแจ้งหนี้. แอตทริบิวต์นี้สำคัญต่อการวิเคราะห์รูปแบบกระบวนการตามประเภทสิ่งที่จัดซื้อ ตัวอย่างเช่น ขั้นตอนของรายการบริการซึ่งต้องมีใบรับบริการ แตกต่างจากรายการสินค้าคงคลังมาตรฐานอย่างมาก การวิเคราะห์ตามประเภทสินค้าในรายการช่วยอธิบายความแตกต่างและกำหนดแนวทางปรับปรุงกระบวนการให้ตรงจุด. เหตุผลที่สำคัญ อธิบายความแตกต่างของกระบวนการ โดยแยกตามประเภทการจัดซื้อ เช่น สินค้า บริการ หรือการจ้างช่วง. แหล่งข้อมูล แอตทริบิวต์นี้อยู่ในตาราง EKPO ของ SAP S/4HANA ฟิลด์ PSTYP. ตัวอย่าง 093 | |||
| เป็นการจัดซื้อนอกระบบหรือไม่ IsMaverickSpend | แฟล็กที่คำนวณขึ้นเพื่อระบุว่ามีการสร้างใบสั่งซื้อโดยไม่มีใบขอซื้อที่ผ่านการอนุมัติก่อนหน้าหรือไม่. | ||
| คำอธิบาย ระบบคำนวณค่าแบบบูลีนนี้ระหว่างประมวลผลข้อมูล โดยกำหนดเป็น 'true' หากใบสั่งซื้อไม่มีใบขอซื้อที่เกี่ยวข้อง หรือสร้างใบสั่งซื้อโดยข้ามเวิร์กโฟลว์การอนุมัติมาตรฐาน แอตทริบิวต์นี้รองรับแดชบอร์ด 'การระบุการจัดซื้อนอกระบบ' และ KPI ที่เกี่ยวข้องโดยตรง ช่วยวัดขอบเขตของการจัดซื้อที่ไม่เป็นไปตามข้อกำหนด เพื่อให้องค์กรกำหนดเป้าหมายไปยังแผนกหรือกลุ่มผู้ใช้ที่ต้องย้ำเรื่องนโยบายและการควบคุมการจัดซื้อได้. เหตุผลที่สำคัญ ช่วยระบุการจัดซื้อที่ไม่เป็นไปตามข้อกำหนดได้โดยตรง วัดความเบี่ยงเบนจากกระบวนการ และสนับสนุนการควบคุมทางการเงินกับนโยบายการจัดซื้อ. แหล่งข้อมูล ฟิลด์ที่คำนวณจากการไม่มีค่าใน 'PurchaseRequisitionNumber' สำหรับประเภทเอกสารที่ระบุ หรือจากการวิเคราะห์ลำดับเหตุการณ์. ตัวอย่าง truefalse | |||
| มีการแก้ไขงานหรือไม่ IsRework | แฟล็กที่คำนวณขึ้นเพื่อระบุว่าใบสั่งซื้อมีการแก้ไขงานหรือไม่ เช่น มีการเปลี่ยนแปลงหลังอนุมัติหรือมีการคืนสินค้า. | ||
| คำอธิบาย แอตทริบิวต์แบบบูลีนนี้คำนวณจากการวิเคราะห์ลำดับกิจกรรมของใบสั่งซื้อแต่ละรายการ โดยกำหนดเป็น 'true' หากเหตุการณ์ 'Purchase Order Changed' เกิดขึ้นหลังเหตุการณ์ 'Purchase Order Approved' หรือมีเหตุการณ์ 'Goods Returned' แฟล็กนี้ช่วยคำนวณ KPI 'อัตราการประมวลผลโดยตรง' ได้ง่ายขึ้น และช่วยกรองกับแสดงผลใบสั่งซื้อที่ต้องมีผู้ดำเนินการหรือแก้ไขด้วยตนเอง เพื่อวัดต้นทุนและความถี่ของการแก้ไขงาน. เหตุผลที่สำคัญ ช่วยวัดความไม่มีประสิทธิภาพของกระบวนการด้วยการระบุกรณีที่ต้องแก้ไขงาน ซึ่งจำเป็นต่อการคำนวณอัตราการประมวลผลโดยตรงและค้นหาสาเหตุของความเบี่ยงเบน. แหล่งข้อมูล ฟิลด์ที่คำนวณจากลำดับกิจกรรม โดยตรวจสอบว่ามีเหตุการณ์ 'Purchase Order Changed' หลังการอนุมัติหรือไม่ หรือมีเหตุการณ์ 'Goods Returned' หรือไม่. ตัวอย่าง truefalse | |||
| รหัสบริษัท CompanyCode | รหัสที่ระบุนิติบุคคลหรือบริษัทที่สร้างใบสั่งซื้อ. | ||
| คำอธิบาย รหัสบริษัทใช้แทนหน่วยบัญชีอิสระภายในองค์กร ธุรกรรมทางการเงินทั้งหมดที่เกี่ยวข้องกับใบสั่งซื้อจะบันทึกไว้ภายใต้รหัสบริษัทที่ระบุ แอตทริบิวต์พื้นฐานนี้ช่วยกรองและเปรียบเทียบกระบวนการจัดซื้อระหว่างนิติบุคคลต่างๆ การวิเคราะห์ตามรหัสบริษัทช่วยให้เห็นความไม่สอดคล้องในการดำเนินกระบวนการ ระดับประสิทธิภาพที่แตกต่างกัน หรืออัตราการปฏิบัติตามข้อกำหนดที่ไม่เท่ากันในแต่ละส่วนขององค์กร. เหตุผลที่สำคัญ ช่วยแยกวิเคราะห์กระบวนการตามนิติบุคคล เพื่อเปรียบเทียบประสิทธิภาพและการปฏิบัติตามข้อกำหนดระหว่างส่วนต่างๆ ของธุรกิจ. แหล่งข้อมูล แอตทริบิวต์นี้อยู่ในตาราง EKKO ของ SAP S/4HANA ฟิลด์ BUKRS. ตัวอย่าง 101017102000 | |||
| โรงงาน Plant | สถานประกอบการหรือสถานที่ปฏิบัติงานที่จัดส่งสินค้าไปให้หรือให้บริการ. | ||
| คำอธิบาย ใน SAP โรงงานคือสถานที่จริงที่ใช้ผลิตหรือจัดเก็บสินค้า หรือให้บริการ เป็นองค์ประกอบสำคัญของงานโลจิสติกส์และการวางแผน การแยกวิเคราะห์กระบวนการตามโรงงานช่วยให้เห็นความแตกต่างของกระบวนการจัดซื้อในแต่ละภูมิภาคหรือสถานที่ เช่น โรงงานบางแห่งอาจมีเวลาจัดส่งนานกว่า หรือมีอัตราการคืนสินค้าสูงกว่า ซึ่งอาจชี้ให้เห็นปัญหาด้านโลจิสติกส์หรือการควบคุมคุณภาพในพื้นที่นั้น. เหตุผลที่สำคัญ ช่วยวิเคราะห์ตามสถานที่ และแสดงความแตกต่างของผลการดำเนินงานระหว่างสถานที่ปฏิบัติงาน โรงงาน หรือคลังสินค้าต่างๆ. แหล่งข้อมูล แอตทริบิวต์นี้อยู่ในตาราง EKPO ของ SAP S/4HANA ฟิลด์ WERKS. ตัวอย่าง 10101710DE01 | |||
| หมายเลขวัสดุ MaterialNumber | รหัสที่ระบุวัสดุหรือสินค้าที่จัดซื้อโดยเฉพาะ. | ||
| คำอธิบาย หมายเลขวัสดุคือรหัสเฉพาะที่กำหนดให้กับข้อมูลหลักของวัสดุแต่ละรายการใน SAP ใช้กับธุรกรรมทั้งหมดที่เกี่ยวข้องกับวัสดุนั้น ทั้งการจัดซื้อ การจัดการสินค้าคงคลัง และการขาย การวิเคราะห์ตามหมายเลขวัสดุหรือกลุ่มวัสดุช่วยให้เห็นภาพการจัดซื้อแยกตามประเภทสินค้า และระบุได้ว่าการจัดซื้อวัสดุบางประเภทมีประสิทธิภาพต่ำกว่า ใช้เวลานานกว่า หรือมีการคืนสินค้าบ่อยกว่าหรือไม่ ข้อมูลนี้ช่วยในการบริหารจัดการหมวดหมู่สินค้า. เหตุผลที่สำคัญ ช่วยวิเคราะห์การจัดซื้อแยกตามประเภทสินค้า เพื่อค้นหาปัญหาในกระบวนการหรือปัญหาด้านผลการดำเนินงานของผู้ขายที่เกี่ยวข้องกับผลิตภัณฑ์หรือวัสดุแต่ละรายการ. แหล่งข้อมูล แอตทริบิวต์นี้อยู่ในตาราง EKPO ของ SAP S/4HANA ฟิลด์ MATNR. ตัวอย่าง RM100-100FG210SERV-CONSULT | |||
| องค์กรจัดซื้อ PurchasingOrganization | หน่วยงานที่รับผิดชอบการจัดซื้อวัสดุและบริการ รวมถึงการเจรจากับผู้ขาย. | ||
| คำอธิบาย องค์กรจัดซื้อเป็นหน่วยงานหลักในกระบวนการจัดซื้อ โดยอาจจัดโครงสร้างในระดับองค์กร บริษัท หรือโรงงาน และรับผิดชอบกิจกรรมการจัดซื้อทั้งหมด การวิเคราะห์กระบวนการตามองค์กรจัดซื้อช่วยประเมินประสิทธิภาพและผลการดำเนินงานของทีมจัดซื้อหรือภูมิภาคต่างๆ อีกทั้งยังช่วยให้เห็นความแตกต่างด้านการเจรจากับผู้ขาย การปฏิบัติตามกระบวนการ หรือความล่าช้าในการอนุมัติระหว่างหน่วยงาน. เหตุผลที่สำคัญ ช่วยเปรียบเทียบผลการดำเนินงานระหว่างฝ่ายจัดซื้อหรือภูมิภาคต่างๆ เพื่อค้นหาแนวทางปฏิบัติที่ดีและจุดที่ควรปรับปรุง. แหล่งข้อมูล แอตทริบิวต์นี้อยู่ในตาราง EKKO ของ SAP S/4HANA ฟิลด์ EKORG. ตัวอย่าง 10101710US01 | |||
กิจกรรมในกระบวนการจัดซื้อจนถึงชำระเงินสำหรับใบสั่งซื้อ
| กิจกรรม | คำอธิบาย | ||
|---|---|---|---|
| ได้รับใบแจ้งหนี้ | หมายถึงการบันทึกใบแจ้งหนี้จากผู้ขายในระบบ SAP และเชื่อมโยงกับ Purchase Order ที่เกี่ยวข้อง เป็นรายการทางการเงินที่บันทึกอย่างชัดเจนและสร้างเอกสารบัญชี. | ||
| เหตุผลที่สำคัญ นี่เป็นหมุดหมายสำคัญที่เชื่อมกระบวนการจัดซื้อกับกระบวนการเจ้าหนี้การค้า ช่วยวิเคราะห์เวลาตั้งแต่รับสินค้าจนถึงประมวลผลใบแจ้งหนี้. แหล่งข้อมูล สร้างเอกสารบัญชีในตาราง BKPF (ส่วนหัว) โดยมีรายการบรรทัดใน BSEG หรือสมุดรายวันสากล ACDOCA เอกสารเชื่อมโยงกับ PO ในตาราง RSEG. บันทึก วันที่บันทึกเอกสาร (CPUDT) จากตารางส่วนหัวเอกสารบัญชี BKPF. ประเภทเหตุการณ์ explicit | |||
| บันทึกรับสินค้า | หมายถึงการรับสินค้าจากผู้ขายจริงและการบันทึกรายการที่เกี่ยวข้องในระบบ เป็นธุรกรรมที่บันทึกอย่างชัดเจนและอัปเดตประวัติ Purchase Order. | ||
| เหตุผลที่สำคัญ นี่เป็นหมุดหมายสำคัญที่สิ้นสุดระยะเวลารอสินค้าจากซัพพลายเออร์ และเริ่มขั้นตอนตรวจสอบใบแจ้งหนี้ภายใน จำเป็นต่อการติดตามอัตราการส่งมอบตรงเวลา. แหล่งข้อมูล บันทึกเป็นเอกสารวัสดุในตาราง MKPF (ส่วนหัว) และ MSEG (รายการ) และเชื่อมโยงกับประวัติ Purchase Order ในตาราง EKBE ด้วยประเภทการเคลื่อนไหวเฉพาะ เช่น 101. บันทึก วันที่ลงบัญชี (BUDAT) จากส่วนหัวเอกสารวัสดุ (MKPF) ที่เชื่อมโยงผ่าน EKBE. ประเภทเหตุการณ์ explicit | |||
| ปิด Purchase Order | กิจกรรมนี้หมายถึงรายการ Purchase Order ถูกปิดในมุมมองด้านโลจิสติกส์ โดยอนุมานเมื่อกำหนดตัวบ่งชี้ 'ส่งมอบครบแล้ว' และ 'ใบแจ้งหนี้ฉบับสุดท้าย' ทั้งคู่. | ||
| เหตุผลที่สำคัญ ใช้เป็นจุดสิ้นสุดสำหรับวิเคราะห์วงจร Purchase Order การวัดเวลาจนถึงเหตุการณ์นี้ช่วยคำนวณระยะเวลาตั้งแต่ต้นจนจบของการปฏิบัติการจัดซื้อ. แหล่งข้อมูล อนุมานจากสถานะในตารางรายการ Purchase Order EKPO เหตุการณ์เกิดขึ้นเมื่อกำหนดตัวบ่งชี้ 'ส่งมอบครบแล้ว' (ELIKZ) และ 'ใบแจ้งหนี้ฉบับสุดท้าย' (EREKZ) เป็นจริงทั้งคู่. บันทึก อนุมานจากบันทึกการเปลี่ยนแปลงเมื่อฟิลด์ ELIKZ และ EREKZ ใน EKPO ถูกระบุว่าเสร็จสมบูรณ์ทั้งคู่. ประเภทเหตุการณ์ inferred | |||
| สร้าง Purchase Order | บันทึกการสร้างเอกสาร Purchase Order อย่างเป็นทางการ ซึ่งอาจสร้างโดยอ้างอิงหรือไม่อ้างอิงใบขอซื้อก็ได้ ระบบบันทึกเหตุการณ์นี้เมื่อบันทึกเอกสาร PO ครั้งแรก. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้ใช้เป็นจุดเริ่มต้นทางเลือกของกระบวนการได้ โดยเฉพาะเมื่อต้องวิเคราะห์การซื้อนอกช่องทางที่อนุมัติ และเป็นเหตุการณ์พื้นฐานสำหรับติดตามเวลาประมวลผล PO โดยรวม. แหล่งข้อมูล บันทึกไว้ในตารางส่วนหัว Purchase Order EKKO วันที่สร้าง (AEDAT) และเวลาของเอกสารจัดเก็บไว้ในตารางนี้โดยตรง. บันทึก เวลาเกิดเหตุการณ์สร้างเอกสาร (AEDAT) ในตาราง EKKO ของ Purchase Order. ประเภทเหตุการณ์ explicit | |||
| สร้างใบขอซื้อ | กิจกรรมนี้บันทึกคำขอซื้อสินค้าหรือบริการอย่างเป็นทางการ และเป็นจุดเริ่มต้นของกระบวนการจัดซื้อ ระบบจะบันทึกเหตุการณ์นี้เมื่อผู้ใช้บันทึกเอกสารใบขอซื้อใหม่ เช่น ใช้ธุรกรรม ME51N. | ||
| เหตุผลที่สำคัญ นี่เป็นจุดเริ่มต้นหลักของวงจร Purchase Order หลายกรณี การวิเคราะห์เวลาตั้งแต่เหตุการณ์นี้จนถึงการสร้าง PO ช่วยระบุความล่าช้าในการจัดหาและการดำเนินงานภายใน. แหล่งข้อมูล บันทึกไว้ในตาราง EBAN (Purchase Requisition) เวลาเกิดเหตุการณ์สร้างเอกสารดูได้จากตารางประวัติการเปลี่ยนแปลง CDHDR และ CDPOS ของออบเจ็กต์ EBAN. บันทึก บันทึกเหตุการณ์เมื่อสร้างเอกสารในตาราง EBAN. ประเภทเหตุการณ์ explicit | |||
| อนุมัติ Purchase Order | หมายถึง Purchase Order ได้รับอนุมัติภายในครบถ้วนและพร้อมส่งให้ผู้ขาย โดยอนุมานเหตุการณ์นี้จากการเปลี่ยนสถานะในกลยุทธ์การอนุมัติ Purchase Order. | ||
| เหตุผลที่สำคัญ นี่เป็นหมุดหมายสำคัญสำหรับวัดประสิทธิภาพการอนุมัติและงานแก้ไขหลังอนุมัติ การวิเคราะห์เวลาตั้งแต่สร้าง PO จนถึงอนุมัติช่วยให้เห็นความล่าช้าภายในกระบวนการ. แหล่งข้อมูล อนุมานจากตัวบ่งชี้การอนุมัติ (FRGKE) ในตาราง EKKO โดยระบุเวลาเกิดเหตุการณ์จากประวัติการเปลี่ยนแปลง (CDHDR/CDPOS) ว่าฟิลด์นี้ถูกเปลี่ยนเป็นสถานะ 'อนุมัติแล้ว' เมื่อใด. บันทึก อนุมานจากบันทึกการเปลี่ยนแปลงของฟิลด์ตัวบ่งชี้การอนุมัติ (FRGKE) ในตาราง EKKO. ประเภทเหตุการณ์ inferred | |||
| อนุมัติใบขอซื้อ | หมายถึงการอนุมัติใบขอซื้ออย่างเป็นทางการโดยผู้จัดการหรือผู้อนุมัติที่ได้รับมอบหมาย โดยทั่วไปอนุมานจากการเปลี่ยนสถานะในเอกสารใบขอซื้อ ซึ่งแสดงว่าพร้อมแปลงเป็น Purchase Order แล้ว. | ||
| เหตุผลที่สำคัญ เหตุการณ์นี้เป็นหมุดหมายสำคัญสำหรับติดตามระยะเวลาการอนุมัติและระบุคอขวด หากล่าช้า ก็จะส่งผลโดยตรงต่อความเร็วในการสร้าง Purchase Order และส่งให้ผู้ขาย. แหล่งข้อมูล อนุมานจากฟิลด์สถานะการอนุมัติในตาราง EBAN เช่น FRGZU ซึ่งเป็นตัวบ่งชี้การอนุมัติ เวลาเกิดเหตุการณ์ได้จากเอกสารการเปลี่ยนแปลง (CDHDR/CDPOS) ที่บันทึกเวลาตั้งสถานะอนุมัติขั้นสุดท้าย. บันทึก อนุมานจากบันทึกการเปลี่ยนแปลง (CDHDR/CDPOS) ของฟิลด์สถานะการอนุมัติในตาราง EBAN. ประเภทเหตุการณ์ inferred | |||
| แก้ไข Purchase Order | กิจกรรมนี้แสดงว่ามีการแก้ไข Purchase Order หลังจากสร้างครั้งแรก เช่น เปลี่ยนจำนวน ราคา หรือวันที่ส่งมอบ ระบบบันทึกเหตุการณ์นี้ไว้อย่างชัดเจนในบันทึกการเปลี่ยนแปลง. | ||
| เหตุผลที่สำคัญ การติดตามการเปลี่ยนแปลง โดยเฉพาะหลังอนุมัติ เป็นเรื่องสำคัญต่อการระบุความไม่มีประสิทธิภาพ งานที่ต้องทำซ้ำ และปัญหาที่อาจเกี่ยวกับการปฏิบัติตามข้อกำหนด การแก้ไขบ่อยครั้งอาจบ่งชี้ว่าข้อกำหนดตั้งต้นไม่ชัดเจน. แหล่งข้อมูล บันทึกไว้ในตารางเอกสารการเปลี่ยนแปลง CDHDR (ส่วนหัว) และ CDPOS (รายการ) สำหรับออบเจ็กต์ Purchase Order (EINKBELEG) การเปลี่ยนแปลงแต่ละครั้งจะสร้างรายการบันทึกโดยละเอียด. บันทึก บันทึกเหตุการณ์เมื่อมีการเปลี่ยนแปลงฟิลด์สำคัญในตาราง EKKO หรือ EKPO โดยจัดเก็บไว้ใน CDHDR/CDPOS. ประเภทเหตุการณ์ explicit | |||
| คืนสินค้า | หมายถึงการส่งสินค้าที่รับมาแล้วคืนให้ผู้ขาย โดยทั่วไปเกิดจากปัญหาคุณภาพ สินค้าเสียหาย หรือส่งสินค้าผิด ระบบบันทึกเหตุการณ์นี้เป็นการย้อนรายการเคลื่อนไหวสินค้าอย่างชัดเจน. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้ช่วยให้เห็นงานที่ต้องทำซ้ำและปัญหาที่อาจเกี่ยวกับคุณภาพของซัพพลายเออร์หรือความถูกต้องของคำสั่งซื้อ หากมีการคืนสินค้าจากผู้ขายหรือวัสดุรายการใดบ่อยครั้ง แสดงว่าอาจมีปัญหา. แหล่งข้อมูล บันทึกเป็นเอกสารวัสดุโดยใช้ประเภทการเคลื่อนไหวคืนสินค้าระบุไว้ เช่น 122 เหตุการณ์จัดเก็บใน MKPF/MSEG และเชื่อมโยงกับ PO ในตารางประวัติ EKBE. บันทึก วันที่ลงบัญชีจากเอกสารวัสดุที่มีประเภทการเคลื่อนไหวคืนสินค้าใน EKBE. ประเภทเหตุการณ์ explicit | |||
| ชำระใบแจ้งหนี้แล้ว | บันทึกการชำระใบแจ้งหนี้ของผู้ขายขั้นสุดท้ายผ่านรอบการจ่ายเงินหรือการจ่ายเงินด้วยตนเอง เป็นธุรกรรมทางการเงินที่บันทึกอย่างชัดเจนและสร้างเอกสารหักล้างรายการ. | ||
| เหตุผลที่สำคัญ แม้ในทางเทคนิคจะเป็นส่วนหนึ่งของกระบวนการจ่ายเงิน แต่การรวมกิจกรรมนี้ช่วยให้เห็นวงจรจัดซื้อจนถึงชำระเงินได้ครบถ้วน และสำคัญต่อการวิเคราะห์เงื่อนไขและประสิทธิภาพการชำระเงิน. แหล่งข้อมูล บันทึกการจ่ายเงินเป็นเอกสารหักล้างรายการใน BKPF/ACDOCA วันที่หักล้างรายการ (AUGDT) ในรายการบรรทัดใบแจ้งหนี้ของตาราง BSEG หรือ ACDOCA ใช้ระบุเหตุการณ์การจ่ายเงิน. บันทึก วันที่หักล้างรายการ (AUGDT) ของเอกสารใบแจ้งหนี้ ซึ่งดูได้ใน BSEG หรือ ACDOCA. ประเภทเหตุการณ์ explicit | |||
| บันทึกการยืนยันบริการ | กิจกรรมนี้บันทึกการยืนยันว่าบริการที่ระบุใน Purchase Order ได้ดำเนินการแล้ว ระบบบันทึกเหตุการณ์นี้เมื่อสร้างใบรับบริการ. | ||
| เหตุผลที่สำคัญ สำหรับการจัดซื้อบริการ กิจกรรมนี้เทียบเท่ากับการรับสินค้า จำเป็นต่อการติดตามกำหนดเวลาส่งมอบบริการและช่วยให้จ่ายเงินให้ผู้ขายได้ตรงเวลา. แหล่งข้อมูล บันทึกเมื่อสร้างใบรับบริการ โดยจัดเก็บข้อมูลในตาราง ESSR (ส่วนหัว) และ ESLL (รายการ) วันที่สร้างเอกสารใช้เป็นเวลาเกิดเหตุการณ์. บันทึก วันที่สร้างเอกสารใบรับบริการในตาราง ESSR. ประเภทเหตุการณ์ explicit | |||
| ลบ Purchase Order | หมายถึงการยกเลิกหรือตั้งค่าสถานะลบเชิงตรรกะให้รายการ Purchase Order หรือเอกสารทั้งหมด โดยผู้ใช้ตั้งค่าตัวบ่งชี้การลบในเอกสาร. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้เป็นจุดสิ้นสุดทางเลือกของกระบวนการ ซึ่งบ่งชี้ว่ากระบวนการไม่สำเร็จหรือถูกยกเลิก การวิเคราะห์สาเหตุที่ลบ PO อาจช่วยค้นหาปัญหาในการวางแผนความต้องการหรือการกำหนดข้อกำหนด. แหล่งข้อมูล ดึงข้อมูลจากตัวบ่งชี้การลบ (LOEKZ) ในตารางส่วนหัว Purchase Order (EKKO) หรือรายการ (EKPO) โดยระบุเวลาเกิดเหตุการณ์จากเอกสารการเปลี่ยนแปลง (CDHDR/CDPOS). บันทึก เวลาจากเอกสารการเปลี่ยนแปลง (CDHDR/CDPOS) เมื่อตั้งค่าตัวบ่งชี้การลบ (LOEKZ). ประเภทเหตุการณ์ explicit | |||
| ส่ง Purchase Order ให้ผู้ขาย | หมายถึงเวลาที่ส่ง Purchase Order ให้ผู้ขาย เช่น ผ่าน EDI อีเมล หรือเอกสารพิมพ์ โดยมักบันทึกเหตุการณ์นี้ไว้ในบันทึกการจัดการผลลัพธ์ของระบบ. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้เป็นจุดเริ่มต้นที่แท้จริงของระยะเวลารอสินค้าจากซัพพลายเออร์ จึงสำคัญต่อการวัดประสิทธิภาพของซัพพลายเออร์อย่างแม่นยำตั้งแต่ได้รับคำสั่งซื้อ. แหล่งข้อมูล ดึงข้อมูลจากตารางควบคุมผลลัพธ์ NAST ซึ่งบันทึกข้อความที่ส่งสำหรับเอกสารจัดซื้อ โดยใช้วันที่และเวลาของประเภทผลลัพธ์ที่เกี่ยวข้อง เช่น EDI หรืออีเมล. บันทึก เวลาของข้อความผลลัพธ์แรกที่ส่ง PO สำเร็จในตาราง NAST. ประเภทเหตุการณ์ inferred | |||
คู่มือการดึงข้อมูล
ขั้นตอน
- ข้อกำหนดเบื้องต้นและสิทธิ์เข้าถึง: ตรวจสอบว่าคุณมีผู้ใช้ที่ได้รับสิทธิ์เหมาะสมในการเรียกดู Core Data Services (CDS) view ในระบบ SAP S/4HANA คุณสามารถเข้าถึงผ่าน SAP HANA Studio, ABAP Development Tools (ADT) for Eclipse หรือเครื่องมือดึงข้อมูลจากผู้ให้บริการภายนอกที่รองรับการเชื่อมต่อ SQL กับฐานข้อมูล SAP HANA
- ระบุรายละเอียดการเชื่อมต่อระบบ: ขอพารามิเตอร์ที่จำเป็นสำหรับเชื่อมต่อระบบ SAP S/4HANA เช่น โฮสต์ หมายเลขอินสแตนซ์ และข้อมูลรับรองการเข้าสู่ระบบ
- เชื่อมต่อฐานข้อมูล: ใช้ SQL client ที่คุณเลือกเพื่อเชื่อมต่อฐานข้อมูล SAP S/4HANA ซึ่งมี CDS view อยู่
- เตรียม SQL Query: คัดลอก SQL query ทั้งหมดจากส่วน query ในเอกสารนี้ไปวางใน SQL editor โดย query นี้ออกแบบมาเพื่อดึงกิจกรรมและแอตทริบิวต์ที่จำเป็นทั้งหมด
- กำหนดพารามิเตอร์ตัวกรอง: ค้นหาค่าตัวแทนใน query แล้วแทนที่ _start_date และ _end_date ด้วยช่วงวันที่ที่ต้องการวิเคราะห์ เช่น '20230101' และ '20231231' แก้ตัวกรอง poh.CompanyCode ให้ตรงกับรหัสบริษัทที่ต้องการวิเคราะห์
- เรียกใช้ Query: เรียกใช้ SQL query ที่แก้ไขแล้วกับฐานข้อมูล S/4HANA การประมวลผลอาจใช้เวลาสักระยะ ขึ้นอยู่กับปริมาณข้อมูลและช่วงวันที่ที่ระบุ
- ตรวจสอบผลลัพธ์เบื้องต้น: เมื่อ query ทำงานเสร็จ ให้ตรวจสอบผลลัพธ์ใน SQL client อย่างคร่าว ๆ ตรวจดูว่ามีกิจกรรมต่าง ๆ ครบหรือไม่ มีการระบุเวลาอย่างถูกต้องหรือไม่ และ case ID (PurchaseOrderNumber) สอดคล้องกันหรือไม่
- ส่งออกข้อมูล: ส่งออกผลลัพธ์ทั้งหมดจากเครื่องมือ SQL เป็นไฟล์ CSV (Comma Separated Values) และตรวจสอบว่าไฟล์ใช้การเข้ารหัส UTF-8 เพื่อป้องกันปัญหาเกี่ยวกับอักขระ
- เตรียมอัปโหลด: ก่อนอัปโหลดไปยัง ProcessMind ให้เปิดไฟล์ CSV และตรวจสอบว่าชื่อหัวคอลัมน์ตรงกับแอตทริบิวต์ในข้อกำหนดข้อมูลทุกประการ (PurchaseOrderNumber, ActivityName, EventTime เป็นต้น) แก้ชื่อคอลัมน์หากเครื่องมือส่งออกเปลี่ยนชื่อไป
- อัปโหลดไปยัง ProcessMind: อัปโหลดไฟล์ CSV ที่จัดเตรียมแล้วไปยังโปรเจกต์ ProcessMind ระหว่างนำเข้า ให้จับคู่คอลัมน์ในไฟล์กับฟิลด์ case ID กิจกรรม และเวลา
การกำหนดค่า
- CDS View หลักที่ใช้: การดึงข้อมูลอาศัย CDS view มาตรฐานที่มีความหมายชัดเจน โดย view หลักมีดังนี้
- I_PurchaseOrderItemAPI01: ข้อมูลหลักของรายการใบสั่งซื้อ
- I_PurchaseRequisitionItemAPI01: รายละเอียดใบขอซื้อ
- I_MaterialDocumentItem: การเคลื่อนไหวของสินค้า เช่น การรับคืนและการรับสินค้า
- I_ServiceEntrySheetAPI01: เหตุการณ์ยืนยันการให้บริการ
- I_SupplierInvoiceAPI01: ข้อมูลใบแจ้งหนี้จากผู้ขาย
- I_OperationalAcctgDocItem: การเชื่อมโยงใบแจ้งหนี้กับเอกสารทางการเงินเพื่อติดตามการชำระเงิน
- I_ChangeDocument: การบันทึกการเปลี่ยนแปลงใบสั่งซื้อ
- การกรองช่วงวันที่: ควรกรองช่วงวันที่เพื่อควบคุมประสิทธิภาพและปริมาณข้อมูล query ใช้ค่าตัวอย่าง _start_date และ _end_date กับวันที่สร้างใบสั่งซื้อ (PurchaseOrderDate) แนะนำให้เริ่มจากข้อมูลย้อนหลัง 3 ถึง 6 เดือน
- การกรองตามหน่วยงาน: ควรกรอง query ด้วย CompanyCode เสมอ เพื่อจำกัดการดึงข้อมูลให้อยู่ในหน่วยธุรกิจที่เกี่ยวข้อง คุณสามารถเพิ่มตัวกรอง PurchaseOrderType หรือ PurchasingOrganization ใน common table expression PO_base เพื่อกำหนดขอบเขตให้เฉพาะเจาะจงขึ้น
- ข้อกำหนดเบื้องต้น: ผู้เรียกใช้ query ต้องมีสิทธิ์ SELECT สำหรับ CDS view ทั้งหมดที่ระบุไว้ โดยทั่วไปจะให้สิทธิ์เข้าถึง view เหล่านี้ผ่านบทบาทด้านธุรกิจหรือการวิเคราะห์ที่กำหนดใน S/4HANA หากไม่มีสิทธิ์ที่เหมาะสม query จะทำงานไม่สำเร็จ.
ตัวอย่างคำค้น sql
WITH PO_base AS (
SELECT
poh.PurchaseOrder AS PurchaseOrderNumber,
poi.PurchaseOrderItem AS PurchaseOrderItem,
poh.CompanyCode,
poh.PurchaseOrderType AS DocumentType,
poh.Supplier AS VendorId,
poh.PurchaseOrderDate,
poi.PurchaseRequisition AS PurchaseRequisitionNumber,
poi.NetPriceAmount * poi.OrderQuantity AS TotalNetAmount, -- Note: This is item-level net amount
poh.CreationDate AS POCreationDate,
poh.CreationTime AS POCreationTime,
poh.LastChangeDateTime AS POLastChangeDateTime,
poi.IsDeleted,
poi.DeliveryIsCompleted,
poi.FinalInvoiceIsExpected,
poi.GoodsReceiptIsExpected,
poi.LastGoodsReceiptDate,
poi.LastInvoiceReceiptDate
FROM I_PurchaseOrderAPI01 poh
JOIN I_PurchaseOrderItemAPI01 poi
ON poh.PurchaseOrder = poi.PurchaseOrder
WHERE
poh.PurchaseOrderDate BETWEEN '_start_date' AND '_end_date' -- Placeholder: e.g., '20230101' and '20230630'
AND poh.CompanyCode IN ('[YourCompanyCode]') -- Placeholder: e.g., '1010'
)
-- 1. Purchase Requisition Created
SELECT
po.PurchaseOrderNumber,
'Purchase Requisition Created' AS ActivityName,
CAST(CONCAT(pr.CreationDate, 'T', pr.CreationTime) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem, -- Placeholder
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
pr.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate, -- Available in PR, add if needed
po.DocumentType
FROM I_PurchaseRequisitionItemAPI01 pr
JOIN PO_base po
ON pr.PurchaseRequisition = po.PurchaseRequisitionNumber AND pr.PurchaseRequisitionItem = po.PurchaseOrderItem
UNION ALL
-- 2. Purchase Requisition Approved
SELECT
po.PurchaseOrderNumber,
'Purchase Requisition Approved' AS ActivityName,
CAST(CONCAT(pr.PurReqnReleaseDate, 'T', '000000') AS TIMESTAMP) AS EventTime, -- Time is not available in this view
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
NULL AS UserName, -- Approver info requires complex joins
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_PurchaseRequisitionItemAPI01 pr
JOIN PO_base po
ON pr.PurchaseRequisition = po.PurchaseRequisitionNumber AND pr.PurchaseRequisitionItem = po.PurchaseOrderItem
WHERE
pr.PurReqnReleaseDate IS NOT NULL
UNION ALL
-- 3. Purchase Order Created
SELECT
po.PurchaseOrderNumber,
'Purchase Order Created' AS ActivityName,
CAST(CONCAT(po.POCreationDate, 'T', po.POCreationTime) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
poh.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
poi.RequestedDeliveryDate,
po.DocumentType
FROM PO_base po
JOIN I_PurchaseOrderAPI01 poh ON po.PurchaseOrderNumber = poh.PurchaseOrder
JOIN I_PurchaseOrderItemAPI01 poi ON po.PurchaseOrderNumber = poi.PurchaseOrder AND po.PurchaseOrderItem = poi.PurchaseOrderItem
UNION ALL
-- 4. Purchase Order Approved
SELECT DISTINCT
po.PurchaseOrderNumber,
'Purchase Order Approved' AS ActivityName,
CAST(poh.ReleaseDate AS TIMESTAMP) AS EventTime, -- Assuming ReleaseDate reflects final approval
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
NULL AS UserName, -- Approver info requires complex joins
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
poi.RequestedDeliveryDate,
po.DocumentType
FROM PO_base po
JOIN I_PurchaseOrderAPI01 poh ON po.PurchaseOrderNumber = poh.PurchaseOrder
JOIN I_PurchaseOrderItemAPI01 poi ON po.PurchaseOrderNumber = poi.PurchaseOrder AND po.PurchaseOrderItem = poi.PurchaseOrderItem
WHERE poh.ReleaseDate IS NOT NULL
UNION ALL
-- 5. Purchase Order Sent to Vendor
SELECT DISTINCT
po.PurchaseOrderNumber,
'Purchase Order Sent to Vendor' AS ActivityName,
CAST(poh.ReleaseDate AS TIMESTAMP) AS EventTime, -- Using ReleaseDate as a proxy for sending time
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
NULL AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
poi.RequestedDeliveryDate,
po.DocumentType
FROM PO_base po
JOIN I_PurchaseOrderAPI01 poh ON po.PurchaseOrderNumber = poh.PurchaseOrder
JOIN I_PurchaseOrderItemAPI01 poi ON po.PurchaseOrderNumber = poi.PurchaseOrder AND po.PurchaseOrderItem = poi.PurchaseOrderItem
WHERE poh.ReleaseDate IS NOT NULL
UNION ALL
-- 6. Purchase Order Changed
SELECT DISTINCT
ch.OBJECTID AS PurchaseOrderNumber,
'Purchase Order Changed' AS ActivityName,
CAST(CONCAT(ch.ChangeDocumentDate, 'T', ch.ChangeDocumentTime) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
ch.UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_ChangeDocument ch
JOIN PO_base po ON ch.OBJECTID = po.PurchaseOrderNumber
WHERE
ch.ObjectClassName = 'EINKBELEG' -- Object Class for Purchase Documents
AND CAST(CONCAT(ch.ChangeDocumentDate, 'T', ch.ChangeDocumentTime) AS TIMESTAMP) > CAST(CONCAT(po.POCreationDate, 'T', po.POCreationTime) AS TIMESTAMP)
UNION ALL
-- 7. Goods Receipt Posted
SELECT
po.PurchaseOrderNumber,
'Goods Receipt Posted' AS ActivityName,
CAST(CONCAT(md.PostingDate, 'T', md.CreationTime) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
md.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_MaterialDocumentItem md
JOIN PO_base po
ON md.PurchaseOrder = po.PurchaseOrderNumber AND md.PurchaseOrderItem = po.PurchaseOrderItem
WHERE
md.GoodsMovementType = '101'
UNION ALL
-- 8. Services Confirmation Entered
SELECT
po.PurchaseOrderNumber,
'Services Confirmation Entered' AS ActivityName,
CAST(se.PostingDate AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
se.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_ServiceEntrySheetAPI01 se
JOIN PO_base po
ON se.PurchaseOrder = po.PurchaseOrderNumber AND se.PurchaseOrderItem = po.PurchaseOrderItem
UNION ALL
-- 9. Goods Returned
SELECT
po.PurchaseOrderNumber,
'Goods Returned' AS ActivityName,
CAST(CONCAT(md.PostingDate, 'T', md.CreationTime) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
md.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_MaterialDocumentItem md
JOIN PO_base po
ON md.PurchaseOrder = po.PurchaseOrderNumber AND md.PurchaseOrderItem = po.PurchaseOrderItem
WHERE
md.GoodsMovementType = '122'
UNION ALL
-- 10. Invoice Received
SELECT
po.PurchaseOrderNumber,
'Invoice Received' AS ActivityName,
CAST(inv.PostingDate AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
inv.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_SupplierInvoiceAPI01 inv
JOIN PO_base po
ON inv.PurchaseOrderReference = po.PurchaseOrderNumber
WHERE
inv.DebitCreditCode = 'H' -- 'H' for Credit (Supplier Invoice)
UNION ALL
-- 11. Invoice Paid
SELECT
po.PurchaseOrderNumber,
'Invoice Paid' AS ActivityName,
CAST(doc.ClearingDate AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
doc.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_SupplierInvoiceAPI01 inv
JOIN I_OperationalAcctgDocItem doc
ON inv.AccountingDocument = doc.AccountingDocument
JOIN PO_base po
ON inv.PurchaseOrderReference = po.PurchaseOrderNumber
WHERE
doc.IsCleared = 'X' AND doc.ClearingDate IS NOT NULL
UNION ALL
-- 12. Purchase Order Completed
SELECT
po.PurchaseOrderNumber,
'Purchase Order Completed' AS ActivityName,
CAST(GREATEST(po.LastGoodsReceiptDate, po.LastInvoiceReceiptDate) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
'SYSTEM' AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM PO_base po
WHERE
po.DeliveryIsCompleted = 'X'
AND (po.FinalInvoiceIsExpected = 'X' OR po.GoodsReceiptIsExpected = '') -- Logic for completion
AND GREATEST(po.LastGoodsReceiptDate, po.LastInvoiceReceiptDate) IS NOT NULL
UNION ALL
-- 13. Purchase Order Deleted
SELECT
po.PurchaseOrderNumber,
'Purchase Order Deleted' AS ActivityName,
CAST(po.POLastChangeDateTime AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
NULL AS UserName, -- User who set the flag is in change docs
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM PO_base po
WHERE
po.IsDeleted = 'X' ขั้นตอน
- ตรวจสอบว่ามีสิทธิ์เข้าถึง SQL โดยตรงไปยัง SAP HANA schema ที่มี EKKO และ EKPO และขอสิทธิ์อ่านข้อมูลที่จำเป็น แทนค่าตัวอย่าง schema และการเชื่อมต่อด้วยค่าที่ตั้งไว้สำหรับระบบของคุณ
- กำหนดช่วงดึงข้อมูลด้วย [Start timestamp] และ [End timestamp] แนะนำให้เริ่มจากช่วง 3 ถึง 6 เดือนสำหรับการโหลดข้อมูลครั้งแรก ใช้ตัวกรองรหัสบริษัทและประเภทเอกสารเฉพาะเมื่อขอบเขตการรายงานกำหนดไว้
- ระบุใบสั่งซื้อใน EKKO และ EKPO โดยเก็บหมายเลขใบสั่งซื้อ ผู้ขาย ประเภทเอกสาร รหัสบริษัท วันที่สร้าง เวลา และแอตทริบิวต์ระดับรายการ รวมมูลค่าสุทธิใน EKPO เพื่อคำนวณ TotalNetAmount ในระดับใบสั่งซื้อ
- ดึงเหตุการณ์การสร้างและอนุมัติใบขอซื้อจาก EBAN โดยใช้หมายเลขใบขอซื้อและรายการอ้างอิงใน EKPO เพื่อเชื่อมโยงใบขอกับใบสั่งซื้อ เนื่องจากตัวบ่งชี้การอนุมัติและเวลาประทับของใบขอซื้อแตกต่างกันตามการตั้งค่าแต่ละรุ่น ให้กำหนดนิพจน์สถานะและเวลาประทับการอนุมัติตามกลยุทธ์การอนุมัติที่ใช้งานอยู่ใน SAP รุ่น [Configure based on your system]
- ดึงเหตุการณ์การสร้าง อนุมัติ เปลี่ยนแปลง ลบ และปิดใบสั่งซื้อ การสร้างใช้วันที่และเวลาสร้างจาก EKKO ส่วนการอนุมัติ การเปลี่ยนแปลง และการลบต้องใช้แหล่งข้อมูลประวัติการอนุมัติหรือการเปลี่ยนแปลง หาก schema ที่เลือกไม่มีประวัติที่เกี่ยวข้อง ให้กำหนดนิพจน์แหล่งข้อมูลโดยใช้ [Your table name] และ [Your column name]
- ดึงเหตุการณ์การสื่อสารกับผู้ขาย การรับสินค้า การยืนยันบริการ การคืนสินค้า การรับใบแจ้งหนี้ และการชำระใบแจ้งหนี้จากแหล่งข้อมูลผลลัพธ์ เอกสารวัสดุ รายการบริการ ใบแจ้งหนี้ บัญชี และการหักล้างที่เกี่ยวข้อง query มีค่าตัวอย่างแหล่งข้อมูลที่ต้องกำหนดตามระบบ เนื่องจาก EKKO และ EKPO เพียงอย่างเดียวไม่มีข้อมูลเหล่านี้
- ปรับรูปแบบเหตุการณ์จากทุกแหล่งให้เป็นโครงสร้างบันทึกเหตุการณ์เดียวกัน แต่ละแถวต้องมี PurchaseOrderNumber, ActivityName, EventTime, SourceSystem, LastDataUpdate, VendorId, UserName, TotalNetAmount, PurchaseRequisitionNumber, RequestedDeliveryDate และ DocumentType หากแหล่งข้อมูลมีเหตุการณ์เดียวกันหลายครั้ง ให้เก็บแต่ละเหตุการณ์ที่ถูกต้องไว้
- ตรวจสอบเวลาประทับ ลบเฉพาะแถวจากแหล่งข้อมูลที่ซ้ำกันทุกประการ และอย่าคาดเดากิจกรรมที่ไม่มีระเบียนจากแหล่งข้อมูล ProcessMind อ่านบันทึกเหตุการณ์ตามข้อมูลที่ได้รับ ดังนั้นกิจกรรมทุกอย่างที่แสดงในภาพกระบวนการต้องมีแถวข้อมูลระบุไว้อย่างชัดเจน
- ส่งออกผลลัพธ์เป็นไฟล์คั่นด้วยตัวคั่นหรือชุดผลลัพธ์จากฐานข้อมูล โดยมีแถวหัวตารางหนึ่งแถวและชื่อคอลัมน์ที่คงที่ ใช้รูปแบบเวลาประทับที่การตั้งค่าอัปโหลดของ ProcessMind รองรับ เก็บ PurchaseOrderNumber เป็นข้อความ แล้วอัปโหลดบันทึกเหตุการณ์ทั้งหมดผ่านการเชื่อมต่อข้อมูล ProcessMind ที่ตั้งค่าไว้.
การกำหนดค่า
- ออบเจ็กต์ต้นทาง: ยืนยันแล้วว่า EKKO และ EKPO เป็นแหล่งข้อมูลส่วนหัวและรายการใบสั่งซื้อ ต้องตั้งค่าออบเจ็กต์เพิ่มเติมสำหรับใบขอซื้อ สถานะการอนุมัติ ประวัติการเปลี่ยนแปลง ผลลัพธ์ การเคลื่อนไหวของสินค้า ใบยืนยันบริการ ใบแจ้งหนี้ การชำระเงิน และการหักล้าง โดยอิงกับ SAP S/4HANA รุ่นและโมเดลข้อมูลที่ใช้งาน
- ตัวระบุเคส: ใช้ PurchaseOrderNumber เป็นตัวระบุเคส เหตุการณ์ระดับรายการต้องเชื่อมโยงกับหมายเลขใบสั่งซื้อ และเก็บข้อมูลอ้างอิงรายการไว้ในคอลัมน์เพิ่มเติมเฉพาะแหล่งข้อมูลหากจำเป็น
- ช่วงวันที่: เริ่มจาก 3 ถึง 6 เดือน หากโหลดข้อมูลย้อนหลัง ให้แบ่งประมวลผลเป็นช่วงสั้น ๆ และตรวจสอบช่วงวันที่ที่ทับซ้อนกันเพื่อไม่ให้ข้อมูลตกหล่น
- ตัวกรอง: กำหนดตัวกรอง Company Code, Document Type, VendorId, หน่วยงานจัดซื้อ กลุ่มจัดซื้อ และวันที่เกิดเหตุการณ์ตามขอบเขตที่ต้องการ ตัวกรองรหัสบริษัทและประเภทเอกสารต้องใช้ค่าที่ถูกต้องในระบบเป้าหมาย
- ความหมายของเหตุการณ์: ระบุการสร้างและการลบได้โดยตรงเมื่อมีฟิลด์เอกสารหรือบันทึกที่เกี่ยวข้อง ส่วนการอนุมัติและการปิดเป็นเหตุการณ์ตามสถานะ ซึ่งต้องกำหนดเวลาประทับของสถานะ อย่าสร้างแถวจากสถานะปัจจุบันเพียงอย่างเดียว หากไม่มีเวลาประทับเหตุการณ์ที่ตรวจสอบได้
- ประสิทธิภาพ: กรองวันที่เกิดเหตุการณ์และขอบเขตหน่วยงานตั้งแต่ต้น รวมข้อมูล EKPO ก่อนเชื่อมกับแหล่งเหตุการณ์เมื่อทำได้ และแบ่งโหลดข้อมูลย้อนหลังปริมาณมากเป็นช่วงเวลา ตรวจสอบสถิติฐานข้อมูลให้เหมาะสม และหลีกเลี่ยงการเชื่อมตารางรายการ บัญชี และประวัติการเปลี่ยนแปลงโดยไม่มีตัวกรอง
- เวลาประทับการรีเฟรช: กำหนด LastDataUpdate เป็นเวลาที่เรียกใช้การดึงข้อมูลสำหรับทุกแถวในรอบนั้น
- ข้อกำหนดเบื้องต้น: ต้องเชื่อมต่อ SAP HANA ได้ มีสิทธิ์อ่านออบเจ็กต์ต้นทางที่กำหนดทั้งหมด เข้าถึงข้อมูลจัดซื้อ การจัดการสินค้าคงคลัง การจัดซื้อบริการ การตรวจสอบใบแจ้งหนี้ และเจ้าหนี้การค้าได้ รวมถึงมีการเชื่อมต่อ ProcessMind ที่นำเข้าไฟล์หรือชุดผลลัพธ์ที่เลือกได้
- การตั้งค่าเฉพาะระบบ: แทนค่าตัวอย่างแหล่งข้อมูลในวงเล็บเหลี่ยมทุกจุดใน query ด้วยตาราง view คอลัมน์ หรือนิพจน์ที่ได้รับอนุมัติจากระบบ SAP S/4HANA เป้าหมาย อย่าใส่ข้อมูลรับรองไว้ใน query หรือการตั้งค่าการดึงข้อมูล.
ตัวอย่างคำค้น sql
WITH
params AS (
SELECT
CAST('[Start timestamp]' AS TIMESTAMP) AS start_ts,
CAST('[End timestamp]' AS TIMESTAMP) AS end_ts,
CAST(CURRENT_TIMESTAMP AS TIMESTAMP) AS last_data_update,
CAST('[Source system]' AS NVARCHAR(100)) AS source_system
FROM DUMMY
),
po_base AS (
SELECT
h.MANDT,
h.EBELN AS PurchaseOrderNumber,
h.LIFNR AS VendorId,
h.BSART AS DocumentType,
h.BUKRS AS CompanyCode,
CAST(h.AEDAT AS DATE) AS POChangedDate,
CAST(h.AEDAT AS TIMESTAMP) AS POChangedTimestamp,
CAST(h.ERNAM AS NVARCHAR(100)) AS POCreatedBy,
CAST(h.BEDAT AS DATE) AS PODate,
CAST(h.EBELN AS NVARCHAR(20)) AS PurchaseOrderKey,
CAST(SUM(COALESCE(i.NETWR, 0)) AS DECIMAL(23, 2)) AS TotalNetAmount,
CAST(MIN(i.BEDNR) AS NVARCHAR(20)) AS PurchaseRequisitionNumber,
CAST(MIN(i.EINDT) AS DATE) AS RequestedDeliveryDate
FROM EKKO h
INNER JOIN EKPO i
ON i.MANDT = h.MANDT
AND i.EBELN = h.EBELN
WHERE h.AEDAT >= (SELECT start_ts FROM params)
AND h.AEDAT < (SELECT end_ts FROM params)
AND h.BUKRS IN ([Company Code filter])
AND h.BSART IN ([Document Type filter])
GROUP BY
h.MANDT,
h.EBELN,
h.LIFNR,
h.BSART,
h.BUKRS,
h.AEDAT,
h.ERNAM,
h.BEDAT
),
po_items AS (
SELECT
i.MANDT,
i.EBELN AS PurchaseOrderNumber,
i.EBELP,
i.BANFN AS PurchaseRequisitionNumber,
i.BEDNR,
i.EINDT AS RequestedDeliveryDate
FROM EKPO i
),
events AS (
SELECT
p.PurchaseOrderNumber,
'Purchase Requisition Created' AS ActivityName,
CAST(r.[Purchase requisition creation timestamp] AS TIMESTAMP) AS EventTime,
s.source_system AS SourceSystem,
s.last_data_update AS LastDataUpdate,
p.VendorId,
CAST(r.[Purchase requisition created by] AS NVARCHAR(100)) AS UserName,
p.TotalNetAmount,
CAST(r.[Purchase requisition number] AS NVARCHAR(20)) AS PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your requisition source table or view] r
ON r.[Client] = p.MANDT
AND r.[Purchase requisition number] = p.PurchaseRequisitionNumber
CROSS JOIN params s
WHERE r.[Purchase requisition creation timestamp] >= s.start_ts
AND r.[Purchase requisition creation timestamp] < s.end_ts
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Requisition Approved' AS ActivityName,
CAST(r.[Purchase requisition approval timestamp] AS TIMESTAMP) AS EventTime,
s.source_system,
s.last_data_update,
p.VendorId,
CAST(r.[Purchase requisition approver] AS NVARCHAR(100)),
p.TotalNetAmount,
CAST(r.[Purchase requisition number] AS NVARCHAR(20)),
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your requisition approval history table or view] r
ON r.[Client] = p.MANDT
AND r.[Purchase requisition number] = p.PurchaseRequisitionNumber
CROSS JOIN params s
WHERE r.[Purchase requisition approval timestamp] >= s.start_ts
AND r.[Purchase requisition approval timestamp] < s.end_ts
AND r.[Approval status] = '[Approved status value]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Created',
CAST(p.PODate AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
p.POCreatedBy,
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
CROSS JOIN params s
WHERE p.PODate >= CAST(s.start_ts AS DATE)
AND p.PODate < CAST(s.end_ts AS DATE)
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Approved',
CAST(a.[Purchase order approval timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(a.[Approver] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your purchase order release history table or view] a
ON a.[Client] = p.MANDT
AND a.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE a.[Purchase order approval timestamp] >= s.start_ts
AND a.[Purchase order approval timestamp] < s.end_ts
AND a.[Release status] = '[Approved release status value]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Sent to Vendor',
CAST(o.[Output timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(o.[Output user] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your purchase order output source table or view] o
ON o.[Client] = p.MANDT
AND o.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE o.[Output timestamp] >= s.start_ts
AND o.[Output timestamp] < s.end_ts
AND o.[Output status] = '[Successfully processed output status]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Changed',
CAST(c.[Change timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(c.[Changed by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your purchase order change history table or view] c
ON c.[Client] = p.MANDT
AND c.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE c.[Change timestamp] >= s.start_ts
AND c.[Change timestamp] < s.end_ts
AND c.[Change indicator] = '[Changed indicator value]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Goods Receipt Posted',
CAST(g.[Goods movement timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(g.[Posted by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your goods movement source table or view] g
ON g.[Client] = p.MANDT
AND g.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE g.[Goods movement timestamp] >= s.start_ts
AND g.[Goods movement timestamp] < s.end_ts
AND g.[Movement type] IN ([Goods receipt movement types])
AND g.[Reversal indicator] IS NULL
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Services Confirmation Entered',
CAST(v.[Service entry timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(v.[Entered by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your service entry sheet source table or view] v
ON v.[Client] = p.MANDT
AND v.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE v.[Service entry timestamp] >= s.start_ts
AND v.[Service entry timestamp] < s.end_ts
AND v.[Service entry status] = '[Accepted service entry status]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Goods Returned',
CAST(g.[Goods movement timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(g.[Posted by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your goods movement source table or view] g
ON g.[Client] = p.MANDT
AND g.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE g.[Goods movement timestamp] >= s.start_ts
AND g.[Goods movement timestamp] < s.end_ts
AND g.[Movement type] IN ([Goods return movement types])
AND g.[Reversal indicator] IS NULL
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Invoice Received',
CAST(i.[Invoice posting timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(i.[Posted by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your supplier invoice source table or view] i
ON i.[Client] = p.MANDT
AND i.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE i.[Invoice posting timestamp] >= s.start_ts
AND i.[Invoice posting timestamp] < s.end_ts
AND i.[Invoice status] = '[Posted invoice status]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Invoice Paid',
CAST(i.[Clearing timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(i.[Cleared by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your supplier invoice clearing source table or view] i
ON i.[Client] = p.MANDT
AND i.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE i.[Clearing timestamp] >= s.start_ts
AND i.[Clearing timestamp] < s.end_ts
AND i.[Clearing status] = '[Cleared status value]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Completed',
CAST(x.[Completion timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(x.[Completion user] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your purchase order item status source table or view] x
ON x.[Client] = p.MANDT
AND x.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE x.[Completion timestamp] >= s.start_ts
AND x.[Completion timestamp] < s.end_ts
AND x.[Delivery completed indicator] = '[Set indicator value]'
AND x.[Final invoice indicator] = '[Set indicator value]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Deleted',
CAST(d.[Deletion timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(d.[Deleted by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your purchase order deletion history table or view] d
ON d.[Client] = p.MANDT
AND d.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE d.[Deletion timestamp] >= s.start_ts
AND d.[Deletion timestamp] < s.end_ts
AND d.[Deletion indicator] = '[Set deletion indicator value]'
)
SELECT
PurchaseOrderNumber,
ActivityName,
EventTime,
SourceSystem,
LastDataUpdate,
VendorId,
UserName,
TotalNetAmount,
PurchaseRequisitionNumber,
RequestedDeliveryDate,
DocumentType
FROM events
WHERE PurchaseOrderNumber IS NOT NULL
AND ActivityName IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY PurchaseOrderNumber, EventTime, ActivityName; ขั้นตอน
- กำหนดข้อกำหนดและออกแบบ: กำหนดโครงสร้างข้อมูลสุดท้ายของไฟล์บันทึกเหตุการณ์ โดยระบุแอตทริบิวต์ที่จำเป็นและแนะนำทั้งหมด จัดทำเอกสารตาราง SAP ที่จะใช้ดึงข้อมูลสำหรับกิจกรรมที่จำเป็นทั้ง 13 รายการ เช่น EKKO, EKPO, EKBE, CDHDR และ CDPOS
- สร้างโปรแกรม: ใน SAP GUI ให้เปิด ABAP Editor ด้วยรหัสธุรกรรม SE38 หรือ SE80 แล้วสร้างโปรแกรมที่เรียกใช้งานได้ เช่น Z_PM_PO_EXTRACT
- กำหนดหน้าจอเลือกข้อมูล: เขียนโค้ดหน้าจอเลือกข้อมูลสำหรับรายงาน เพื่อให้ผู้ใช้กรองข้อมูลที่จะดึงได้ โดยเพิ่มพารามิเตอร์ช่วงวันที่สร้างใบสั่งซื้อ (P_AEDAT), รหัสบริษัท (P_BUKRS) และประเภทเอกสารจัดซื้อ (P_BSART)
- ประกาศข้อมูล: กำหนดตารางภายในและโครงสร้างข้อมูลที่โปรแกรมต้องใช้ รวมถึงตารางภายในสำหรับบันทึกเหตุการณ์สุดท้าย ซึ่งต้องตรงกับโครงสร้างที่กำหนดไว้ในขั้นออกแบบ
- เขียนตรรกะการเลือกข้อมูล: เขียนตรรกะหลักของ ABAP เพื่อเลือกข้อมูลสำหรับกิจกรรมที่จำเป็นทั้ง 13 รายการ โดยใช้คำสั่ง SELECT กับตาราง SAP ที่เกี่ยวข้องและเชื่อมตารางเมื่อจำเป็น สำหรับเหตุการณ์ที่อิงการเปลี่ยนแปลง ให้อ่านข้อมูลจากตารางบันทึกการเปลี่ยนแปลง CDHDR และ CDPOS
- แปลงและจับคู่ข้อมูล: สำหรับแต่ละระเบียนที่ดึงมา ให้จับคู่ฟิลด์จากตาราง SAP กับคอลัมน์ที่เกี่ยวข้องในตารางภายในของบันทึกเหตุการณ์สุดท้าย กำหนด ActivityName ตามเหตุการณ์ที่กำลังประมวลผล เช่น 'สร้างใบสั่งซื้อ' และแปลงฟิลด์วันที่กับเวลาให้อยู่ในรูปแบบเวลาประทับเดียวกันสำหรับ EventTime
- รวมข้อมูลเหตุการณ์: หลังประมวลผลกิจกรรมทั้ง 13 ประเภทแล้ว ให้รวบรวมข้อมูลทั้งหมดไว้ในตารางภายในเดียว ตารางนี้จะเป็นบันทึกเหตุการณ์ฉบับสมบูรณ์ของใบสั่งซื้อที่เลือก
- เขียนไฟล์ผลลัพธ์: เพิ่มฟังก์ชันสำหรับเขียนตารางภายในสุดท้ายลงไฟล์ วิธีที่แนะนำคือใช้เมธอด cl_gui_frontend_services=>gui_download เพื่อให้ผู้ใช้บันทึกไฟล์ CSV ลงในเครื่อง หรือใช้ OPEN DATASET เพื่อบันทึกลงเซิร์ฟเวอร์แอปพลิเคชัน SAP สำหรับประมวลผลเบื้องหลัง
- สร้างรหัสธุรกรรม (ไม่บังคับ): หากต้องการให้ผู้ใช้ทางธุรกิจเปิดโปรแกรมได้สะดวก ให้ใช้รหัสธุรกรรม SE93 สร้างรหัสธุรกรรมแบบกำหนดเอง เช่น ZPM_PO_EXTRACT เพื่อเรียกใช้โปรแกรม ABAP
- ตั้งเวลางานเบื้องหลัง: หากมีข้อมูลจำนวนมากหรือต้องดึงข้อมูลอัตโนมัติ ให้ใช้รหัสธุรกรรม SM36 ตั้งเวลาเรียกใช้โปรแกรมเป็นงานเบื้องหลัง ไฟล์ผลลัพธ์จะถูกบันทึกไว้ในพาธของเซิร์ฟเวอร์แอปพลิเคชันที่กำหนดในตรรกะโปรแกรม.
การกำหนดค่า
- เกณฑ์การเลือกข้อมูล: โปรแกรมควรมีพารามิเตอร์สำหรับกรองข้อมูลให้เหมาะสม ตัวกรองหลักมีดังนี้
- ช่วงวันที่: ต้องกำหนดช่วงวันที่สร้างใบสั่งซื้อ (EKKO-AEDAT) แนะนำให้เริ่มจากช่วง 3-6 เดือนเพื่อควบคุมปริมาณข้อมูลและให้รายงานทำงานได้ดี
- รหัสบริษัท (BUKRS): จำเป็นสำหรับองค์กรที่มีนิติบุคคลหลายแห่ง เพื่อจำกัดขอบเขตการดึงข้อมูล
- ประเภทเอกสารจัดซื้อ (BSART): ใช้กรองประเภทใบสั่งซื้อที่ต้องการ เช่น ใบสั่งซื้อมาตรฐาน ข้อตกลงระยะยาว หรือใบสั่งซื้อโอนย้ายสินค้าคงคลัง เพื่อให้การวิเคราะห์ตรงเป้าหมาย
- การอ่านบันทึกการเปลี่ยนแปลง: การดึงกิจกรรมอย่าง 'อนุมัติใบสั่งซื้อ' หรือ 'เปลี่ยนแปลงใบสั่งซื้อ' ต้องอ่านตารางบันทึกการเปลี่ยนแปลงของ SAP (CDHDR, CDPOS) ซึ่งอาจใช้ทรัพยากรมาก ควรปรับตรรกะ ABAP ให้เลือกเฉพาะคลาสออบเจ็กต์ (EINKBELEG, BANF) และชุดตารางกับฟิลด์ที่จำเป็น
- สิทธิ์การเข้าถึง: ผู้ใช้หรือบัญชีทางเทคนิคที่เรียกใช้รายงานนี้ต้องมีสิทธิ์อ่านตารางจาก SAP หลายโมดูลอย่างเพียงพอ รวมถึง Materials Management (MM), Financial Accounting (FI) และตารางระดับระบบ เช่น EKKO, EKPO, EBAN, EKBE, BKPF, BSAK, RBKP, NAST, CDHDR และ CDPOS
- การเรียกใช้เบื้องหลัง: หากดึงข้อมูลย้อนหลังเกินสองสามเดือน หรือระบบมีธุรกรรมจำนวนมาก ให้เรียกใช้โปรแกรมเบื้องหลังเสมอ เพื่อป้องกันไม่ให้กระบวนการทำงานแบบโต้ตอบหมดเวลา.
ตัวอย่างคำค้น abap
REPORT z_pm_po_extract.
" ====================================================================
" SELECTION SCREEN
" ====================================================================
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_aedat FOR sy-datum OBLIGATORY.
SELECT-OPTIONS: s_bukrs FOR ekko-bukrs.
SELECT-OPTIONS: s_bsart FOR ekko-bsart.
PARAMETERS: p_sysid TYPE string DEFAULT '[Your SAP System ID]'.
SELECTION-SCREEN END OF BLOCK b1.
" ====================================================================
" DATA DECLARATIONS
" ====================================================================
TYPES: BEGIN OF ty_event_log,
purchaseordernumber TYPE ebeln,
activityname TYPE string,
eventtime TYPE timestamp,
sourcesystem TYPE string,
lastdataupdate TYPE timestamp,
vendorid TYPE lifnr,
username TYPE ernam,
totalnetamount TYPE netwr,
purchaserequisitionnumber TYPE banfn,
requesteddeliverydate TYPE eedat,
documenttype TYPE bsart,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log,
ls_event_log TYPE ty_event_log.
DATA: lt_ekko TYPE TABLE OF ekko,
lt_ekpo TYPE TABLE OF ekpo.
" ====================================================================
" START OF SELECTION
" ====================================================================
START-OF-SELECTION.
" Get current timestamp for LastDataUpdate
GET TIME STAMP FIELD ls_event_log-lastdataupdate.
ls_event_log-sourcesystem = p_sysid.
" --- Initial Data Selection: Purchase Orders in Scope ---
SELECT * FROM ekko INTO TABLE lt_ekko
WHERE aedat IN s_aedat
AND bukrs IN s_bukrs
AND bsart IN s_bsart.
IF lt_ekko IS INITIAL.
MESSAGE 'No Purchase Orders found for the given criteria.' TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
SELECT * FROM ekpo INTO TABLE lt_ekpo
FOR ALL ENTRIES IN lt_ekko
WHERE ebeln = lt_ekko-ebeln.
" --- 1. Purchase Requisition Created ---
SELECT ban.banfn, ban.erdat, ban.erzet, ban.ernam,
ekpo.ebeln, ekpo.netwr, ekpo.eindt, ekpo.bsart, ekpo.lifnr, ekko.bukrs
FROM eban AS ban
INNER JOIN ekpo AS ekpo ON ban.banfn = ekpo.banfn AND ban.bnfpo = ekpo.bnfpo
INNER JOIN ekko AS ekko ON ekpo.ebeln = ekko.ebeln
WHERE ekko.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_pr_created).
LOOP AT lt_pr_created INTO DATA(ls_pr_created).
ls_event_log-purchaseordernumber = ls_pr_created-ebeln.
ls_event_log-activityname = 'Purchase Requisition Created'.
CONVERT DATE ls_pr_created-erdat TIME ls_pr_created-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-vendorid = ls_pr_created-lifnr.
ls_event_log-username = ls_pr_created-ernam.
ls_event_log-totalnetamount = ls_pr_created-netwr.
ls_event_log-purchaserequisitionnumber = ls_pr_created-banfn.
ls_event_log-requesteddeliverydate = ls_pr_created-eindt.
ls_event_log-documenttype = ls_pr_created-bsart.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 2. Purchase Requisition Approved (via Change Docs on Release Indicator) ---
SELECT h.objectid, h.udate, h.utime, h.username
FROM cdhdr AS h
INNER JOIN cdpos AS p ON h.objectclas = p.objectclas AND h.objectid = p.objectid AND h.changenr = p.changenr
INNER JOIN ekpo AS ekpo ON h.objectid = ekpo.banfn
INNER JOIN ekko AS ekko ON ekpo.ebeln = ekko.ebeln
WHERE h.objectclas = 'BANF'
AND p.tabname = 'EBAN'
AND p.fname = 'FRGZU'
AND p.value_new = 'X' "Configure based on your system release indicator for 'Approved'
AND ekko.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_pr_approved).
LOOP AT lt_pr_approved INTO DATA(ls_pr_approved).
SELECT SINGLE ebeln FROM ekpo INTO ls_event_log-purchaseordernumber WHERE banfn = ls_pr_approved-objectid.
ls_event_log-activityname = 'Purchase Requisition Approved'.
CONVERT DATE ls_pr_approved-udate TIME ls_pr_approved-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_pr_approved-username.
" Other attributes can be populated with another SELECT if needed.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 3. Purchase Order Created ---
LOOP AT lt_ekko INTO DATA(ls_ekko_created).
ls_event_log-purchaseordernumber = ls_ekko_created-ebeln.
ls_event_log-activityname = 'Purchase Order Created'.
CONVERT DATE ls_ekko_created-aedat TIME ls_ekko_created-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-vendorid = ls_ekko_created-lifnr.
ls_event_log-username = ls_ekko_created-ernam.
ls_event_log-totalnetamount = ls_ekko_created-rlwrt.
ls_event_log-purchaserequisitionnumber = ''. "Can be enriched later if needed
ls_event_log-requesteddeliverydate = ''. "Can be enriched from EKPO
ls_event_log-documenttype = ls_ekko_created-bsart.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 4. Purchase Order Approved (via Change Docs on Release Indicator) ---
SELECT h.objectid, h.udate, h.utime, h.username
FROM cdhdr AS h
INNER JOIN cdpos AS p ON h.objectclas = p.objectclas AND h.objectid = p.objectid AND h.changenr = p.changenr
WHERE h.objectclas = 'EINKBELEG'
AND p.tabname = 'EKKO'
AND p.fname = 'FRGKE'
AND p.value_new = 'R' "R for Released
AND h.objectid IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_po_approved).
LOOP AT lt_po_approved INTO DATA(ls_po_approved).
ls_event_log-purchaseordernumber = ls_po_approved-objectid.
ls_event_log-activityname = 'Purchase Order Approved'.
CONVERT DATE ls_po_approved-udate TIME ls_po_approved-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_po_approved-username.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 5. Purchase Order Sent to Vendor ---
SELECT n.objky, n.vstat, n.datvr, n.uhrvr, e.ernam
FROM nast AS n
INNER JOIN ekko AS e ON n.objky = e.ebeln
WHERE n.kappl = 'EF' "Application for Purchasing
AND n.kschl = '[Your PO Output Type]' "e.g. NEU
AND n.vstat = '1' "Successfully processed
AND n.objky IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_po_sent).
LOOP AT lt_po_sent INTO DATA(ls_po_sent).
ls_event_log-purchaseordernumber = ls_po_sent-objky.
ls_event_log-activityname = 'Purchase Order Sent to Vendor'.
CONVERT DATE ls_po_sent-datvr TIME ls_po_sent-uhrvr INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_po_sent-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 6. Purchase Order Changed ---
SELECT objectid, udate, utime, username FROM cdhdr
WHERE objectclas = 'EINKBELEG'
AND tcode IN ('ME22', 'ME22N')
AND objectid IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_po_changed).
LOOP AT lt_po_changed INTO DATA(ls_po_changed).
ls_event_log-purchaseordernumber = ls_po_changed-objectid.
ls_event_log-activityname = 'Purchase Order Changed'.
CONVERT DATE ls_po_changed-udate TIME ls_po_changed-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_po_changed-username.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 7. Goods Receipt Posted & 9. Goods Returned ---
SELECT e.ebeln, m.budat, m.cpudt, m.cputm, m.usnam, b.shkzg, b.bwart
FROM mkpf AS m
INNER JOIN mseg AS s ON m.mblnr = s.mblnr AND m.mjahr = s.mjahr
INNER JOIN t156 AS t ON s.bwart = t.bwart
INNER JOIN ekbe AS e ON s.ebeln = e.ebeln AND s.ebelp = e.ebelp AND s.mblnr = e.belnr AND s.mjahr = e.gjahr
WHERE e.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
AND e.bwart IN ('101', '102', '122', '123') "GR, GR Reversal, Return
INTO TABLE @DATA(lt_goods_mvmt).
LOOP AT lt_goods_mvmt INTO DATA(ls_goods_mvmt).
ls_event_log-purchaseordernumber = ls_goods_mvmt-ebeln.
IF ls_goods_mvmt-bwart = '101'.
ls_event_log-activityname = 'Goods Receipt Posted'.
ELSE.
ls_event_log-activityname = 'Goods Returned'.
ENDIF.
CONVERT DATE ls_goods_mvmt-cpudt TIME ls_goods_mvmt-cputm INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_goods_mvmt-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 8. Services Confirmation Entered ---
SELECT h.erdat, h.erzeit, h.ernam, l.ebeln
FROM essr AS h
INNER JOIN esll AS l ON h.lblni = l.lblni
WHERE l.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_services).
LOOP AT lt_services INTO DATA(ls_services).
ls_event_log-purchaseordernumber = ls_services-ebeln.
ls_event_log-activityname = 'Services Confirmation Entered'.
CONVERT DATE ls_services-erdat TIME ls_services-erzeit INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_services-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 10. Invoice Received ---
SELECT r.ebeln, r.cpudt, r.cputm, r.usnam
FROM rbkp AS r
WHERE r.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_invoice_rcvd).
LOOP AT lt_invoice_rcvd INTO DATA(ls_invoice_rcvd).
ls_event_log-purchaseordernumber = ls_invoice_rcvd-ebeln.
ls_event_log-activityname = 'Invoice Received'.
CONVERT DATE ls_invoice_rcvd-cpudt TIME ls_invoice_rcvd-cputm INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_invoice_rcvd-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 11. Invoice Paid ---
SELECT b.ebeln, s.augdt, s.augbl, b.usnam
FROM rbkp AS b
INNER JOIN bseg AS e ON b.belnr = e.belnr AND b.gjahr = e.gjahr
INNER JOIN bsak AS s ON e.bukrs = s.bukrs AND e.belnr = s.belnr AND e.gjahr = s.gjahr AND e.buzei = s.buzei
WHERE b.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
AND s.augdt IS NOT NULL
INTO TABLE @DATA(lt_invoice_paid).
LOOP AT lt_invoice_paid INTO DATA(ls_invoice_paid).
ls_event_log-purchaseordernumber = ls_invoice_paid-ebeln.
ls_event_log-activityname = 'Invoice Paid'.
CONVERT DATE ls_invoice_paid-augdt INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_invoice_paid-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 12. Purchase Order Completed & 13. Purchase Order Deleted (via Change Docs) ---
SELECT h.objectid, h.udate, h.utime, h.username, p.fname
FROM cdhdr AS h
INNER JOIN cdpos AS p ON h.changenr = p.changenr
INNER JOIN ekpo AS ekpo ON h.objectid = |{ ekpo.ebeln }{ ekpo.ebelp }|
WHERE h.objectclas = 'EINKBELEG'
AND p.tabname = 'EKPO'
AND p.fname IN ('ELIKZ', 'EREKZ', 'LOEKZ')
AND p.value_new = 'X'
AND ekpo.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_po_status_change).
LOOP AT lt_po_status_change INTO DATA(ls_po_status_change).
ls_event_log-purchaseordernumber = substring( val = ls_po_status_change-objectid, off = 0, len = 10 ).
CASE ls_po_status_change-fname.
WHEN 'LOEKZ'.
ls_event_log-activityname = 'Purchase Order Deleted'.
WHEN 'ELIKZ' OR 'EREKZ'.
"This logic may need refinement to check if both are now set.
ls_event_log-activityname = 'Purchase Order Completed'.
ENDCASE.
CONVERT DATE ls_po_status_change-udate TIME ls_po_status_change-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_po_status_change-username.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- Final Output to CSV ---
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = 'C:\temp\po_event_log.csv'
filetype = 'ASC'
CHANGING
data_tab = lt_event_log. พร้อมเริ่มต้นหรือยัง?
เทมเพลตนี้ช่วยวางพื้นฐานสำหรับการเริ่มใช้ process mining นำข้อมูล SAP S/4HANA ของคุณมาค้นหาจุดที่ทำงานได้มีประสิทธิภาพขึ้น และปรับปรุงกระบวนการจัดซื้อจนถึงชำระเงินได้ตั้งแต่วันนี้.
ปรับปรุงใบสั่งซื้อ P2P ลดเวลารอบการทำงานได้ตั้งแต่วันนี้
ลดขั้นตอนที่ไม่มีประสิทธิภาพและลดเวลารอบการทำงานของใบสั่งซื้อ P2P ได้ 30%.
ไม่ต้องใช้บัตรเครดิต ตั้งค่าได้ภายในไม่กี่นาที.