เทมเพลตข้อมูล Record to Report - รายการบัญชีของคุณ
เทมเพลตข้อมูล Record to Report - รายการบัญชีของคุณ
- แอตทริบิวต์ที่แนะนำสำหรับการวิเคราะห์เชิงลึก
- กิจกรรมสำคัญของรายการบัญชีที่ควรติดตาม
- แนวทางดึงข้อมูลจาก SAP ECC ที่นำไปใช้ได้จริง
แอตทริบิวต์ของ Record to Report - รายการบัญชี
| ชื่อ | คำอธิบาย | ||
|---|---|---|---|
| Journal Entry ID JournalEntryId | รหัสเฉพาะของเอกสารบัญชีการเงิน ซึ่งประกอบด้วยรหัสบริษัท หมายเลขเอกสาร และปีบัญชี. | ||
| คำอธิบาย Journal Entry ID เป็นรหัสระบุเคสหลักสำหรับติดตามวงจรของรายการบัญชี โดยเป็นคีย์ผสมที่มักสร้างจากการนำรหัสบริษัท (BUKRS) หมายเลขเอกสาร (BELNR) และปีบัญชี (GJAHR) มาต่อกัน เพื่อให้ไม่ซ้ำกันทั่วทั้งระบบ SAP. ในการวิเคราะห์กระบวนการ รหัสนี้เชื่อมโยงกิจกรรมที่เกี่ยวข้องทั้งหมด เช่น การสร้าง การพัก การส่ง การอนุมัติ การปฏิเสธ และการบันทึกบัญชี เมื่อติดตามรหัสนี้ คุณจะเห็นเส้นทางของรายการบัญชีแต่ละรายการตั้งแต่ต้นจนจบ วัดระยะเวลาของกระบวนการ และระบุจุดเบี่ยงเบนหรือคอขวดของรายการเฉพาะได้. เหตุผลที่สำคัญ นี่คือคีย์สำคัญสำหรับติดตามรายการบัญชีตั้งแต่สร้างจนถึงบันทึกบัญชีขั้นสุดท้าย ช่วยให้วิเคราะห์กระบวนการตั้งแต่ต้นจนจบและเปรียบเทียบรูปแบบการทำงานได้. แหล่งข้อมูล เป็นคุณลักษณะที่ได้จากการนำฟิลด์ในตาราง BKPF มาต่อกัน โดยทั่วไปประกอบด้วยรหัสบริษัท (BUKRS) หมายเลขเอกสาร (BELNR) และปีบัญชี (GJAHR). ตัวอย่าง 1000-1000000123-20232000-1900000456-20231000-1800000789-2024 | |||
| ชื่อกิจกรรม ActivityName | ชื่อกิจกรรมทางธุรกิจหรือเหตุการณ์ที่เกิดขึ้น ณ จุดหนึ่งในกระบวนการบันทึกรายการบัญชี. | ||
| คำอธิบาย ชื่อกิจกรรมระบุขั้นตอนหนึ่งในวงจรของรายการบัญชี เช่น 'สร้างรายการบัญชี' 'อนุมัติรายการบัญชี' หรือ 'บันทึกรายการบัญชี' โดยทั่วไปคุณลักษณะนี้ได้มาจากข้อมูลหลายแหล่งใน SAP รวมถึงรหัสธุรกรรม (TCODE) บันทึกการเปลี่ยนแปลงเอกสาร (ตาราง CDHDR และ CDPOS) และฟิลด์สถานะเอกสาร. การวิเคราะห์กิจกรรมเป็นหัวใจของ process mining ช่วยให้เห็นภาพแผนผังกระบวนการ คำนวณเวลาระหว่างขั้นตอน และระบุวงจรการแก้ไขงาน เช่น 'ปฏิเสธรายการบัญชี' ตามด้วย 'แก้ไขรายการบัญชี' ข้อมูลนี้เป็นพื้นฐานของแดชบอร์ดที่แสดงระยะเวลาของกระบวนการ อัตราการแก้ไขงาน และรูปแบบกระบวนการ. เหตุผลที่สำคัญ ใช้กำหนดขั้นตอนในแผนผังกระบวนการ ทำให้เห็นภาพ วิเคราะห์ และปรับปรุงเวิร์กโฟลว์การบันทึกรายการบัญชีได้. แหล่งข้อมูล ได้มาจากหลายแหล่ง เช่น รหัสธุรกรรมใน BKPF (TCODE) สถานะเอกสาร และบันทึกเวิร์กโฟลว์ในตารางอย่าง SWW_WI2OBJ หรือเอกสารการเปลี่ยนแปลงใน CDHDR และ CDPOS. ตัวอย่าง สร้างรายการบัญชีอนุมัติรายการบัญชีแล้วปฏิเสธรายการบัญชีบันทึกรายการบัญชีแล้ว | |||
| เวลาเกิดเหตุการณ์ EventTime | เวลาที่ระบุว่ากิจกรรมหรือเหตุการณ์หนึ่งเกิดขึ้นเมื่อใดสำหรับรายการบัญชี. | ||
| คำอธิบาย เวลาเกิดเหตุการณ์ระบุวันที่และเวลาที่แน่นอนของแต่ละกิจกรรมในกระบวนการบันทึกรายการบัญชี ข้อมูลนี้สำคัญต่อการคำนวณตัวชี้วัดด้านเวลา เช่น ระยะเวลาของกระบวนการ ระยะเวลาประมวลผล และช่วงเวลาที่ล่าช้าระหว่างขั้นตอน แหล่งที่มาของเวลานี้ขึ้นอยู่กับกิจกรรม อาจเป็นวันที่และเวลาที่สร้างเอกสาร (CPUDT/CPUTM) หรือเวลาที่เปลี่ยนแปลงจากบันทึก (CDHDR-UDATE/UTIME). ในการวิเคราะห์ จะใช้เวลาเกิดเหตุการณ์เรียงลำดับเหตุการณ์ตามเวลา ซึ่งเป็นพื้นฐานของแผนผังกระบวนการ และจำเป็นต่อการคำนวณ KPI ด้านเวลา เช่น เวลาเฉลี่ยของวงจรรายการบัญชี เวลาอนุมัติเฉลี่ย และเวลาตั้งแต่อนุมัติจนถึงบันทึกบัญชี. เหตุผลที่สำคัญ เวลานี้เป็นพื้นฐานของการวิเคราะห์ด้านเวลา ช่วยคำนวณระยะเวลาของกระบวนการ ช่วงเวลา และคอขวด. แหล่งข้อมูล แหล่งข้อมูลขึ้นอยู่กับกิจกรรม โดยหลักมาจากเวลาที่สร้างเอกสาร (CPUDT, CPUTM) ใน BKPF หรือเวลาที่เปลี่ยนแปลงเอกสาร (UDATE, UTIME) ใน CDHDR. ตัวอย่าง 2023-10-26T09:00:00Z2023-10-26T14:30:15Z2023-10-27T11:05:00Z | |||
| ระบบต้นทาง SourceSystem | ระบบที่ใช้ดึงข้อมูลกระบวนการ. | ||
| คำอธิบาย คุณลักษณะนี้ระบุแหล่งที่มาของข้อมูล ซึ่งในกรณีนี้คืออินสแตนซ์ SAP ECC ที่ใช้งาน โดยทั่วไปจะเพิ่มค่าแบบคงที่ระหว่างการดึงข้อมูล. แม้จะเป็นคุณลักษณะที่เรียบง่าย แต่ก็สำคัญเมื่อมี ERP หรือแหล่งข้อมูลหลายระบบ ช่วยให้ตรวจสอบที่มาของข้อมูลได้ชัดเจน และกรองหรือแบ่งผลการวิเคราะห์ตามระบบต้นทางได้. เหตุผลที่สำคัญ ช่วยให้ตรวจสอบที่มาของข้อมูลได้ชัดเจน และจำเป็นต่อการติดตามคุณภาพข้อมูล โดยเฉพาะเมื่อมีระบบต้นทางหลายระบบ. แหล่งข้อมูล โดยทั่วไปเป็นค่าแบบคงที่ที่เพิ่มระหว่างการแปลงข้อมูล เพื่อระบุอินสแตนซ์ SAP ECC ที่ใช้งาน (เช่น 'ECC_PROD_100'). ตัวอย่าง SAP ECC EHP8ECC_FIN_PRODSAP_ERP_60 | |||
| อัปเดตข้อมูลล่าสุด LastDataUpdate | เวลาที่ดึงหรือรีเฟรชข้อมูลจากระบบต้นทางครั้งล่าสุด. | ||
| คำอธิบาย คุณลักษณะนี้บันทึกวันที่และเวลาที่ดึงข้อมูลจาก SAP ECC ล่าสุด เป็นฟิลด์เมทาดาทาที่สำคัญต่อการตรวจสอบว่าข้อมูลที่นำมาวิเคราะห์เป็นข้อมูลล่าสุดเพียงใด. ในแดชบอร์ดหรือการวิเคราะห์ process mining ผู้ใช้ต้องทราบเวลาอัปเดตล่าสุดเพื่อเชื่อถือข้อมูลและตัดสินใจได้อย่างเหมาะสม ข้อมูลนี้ช่วยตอบคำถามว่า 'ข้อมูลนี้เป็นปัจจุบันแค่ไหน'. เหตุผลที่สำคัญ แจ้งให้ผู้ใช้ทราบว่าข้อมูลเป็นข้อมูลล่าสุดเพียงใด เพื่อให้เข้าใจช่วงเวลาที่ใช้วิเคราะห์และเชื่อถือผลลัพธ์ได้. แหล่งข้อมูล ฟิลด์เมทาดาทานี้สร้างและจัดเก็บโดยเครื่องมือดึงข้อมูลหรือกระบวนการ ETL เมื่อรีเฟรชข้อมูล. ตัวอย่าง 2024-05-20T04:00:00Z2024-05-21T04:00:00Z2024-05-22T04:00:00Z | |||
| กลับรายการแล้วหรือไม่ IsReversed | ตัวบ่งชี้แบบบูลีนที่ระบุว่ามีการกลับรายการบัญชีแล้วหรือไม่. | ||
| คำอธิบาย แฟล็กนี้ใช้ระบุรายการบัญชีที่ถูกกลับรายการในภายหลังด้วยเอกสารบัญชีอีกฉบับ ใน SAP เอกสารที่ถูกกลับรายการจะเชื่อมโยงกับเอกสารกลับรายการ ทำให้ตรวจสอบย้อนหลังได้ชัดเจน แอตทริบิวต์นี้เป็นข้อมูลสำคัญสำหรับแดชบอร์ด 'วิเคราะห์การกลับรายการบัญชี' และ KPI 'อัตราการกลับรายการบัญชี' ช่วยแยกรายการที่ถูกกลับรายการออกมาวิเคราะห์หาสาเหตุ เช่น การป้อนข้อมูลผิดหรือการบันทึกบัญชีไม่ถูกต้อง เพื่อลดจำนวนครั้งที่ต้องกลับรายการ. เหตุผลที่สำคัญ ช่วยวิเคราะห์การกลับรายการโดยระบุรายการที่ถูกยกเลิกภายหลัง ทำให้ค้นหาสาเหตุของข้อผิดพลาดและปรับปรุงความถูกต้องของข้อมูลได้. แหล่งข้อมูล คำนวณจากฟิลด์หมายเลขเอกสารกลับรายการ (STBLG) ในตาราง BKPF หาก STBLG ไม่ว่าง แฟล็กจะเป็น true. ตัวอย่าง truefalse | |||
| ประเภทเอกสาร DocumentType | การจัดประเภทเอกสารบัญชี ซึ่งกำหนดวิธีประมวลผลและจัดเก็บเอกสาร. | ||
| คำอธิบาย ประเภทเอกสารใช้แยกธุรกรรมทางธุรกิจ เช่น รายการบัญชีแยกประเภททั่วไป (SA) ใบแจ้งหนี้ผู้ขาย (KR) หรือรายการสินทรัพย์ (AA) โดยกำหนดไว้ระหว่างการตั้งค่าระบบและระบุให้กับรายการบัญชีทุกรายการ. คุณลักษณะนี้สำคัญต่อการวิเคราะห์ เพราะช่วยแบ่งกระบวนการตามลักษณะของธุรกรรม แดชบอร์ด 'ปริมาณรายการบัญชีตามประเภท' และ KPI 'เวลาเฉลี่ยของวงจรตามประเภทรายการบัญชี' ใช้ฟิลด์นี้โดยตรง ช่วยค้นหาว่ารายการบางประเภทมีแนวโน้มล่าช้า ต้องแก้ไข หรือถูกกลับรายการมากกว่าประเภทอื่นหรือไม่. เหตุผลที่สำคัญ ช่วยแบ่งผลการวิเคราะห์ตามประเภทธุรกรรม และระบุได้ว่าปัญหาของกระบวนการเกิดกับรายการบัญชีบางประเภทโดยเฉพาะหรือไม่. แหล่งข้อมูล อยู่ในตารางส่วนหัวเอกสาร BKPF ฟิลด์ BLART. ตัวอย่าง SAKRREAA | |||
| ผู้ใช้ User | รหัสผู้ใช้ SAP ของผู้ที่สร้างหรือเปลี่ยนแปลงรายการบัญชี. | ||
| คำอธิบาย คุณลักษณะนี้บันทึกชื่อผู้ใช้ SAP ที่รับผิดชอบกิจกรรม เช่น การสร้าง การพัก หรือการบันทึกเอกสาร โดยดึงข้อมูลโดยตรงจากส่วนหัวเอกสารหรือตารางบันทึกการเปลี่ยนแปลง. การวิเคราะห์คุณลักษณะผู้ใช้ช่วยให้เข้าใจประสิทธิภาพของทีมและแต่ละคน รองรับแดชบอร์ดประสิทธิภาพผู้ใช้ โดยติดตามจำนวนกิจกรรมและเวลาประมวลผลของผู้ใช้แต่ละคน นอกจากนี้ยังช่วยระบุผู้ที่เกี่ยวข้องกับวงจรการแก้ไขงาน การกลับรายการ หรือการเบี่ยงเบนจากข้อกำหนด เพื่อให้จัดการฝึกอบรมหรือปรับปรุงกระบวนการได้ตรงจุด. เหตุผลที่สำคัญ ระบุผู้รับผิดชอบแต่ละกิจกรรม ช่วยวิเคราะห์ประสิทธิภาพ ภาระงาน และรูปแบบการแก้ไขงานของผู้ใช้. แหล่งข้อมูล โดยทั่วไปมาจากตาราง BKPF (ฟิลด์ USNAM สำหรับผู้สร้าง) หรือตาราง CDHDR (ฟิลด์ USERNAME สำหรับผู้แก้ไข). ตัวอย่าง ABROWNCJONESDSMITH | |||
| รหัสธุรกรรม TransactionCode | รหัสธุรกรรม SAP ที่ใช้สร้างหรือประมวลผลรายการบัญชี. | ||
| คำอธิบาย รหัสธุรกรรม (T-Code) เป็นรหัสเฉพาะของฟังก์ชันหรือโปรแกรมหนึ่งใน SAP สำหรับรายการบัญชี รหัสนี้บอกวิธีสร้างรายการ เช่น ป้อนด้วยตนเอง (FB01, F-02) พักรายการ (FV50) หรือผ่านอินเทอร์เฟซอัตโนมัติ. คุณลักษณะนี้มีประโยชน์อย่างยิ่งต่อแดชบอร์ด 'ปรับปรุงกิจกรรมที่ทำด้วยตนเอง' เมื่อวิเคราะห์ T-Code จะช่วยแยกกิจกรรมที่ทำด้วยตนเองออกจากกิจกรรมอัตโนมัติ ระบุกระบวนการที่ทำด้วยตนเองซึ่งใช้เวลามากที่สุด และค้นหาโอกาสนำระบบอัตโนมัติมาใช้เพื่อลดงานและเพิ่มประสิทธิภาพ. เหตุผลที่สำคัญ ช่วยแยกกระบวนการที่ทำด้วยตนเองออกจากกระบวนการอัตโนมัติ เพื่อค้นหาโอกาสนำระบบอัตโนมัติมาใช้และกำหนดมาตรฐานกระบวนการ. แหล่งข้อมูล อยู่ในตารางส่วนหัวเอกสาร BKPF ฟิลด์ TCODE. ตัวอย่าง FB01F-02FV50FBD1 | |||
| รหัสบริษัท CompanyCode | หน่วยงานที่เป็นนิติบุคคลอิสระและจัดทำงบการเงินแยกต่างหาก. | ||
| คำอธิบาย รหัสบริษัทเป็นหน่วยงานพื้นฐานใน SAP Financials ใช้แทนบริษัทที่เป็นนิติบุคคลอิสระ และเป็นฟิลด์สำคัญในส่วนหัวเอกสารรายการบัญชี. คุณลักษณะนี้จำเป็นต่อการแบ่งผลการวิเคราะห์กระบวนการตามนิติบุคคล ช่วยเปรียบเทียบประสิทธิภาพกระบวนการ อัตราการปฏิบัติตามข้อกำหนด และผล KPI ระหว่างหน่วยงานต่าง ๆ ในธุรกิจ ตัวอย่างเช่น ใช้ตรวจสอบว่าความล่าช้าในการอนุมัติหรืออัตราการกลับรายการสูงเกิดขึ้นเฉพาะในบางรหัสบริษัทหรือไม่. เหตุผลที่สำคัญ ใช้กรองและเปรียบเทียบประสิทธิภาพกระบวนการระหว่างนิติบุคคลหรือหน่วยธุรกิจต่าง ๆ ในองค์กร. แหล่งข้อมูล อยู่ในตารางส่วนหัวเอกสาร BKPF ฟิลด์ BUKRS. ตัวอย่าง 10002000US01DE01 | |||
| วันที่บันทึกบัญชี PostingDate | วันที่บันทึกธุรกรรมลงบัญชีแยกประเภททั่วไป ซึ่งมีผลต่อรอบระยะเวลาทางการเงิน. | ||
| คำอธิบาย วันที่บันทึกบัญชีกำหนดรอบระยะเวลาบัญชีของรายการบัญชี เป็นฟิลด์วันที่สำคัญต่อการเงินและการปฏิบัติตามข้อกำหนด เนื่องจากต้องสอดคล้องกับกำหนดการปิดรอบบัญชีและกฎระเบียบ. ใน process mining ใช้วันที่นี้ติดตามการปฏิบัติตามข้อกำหนด แดชบอร์ด 'ติดตามการปฏิบัติตามข้อกำหนด' และ KPI 'อัตราการปฏิบัติตามข้อกำหนด' ใช้คุณลักษณะนี้ตรวจสอบว่าบันทึกรายการในรอบบัญชีที่ถูกต้องหรือไม่ นอกจากนี้ยังใช้วิเคราะห์แนวโน้มปริมาณรายการบัญชีในแต่ละช่วงเวลาได้. เหตุผลที่สำคัญ สำคัญต่อการรายงานทางการเงินและการวิเคราะห์การปฏิบัติตามข้อกำหนด เพื่อให้แน่ใจว่าบันทึกรายการในรอบบัญชีที่ถูกต้อง. แหล่งข้อมูล อยู่ในตารางส่วนหัวเอกสาร BKPF ฟิลด์ BUDAT. ตัวอย่าง 2023-10-312023-11-302024-01-15 | |||
| เป็นงานแก้ไขซ้ำหรือไม่ IsRework | แฟล็กแบบบูลีนที่ระบุว่ารายการบัญชีผ่านขั้นตอนแก้ไขงานซ้ำหรือไม่ เช่น ถูกปฏิเสธแล้วแก้ไข. | ||
| คำอธิบาย แฟล็กนี้ใช้ระบุกรณีที่ออกนอกเส้นทางปกติและต้องแก้ไข โดยทั่วไปจะกำหนดเป็น true เมื่อพบลำดับกิจกรรม เช่น 'ปฏิเสธรายการบัญชี' ตามด้วย 'แก้ไขรายการบัญชี' สำหรับรายการบัญชีนั้น แอตทริบิวต์นี้จำเป็นต่อการคำนวณ KPI 'อัตราการแก้ไขรายการบัญชีซ้ำ' และการวิเคราะห์บนแดชบอร์ด 'อัตราการแก้ไขซ้ำและการปฏิเสธ' ช่วยวัดความไม่มีประสิทธิภาพของกระบวนการ และใช้เป็นข้อมูลตั้งต้นในการหาสาเหตุของการแก้ไขซ้ำ เช่น ข้อกำหนดไม่ชัดเจนหรือเอกสารประกอบไม่เพียงพอ. เหตุผลที่สำคัญ ระบุรายการที่ต้องแก้ไข ช่วยวัดปริมาณงานแก้ไขซ้ำและวิเคราะห์สาเหตุ เพื่อเพิ่มสัดส่วนงานที่ถูกต้องตั้งแต่ครั้งแรก. แหล่งข้อมูล แอตทริบิวต์นี้คำนวณจากการวิเคราะห์ลำดับกิจกรรมของเคส โดยถือว่ามีการแก้ไขงานซ้ำเมื่อพบกิจกรรมปฏิเสธหรือแก้ไข. ตัวอย่าง truefalse | |||
| พักรายการไว้หรือไม่ IsParked | แฟล็กแบบบูลีนที่ระบุว่าบันทึกรายการบัญชีเป็นเอกสารพักไว้ก่อนลงบัญชีหรือไม่. | ||
| คำอธิบาย การพักเอกสารช่วยให้ผู้ใช้บันทึกรายการบัญชีที่ยังไม่สมบูรณ์ได้ โดยไม่กระทบยอดคงเหลือทางการเงิน จากนั้นผู้ใช้อีกรายสามารถตรวจสอบหรือกรอกข้อมูลให้ครบก่อนลงบัญชี แฟล็กนี้ใช้ระบุรายการที่ผ่านขั้นตอนพักเอกสาร การวิเคราะห์แอตทริบิวต์นี้ช่วยให้เข้าใจการใช้งานฟีเจอร์พักเอกสาร และอาจเผยให้เห็นว่ามีการใช้ขั้นตอนนี้เป็นการตรวจสอบอย่างไม่เป็นทางการจนทำให้เกิดความล่าช้าหรือไม่ นอกจากนี้ยังช่วยวิเคราะห์เวลาตั้งแต่ต้นจนจบ โดยแยกรายการที่ลงบัญชีโดยตรงออกจากรายการที่พักไว้ก่อน. เหตุผลที่สำคัญ ระบุรายการที่ใช้ฟีเจอร์พักเอกสาร ซึ่งอาจเป็นสาเหตุของความล่าช้าหรือบ่งชี้ว่ามีขั้นตอนตรวจสอบอย่างไม่เป็นทางการ. แหล่งข้อมูล คำนวณจากฟิลด์สถานะเอกสาร (BSTAT) ในตาราง BKPF ค่า 'V' หมายถึงเอกสารที่พักไว้. ตัวอย่าง truefalse | |||
| ยอดรวมของเอกสาร TotalDocumentAmount | มูลค่ารวมของรายการบัญชีในสกุลเงินของเอกสาร. | ||
| คำอธิบาย คุณลักษณะนี้แสดงมูลค่าทางการเงินรวมของรายการบัญชี โดยทั่วไปคำนวณจากผลรวมค่าสัมบูรณ์ของรายการบรรทัดเดบิตหรือเครดิตทั้งหมดที่เกี่ยวข้องกับเอกสาร. การวิเคราะห์กระบวนการตามมูลค่าทางการเงินช่วยให้เห็นรูปแบบสำคัญ เช่น รายการมูลค่าสูงอาจต้องผ่านขั้นตอนอนุมัติที่เข้มงวดกว่า คุณสามารถใช้คุณลักษณะนี้กรองหรือแบ่งผลการวิเคราะห์ เพื่อตรวจสอบว่ามูลค่าของรายการสัมพันธ์กับระยะเวลาของกระบวนการ อัตราการปฏิเสธ หรือความล่าช้าในการอนุมัติหรือไม่. เหตุผลที่สำคัญ ใช้วิเคราะห์ผลกระทบทางการเงิน เช่น ความสัมพันธ์ระหว่างเวลาประมวลผลหรืออัตราการปฏิเสธกับมูลค่าของรายการบัญชี. แหล่งข้อมูล ฟิลด์นี้คำนวณจากการรวมยอดฟิลด์จำนวนเงิน (WRBTR หรือ DMBTR) ของรายการบรรทัดทั้งหมดในตาราง BSEG สำหรับรายการบัญชีที่ระบุ. ตัวอย่าง 1500.0025000.75125.50 | |||
| รหัสสกุลเงิน CurrencyKey | รหัสสกุลเงินของยอดเงินที่บันทึกในรายการบัญชี. | ||
| คำอธิบาย แอตทริบิวต์นี้ระบุสกุลเงินของรายการบัญชี เช่น USD, EUR หรือ JPY เพื่อให้ทราบว่ายอดเงินที่เกี่ยวข้องกับเอกสารเป็นสกุลเงินใด แม้จะไม่ใช่มิติหลักในการวิเคราะห์เสมอไป แต่ข้อมูลนี้จำเป็นต่อการตีความมูลค่าเงินอย่างถูกต้อง และยังใช้แบ่งการวิเคราะห์ในองค์กรระดับโลก เพื่อดูว่ากระบวนการของรายการที่ใช้สกุลเงินต่างประเทศแตกต่างจากรายการที่ใช้สกุลเงินท้องถิ่นหรือไม่. เหตุผลที่สำคัญ ให้ข้อมูลประกอบที่จำเป็นสำหรับยอดเงินทั้งหมด เพื่อให้วิเคราะห์และตีความข้อมูลทางการเงินได้อย่างถูกต้อง. แหล่งข้อมูล อยู่ในตารางส่วนหัวเอกสาร BKPF ฟิลด์ WAERS. ตัวอย่าง USDEURGBPJPY | |||
| ระยะเวลาอนุมัติ ApprovalTime | เวลาตั้งแต่ส่งรายการบัญชีเพื่อขออนุมัติ จนกว่าจะได้รับอนุมัติหรือถูกปฏิเสธ. | ||
| คำอธิบาย ตัวชี้วัดนี้วัดระยะเวลาของกระบวนการย่อยด้านการอนุมัติ ซึ่งมักเป็นส่วนสำคัญของเวลารวมตั้งแต่ต้นจนจบ โดยคำนวณจากเวลาระหว่างกิจกรรม 'ส่งรายการบัญชี' กับกิจกรรม 'อนุมัติรายการบัญชี' หรือ 'ปฏิเสธรายการบัญชี' ระยะเวลาอนุมัติเป็นตัวชี้วัดหลักของแดชบอร์ด 'ประสิทธิภาพการอนุมัติรายการบัญชี' และ KPI 'เวลาเฉลี่ยในการอนุมัติรายการบัญชี' การวิเคราะห์ระยะเวลานี้ช่วยระบุคอขวดในเวิร์กโฟลว์การอนุมัติ วัดประสิทธิภาพของผู้อนุมัติ และใช้ประกอบการพิจารณาปรับกระบวนการ เช่น การปรับวงเงินอนุมัติ. เหตุผลที่สำคัญ วัดระยะเวลาของขั้นตอนอนุมัติ ช่วยระบุและแก้ไขความล่าช้าในเวิร์กโฟลว์การตรวจสอบและอนุมัติ. แหล่งข้อมูล คำนวณโดยนำเวลาประทับของกิจกรรม 'ส่งรายการบัญชี' ไปลบออกจากเวลาประทับของกิจกรรม 'อนุมัติรายการบัญชี' หรือ 'ปฏิเสธรายการบัญชี'. ตัวอย่าง P1DT2HPT4H15MP3D | |||
| ศูนย์ต้นทุน CostCenter | หน่วยงานภายในเขตควบคุมที่ใช้ระบุตำแหน่งหรือหน่วยงานที่เกิดต้นทุน. | ||
| คำอธิบาย ศูนย์ต้นทุนเป็นข้อมูลหลักสำคัญจากโมดูล Controlling (CO) ซึ่งมักกำหนดไว้ในระดับรายการบัญชี ใช้ติดตามต้นทุนของแผนก หน้าที่งาน หรือสถานที่ใดสถานที่หนึ่ง การเพิ่มศูนย์ต้นทุนช่วยให้วิเคราะห์กระบวนการลงบัญชีได้ละเอียดขึ้น เช่น ตรวจสอบว่าแผนกใดมีงานแก้ไขซ้ำมากกว่า ใช้เวลาทำงานนานกว่า หรือมีรายการที่ต้องป้อนด้วยตนเองจำนวนมากกว่า ข้อมูลนี้ช่วยให้เห็นประสิทธิภาพของกระบวนการในแต่ละแผนก. เหตุผลที่สำคัญ ช่วยวิเคราะห์ประสิทธิภาพกระบวนการแยกตามแผนกหรือสายงาน และระบุจุดที่ทำงานได้ไม่มีประสิทธิภาพ. แหล่งข้อมูล อยู่ในตารางรายการเอกสาร BSEG ฟิลด์ KOSTL. ตัวอย่าง 4100CC_FINANCE_US10010101 | |||
| เหตุผลในการกลับรายการ ReversalReason | รหัสที่ระบุเหตุผลในการกลับรายการบัญชี. | ||
| คำอธิบาย เมื่อกลับรายการเอกสาร SAP ให้ผู้ใช้ระบุรหัสเหตุผลได้ รหัสนี้ช่วยบันทึกสาเหตุอย่างเป็นระบบ เช่น วันที่ลงบัญชีไม่ถูกต้องหรือป้อนข้อมูลผิด แอตทริบิวต์นี้เป็นข้อมูลสำคัญสำหรับแดชบอร์ด 'วิเคราะห์การกลับรายการบัญชี' เมื่อวิเคราะห์เหตุผลที่พบบ่อย องค์กรจะค้นพบปัญหาที่เกิดซ้ำในกระบวนการหรือช่องว่างด้านการฝึกอบรม และกำหนดแนวทางแก้ไขได้ตรงจุด เพื่อลดข้อผิดพลาดในอนาคตและลดอัตราการกลับรายการ. เหตุผลที่สำคัญ ช่วยให้เห็นสาเหตุของการกลับรายการโดยตรง และวิเคราะห์ต้นตอได้ตรงจุดเพื่อป้องกันข้อผิดพลาดในอนาคต. แหล่งข้อมูล อยู่ในตารางส่วนหัวเอกสาร BKPF ฟิลด์ STGRD. ตัวอย่าง 010205 | |||
กิจกรรมของ Record to Report - รายการบัญชี
| กิจกรรม | คำอธิบาย | ||
|---|---|---|---|
| บันทึกรายการบัญชีแล้ว | นี่คือกิจกรรมหลักที่บันทึกรายการบัญชีลงในบัญชีแยกประเภททั่วไปอย่างเป็นทางการและส่งผลต่องบการเงิน SAP บันทึกเหตุการณ์นี้โดยตรงเมื่อสถานะเอกสารเปลี่ยนเป็น 'posted' และกำหนดวันที่บันทึกบัญชีแล้ว. | ||
| เหตุผลที่สำคัญ นี่คือหมุดหมายสำคัญที่สุด ซึ่งแสดงว่าประมวลผลรายการบัญชีสำเร็จ โดยมักวัดเวลาตั้งแต่ต้นจนจบของกระบวนการถึงจุดนี้ และใช้เป็นเหตุการณ์หลักในการวิเคราะห์การปิดบัญชี. แหล่งข้อมูล ระบุเหตุการณ์นี้เมื่อเอกสารในตาราง BKPF มีวันที่บันทึกบัญชี (BKPF-BUDAT) สำหรับเอกสารที่พักไว้ เหตุการณ์นี้ตรงกับเวลาที่สถานะ BKPF-BSTAT เปลี่ยนจาก 'V' เป็นค่าว่าง เวลาบันทึกบัญชีคือวันที่บันทึกรายการ BKPF-CPUDT. บันทึก ระบุเมื่อ BKPF-BSTAT เปลี่ยนจาก 'V' เป็นค่าว่าง หรือใช้เหตุการณ์สร้างเอกสารสำหรับการบันทึกบัญชีโดยตรง. ประเภทเหตุการณ์ explicit | |||
| ประมวลผลการกลับรายการบัญชีแล้ว | กิจกรรมนี้หมายถึงการกลับรายการบัญชีที่บันทึกไปก่อนหน้า การกลับรายการคือเอกสารบัญชีฉบับใหม่ที่หักล้างรายการเดิม. | ||
| เหตุผลที่สำคัญ เหตุการณ์นี้สำคัญต่อการวัดคุณภาพข้อมูลและความถูกต้องของกระบวนการ อัตราการกลับรายการที่สูงบ่งชี้ถึงปัญหาเชิงระบบในขั้นตอนป้อนข้อมูลหรืออนุมัติ และการกลับรายการแต่ละครั้งหมายถึงงานที่ต้องทำซ้ำ. แหล่งข้อมูล ระบุเหตุการณ์นี้จากส่วนหัวของเอกสารต้นฉบับ (ตาราง BKPF) เมื่อกลับรายการ SAP จะระบุหมายเลขเอกสารกลับรายการ (BKPF-STBLG) และเหตุผลในการกลับรายการ (BKPF-STGRD) เวลาของเหตุการณ์คือวันที่บันทึกบัญชีของเอกสารกลับรายการฉบับใหม่. บันทึก ระบุเมื่อ BKPF-STBLG มีค่าในเอกสารต้นฉบับ โดยใช้วันที่บันทึกบัญชีของเอกสารกลับรายการเป็นเวลาเหตุการณ์. ประเภทเหตุการณ์ explicit | |||
| พักรายการบัญชี | กิจกรรมนี้หมายถึงการสร้างรายการบัญชีในสถานะร่าง ก่อนบันทึกอย่างเป็นทางการลงบัญชีแยกประเภททั่วไป SAP บันทึกเหตุการณ์นี้โดยตรงเมื่อผู้ใช้บันทึกเอกสารผ่านธุรกรรมพักเอกสาร ทำให้สถานะเอกสารเป็น 'parked'. | ||
| เหตุผลที่สำคัญ นี่คือเหตุการณ์เริ่มต้นสำคัญของกระบวนการที่มีการตรวจสอบและอนุมัติ การวิเคราะห์เวลาตั้งแต่พักเอกสารจนถึงบันทึกบัญชีช่วยระบุความล่าช้าในช่วงก่อนบันทึกและช่วงอนุมัติ. แหล่งข้อมูล ระบุเหตุการณ์นี้จากตารางส่วนหัวเอกสาร BKPF โดยถือว่าเอกสารถูกพักไว้เมื่อสร้างด้วยสถานะ BKPF-BSTAT = 'V' เวลาของเหตุการณ์ใช้วันที่และเวลาที่สร้างเอกสาร คือ BKPF-CPUDT และ BKPF-CPUTM. บันทึก ระบุการสร้างเอกสารใน BKPF โดย BKPF-BSTAT เป็น 'V'. ประเภทเหตุการณ์ explicit | |||
| ส่งรายการบัญชีแล้ว | กิจกรรมนี้หมายถึงผู้สร้างดำเนินการกับรายการบัญชีที่พักไว้จนเสร็จ และพร้อมให้ตรวจสอบและอนุมัติ โดยทั่วไปจะบันทึกเหตุการณ์นี้เมื่อเริ่มงาน SAP Business Workflow ที่เชื่อมโยงกับเอกสารที่พักไว้. | ||
| เหตุผลที่สำคัญ นี่คือจุดส่งต่องานจากผู้สร้างไปยังผู้อนุมัติ และเป็นจุดเริ่มนับเวลา KPI ของรอบการอนุมัติ ถือเป็นหมุดหมายสำคัญในการวัดประสิทธิภาพของเวิร์กโฟลว์อนุมัติ. แหล่งข้อมูล อนุมานจากเวลาเริ่มต้นของอินสแตนซ์เวิร์กโฟลว์ที่เชื่อมโยงกับออบเจ็กต์เอกสารทางการเงิน โดยต้องวิเคราะห์ตารางบันทึกเวิร์กโฟลว์ เช่น SWW_WI2OBJ เพื่อค้นหาเวิร์กโฟลว์ที่เริ่มสำหรับรหัสบริษัท หมายเลขเอกสาร และปีบัญชีที่ระบุ. บันทึก ระบุเหตุการณ์เริ่มต้นเวิร์กโฟลว์สำหรับออบเจ็กต์เอกสารที่พักไว้. ประเภทเหตุการณ์ inferred | |||
| อนุมัติรายการบัญชีแล้ว | กิจกรรมนี้หมายถึงการอนุมัติรายการบัญชีขั้นสุดท้ายในเวิร์กโฟลว์ ทำให้รายการพร้อมสำหรับบันทึกบัญชี บันทึกเหตุการณ์นี้จากรายการเวิร์กโฟลว์เมื่อขั้นตอน 'release' หรือ 'approve' ขั้นสุดท้ายเสร็จสิ้น. | ||
| เหตุผลที่สำคัญ นี่คือหมุดหมายสำคัญที่สิ้นสุดกระบวนการอนุมัติ ระยะเวลาจนถึงกิจกรรมนี้เป็น KPI สำคัญในการวัดประสิทธิภาพการอนุมัติ ส่วนเวลาตั้งแต่เหตุการณ์นี้จนถึงการบันทึกบัญชีใช้วัดความล่าช้าหลังอนุมัติ. แหล่งข้อมูล อนุมานจากเวลาที่ขั้นตอนอนุมัติขั้นสุดท้ายเสร็จสิ้นในบันทึก SAP Business Workflow นี่คือการอนุมัติครั้งสุดท้ายก่อนบันทึกเอกสารหรือทำให้เอกสารพร้อมบันทึกบัญชี. บันทึก ระบุเวลาที่ขั้นตอน 'release' หรือ 'approve' ขั้นสุดท้ายเสร็จสิ้นในบันทึกเวิร์กโฟลว์. ประเภทเหตุการณ์ inferred | |||
| แก้ไขรายการบัญชีแล้ว | กิจกรรมนี้หมายถึงผู้สร้างเดิมแก้ไขรายการบัญชีที่พักไว้ หลังจากได้รับรายการกลับมาให้แก้ไข อนุมานได้จากการตรวจพบการเปลี่ยนแปลงเอกสารหลังเหตุการณ์ 'ขอให้แก้ไข'. | ||
| เหตุผลที่สำคัญ การติดตามการแก้ไขช่วยวัดปริมาณงานที่ใช้ไปกับการแก้ไขงาน เวลาตั้งแต่ขอให้แก้ไขจนถึงการแก้ไขเสร็จช่วยให้เห็นความล่าช้าในการจัดการปัญหาของรายการที่ส่งมา. แหล่งข้อมูล อนุมานจากการวิเคราะห์บันทึกการเปลี่ยนแปลงเอกสาร (ตาราง CDHDR และ CDPOS) ของเอกสารที่พักไว้ หากมีการเปลี่ยนแปลงหลังเหตุการณ์ปฏิเสธในเวิร์กโฟลว์ แสดงว่ามีการแก้ไขแล้ว เวลาของเหตุการณ์มาจากตาราง CDHDR. บันทึก ระบุรายการในบันทึกการเปลี่ยนแปลง CDHDR/CDPOS หลังเหตุการณ์ปฏิเสธ. ประเภทเหตุการณ์ inferred | |||
| ขอให้แก้ไขรายการบัญชี | หมายถึงขั้นตอนในเวิร์กโฟลว์ที่ผู้อนุมัติตรวจสอบรายการบัญชีแล้วส่งกลับให้ผู้สร้างแก้ไข เหตุการณ์นี้บันทึกจากรายการเวิร์กโฟลว์ที่ระบุการตัดสินใจของผู้ใช้ว่า 'ปฏิเสธ' หรือ 'ส่งกลับ'. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้จำเป็นต่อการระบุวงจรการแก้ไขงาน ซึ่งเป็นสาเหตุหลักของความไม่มีประสิทธิภาพและการเบี่ยงเบนจากกระบวนการ หากเกิดเหตุการณ์นี้บ่อย แสดงว่าคุณภาพของรายการมีปัญหาหรือข้อกำหนดไม่ชัดเจน. แหล่งข้อมูล อนุมานเหตุการณ์นี้จากเวลาของขั้นตอนการตัดสินใจของผู้ใช้ในบันทึก SAP Business Workflow ซึ่งตรงกับการดำเนินการ 'ปฏิเสธ' หรือ 'ส่งกลับเพื่อแก้ไข'. บันทึก ระบุเวลาที่ตัดสินใจ 'ปฏิเสธ' หรือ 'ส่งกลับเพื่อแก้ไข' ในบันทึกเวิร์กโฟลว์. ประเภทเหตุการณ์ inferred | |||
| เคลียร์รายการบรรทัดบัญชีแล้ว | กิจกรรมนี้หมายถึงการกระทบยอดรายการบรรทัดในบัญชี G/L ที่จัดการรายการค้าง เช่น บัญชีพักรายการธนาคาร เกิดขึ้นเมื่อจับคู่รายการบรรทัดกับอีกรายการหนึ่งเพื่อปิดรายการนั้น. | ||
| เหตุผลที่สำคัญ สำหรับกระบวนการอย่างการกระทบยอดธนาคาร ระยะเวลาที่ใช้เคลียร์รายการเป็น KPI สำคัญ กิจกรรมนี้ช่วยวิเคราะห์ประสิทธิภาพของการกระทบยอดและขั้นตอนปิดบัญชีสิ้นเดือน. แหล่งข้อมูล บันทึกเหตุการณ์นี้จากตารางรายการบรรทัด BSEG เมื่อเคลียร์รายการบรรทัดแล้ว ฟิลด์วันที่เคลียร์ (BSEG-AUGDT) และเอกสารเคลียร์ (BSEG-AUGBL) จะมีค่า เวลาของเหตุการณ์ใช้วันที่เคลียร์. บันทึก ระบุเมื่อฟิลด์วันที่เคลียร์ (BSEG-AUGDT) มีค่าสำหรับรายการบรรทัด. ประเภทเหตุการณ์ explicit | |||
| แนบเอกสารประกอบ | กิจกรรมนี้หมายถึงผู้ใช้แนบเอกสารประกอบ เช่น ใบแจ้งหนี้หรือสเปรดชีต เข้ากับรายการบัญชี เหตุการณ์นี้ไม่ได้บันทึกไว้อย่างชัดเจนเป็นเหตุการณ์ทางบัญชีมาตรฐาน โดยทั่วไปจึงอนุมานจากการตรวจสอบว่ามีการสร้างไฟล์แนบที่เชื่อมโยงกับออบเจ็กต์เอกสารบัญชีหรือไม่. | ||
| เหตุผลที่สำคัญ การติดตามกิจกรรมนี้ช่วยตรวจสอบว่ามีเอกสารประกอบตามนโยบายหรือไม่ ความล่าช้าในการแนบเอกสารอาจเป็นสาเหตุให้รอบการอนุมัติยืดเยื้อ. แหล่งข้อมูล การบันทึกเหตุการณ์นี้พร้อมเวลาอย่างน่าเชื่อถือทำได้ยาก แต่อาจอนุมานได้จากการวิเคราะห์ตารางไฟล์แนบของ Generic Object Services (GOS) เช่น SOOD แล้วเชื่อมเวลาที่สร้างไฟล์แนบกับคีย์ออบเจ็กต์ของรายการบัญชี. บันทึก อนุมานจากเวลาที่สร้างออบเจ็กต์ที่เชื่อมโยงในตาราง GOS (เช่น SOOD). ประเภทเหตุการณ์ inferred | |||
| ปฏิเสธรายการบัญชี | กิจกรรมนี้หมายถึงการปฏิเสธรายการบัญชีขั้นสุดท้าย ซึ่งจะไม่มีการบันทึกบัญชี โดยทั่วไปเป็นสถานะสิ้นสุดของเวิร์กโฟลว์อนุมัติ และอาจตามด้วยการลบเอกสารที่พักไว้. | ||
| เหตุผลที่สำคัญ การติดตามการปฏิเสธมีความสำคัญต่อการจัดการคุณภาพ การวิเคราะห์เหตุผลและความถี่ของการปฏิเสธช่วยเพิ่มอัตรารายการบัญชีที่ถูกต้องตั้งแต่ครั้งแรก. แหล่งข้อมูล ผลลัพธ์นี้บันทึกจาก SAP Business Workflow โดยแสดงการตัดสินใจขั้นสุดท้ายของผู้ใช้ว่า 'ปฏิเสธ' ซึ่งทำให้กระบวนการสิ้นสุด เอกสารที่พักไว้อาจถูกลบในภายหลัง. บันทึก ระบุสถานะ 'ปฏิเสธ' ขั้นสุดท้ายในบันทึกเวิร์กโฟลว์ของเอกสาร. ประเภทเหตุการณ์ inferred | |||
| ระบุการบันทึกบัญชีข้ามบริษัท | กิจกรรมที่คำนวณขึ้นเพื่อระบุรายการบัญชีที่มีผลต่อรหัสบริษัทมากกว่าหนึ่งรหัส โดยวิเคราะห์รายการบรรทัดของเอกสารทางการเงินหนึ่งฉบับ. | ||
| เหตุผลที่สำคัญ ธุรกรรมข้ามบริษัทอาจมีขั้นตอนประมวลผลและข้อกำหนดการอนุมัติที่ซับซ้อนกว่า การระบุธุรกรรมเหล่านี้ช่วยให้วิเคราะห์ระยะเวลาของกระบวนการและเส้นทางการทำงานแยกกัน เพื่อค้นหาคอขวดเฉพาะได้. แหล่งข้อมูล คำนวณโดยตรวจสอบตารางรายการบรรทัด BSEG ของหมายเลขเอกสาร (BELNR) หากรายการบรรทัดมีรหัสบริษัท (BSEG-BUKRS) ที่ไม่ซ้ำกันมากกว่าหนึ่งค่า แสดงว่าเป็นการบันทึกบัญชีข้ามบริษัท. บันทึก ตรวจสอบว่ามีค่า BSEG-BUKRS ที่ไม่ซ้ำกันหลายค่าภายใน BKPF-BELNR เดียวหรือไม่. ประเภทเหตุการณ์ calculated | |||
| ระบุรายการที่ป้อนด้วยตนเอง | กิจกรรมนี้ระบุว่ารายการบัญชีสร้างผ่านธุรกรรมออนไลน์ด้วยตนเอง หรือผ่านอินเทอร์เฟซอัตโนมัติหรือกระบวนการแบบชุด กิจกรรมนี้ไม่ใช่การกระทำของผู้ใช้ แต่เป็นคุณลักษณะที่คำนวณจากข้อมูลในระบบ. | ||
| เหตุผลที่สำคัญ การแยกรายการที่ทำด้วยตนเองออกจากรายการอัตโนมัติมีความสำคัญต่อการปรับปรุงกระบวนการให้ตรงจุด กระบวนการที่ทำด้วยตนเองมักเป็นเป้าหมายของการกำหนดมาตรฐานและการนำระบบอัตโนมัติมาใช้. แหล่งข้อมูล คำนวณจากการวิเคราะห์ฟิลด์ในตารางส่วนหัวเอกสาร BKPF รหัสธุรกรรม (BKPF-TCODE) เช่น 'FB01', 'FB50' หรือ 'FV50' บ่งชี้ว่าป้อนข้อมูลด้วยตนเอง ส่วน T-code อื่นหรือชื่อการป้อนข้อมูลแบบชุดที่ระบุ (BKPF-AWKEY) อาจบ่งชี้ว่าทำงานอัตโนมัติ. บันทึก อนุมานจาก BKPF-TCODE หรือตัวบ่งชี้อื่นจากระบบต้นทางในส่วนหัวเอกสาร. ประเภทเหตุการณ์ calculated | |||
| ลบรายการบัญชีที่พักไว้ | หมายถึงการลบรายการบัญชีที่พักไว้ซึ่งไม่เคยบันทึกบัญชี อาจเกิดขึ้นหลังการปฏิเสธ หรือเมื่อสร้างรายการผิดพลาด. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้เป็นจุดสิ้นสุดของกระบวนการที่ไม่สำเร็จ การวิเคราะห์สาเหตุที่ลบเอกสารที่พักไว้อาจเผยให้เห็นปัญหา เช่น รายการซ้ำหรือความเข้าใจผิดเกี่ยวกับกระบวนการ. แหล่งข้อมูล บันทึกเหตุการณ์นี้เมื่อสถานะของเอกสารที่พักไว้ในตาราง BKPF เปลี่ยนแปลง โดยฟิลด์สถานะ BKPF-BSTAT จะเปลี่ยนเป็น 'Z' (ลบเอกสารที่พักไว้แล้ว) ดูเวลาที่เปลี่ยนแปลงได้จากบันทึกการเปลี่ยนแปลงเอกสาร (CDHDR). บันทึก ระบุเมื่อ BKPF-BSTAT เปลี่ยนเป็น 'Z'. ประเภทเหตุการณ์ explicit | |||
| สร้างรายการบัญชี | หมายถึงการสร้างรายการบัญชีและบันทึกโดยตรง โดยไม่มีขั้นตอนพักเอกสารก่อนหน้า SAP บันทึกเหตุการณ์นี้เมื่อสร้างเอกสารผ่านธุรกรรมบันทึกบัญชีโดยตรง. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้เป็นจุดเริ่มต้นอีกแบบหนึ่งสำหรับกระบวนการบันทึกรายการบัญชีที่ไม่ซับซ้อนและไม่ต้องผ่านเวิร์กโฟลว์อนุมัติ ช่วยแยกรายการที่บันทึกโดยตรงออกจากรายการที่พักไว้และมีขั้นตอนซับซ้อนกว่า. แหล่งข้อมูล เหตุการณ์นี้ตรงกับการสร้างเอกสารในตาราง BKPF ซึ่งสถานะ BKPF-BSTAT ว่างเปล่า (บันทึกบัญชีแล้ว) เวลาของเหตุการณ์คือวันที่สร้าง BKPF-CPUDT สำหรับเอกสารเหล่านี้ เหตุการณ์ 'สร้าง' และ 'บันทึกบัญชี' เกิดขึ้นพร้อมกัน. บันทึก ระบุการสร้างเอกสารใน BKPF โดย BKPF-BSTAT ว่างเปล่า. ประเภทเหตุการณ์ explicit | |||
คู่มือการดึงข้อมูล
ขั้นตอน
- สร้างโปรแกรม ABAP: ในระบบ SAP ไปที่รหัสธุรกรรม SE38 (ABAP Editor) ตั้งชื่อโปรแกรมใหม่ เช่น Z_PM_JE_EXTRACTION แล้วคลิก Create ระบุชื่อเรื่องที่เหมาะสมและกำหนดประเภทโปรแกรมเป็น 'Executable Program'.
- กำหนดหน้าจอเลือกข้อมูล: กำหนดหน้าจอเลือกข้อมูลในซอร์สโค้ดของโปรแกรม เพื่อให้ผู้ใช้ระบุพารามิเตอร์ เช่น ช่วงวันที่สร้างเอกสาร รหัสบริษัท และประเภทเอกสาร สำหรับจำกัดปริมาณข้อมูลที่จะดึง
- ประกาศโครงสร้างข้อมูล: กำหนดโครงสร้างตารางภายในสำหรับเก็บข้อมูลบันทึกเหตุการณ์ขั้นสุดท้าย โดยต้องมีฟิลด์ที่จำเป็นทั้งหมด ได้แก่ JournalEntryId, ActivityName, EventTime, SourceSystem, LastDataUpdate และแอตทริบิวต์แนะนำ เช่น User, CompanyCode และ PostingDate
- เขียนตรรกะเลือกข้อมูล: เขียนคำสั่ง ABAP SQL หลักเพื่อดึงข้อมูลของกิจกรรมที่จำเป็นทั้ง 14 รายการ โดยเลือกข้อมูลจากตารางหลัก เช่น BKPF (ส่วนหัวเอกสาร) และ BSEG (รายการเอกสาร) ตารางบันทึกการเปลี่ยนแปลง CDHDR และ CDPOS ตารางเวิร์กโฟลว์ เช่น SWWLOGHIST และตารางเคลียร์รายการ เช่น BSAS และ BSAK
- ดึงเอกสารที่พักไว้และลงบัญชีแล้ว: สำหรับเหตุการณ์ 'พักรายการบัญชี' ให้เลือกข้อมูลจาก BKPF ที่สถานะเอกสาร (BSTAT) เป็น 'V' สำหรับเหตุการณ์ 'สร้างรายการบัญชี' และ 'ลงบัญชีรายการบัญชี' ให้เลือกข้อมูลจาก BKPF ที่สถานะว่าง ซึ่งหมายถึงเอกสารปกติที่ลงบัญชีแล้ว
- ดึงเหตุการณ์การแก้ไขและการลบ: ค้นหาตารางเอกสารการเปลี่ยนแปลง CDHDR และ CDPOS สำหรับคลาสออบเจ็กต์ 'BELEG' กรองด้วยคีย์เอกสารเพื่อค้นหาการเปลี่ยนแปลงที่ตรงกับกิจกรรม 'แก้ไขรายการบัญชี' หรือ 'ลบรายการบัญชีที่พักไว้'
- ดึงเหตุการณ์เวิร์กโฟลว์: หากต้องการบันทึกกิจกรรม เช่น 'ส่งรายการบัญชี' 'อนุมัติ' 'ปฏิเสธ' และ 'ขอให้แก้ไข' ให้ค้นหาตารางเวิร์กโฟลว์ ใช้ตาราง SWW_WI2OBJ เชื่อมโยงเอกสารบัญชีกับอินสแตนซ์เวิร์กโฟลว์ จากนั้นอ่าน SWWLOGHIST เพื่อดูการตัดสินใจของผู้ใช้หรือการเปลี่ยนสถานะ
- ระบุกิจกรรมที่คำนวณขึ้น: สำหรับ 'ระบุรายการที่ป้อนด้วยตนเอง' ให้ตรวจสอบรหัสธุรกรรม (BKPF-TCODE) เทียบกับรายการรหัสธุรกรรมที่ใช้ป้อนข้อมูลด้วยตนเอง สำหรับ 'ระบุการลงบัญชีข้ามบริษัท' ให้วิเคราะห์รายการใน BSEG ของเอกสารนั้นว่ามีรหัสบริษัทมากกว่าหนึ่งรหัสหรือไม่
- รวมและแปลงข้อมูล: เมื่อเลือกข้อมูลของแต่ละกิจกรรมแล้ว ให้แปลงเป็นโครงสร้างบันทึกเหตุการณ์ขั้นสุดท้าย นำรหัสบริษัท หมายเลขเอกสาร และปีบัญชีมาต่อกันเพื่อสร้าง JournalEntryId แปลงวันที่และเวลาของ SAP ให้เป็นเวลาประทับ EventTime เดียว แล้วเพิ่มผลลัพธ์จากแต่ละคำสั่งค้นหาลงในตารางภายในขั้นสุดท้าย
- ส่งออกไฟล์: ใช้คำสั่งจัดการไฟล์ของ ABAP เช่น OPEN DATASET, LOOP AT, TRANSFER และ CLOSE DATASET เพื่อเขียนข้อมูลจากตารางภายในที่รวมแล้วเป็นไฟล์ CSV หรือไฟล์ข้อความในไดเรกทอรีของ SAP application server ซึ่งดูได้ผ่านธุรกรรม AL11
- ตั้งเวลาเป็นงานเบื้องหลัง: ไปที่ธุรกรรม SM36 (Define Background Job) สร้างงานใหม่ กำหนดขั้นตอนให้เรียกใช้โปรแกรม ABAP และตั้งเวลา เช่น ทุกคืนหรือทุกสัปดาห์ในช่วงที่ระบบมีการใช้งานน้อย เพื่อให้ดึงข้อมูลโดยอัตโนมัติ
- ดาวน์โหลดและจัดรูปแบบไฟล์: ใช้ธุรกรรม CG3Y หรือขอให้ผู้ดูแลระบบดาวน์โหลดไฟล์ที่สร้างจาก application server มายังคอมพิวเตอร์ของคุณ ตรวจสอบว่าการเข้ารหัสและรูปแบบไฟล์เหมาะสำหรับอัปโหลดไปยังเครื่องมือ process mining.
การกำหนดค่า
- ช่วงวันที่: ควรกำหนดช่วงวันที่ให้ชัดเจนเพื่อควบคุมประสิทธิภาพ ใช้วันที่สร้างเอกสาร (BKPF-CPUDT) เป็นตัวกรองหลัก สำหรับการวิเคราะห์ครั้งแรก แนะนำให้ใช้ช่วง 3 ถึง 6 เดือน ส่วนการทดสอบ ให้เลือกช่วงไม่กี่วันที่ทราบว่ามีข้อมูล
- ตัวกรองรหัสบริษัท: กรองตามรหัสบริษัท (BKPF-BUKRS) ทุกครั้ง การดึงข้อมูลจากทุกรหัสบริษัทพร้อมกันอาจใช้ทรัพยากรมาก ควรเริ่มจากรหัสบริษัทที่เกี่ยวข้องเพียงหนึ่งรหัสหรือกลุ่มเล็กๆ
- ตัวกรองประเภทเอกสาร: ใช้ตัวกรองประเภทเอกสาร (BKPF-BLART) เพื่อจำกัดข้อมูลให้เหลือรายการบัญชีบางประเภท เช่น 'SA' สำหรับเอกสารบัญชีแยกประเภททั่วไป หากไม่จำเป็นต้องวิเคราะห์เอกสารทุกประเภท
- รหัสงานเวิร์กโฟลว์: การดึงเหตุการณ์เวิร์กโฟลว์ขึ้นอยู่กับรหัสงานเฉพาะที่ระบบของคุณใช้สำหรับการอนุมัติ การปฏิเสธ และการส่ง รหัสเหล่านี้ต้องกำหนดไว้ในซอร์สโค้ดของโปรแกรมตามนิยามเวิร์กโฟลว์ของบริษัท
- ข้อควรพิจารณาด้านประสิทธิภาพ: โปรแกรมจะเชื่อมตารางขนาดใหญ่หลายตาราง โดยเฉพาะ CDPOS และตารางประวัติเวิร์กโฟลว์ การเรียกใช้ในช่วงเวลาทำงานที่มีผู้ใช้มากอาจกระทบประสิทธิภาพของระบบ ควรตั้งเวลาให้ทำงานเบื้องหลังในช่วงที่มีการใช้งานน้อยเสมอ หากพบปัญหาด้านประสิทธิภาพซ้ำๆ ให้พิจารณาสร้างดัชนีฐานข้อมูลรอง
- ข้อกำหนดเบื้องต้น: วิธีนี้ต้องใช้ผู้ใช้ที่มีสิทธิ์พัฒนา ABAP (สำหรับ SE38) และสิทธิ์สร้างและจัดการงานเบื้องหลัง (สำหรับ SM36) ผู้ใช้หรืองานดังกล่าวต้องมีสิทธิ์อ่านตารางการเงิน เวิร์กโฟลว์ และระบบที่เกี่ยวข้องทั้งหมด (BKPF, BSEG, CDHDR, CDPOS, SWWLOGHIST และอื่นๆ).
ตัวอย่างคำค้น abap
REPORT Z_PM_JE_EXTRACTION.
*&---------------------------------------------------------------------*
*& Data Structures for Final Event Log
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
journalentryid TYPE string,
activityname TYPE string,
eventtime TYPE timestamp,
sourcesystem TYPE string,
lastdataupdate TYPE timestamp,
username TYPE uname,
companycode TYPE bukrs,
documenttype TYPE blart,
postingdate TYPE budat,
transactioncode TYPE tcode,
isreversed TYPE abap_bool,
END OF ty_event_log.
DATA: lt_final_log TYPE STANDARD TABLE OF ty_event_log.
DATA: ls_event TYPE ty_event_log.
*&---------------------------------------------------------------------*
*& Selection Screen Parameters
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_bukrs FOR bkpf-bukrs OBLIGATORY,
s_blart FOR bkpf-blart,
s_cpudt FOR bkpf-cpudt OBLIGATORY.
PARAMETERS: p_sysid TYPE sy-sysid DEFAULT sy-sysid.
*&---------------------------------------------------------------------*
*& Main Logic
*&---------------------------------------------------------------------*
START-OF-SELECTION.
DATA(lv_last_update) = cl_abap_context_info=>get_system_timestamp( ).
" 1. Journal Entry Parked
SELECT CONCAT( a~bukrs, a~belnr, a~gjahr ) AS journalentryid,
'Journal Entry Parked' AS activityname,
a~cpudt, a~cputm,
a~usnam AS username,
a~bukrs AS companycode,
a~blart AS documenttype,
a~bldat AS postingdate,
a~tcode AS transactioncode
FROM bkpf AS a
WHERE a~bukrs IN s_bukrs
AND a~blart IN s_blart
AND a~cpudt IN s_cpudt
AND a~bstat = 'V' " Parked Document
INTO TABLE @DATA(lt_parked).
IF sy-subrc = 0.
LOOP AT lt_parked ASSIGNING FIELD-SYMBOL(<fs_parked>).
ls_event-journalentryid = <fs_parked>-journalentryid.
ls_event-activityname = <fs_parked>-activityname.
CONVERT DATE <fs_parked>-cpudt TIME <fs_parked>-cputm INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
ls_event-sourcesystem = p_sysid.
ls_event-lastdataupdate = lv_last_update.
ls_event-username = <fs_parked>-username.
ls_event-companycode = <fs_parked>-companycode.
ls_event-documenttype = <fs_parked>-documenttype.
ls_event-postingdate = <fs_parked>-postingdate.
ls_event-transactioncode = <fs_parked>-transactioncode.
APPEND ls_event TO lt_final_log.
ENDLOOP.
ENDIF.
" 2. Journal Entry Created (directly posted, not parked first)
" 9. Journal Entry Posted
" These two events happen at the same time for a direct posting.
SELECT CONCAT( bukrs, belnr, gjahr ) AS journalentryid,
cpudt, cputm, usnam, bukrs, blart, budat, tcode, stblg
FROM bkpf
WHERE bukrs IN s_bukrs
AND blart IN s_blart
AND cpudt IN s_cpudt
AND bstat = '' " Normal, posted document
INTO TABLE @DATA(lt_posted).
IF sy-subrc = 0.
LOOP AT lt_posted ASSIGNING FIELD-SYMBOL(<fs_posted>).
" Activity: Journal Entry Created
ls_event-journalentryid = <fs_posted>-journalentryid.
ls_event-activityname = 'Journal Entry Created'.
CONVERT DATE <fs_posted>-cpudt TIME <fs_posted>-cputm INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
ls_event-sourcesystem = p_sysid.
ls_event-lastdataupdate = lv_last_update.
ls_event-username = <fs_posted>-usnam.
ls_event-companycode = <fs_posted>-bukrs.
ls_event-documenttype = <fs_posted>-blart.
ls_event-postingdate = <fs_posted>-budat.
ls_event-transactioncode = <fs_posted>-tcode.
ls_event-isreversed = COND #( WHEN <fs_posted>-stblg IS NOT INITIAL THEN abap_true ELSE abap_false ).
APPEND ls_event TO lt_final_log.
" Activity: Journal Entry Posted
ls_event-activityname = 'Journal Entry Posted'.
APPEND ls_event TO lt_final_log.
ENDLOOP.
ENDIF.
" 3. Documentation Attached (via GOS)
SELECT a~instid_a, c~cr_timestamp
FROM srgbtbrel AS a
INNER JOIN sood AS b ON a~instid_b = b~objid
INNER JOIN socf AS c ON b~filid = c~filid
WHERE a~typeid_a = 'BKPF'
AND a~bukrs IN s_bukrs
INTO TABLE @DATA(lt_attachments).
IF sy-subrc = 0.
LOOP AT lt_attachments ASSIGNING FIELD-SYMBOL(<fs_attach>).
ls_event-journalentryid = |{ <fs_attach>-instid_a(4) }{ <fs_attach>-instid_a+4(10) }{ <fs_attach>-instid_a+14(4) }|.
ls_event-activityname = 'Documentation Attached'.
ls_event-eventtime = <fs_attach>-cr_timestamp.
" Other attributes may need to be looked up from BKPF if needed.
APPEND ls_event TO lt_final_log.
ENDLOOP.
ENDIF.
" 4, 5, 6, 7, 8: Workflow events (Submitted, Changes Requested, Corrected, Approved, Rejected)
" This is a simplified example. Real logic depends on specific workflow templates.
SELECT a~instid, b~wi_cd, b~wi_ct, b~wi_aagent, b~wi_text
FROM sww_wi2obj AS a
INNER JOIN swwloghist AS b ON a~wi_id = b~wi_id
WHERE a~typeid = 'BKPF'
AND a~catid = 'BO'
AND a~bukrs IN s_bukrs
AND b~wi_cd BETWEEN s_cpudt-low AND s_cpudt-high
INTO TABLE @DATA(lt_workflow).
IF sy-subrc = 0.
LOOP AT lt_workflow ASSIGNING FIELD-SYMBOL(<fs_wf>).
ls_event-journalentryid = |{ <fs_wf>-instid(4) }{ <fs_wf>-instid+4(10) }{ <fs_wf>-instid+14(4) }|.
ls_event-activityname = CASE <fs_wf>-wi_text. " Simplified logic based on work item text
WHEN '[Placeholder for Submit Text]' THEN 'Journal Entry Submitted'
WHEN '[Placeholder for Approve Text]' THEN 'Journal Entry Approved'
WHEN '[Placeholder for Reject Text]' THEN 'Journal Entry Rejected'
WHEN '[Placeholder for Rework Text]' THEN 'Journal Entry Changes Requested'
ELSE ''
ENDCASE.
IF ls_event-activityname IS NOT INITIAL.
CONVERT DATE <fs_wf>-wi_cd TIME <fs_wf>-wi_ct INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
ls_event-username = <fs_wf>-wi_aagent.
APPEND ls_event TO lt_final_log.
ENDIF.
ENDLOOP.
ENDIF.
" 10. Manual Entry Identified & 11. Cross-Company Posting Identified
SELECT bukrs, belnr, gjahr, tcode FROM bkpf
WHERE bukrs IN s_bukrs AND blart IN s_blart AND cpudt IN s_cpudt
INTO TABLE @DATA(lt_calc_base).
LOOP AT lt_calc_base ASSIGNING FIELD-SYMBOL(<fs_calc>).
ls_event-journalentryid = |{ <fs_calc>-bukrs }{ <fs_calc>-belnr }{ <fs_calc>-gjahr }|.
" Check for manual entry T-Codes
IF <fs_calc>-tcode = 'FB01' OR <fs_calc>-tcode = 'F-02' OR <fs_calc>-tcode = 'FB50'.
ls_event-activityname = 'Manual Entry Identified'.
APPEND ls_event TO lt_final_log.
ENDIF.
" Check for cross-company posting
SELECT SINGLE bukrs FROM bseg WHERE belnr = <fs_calc>-belnr AND gjahr = <fs_calc>-gjahr AND bukrs <> <fs_calc>-bukrs INTO @DATA(lv_cross_bukrs).
IF sy-subrc = 0.
ls_event-activityname = 'Cross-Company Posting Identified'.
APPEND ls_event TO lt_final_log.
ENDIF.
ENDLOOP.
" 12. Journal Entry Line Item Cleared
SELECT a~bukrs, a~belnr, a~gjahr, a~augdt, a~augbl
FROM bsas AS a " G/L Cleared Items
WHERE a~bukrs IN s_bukrs
AND a~budat IN s_cpudt
INTO TABLE @DATA(lt_cleared_gl).
IF sy-subrc = 0.
LOOP AT lt_cleared_gl ASSIGNING FIELD-SYMBOL(<fs_clr>).
ls_event-journalentryid = |{ <fs_clr>-bukrs }{ <fs_clr>-belnr }{ <fs_clr>-gjahr }|.
ls_event-activityname = 'Journal Entry Line Item Cleared'.
CONVERT DATE <fs_clr>-augdt INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
" User is often not directly available for clearing events
APPEND ls_event TO lt_final_log.
ENDLOOP.
ENDIF.
" 13. Parked Journal Entry Deleted & 6. Journal Entry Corrected
SELECT objectid, changenr, username, udate, utime FROM cdhdr
WHERE objectclas = 'BELEG'
AND udate IN s_cpudt
INTO TABLE @DATA(lt_cdhdr).
LOOP AT lt_cdhdr ASSIGNING FIELD-SYMBOL(<fs_cdhdr>).
SELECT SINGLE tcode FROM cdpos WHERE changenr = <fs_cdhdr>-changenr AND fname = 'BSTAT' AND value_new = 'Z' INTO @DATA(lv_deleted_tcode).
ls_event-journalentryid = |{ <fs_cdhdr>-objectid(4) }{ <fs_cdhdr>-objectid+4(10) }{ <fs_cdhdr>-objectid+14(4) }|.
CONVERT DATE <fs_cdhdr>-udate TIME <fs_cdhdr>-utime INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
ls_event-username = <fs_cdhdr>-username.
IF sy-subrc = 0.
ls_event-activityname = 'Parked Journal Entry Deleted'.
APPEND ls_event TO lt_final_log.
ELSE.
ls_event-activityname = 'Journal Entry Corrected'.
APPEND ls_event TO lt_final_log.
ENDIF.
ENDLOOP.
" 14. Journal Entry Reversal Processed
SELECT CONCAT( a~bukrs, a~belnr, a~gjahr ) AS journalentryid,
a~cpudt, a~cputm, a~usnam
FROM bkpf AS a
WHERE a~bukrs IN s_bukrs
AND a~blart IN s_blart
AND a~cpudt IN s_cpudt
AND a~stblg IS NOT NULL " Document is a reversal
INTO TABLE @DATA(lt_reversals).
IF sy-subrc = 0.
LOOP AT lt_reversals ASSIGNING FIELD-SYMBOL(<fs_rev>).
ls_event-journalentryid = <fs_rev>-journalentryid.
ls_event-activityname = 'Journal Entry Reversal Processed'.
CONVERT DATE <fs_rev>-cpudt TIME <fs_rev>-cputm INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
ls_event-username = <fs_rev>-usnam.
APPEND ls_event TO lt_final_log.
ENDLOOP.
ENDIF.
" Final step: Output to file
DATA(lv_filename) = |/tmp/je_extraction_{ sy-datum }_{ sy-uzeit }.csv|.
OPEN DATASET lv_filename FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc = 0.
" Write header
DATA(lv_header) = 'JournalEntryId,ActivityName,EventTime,SourceSystem,LastDataUpdate,User,CompanyCode,DocumentType,PostingDate,TransactionCode,IsReversed'.
TRANSFER lv_header TO lv_filename.
LOOP AT lt_final_log INTO ls_event.
DATA(lv_line) = |"{ ls_event-journalentryid }","|
|{ ls_event-activityname }","|
|{ ls_event-eventtime }","|
|{ ls_event-sourcesystem }","|
|{ ls_event-lastdataupdate }","|
|{ ls_event-username }","|
|{ ls_event-companycode }","|
|{ ls_event-documenttype }","|
|{ ls_event-postingdate }","|
|{ ls_event-transactioncode }","|
|{ ls_event-isreversed }"|.
TRANSFER lv_line TO lv_filename.
ENDLOOP.
CLOSE DATASET lv_filename.
ENDIF. ขั้นตอน
- เชื่อมต่อฐานข้อมูล: ขอข้อมูลรับรองแบบอ่านอย่างเดียวสำหรับฐานข้อมูล SAP ECC ใช้โปรแกรม SQL client ทั่วไป เช่น DBeaver, SAP HANA Studio หรือ SQL Server Management Studio เพื่อเชื่อมต่อฐานข้อมูล
- เตรียมคำสั่ง SQL: คัดลอกคำสั่ง SQL ฉบับเต็มจากส่วน 'query' ในเอกสารนี้ไปยัง SQL client
- กำหนดพารามิเตอร์การดึงข้อมูล: ก่อนเรียกใช้ ให้กำหนดค่าตัวแทนในคำสั่งค้นหา แทนที่ '[START_DATE]' และ '[END_DATE]' ด้วยช่วงวันที่ที่ต้องการในรูปแบบ 'YYYYMMDD' แทนที่ '[COMPANY_CODE_1]', '[COMPANY_CODE_2]' ด้วยรหัสบริษัท SAP ที่ต้องการวิเคราะห์
- ระบุระบบต้นทาง: ในคำสั่ง
SELECTหลัก ให้แทนที่ '[Your SAP System ID]' ด้วย SAP System ID (SID) จริง เพื่อระบุแหล่งข้อมูลให้ถูกต้อง - เรียกใช้คำสั่งค้นหา: เรียกใช้คำสั่ง SQL ที่กำหนดค่าแล้วกับฐานข้อมูล SAP ระยะเวลาทำงานจะแตกต่างกันตามช่วงวันที่และขนาดตารางในฐานข้อมูล
- ตรวจสอบผลลัพธ์เบื้องต้น: เมื่อคำสั่งทำงานเสร็จ ให้ตรวจดูแถวข้อมูลที่ได้อย่างคร่าวๆ ว่ามีข้อมูลตามที่คาดไว้ ตรวจสอบว่ามีกิจกรรมหลายประเภท และฟิลด์สำคัญ เช่น
JournalEntryIdกับEventTimeไม่ว่าง - จัดการเวลาประทับ: คำสั่งค้นหาจะนำฟิลด์วันที่และเวลามาต่อกันเป็นสตริงรูปแบบ
YYYYMMDDHHMMSSตรวจสอบว่าระบบปลายทางหรือขั้นตอนประมวลผลภายหลังอ่านรูปแบบนี้ได้ หรือปรับฟังก์ชัน SQLCONCATให้เป็นรูปแบบ ISO 8601 เช่นYYYY-MM-DDTHH:MI:SSหากฐานข้อมูลรองรับ - ส่งออกข้อมูล: ส่งออกผลลัพธ์ทั้งหมดจาก SQL client เป็นไฟล์ CSV และเลือกการเข้ารหัส UTF-8 เพื่อป้องกันปัญหาอักขระพิเศษ
- เตรียมอัปโหลด: ก่อนอัปโหลดไปยังเครื่องมือ process mining ให้ตรวจสอบว่าหัวคอลัมน์ตรงกับโครงสร้างข้อมูลที่กำหนด โดย
JournalEntryId,ActivityNameและEventTimeเป็นฟิลด์สำคัญ เพิ่มคอลัมน์LastDataUpdateและใส่เวลาประทับที่ดึงข้อมูล - ตรวจสอบขั้นสุดท้าย: ทำตามขั้นตอนในส่วน 'validationSteps' เพื่อให้แน่ใจว่าข้อมูลที่ดึงมาครบถ้วนและถูกต้องก่อนเริ่มวิเคราะห์.
การกำหนดค่า
- สิทธิ์เข้าถึงฐานข้อมูล: ผู้ใช้ฐานข้อมูลต้องมีสิทธิ์อ่านตาราง SAP ต่อไปนี้: BKPF, BSEG, CDHDR, CDPOS, T001 และ V_USERNAME สำหรับกิจกรรมที่เกี่ยวข้องกับเวิร์กโฟลว์ ต้องมีสิทธิ์เข้าถึง SWW_WI2OBJ และ SWWLOGHIST ด้วย โดยปกติสิทธิ์ระดับนี้จะให้เฉพาะทีมเทคนิคที่เกี่ยวข้อง
- การกรองช่วงวันที่: ควรกรองข้อมูลตามช่วงวันที่เพื่อให้คำสั่งค้นหาทำงานได้อย่างมีประสิทธิภาพ คำสั่งค้นหาที่ให้มามีตัวแทนสำหรับวันที่เริ่มต้นและวันที่สิ้นสุด ซึ่งใช้กับวันที่สร้างเอกสาร (
BKPF.CPUDT) แนะนำให้ใช้ช่วง 3 ถึง 6 เดือนสำหรับการวิเคราะห์ครั้งแรก - การกรองหน่วยงาน: กรองตามรหัสบริษัท (
BKPF.BUKRS) ทุกครั้ง เพื่อควบคุมปริมาณข้อมูลและกำหนดขอบเขตการวิเคราะห์ คุณอาจกรองตามประเภทเอกสาร (BKPF.BLART) เพิ่มเติม เพื่อเลือกเฉพาะรายการบัญชีที่เกี่ยวข้อง เช่น 'SA' สำหรับเอกสารบัญชีแยกประเภททั่วไป และตัดเอกสารปฏิบัติการ เช่น ใบแจ้งหนี้หรือการชำระเงิน หากไม่อยู่ในขอบเขต - ข้อควรพิจารณาด้านประสิทธิภาพ: การค้นหาข้อมูลโดยตรงจากตารางหลักขนาดใหญ่ เช่น BSEG และ CDPOS อาจใช้ทรัพยากรมาก แนะนำให้ดึงข้อมูลนอกเวลาทำการเพื่อไม่ให้กระทบประสิทธิภาพระบบสำหรับผู้ใช้ หลีกเลี่ยงการดึงข้อมูลเกินหนึ่งปีในการทำงานครั้งเดียว
- รหัสงานเวิร์กโฟลว์: คำสั่งค้นหามีตัวแทน เช่น '[WF_TASK_ID_SUBMIT]' และ '[WF_TASK_ID_APPROVE]' ต้องแทนที่ด้วยรหัสงานจริงจากการกำหนดค่าเวิร์กโฟลว์รายการบัญชีในระบบของคุณ คุณสามารถตรวจสอบรหัสได้โดยปรึกษาผู้เชี่ยวชาญ SAP Workflow หรือวิเคราะห์นิยามเวิร์กโฟลว์ทางเทคนิคในธุรกรรม PFTC.
ตัวอย่างคำค้น sql
WITH DOC_HEADERS AS (
SELECT
BUKRS,
BELNR,
GJAHR,
BLART,
BLDAT,
BUDAT,
CPUDT,
CPUTM,
USNAM,
TCODE,
BSTAT,
STBLG,
XRECH
FROM BKPF
WHERE CPUDT BETWEEN '[START_DATE]' AND '[END_DATE]'
AND BUKRS IN ('[COMPANY_CODE_1]', '[COMPANY_CODE_2]')
)
-- Event 1: Journal Entry Created (Directly Posted)
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
'Journal Entry Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(H.CPUDT, H.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
H.TCODE AS "TransactionCode",
CASE WHEN H.STBLG IS NOT NULL AND H.STBLG <> '' THEN TRUE ELSE FALSE END AS "IsReversed"
FROM DOC_HEADERS H
LEFT JOIN V_USERNAME U ON H.USNAM = U.BNAME
WHERE H.BSTAT = '' OR H.BSTAT = 'U'
UNION ALL
-- Event 2: Journal Entry Parked
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
'Journal Entry Parked' AS "ActivityName",
TO_TIMESTAMP(CONCAT(H.CPUDT, H.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
H.TCODE AS "TransactionCode",
FALSE AS "IsReversed"
FROM DOC_HEADERS H
LEFT JOIN V_USERNAME U ON H.USNAM = U.BNAME
WHERE H.BSTAT = 'V'
UNION ALL
-- Event 3: Journal Entry Posted (from Parked state)
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
'Journal Entry Posted' AS "ActivityName",
TO_TIMESTAMP(CONCAT(C.UDATE, C.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
C.TCODE AS "TransactionCode",
CASE WHEN H.STBLG IS NOT NULL AND H.STBLG <> '' THEN TRUE ELSE FALSE END AS "IsReversed"
FROM DOC_HEADERS H
JOIN CDHDR C ON C.OBJECTCLAS = 'BELEG' AND C.OBJECTID = CONCAT(H.BUKRS, H.BELNR, H.GJAHR)
JOIN CDPOS P ON C.CHANGENR = P.CHANGENR AND P.OBJECTCLAS = 'BELEG' AND P.OBJECTID = C.OBJECTID
LEFT JOIN V_USERNAME U ON C.USERNAME = U.BNAME
WHERE H.BSTAT <> 'V'
AND P.TABNAME = 'BKPF'
AND P.FNAME = 'BSTAT'
AND P.VALUE_OLD = 'V'
AND P.VALUE_NEW <> 'V'
UNION ALL
-- Event 4: Parked Journal Entry Deleted
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
'Parked Journal Entry Deleted' AS "ActivityName",
TO_TIMESTAMP(CONCAT(C.UDATE, C.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
C.TCODE AS "TransactionCode",
FALSE AS "IsReversed"
FROM DOC_HEADERS H
JOIN CDHDR C ON C.OBJECTCLAS = 'BELEG' AND C.OBJECTID = CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AND C.TCODE = 'FBV0'
JOIN CDPOS P ON C.CHANGENR = P.CHANGENR AND P.OBJECTCLAS = 'BELEG' AND P.OBJECTID = C.OBJECTID
LEFT JOIN V_USERNAME U ON C.USERNAME = U.BNAME
WHERE P.TABNAME = 'BKPF'
AND P.FNAME = 'BSTAT'
AND P.VALUE_OLD = 'V'
AND P.VALUE_NEW = 'Z'
UNION ALL
-- Event 5: Journal Entry Reversal Processed
SELECT
CONCAT(H.BUKRS, H.STBLG, H.GJAHR) AS "JournalEntryId", -- Linking to the original document
'Journal Entry Reversal Processed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(H.CPUDT, H.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
H.TCODE AS "TransactionCode",
TRUE AS "IsReversed"
FROM DOC_HEADERS H
LEFT JOIN V_USERNAME U ON H.USNAM = U.BNAME
WHERE H.STBLG IS NOT NULL AND H.STBLG <> ''
UNION ALL
-- Event 6: Journal Entry Line Item Cleared
SELECT
CONCAT(B.BUKRS, B.BELNR, B.GJAHR) AS "JournalEntryId",
'Journal Entry Line Item Cleared' AS "ActivityName",
TO_TIMESTAMP(B.AUGDT, 'YYYYMMDD') AS "EventTime", -- Clearing date used as event time
U.NAME_TEXT AS "User",
B.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
NULL AS "TransactionCode", -- Clearing transaction is in the clearing document header, complex to retrieve here
CASE WHEN H.STBLG IS NOT NULL AND H.STBLG <> '' THEN TRUE ELSE FALSE END AS "IsReversed"
FROM BSEG B
JOIN DOC_HEADERS H ON B.BUKRS = H.BUKRS AND B.BELNR = H.BELNR AND B.GJAHR = H.GJAHR
LEFT JOIN V_USERNAME U ON H.USNAM = U.BNAME
WHERE B.AUGBL IS NOT NULL AND B.AUGBL <> '' AND B.AUGDT <> '00000000'
UNION ALL
-- Event 7: Journal Entry Corrected (changes to a parked document)
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
'Journal Entry Corrected' AS "ActivityName",
TO_TIMESTAMP(CONCAT(C.UDATE, C.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
C.TCODE AS "TransactionCode",
FALSE AS "IsReversed"
FROM DOC_HEADERS H
JOIN CDHDR C ON C.OBJECTCLAS = 'BELEG' AND C.OBJECTID = CONCAT(H.BUKRS, H.BELNR, H.GJAHR)
LEFT JOIN V_USERNAME U ON C.USERNAME = U.BNAME
WHERE H.BSTAT = 'V' AND C.TCODE IN ('FBV2', 'FBV4') -- FBV2 is change parked doc, FBV4 is change parked doc header
UNION ALL
-- Event 8: Documentation Attached (inferred from GOS attachment creation, requires configuration)
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
'Documentation Attached' AS "ActivityName",
TO_TIMESTAMP(CONCAT(REL.RECDATE, '000000'), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
H.TCODE AS "TransactionCode",
FALSE AS "IsReversed"
FROM DOC_HEADERS H
JOIN SRGBTBREL REL ON REL.INSTID_A = CONCAT('BUS2081', H.BUKRS, H.BELNR, H.GJAHR) -- BUS2081 is object type for BKPF
LEFT JOIN V_USERNAME U ON REL.RECUNAM = U.BNAME
WHERE REL.TYPEID_A = 'BUS2081' AND REL.RELTYPE = 'ATTA'
UNION ALL
-- Events 9-13 from Workflow (Submitted, Changes Requested, Approved, Rejected) requires specific workflow config
-- This is a generic template. The WI_RH_TASK must be adapted to your system.
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
CASE
WHEN LOG.WI_RH_TASK = '[WF_TASK_ID_SUBMIT]' THEN 'Journal Entry Submitted'
WHEN LOG.WI_RH_TASK = '[WF_TASK_ID_APPROVE]' AND LOG.METHOD = 'DECISION' AND LOG.EVT_ID = 'COMPLETED' THEN 'Journal Entry Approved'
WHEN LOG.WI_RH_TASK = '[WF_TASK_ID_REJECT]' AND LOG.METHOD = 'DECISION' AND LOG.EVT_ID = 'COMPLETED' THEN 'Journal Entry Rejected'
WHEN LOG.WI_RH_TASK = '[WF_TASK_ID_CHANGES_REQ]' AND LOG.METHOD = 'DECISION' AND LOG.EVT_ID = 'COMPLETED' THEN 'Journal Entry Changes Requested'
ELSE NULL
END AS "ActivityName",
TO_TIMESTAMP(CONCAT(LOG.EVT_DATE, LOG.EVT_TIME), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
NULL AS "TransactionCode",
FALSE AS "IsReversed"
FROM DOC_HEADERS H
JOIN SWW_WI2OBJ WIOBJ ON WIOBJ.INSTID = CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AND WIOBJ.TYPEID = 'BKPF'
JOIN SWWLOGHIST LOG ON WIOBJ.WI_ID = LOG.WI_ID
LEFT JOIN V_USERNAME U ON LOG.EXEC_USER = U.BNAME
WHERE LOG.WI_RH_TASK IN ('[WF_TASK_ID_SUBMIT]', '[WF_TASK_ID_APPROVE]', '[WF_TASK_ID_REJECT]', '[WF_TASK_ID_CHANGES_REQ]')
UNION ALL
-- Event 14: Manual Entry Identified
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
'Manual Entry Identified' AS "ActivityName",
TO_TIMESTAMP(CONCAT(H.CPUDT, H.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
H.TCODE AS "TransactionCode",
CASE WHEN H.STBLG IS NOT NULL AND H.STBLG <> '' THEN TRUE ELSE FALSE END AS "IsReversed"
FROM DOC_HEADERS H
LEFT JOIN V_USERNAME U ON H.USNAM = U.BNAME
WHERE H.TCODE IN ('FB01', 'F-02', 'FB50', 'F-04', 'F-22', 'F-43', 'FB60', 'FB70', 'FV50', 'FV60', 'FV70')
UNION ALL
-- Event 15: Cross-Company Posting Identified
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
'Cross-Company Posting Identified' AS "ActivityName",
TO_TIMESTAMP(CONCAT(H.CPUDT, H.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
H.TCODE AS "TransactionCode",
CASE WHEN H.STBLG IS NOT NULL AND H.STBLG <> '' THEN TRUE ELSE FALSE END AS "IsReversed"
FROM DOC_HEADERS H
LEFT JOIN V_USERNAME U ON H.USNAM = U.BNAME
WHERE H.XRECH = 'X' ขั้นตอน
- เชื่อมต่อ SAP: ในเครื่องมือ ETL ของผู้ให้บริการภายนอก ตั้งค่าการเชื่อมต่อแหล่งข้อมูลใหม่ไปยังระบบ SAP ECC โดยทั่วไปต้องใช้รายละเอียดแอปพลิเคชันเซิร์ฟเวอร์ ไคลเอนต์ หมายเลขระบบ และบัญชีผู้ใช้ SAP โดยเฉพาะที่มีสิทธิ์ RFC ตามที่จำเป็น
- กำหนดแหล่งข้อมูล: เพิ่มตาราง SAP ที่ต้องใช้เป็นแหล่งข้อมูลในโปรเจกต์ดึงข้อมูล ตารางหลัก ได้แก่ BKPF (ส่วนหัวเอกสารบัญชี), BSEG (รายการเอกสารบัญชี), VBSEGK (ส่วนหัวเอกสารที่พักไว้), CDHDR (ส่วนหัวเอกสารการเปลี่ยนแปลง), CDPOS (รายการเอกสารการเปลี่ยนแปลง), SWW_WI2OBJ (ลิงก์ระหว่างเวิร์กโฟลว์กับออบเจ็กต์), SWWLOGHIST (บันทึกเวิร์กโฟลว์) และ SRGBTBREL (ความสัมพันธ์ของไฟล์แนบ GOS)
- ดึงเหตุการณ์พื้นฐาน (สร้างและพักรายการ): สร้างกระแสข้อมูลแรกเพื่อดึงเหตุการณ์เริ่มต้น สำหรับ 'พักรายการบันทึกบัญชี' ให้ใช้ VBSEGK เป็นแหล่งข้อมูล สำหรับ 'สร้างรายการบันทึกบัญชี' ให้ใช้ BKPF และกรองเอกสารที่ไม่ใช่รายการกลับบัญชีและไม่ได้ถูกพักไว้ตั้งแต่แรก โดยทำได้ด้วยการเชื่อมแบบตัดรายการที่ตรงกันกับ VBSEGK ออก
- ดึงเหตุการณ์จากเวิร์กโฟลว์: สร้างกระแสข้อมูลโดยเชื่อม BKPF กับ SWW_WI2OBJ ด้วยคีย์ออบเจ็กต์ (รหัสบริษัท + หมายเลขเอกสาร + ปีบัญชี) เพื่อค้นหารหัสอินสแตนซ์เวิร์กโฟลว์ จากนั้นเชื่อมผลลัพธ์กับ SWWLOGHIST เพื่อดึงเหตุการณ์ เช่น 'ส่งแล้ว', 'อนุมัติแล้ว', 'ปฏิเสธแล้ว' และ 'ขอให้แก้ไข' โดยอ้างอิงผลลัพธ์ของงานในเวิร์กโฟลว์และการตัดสินใจของผู้ใช้ที่บันทึกไว้
- ดึงเหตุการณ์การแก้ไขและการลบ: ใช้ตาราง CDHDR และ CDPOS เพื่อระบุการเปลี่ยนแปลง สำหรับ 'แก้ไขรายการบันทึกบัญชี' ให้กรองการเปลี่ยนแปลงของเอกสารที่พักไว้ (Object Class 'FIPP') ส่วน 'ลบรายการบันทึกบัญชีที่พักไว้' ให้ค้นหาเครื่องหมายการลบในบันทึกการเปลี่ยนแปลงของเอกสารที่พักไว้
- ดึงเหตุการณ์ไฟล์แนบ: หากต้องการบันทึก 'แนบเอกสาร' ให้เชื่อม BKPF กับ SRGBTBREL โดยกำหนดชนิดออบเจ็กต์เป็น 'BKPF' และความสัมพันธ์เป็น '[Your attachment relationship type]' วันที่สร้างลิงก์จะใช้เป็นเวลาของเหตุการณ์
- ดึงเหตุการณ์การเคลียร์และการกลับรายการ: สำหรับ 'เคลียร์รายการในรายการบันทึกบัญชี' ให้ค้นหาตาราง BSEG ที่มีข้อมูลในฟิลด์เอกสารเคลียร์ (AUGBL) เวลาของเหตุการณ์คือวันที่ลงบัญชีของเอกสารเคลียร์ (AUGDT) สำหรับ 'ประมวลผลการกลับรายการบันทึกบัญชี' ให้ค้นหาเอกสารใน BKPF ที่เป็นรายการกลับบัญชี โดยดูจากค่าที่มีในฟิลด์เอกสารที่ถูกกลับรายการ (STBLG)
- สร้างเหตุการณ์จากการคำนวณ: สร้างบล็อกตรรกะแยกสำหรับเหตุการณ์ที่คำนวณขึ้น สำหรับ 'ระบุรายการที่บันทึกด้วยตนเอง' ให้กรอง BKPF ตามรายการรหัสธุรกรรมที่บันทึกด้วยตนเอง (เช่น FB01, FB50, F-02) สำหรับ 'ระบุการลงบัญชีข้ามบริษัท' ให้จัดกลุ่มตาราง BSEG ตามรหัสเอกสาร แล้วระบุเอกสารที่มีรหัสบริษัทไม่ซ้ำกันมากกว่าหนึ่งรายการ
- รวมกระแสเหตุการณ์ทั้งหมด: ใช้การแปลงแบบ UNION ในเครื่องมือ ETL เพื่อรวมผลลัพธ์จากกระแสเหตุการณ์แต่ละรายการ (สร้าง พักรายการ อนุมัติ เป็นต้น) เป็นตารางบันทึกเหตุการณ์เดียว ตรวจสอบว่าชื่อคอลัมน์และชนิดข้อมูลตรงกันในทุกกระแส
- จับคู่กับโครงสร้างข้อมูลปลายทาง: จับคู่ข้อมูลที่รวมแล้วกับโครงสร้างบันทึกเหตุการณ์ที่ต้องใช้ โดยสร้าง
JournalEntryId,ActivityName,EventTime,Userและแอตทริบิวต์อื่นที่จำเป็นหรือแนะนำ เพิ่มคอลัมน์ค่าคงที่ เช่นSourceSystemและใช้เวลาที่งาน ETL ทำงานเป็นค่าLastDataUpdate - ตั้งค่าการโหลดข้อมูลส่วนเพิ่ม: สำหรับการดึงข้อมูลต่อเนื่อง ให้ตั้งกลยุทธ์โหลดข้อมูลส่วนเพิ่ม ใช้วันที่สร้างหรือวันที่เปลี่ยนแปลงล่าสุด (เช่น BKPF.CPUDT, CDHDR.UDATE) เป็นจุดอ้างอิง เพื่อดึงเฉพาะระเบียนใหม่หรือที่อัปเดตนับจากการทำงานครั้งก่อน
- ส่งออกสำหรับ ProcessMind: ตั้งเวลางานดึงข้อมูล และกำหนดขั้นตอนสุดท้ายให้บันทึกบันทึกเหตุการณ์เป็นไฟล์ CSV หรือ Parquet ในตำแหน่งที่ ProcessMind เข้าถึงได้เพื่ออัปโหลด.
การกำหนดค่า
- ข้อกำหนดเบื้องต้น: ต้องมีเครื่องมือ ETL จากผู้ให้บริการภายนอกที่มีไลเซนส์ เช่น Theobald Xtract Universal, Informatica หรือ Talend พร้อม SAP connector โดยเฉพาะ รวมถึงบัญชีผู้ใช้ SAP ที่มีสิทธิ์ RFC และสิทธิ์อ่านตารางการเงิน เช่น S_TABU_DIS สำหรับกลุ่มตาราง F_00 และ F_WF รวมถึงข้อมูลเวิร์กโฟลว์และบันทึกการเปลี่ยนแปลง
- พารามิเตอร์การเชื่อมต่อ: ต้องใช้ IP หรือชื่อโฮสต์ของ SAP Application Server, System Number และ Client ID ควรใช้ระบบจัดการข้อมูลเข้าสู่ระบบที่ปลอดภัยสำหรับชื่อผู้ใช้และรหัสผ่าน SAP
- ตัวกรองหลัก: กรอง Company Code (BKPF.BUKRS) และ Fiscal Year (BKPF.GJAHR) ที่ระบบต้นทางทุกครั้งเพื่อลดปริมาณข้อมูล แนะนำให้กรอง Document Creation Date (BKPF.CPUDT) เพื่อกำหนดช่วงเวลาดึงข้อมูล เช่น 6 เดือนล่าสุด
- เลือกช่วงวันที่: สำหรับการโหลดครั้งแรก ให้เลือกช่วงเวลาที่เป็นตัวแทน เช่น 3 ถึง 6 เดือน สำหรับการโหลด delta ครั้งถัดไป ให้ใช้ watermark กับฟิลด์เวลา เช่น
CPUDTเพื่อดึงเฉพาะระเบียนใหม่ - ข้อควรพิจารณาด้านประสิทธิภาพ: การ join ตาราง BSEG, CDPOS และตารางเวิร์กโฟลว์อาจใช้เวลานาน ตรวจสอบว่าเครื่องมือ ETL ส่งตัวกรองไปประมวลผลที่ระบบต้นทาง SAP ได้เมื่อทำได้ หากเครื่องมือรองรับ ให้ดึงข้อมูลเป็นชุดย่อยหรือแพ็กเกจ โดยเฉพาะเมื่อต้องโหลดข้อมูลย้อนหลังจำนวนมาก
- การปรับแต่งเวิร์กโฟลว์: ตรรกะสำหรับระบุกิจกรรมเวิร์กโฟลว์ เช่น
ApprovedหรือRejectedขึ้นอยู่กับเทมเพลตเวิร์กโฟลว์ที่ใช้งาน คุณต้องระบุ workflow task ID และคีย์การตัดสินใจของผู้ใช้ที่ถูกต้องจากระบบ เพื่อนำไปใช้ในตัวกรอง.
ตัวอย่างคำค้น sql
/*
This is a logical representation of the extraction configuration in a third-party ETL tool.
It is not executable SQL but defines the sources, joins, and transformations for each activity.
Placeholders like [Your SAP Source], [Date Filter], and [Company Code Filter] must be configured in the tool.
*/
-- Extraction block for 'Journal Entry Parked'
SELECT
CONCAT(v.BUKRS, v.VBELN, v.GJAHR) AS JournalEntryId,
'Journal Entry Parked' AS ActivityName,
CAST(CONCAT(v.CPUDT, v.CPUTM) AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
v.USNAM AS User,
v.BUKRS AS CompanyCode,
v.BLART AS DocumentType,
v.BUDAT AS PostingDate,
v.TCODE AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].VBSEGK v
WHERE [Date Filter on v.CPUDT] AND [Company Code Filter on v.BUKRS]
UNION ALL
-- Extraction block for 'Journal Entry Created'
SELECT
CONCAT(h.BUKRS, h.BELNR, h.GJAHR) AS JournalEntryId,
'Journal Entry Created' AS ActivityName,
CAST(CONCAT(h.CPUDT, h.CPUTM) AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
h.USNAM AS User,
h.BUKRS AS CompanyCode,
h.BLART AS DocumentType,
h.BUDAT AS PostingDate,
h.TCODE AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].BKPF h
LEFT JOIN [Your SAP Source].VBSEGK v ON h.AWKEY = CONCAT(v.BUKRS, v.VBELN, v.GJAHR)
WHERE h.BSTAT = '' AND v.VBELN IS NULL AND h.STBLG IS NULL
AND [Date Filter on h.CPUDT] AND [Company Code Filter on h.BUKRS]
UNION ALL
-- Extraction block for 'Journal Entry Posted' (from parked)
SELECT
CONCAT(h.BUKRS, h.BELNR, h.GJAHR) AS JournalEntryId,
'Journal Entry Posted' AS ActivityName,
CAST(CONCAT(h.CPUDT, h.CPUTM) AS TIMESTAMP) AS EventTime, -- Or a more precise posting time from change logs if available
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
h.USNAM AS User,
h.BUKRS AS CompanyCode,
h.BLART AS DocumentType,
h.BUDAT AS PostingDate,
h.TCODE AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].BKPF h
JOIN [Your SAP Source].VBSEGK v ON h.AWKEY = CONCAT(v.BUKRS, v.VBELN, v.GJAHR)
WHERE [Date Filter on h.CPUDT] AND [Company Code Filter on h.BUKRS]
UNION ALL
-- Extraction block for 'Journal Entry Submitted', 'Approved', 'Rejected', 'Changes Requested'
SELECT
CONCAT(SUBSTRING(o.INSTID, 3, 4), SUBSTRING(o.INSTID, 7, 10), SUBSTRING(o.INSTID, 17, 4)) AS JournalEntryId,
CASE
WHEN wl.WI_TEXT LIKE '%Submit%' THEN 'Journal Entry Submitted'
WHEN wl.WI_TEXT LIKE '%Approve%' THEN 'Journal Entry Approved'
WHEN wl.WI_TEXT LIKE '%Reject%' THEN 'Journal Entry Rejected'
WHEN wl.WI_TEXT LIKE '%Request Changes%' THEN 'Journal Entry Changes Requested'
END AS ActivityName,
CAST(CONCAT(wl.WI_CD, wl.WI_CT) AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
wl.EXEC_USER AS User,
SUBSTRING(o.INSTID, 3, 4) AS CompanyCode,
NULL AS DocumentType,
NULL AS PostingDate,
NULL AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].SWW_WI2OBJ o
JOIN [Your SAP Source].SWWLOGHIST wl ON o.WI_ID = wl.WI_ID
WHERE o.TYPEID = 'BKPF' AND o.CATID = 'BO'
AND wl.WI_TEXT IN ('[Your Submit Task Name]', '[Your Approve Task Name]', '[Your Reject Task Name]', '[Your Changes Request Task Name]')
AND [Date Filter on wl.WI_CD]
UNION ALL
-- Extraction block for 'Journal Entry Corrected'
SELECT
CONCAT(cd.OBJECTID_LONG_CHAR(3,4), cd.OBJECTID_LONG_CHAR(7,10), cd.OBJECTID_LONG_CHAR(17,4)) AS JournalEntryId,
'Journal Entry Corrected' AS ActivityName,
CAST(CONCAT(cd.UDATE, cd.UTIME) AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
cd.USERNAME AS User,
cd.OBJECTID_LONG_CHAR(3,4) AS CompanyCode,
NULL AS DocumentType,
NULL AS PostingDate,
cd.TCODE AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].CDHDR cd
WHERE cd.OBJECTCLAS = 'FIPP' AND cd.CHANGE_IND = 'U'
AND [Date Filter on cd.UDATE]
UNION ALL
-- Extraction block for 'Parked Journal Entry Deleted'
SELECT
CONCAT(cd.OBJECTID_LONG_CHAR(3,4), cd.OBJECTID_LONG_CHAR(7,10), cd.OBJECTID_LONG_CHAR(17,4)) AS JournalEntryId,
'Parked Journal Entry Deleted' AS ActivityName,
CAST(CONCAT(cd.UDATE, cd.UTIME) AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
cd.USERNAME AS User,
cd.OBJECTID_LONG_CHAR(3,4) AS CompanyCode,
NULL AS DocumentType,
NULL AS PostingDate,
cd.TCODE AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].CDHDR cd
WHERE cd.OBJECTCLAS = 'FIPP' AND cd.CHANGE_IND = 'D'
AND [Date Filter on cd.UDATE]
UNION ALL
-- Extraction block for 'Documentation Attached'
SELECT
CONCAT(SUBSTRING(r.INSTID_A, 3, 4), SUBSTRING(r.INSTID_A, 7, 10), SUBSTRING(r.INSTID_A, 17, 4)) AS JournalEntryId,
'Documentation Attached' AS ActivityName,
-- Note: A precise timestamp is often unavailable. Using document creation time as a proxy.
CAST(CONCAT(h.CPUDT, h.CPUTM) AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
h.USNAM AS User,
h.BUKRS AS CompanyCode,
h.BLART AS DocumentType,
h.BUDAT AS PostingDate,
h.TCODE AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].SRGBTBREL r
JOIN [Your SAP Source].BKPF h ON h.BUKRS = SUBSTRING(r.INSTID_A, 3, 4) AND h.BELNR = SUBSTRING(r.INSTID_A, 7, 10) AND h.GJAHR = SUBSTRING(r.INSTID_A, 17, 4)
WHERE r.TYPEID_A = 'BKPF' AND r.RELTYPE = '[Configure based on your system]'
AND [Date Filter on h.CPUDT] AND [Company Code Filter on h.BUKRS]
UNION ALL
-- Extraction block for 'Journal Entry Reversal Processed'
SELECT
CONCAT(h.BUKRS, h.BELNR, h.GJAHR) AS JournalEntryId,
'Journal Entry Reversal Processed' AS ActivityName,
CAST(CONCAT(h.CPUDT, h.CPUTM) AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
h.USNAM AS User,
h.BUKRS AS CompanyCode,
h.BLART AS DocumentType,
h.BUDAT AS PostingDate,
h.TCODE AS TransactionCode,
TRUE AS IsReversed
FROM [Your SAP Source].BKPF h
WHERE h.STBLG IS NOT NULL AND h.STBLG <> ''
AND [Date Filter on h.CPUDT] AND [Company Code Filter on h.BUKRS]
UNION ALL
-- Extraction block for 'Is Reversed' flag on original document
SELECT
CONCAT(h_orig.BUKRS, h_orig.BELNR, h_orig.GJAHR) AS JournalEntryId,
'Is Reversed' AS ActivityName, -- This is an attribute update, modeled as an event
CAST(CONCAT(h_rev.CPUDT, h_rev.CPUTM) AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
h_rev.USNAM AS User,
h_orig.BUKRS AS CompanyCode,
h_orig.BLART AS DocumentType,
h_orig.BUDAT AS PostingDate,
h_orig.TCODE AS TransactionCode,
TRUE AS IsReversed
FROM [Your SAP Source].BKPF h_rev
JOIN [Your SAP Source].BKPF h_orig ON h_rev.STBLG = h_orig.BELNR AND h_rev.BUKRS = h_orig.BUKRS AND h_rev.GJAHR_S = h_orig.GJAHR
WHERE h_rev.STBLG IS NOT NULL AND h_rev.STBLG <> ''
AND [Date Filter on h_rev.CPUDT] AND [Company Code Filter on h_rev.BUKRS]
UNION ALL
-- Extraction block for 'Journal Entry Line Item Cleared'
SELECT
CONCAT(i.BUKRS, i.BELNR, i.GJAHR) AS JournalEntryId,
'Journal Entry Line Item Cleared' AS ActivityName,
CAST(i.AUGDT AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
NULL AS User, -- User who performed clearing is on the clearing document header
i.BUKRS AS CompanyCode,
NULL AS DocumentType,
NULL AS PostingDate,
NULL AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].BSEG i
WHERE i.AUGBL IS NOT NULL AND i.AUGBL <> ''
AND [Date Filter on i.AUGDT] AND [Company Code Filter on i.BUKRS]
UNION ALL
-- Extraction block for 'Manual Entry Identified'
SELECT
CONCAT(h.BUKRS, h.BELNR, h.GJAHR) AS JournalEntryId,
'Manual Entry Identified' AS ActivityName,
CAST(CONCAT(h.CPUDT, h.CPUTM) AS TIMESTAMP) AS EventTime, -- Same time as creation
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
h.USNAM AS User,
h.BUKRS AS CompanyCode,
h.BLART AS DocumentType,
h.BUDAT AS PostingDate,
h.TCODE AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].BKPF h
WHERE h.TCODE IN ('FB01', 'F-02', 'FB50', 'FV50', '[Add other manual T-Codes]')
AND [Date Filter on h.CPUDT] AND [Company Code Filter on h.BUKRS]
UNION ALL
-- Extraction block for 'Cross-Company Posting Identified'
SELECT
JournalEntryId,
'Cross-Company Posting Identified' AS ActivityName,
EventTime, -- Same time as creation
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
User,
CompanyCode,
DocumentType,
PostingDate,
TransactionCode,
IsReversed
FROM (
SELECT
CONCAT(h.BUKRS, h.BELNR, h.GJAHR) AS JournalEntryId,
CAST(CONCAT(h.CPUDT, h.CPUTM) AS TIMESTAMP) AS EventTime,
h.USNAM AS User,
h.BUKRS AS CompanyCode,
h.BLART AS DocumentType,
h.BUDAT AS PostingDate,
h.TCODE AS TransactionCode,
FALSE AS IsReversed,
(SELECT COUNT(DISTINCT i.BUKRS) FROM [Your SAP Source].BSEG i WHERE i.BELNR = h.BELNR AND i.BUKRS = h.BUKRS AND i.GJAHR = h.GJAHR) as CompanyCodeCount
FROM [Your SAP Source].BKPF h
WHERE [Date Filter on h.CPUDT] AND [Company Code Filter on h.BUKRS]
) AS CrossCompanyCheck
WHERE CompanyCodeCount > 1 พร้อมเริ่มต้นหรือยัง?
ใช้เทมเพลตข้อมูลนี้เพื่อเริ่มต้นทำ process mining กับกระบวนการบันทึกบัญชีถึงการรายงานผล: รายการบัญชี มองเห็นข้อมูลเชิงลึกได้ชัดขึ้นและเพิ่มประสิทธิภาพการปฏิบัติการด้านการเงิน.
เริ่มปรับปรุงกระบวนการ Record to Report - รายการบัญชีของคุณวันนี้
ลดเวลารอบการลงบัญชีได้ 30% พร้อมจัดทำรายงานได้อย่างถูกต้อง.
ไม่ต้องใช้บัตรเครดิต เริ่มปรับปรุงได้วันนี้.