เทมเพลตข้อมูลรายการสมุดรายวันสำหรับกระบวนการบันทึกบัญชีถึงการรายงาน
เทมเพลตข้อมูลรายการสมุดรายวันสำหรับกระบวนการบันทึกบัญชีถึงการรายงาน
- แอตทริบิวต์ที่แนะนำให้เก็บ
- กิจกรรมสำคัญที่ควรติดตาม
- แนวทางดึงข้อมูลไปใช้งาน
แอตทริบิวต์ของรายการสมุดรายวันในกระบวนการบันทึกบัญชีถึงการรายงาน
| ชื่อ | คำอธิบาย | ||
|---|---|---|---|
| กิจกรรม ActivityName | ชื่อกิจกรรมทางธุรกิจที่เกิดขึ้น ณ จุดหนึ่งในกระบวนการบันทึกรายการบัญชี. | ||
| คำอธิบาย กิจกรรมหมายถึงขั้นตอนหรือเหตุการณ์เฉพาะในวงจรของรายการบัญชี เช่น 'สร้างรายการบัญชีแล้ว', 'ส่งรายการบัญชีเพื่อตรวจทานแล้ว' หรือ 'ลงบัญชีรายการบัญชีแล้ว' โดยทั่วไปข้อมูลกิจกรรมได้มาจากบันทึกการเปลี่ยนแปลง การอัปเดตสถานะ หรือรหัสธุรกรรมที่บันทึกไว้ในระบบ การวิเคราะห์กิจกรรมช่วยให้เห็นภาพการไหลของกระบวนการ ระบุเส้นทางที่เกิดขึ้นบ่อย และค้นพบจุดที่เบี่ยงเบนจากขั้นตอนมาตรฐาน นอกจากนี้ยังใช้คำนวณตัวชี้วัด เช่น ความถี่ของกิจกรรม เวลารอระหว่างขั้นตอน และอัตราการปฏิบัติตามขั้นตอน. เหตุผลที่สำคัญ กิจกรรมกำหนดขั้นตอนในกระบวนการ ช่วยให้แสดงแผนผังกระบวนการและวิเคราะห์รูปแบบเวิร์กโฟลว์ได้. แหล่งข้อมูล ได้มาจากหลายแหล่ง รวมถึงฟิลด์สถานะในตารางส่วนหัวหรือรายการย่อย เช่น BKPF-BSTAT, บันทึกการเปลี่ยนแปลงเอกสาร (CDHDR/CDPOS) และบันทึกเวิร์กโฟลว์. ตัวอย่าง สร้างรายการบัญชีพักรายการบัญชีส่งรายการบัญชีเพื่อตรวจทานอนุมัติรายการบัญชีลงบัญชีรายการบัญชีแล้ว | |||
| รหัสรายการบัญชี JournalEntryId | รหัสเฉพาะของรายการบัญชีทางการเงิน ซึ่งใช้เป็นรหัสกรณีหลักสำหรับกระบวนการ. | ||
| คำอธิบาย รหัสรายการบัญชีเป็นหมายเลขเฉพาะที่กำหนดให้เอกสารทางบัญชีแต่ละรายการเมื่อสร้างใน SAP S/4HANA รหัสนี้จำเป็นต่อการติดตามวงจรทั้งหมดของรายการบัญชี ตั้งแต่การสร้างหรือพักรายการ การดำเนินการผ่านเวิร์กโฟลว์อนุมัติ ไปจนถึงการลงบัญชี การกลับรายการ หรือการเคลียร์รายการ ในการวิเคราะห์ process mining จะใช้รหัสนี้เชื่อมกิจกรรมที่เกี่ยวข้องทั้งหมดเข้าด้วยกันเป็นกรณีเดียว เมื่อนักวิเคราะห์จัดกลุ่มเหตุการณ์ด้วยรหัสรายการบัญชีเดียวกัน ก็จะสร้างภาพกระบวนการตั้งแต่ต้นจนจบ วัดระยะเวลาของแต่ละรอบ และระบุรูปแบบหรือคอขวดของธุรกรรมทางการเงินแต่ละรายการได้ รหัสนี้เป็นข้อมูลพื้นฐานสำหรับสร้างมุมมองกระบวนการทั้งหมด. เหตุผลที่สำคัญ รหัสนี้เชื่อมโยงขั้นตอนที่เกี่ยวข้องทั้งหมดเข้าด้วยกัน ทำให้วิเคราะห์เส้นทางตั้งแต่ต้นจนจบของรายการบัญชีแต่ละรายการได้. แหล่งข้อมูล นี่คือคีย์ผสม ซึ่งโดยทั่วไปสร้างจากการนำรหัสบริษัท (BKPF-BUKRS), หมายเลขเอกสาร (BKPF-BELNR) และปีบัญชี (BKPF-GJAHR) มาต่อกัน. ตัวอย่าง 1000-1000000001-20231710-1900000055-20242000-2100003412-2023 | |||
| เวลาเกิดเหตุการณ์ EventTime | วันและเวลาที่ระบุว่ากิจกรรมหนึ่งเกิดขึ้นเมื่อใดในกระบวนการบันทึกรายการบัญชี. | ||
| คำอธิบาย เวลาเกิดเหตุการณ์คือวันและเวลาที่แน่นอนซึ่งกิจกรรมทางธุรกิจดำเนินการและบันทึกไว้ในระบบ แต่ละกิจกรรมในกรณีหนึ่งจะมีเวลาของตัวเอง ทำให้เรียงเหตุการณ์ตามลำดับเวลาได้ ข้อมูลนี้สำคัญต่อการวิเคราะห์กระบวนการตามเวลา ใช้คำนวณระยะเวลาของรอบ ช่วงเวลาระหว่างกิจกรรม เวลารอ และดูการกระจายของงานตามช่วงเวลา การระบุเวลาที่ถูกต้องช่วยให้สร้างโมเดลกระบวนการที่เชื่อถือได้ และคำนวณตัวชี้วัดประสิทธิภาพสำคัญ เช่น ระยะเวลารอบการอนุมัติ. เหตุผลที่สำคัญ ข้อมูลนี้ระบุลำดับเหตุการณ์ตามเวลา ซึ่งจำเป็นต่อการคำนวณตัวชี้วัดด้านระยะเวลาและทำความเข้าใจช่วงเวลาของกระบวนการ. แหล่งข้อมูล ดึงข้อมูลจากบันทึกการเปลี่ยนแปลงเอกสาร (CDHDR-UDATE, CDHDR-UTIME), บันทึกเวิร์กโฟลว์ หรือเวลาที่สร้างหรือบันทึกรายการในตาราง เช่น BKPF (CPUDT, CPUTM). ตัวอย่าง 2023-10-26T10:05:00Z2023-11-15T14:30:15Z2024-01-20T09:00:45Z | |||
| จำนวนเงินในสกุลเงินท้องถิ่น AmountInLocalCurrency | มูลค่ารวมของรายการบัญชีในสกุลเงินท้องถิ่นของรหัสบริษัท. | ||
| คำอธิบาย แอตทริบิวต์นี้แสดงมูลค่าทางการเงินของรายการบัญชี โดยทั่วไปคำนวณจากผลรวมของค่าสัมบูรณ์ของรายการเดบิตหรือเครดิตทั้งหมดในเอกสาร แล้วแปลงเป็นสกุลเงินท้องถิ่นของรหัสบริษัท การวิเคราะห์ตามจำนวนเงินช่วยแบ่งกลุ่มกระบวนการตามผลกระทบทางการเงินได้ เช่น รายการมูลค่าสูงอาจต้องผ่านขั้นตอนอนุมัติที่เข้มงวดกว่ารายการมูลค่าต่ำ ข้อมูลนี้ยังช่วยจัดลำดับความสำคัญของการปรับปรุงกระบวนการ โดยเน้นธุรกรรมที่มีความเสี่ยงทางการเงินสูง. เหตุผลที่สำคัญ แสดงมูลค่าทางการเงินของรายการ เพื่อวิเคราะห์ว่าพฤติกรรมของกระบวนการเปลี่ยนไปอย่างไรตามจำนวนเงินที่เกี่ยวข้อง. แหล่งข้อมูล คำนวณโดยรวมจำนวนเงินจากรายการในตาราง BSEG (ฟิลด์ DMBTR) ของรายการบัญชีที่ระบุ (BELNR) แล้วแปลงเป็นค่าบวก. ตัวอย่าง 1500.75125000.0050.20 | |||
| ประเภทรายการบัญชี JournalEntryType | จัดประเภทรายการบัญชีตามวัตถุประสงค์ทางธุรกิจ เช่น การบันทึกสินทรัพย์ ใบแจ้งหนี้จากผู้ขาย หรือรายการบัญชีแยกประเภททั่วไป. | ||
| คำอธิบาย ประเภทรายการบัญชี หรือ Document Type ตามคำเรียกใน SAP เป็นรหัสที่ใช้จัดหมวดหมู่เอกสารทางบัญชี โดยกำหนดรายละเอียดต่างๆ เช่น ช่วงหมายเลขเอกสารและประเภทบัญชีที่อนุญาตให้ลงรายการ การวิเคราะห์กระบวนการตามประเภทรายการบัญชีช่วยให้เข้าใจความแตกต่างตามบริบทได้ เช่น ขั้นตอนอนุมัติรายการค้างจ่ายทั่วไป (ประเภท SA) อาจง่ายกว่าการซื้อสินทรัพย์ที่ซับซ้อน (ประเภท AA) มิตินี้สำคัญต่อแดชบอร์ด 'การปฏิบัติตามข้อกำหนดตามประเภทรายการบัญชี'. เหตุผลที่สำคัญ จัดหมวดหมู่รายการตามบริบทธุรกิจ เพื่อวิเคราะห์ความแตกต่างและประสิทธิภาพของกระบวนการสำหรับธุรกรรมทางการเงินแต่ละประเภท. แหล่งข้อมูล ตาราง BKPF ของ SAP S/4HANA ฟิลด์ BLART (Document Type). ตัวอย่าง SAKRAA | |||
| ผู้ใช้ที่สร้างรายการ CreatedByUser | รหัสผู้ใช้ของผู้ที่สร้างรายการบัญชี. | ||
| คำอธิบาย แอตทริบิวต์นี้เก็บรหัสเฉพาะของผู้ใช้ที่เริ่มกระบวนการสร้างรายการบัญชี โดยสร้างเอกสารฉบับแรก ผู้ใช้อาจเป็นนักบัญชี ผู้ใช้ในหน่วยธุรกิจ หรือรหัสระบบสำหรับรายการที่สร้างโดยอัตโนมัติ การวิเคราะห์กระบวนการตามผู้สร้างช่วยให้เห็นรูปแบบที่เกี่ยวข้องกับผู้ใช้หรือทีม หากผู้ใช้บางรายมีอัตราการถูกปฏิเสธสูง ก็อาจบ่งชี้ถึงความต้องการในการฝึกอบรม หรือช่วยให้เห็นผู้ที่ทำงานได้ดี แอตทริบิวต์นี้จำเป็นต่อแดชบอร์ด 'กิจกรรมและปริมาณงานของผู้ใช้'. เหตุผลที่สำคัญ เชื่อมโยงกิจกรรมในกระบวนการกับผู้ใช้แต่ละราย เพื่อวิเคราะห์ประสิทธิภาพ จัดสมดุลภาระงาน และค้นหาโอกาสในการฝึกอบรม. แหล่งข้อมูล ตาราง BKPF ของ SAP S/4HANA ฟิลด์ USNAM (User Name). ตัวอย่าง ABROWNCJONESBATCH_USER | |||
| รหัสบริษัท CompanyCode | รหัสเฉพาะของบริษัทหรือนิติบุคคลที่ลงรายการบัญชี. | ||
| คำอธิบาย รหัสบริษัทเป็นหน่วยงานพื้นฐานใน SAP Financials ใช้แทนนิติบุคคลอิสระที่จัดทำงบการเงินแยกกัน รายการบัญชีทุกรายการจะกำหนดรหัสบริษัทไว้ แอตทริบิวต์นี้สำคัญต่อการแบ่งกลุ่มและเปรียบเทียบประสิทธิภาพของกระบวนการในส่วนต่างๆ ขององค์กร นักวิเคราะห์สามารถกรองมุมมองกระบวนการให้เหลือนิติบุคคลที่ต้องการ เปรียบเทียบอัตราการถูกปฏิเสธระหว่างรหัสบริษัท หรือค้นหาความแตกต่างของกระบวนการในแต่ละภูมิภาคได้. เหตุผลที่สำคัญ ช่วยกรองและเปรียบเทียบกระบวนการบันทึกรายการบัญชีระหว่างนิติบุคคลหรือหน่วยธุรกิจต่างๆ ในองค์กร. แหล่งข้อมูล ตาราง BKPF ของ SAP S/4HANA ฟิลด์ BUKRS (Company Code). ตัวอย่าง 10001710US01 | |||
| วันที่ลงบัญชี PostingDate | วันที่บันทึกรายการบัญชีในบัญชีแยกประเภททั่วไป ซึ่งมีผลต่อรอบระยะเวลาทางการเงิน. | ||
| คำอธิบาย วันที่ลงบัญชีกำหนดรอบระยะเวลาบัญชีที่ธุรกรรมจะแสดงในงบการเงิน วันที่นี้สำคัญต่อการบัญชี และอาจไม่ตรงกับวันที่สร้างเอกสารหรือวันที่ป้อนข้อมูลเข้าระบบ ใน process mining คุณสามารถใช้วันที่ลงบัญชีวิเคราะห์กลุ่มข้อมูลตามช่วงเวลา เช่น เปรียบเทียบกระบวนการปิดบัญชีสิ้นเดือน หรือวิเคราะห์แนวโน้มประสิทธิภาพในรอบระยะเวลาทางการเงินต่างๆ นอกจากนี้ยังใช้วัดความล่าช้าระหว่างการสร้างรายการกับการลงบัญชีจริงได้ด้วย. เหตุผลที่สำคัญ ช่วยให้เห็นบริบททางการเงิน และวิเคราะห์ประสิทธิภาพของกระบวนการในรอบบัญชีที่กำหนด เช่น สิ้นเดือนหรือสิ้นปี. แหล่งข้อมูล ตาราง BKPF ของ SAP S/4HANA ฟิลด์ BUDAT (Posting Date in the Document). ตัวอย่าง 2023-10-312023-11-012024-02-29 | |||
| ปีงบประมาณ FiscalYear | ปีงบประมาณที่รายการบัญชีสังกัด. | ||
| คำอธิบาย ปีงบประมาณเป็นส่วนหนึ่งของคีย์เฉพาะสำหรับรายการบัญชี ร่วมกับรหัสบริษัทและหมายเลขเอกสาร โดยระบุปีทางการเงินที่เอกสารนั้นเกี่ยวข้อง คุณสามารถใช้ปีงบประมาณวิเคราะห์แนวโน้มระยะยาวและตรวจสอบว่ารหัสเคสไม่ซ้ำกัน การเปรียบเทียบตัวชี้วัดกระบวนการระหว่างปีงบประมาณช่วยให้เห็นว่าประสิทธิภาพดีขึ้นหรือแย่ลงตามเวลา. เหตุผลที่สำคัญ เป็นองค์ประกอบสำคัญในการระบุเอกสารแต่ละรายการให้ไม่ซ้ำกัน และช่วยวิเคราะห์ประสิทธิภาพของกระบวนการเทียบปีต่อปี. แหล่งข้อมูล ตาราง BKPF ของ SAP S/4HANA ฟิลด์ GJAHR (Fiscal Year). ตัวอย่าง 202320242022 | |||
| ผู้อนุมัติ ApproverUser | รหัสผู้ใช้ของผู้ที่อนุมัติหรือปฏิเสธรายการบัญชี. | ||
| คำอธิบาย แอตทริบิวต์นี้ระบุผู้ใช้ที่รับผิดชอบตรวจสอบและตัดสินใจเกี่ยวกับรายการบัญชีที่ส่งเข้ามา หากมีเวิร์กโฟลว์อนุมัติหลายระดับ รายการบัญชีหนึ่งรายการอาจมีผู้อนุมัติหลายคน ข้อมูลนี้จำเป็นต่อการวิเคราะห์ขั้นตอนอนุมัติโดยละเอียด ช่วยวัดภาระงานของผู้อนุมัติแต่ละราย คำนวณเวลาที่ใช้อนุมัติ และค้นหาคอขวดในลำดับการอนุมัติ ข้อมูลนี้ยังช่วยให้แดชบอร์ด 'กิจกรรมและปริมาณงานของผู้ใช้' ทำงานได้. เหตุผลที่สำคัญ ระบุผู้รับผิดชอบการอนุมัติ เพื่อวิเคราะห์ภาระงาน ประสิทธิภาพ และคอขวดในขั้นตอนอนุมัติ. แหล่งข้อมูล ดึงข้อมูลจากบันทึกเวิร์กโฟลว์ เช่น SWW_WI2OBJ และ SWWLOG หรือตารางเอกสารการเปลี่ยนแปลง CDHDR/CDPOS โดยตรวจสอบว่าใครเป็นผู้ดำเนินการในขั้นตอนอนุมัติ. ตัวอย่าง DMILLERFWHITEKCHEN | |||
| มีการแก้ไขงานซ้ำหรือไม่ IsRework | ค่าสถานะแบบบูลีนที่ระบุว่ารายการบัญชีผ่านการแก้ไขงานซ้ำหรือไม่ เช่น แก้ไขหลังถูกปฏิเสธ. | ||
| คำอธิบาย แอตทริบิวต์ที่คำนวณนี้ทำเครื่องหมายรายการบัญชีที่ออกนอกเส้นทางปกติของกระบวนการ โดยทั่วไปจะกำหนดเป็น true หากมีเหตุการณ์ เช่น 'ปฏิเสธรายการบัญชี' หรือ 'แก้ไขรายการบัญชี' เกิดขึ้นในเคส ค่าสถานะนี้ช่วยให้วิเคราะห์ประสิทธิภาพของกระบวนการได้ง่ายขึ้น คุณสามารถใช้คำนวณ KPI อัตราการแก้ไขงานซ้ำ และเปรียบเทียบเวลาและต้นทุนของเคสที่มีและไม่มีการแก้ไขงานซ้ำได้โดยตรง การค้นหาสาเหตุของงานแก้ไขซ้ำเป็นเป้าหมายสำคัญของการปรับปรุงกระบวนการหลายโครงการ. เหตุผลที่สำคัญ ทำเครื่องหมายเคสที่ต้องแก้ไขหรือวนกลับไปทำขั้นตอนเดิม ช่วยวัดปริมาณและวิเคราะห์สาเหตุหลักของความไม่มีประสิทธิภาพในกระบวนการได้ง่ายขึ้น. แหล่งข้อมูล แอตทริบิวต์นี้คำนวณจากลำดับกิจกรรมในเคส โดยกำหนดเป็น 'true' หากพบกิจกรรม เช่น 'ปฏิเสธรายการบัญชี'. ตัวอย่าง truefalse | |||
| รหัสธุรกรรม TransactionCode | รหัสธุรกรรม SAP ที่ใช้สร้างหรือแก้ไขรายการบัญชี. | ||
| คำอธิบาย รหัสธุรกรรม (T-Code) เป็นทางลัดที่ใช้เรียกฟังก์ชันหรือโปรแกรมเฉพาะใน SAP สำหรับรายการบัญชี T-Code ที่ต่างกันอาจบอกวิธีสร้างรายการ เช่น FB01 สำหรับลงบัญชีแยกประเภททั่วไปด้วยตนเอง, FV50 สำหรับพักรายการ หรือรหัสอัตโนมัติสำหรับรายการที่ระบบสร้าง แอตทริบิวต์นี้ช่วยบอกได้ชัดเจนว่าผู้ใช้ทำกิจกรรมด้วยตนเองหรือระบบทำงานให้อัตโนมัติ จึงสำคัญต่อการคำนวณ KPI อัตราการลงบัญชีด้วยตนเอง และค้นหาโอกาสในการนำระบบอัตโนมัติมาใช้. เหตุผลที่สำคัญ ระบุวิธีดำเนินการกับรายการ เช่น ทำด้วยตนเองหรือโดยอัตโนมัติ ซึ่งสำคัญต่อการวิเคราะห์ระบบอัตโนมัติและทำความเข้าใจความแตกต่างของกระบวนการ. แหล่งข้อมูล ตาราง BKPF ของ SAP S/4HANA ฟิลด์ TCODE (Transaction Code). ตัวอย่าง FB01FV50F-02 | |||
| ระบบต้นทาง SourceSystem | ระบุระบบต้นทางที่ใช้ดึงข้อมูลรายการบัญชี. | ||
| คำอธิบาย แอตทริบิวต์นี้ระบุระบบต้นทางที่บันทึกข้อมูลรายการบัญชี สำหรับบริษัทที่ใช้ ERP หลายระบบ หรือมีทั้งระบบเดิมและระบบใหม่ ข้อมูลนี้ช่วยแยกแหล่งที่มาของข้อมูลได้ คุณสามารถใช้ข้อมูลนี้เปรียบเทียบประสิทธิภาพของกระบวนการระหว่างระบบ หรือกรองข้อมูลให้เหลือเฉพาะระบบต้นทางที่ต้องการ ข้อมูลนี้ยังช่วยให้กำกับดูแลข้อมูลและทำความเข้าใจบริบทของข้อมูลได้ถูกต้องด้วย. เหตุผลที่สำคัญ ช่วยระบุที่มาของข้อมูล ซึ่งจำเป็นต่อการวิเคราะห์และเปรียบเทียบกระบวนการในสภาพแวดล้อมที่มีหลายระบบได้อย่างถูกต้อง. แหล่งข้อมูล โดยทั่วไปจะเป็นค่าคงที่ที่เพิ่มระหว่างการดึงข้อมูล เพื่อระบุ SAP S/4HANA instance ที่ใช้ เช่น SID หรือชื่อระบบเชิงตรรกะ. ตัวอย่าง S4H_PROD_100ECC_FIN_200S4C_US_EAST | |||
| ระยะเวลาของรอบการอนุมัติ ApprovalCycleTime | เวลาตั้งแต่ส่งรายการบัญชีเพื่อขออนุมัติจนกระทั่งได้รับอนุมัติหรือถูกปฏิเสธ. | ||
| คำอธิบาย ตัวชี้วัดที่คำนวณนี้วัดระยะเวลาของขั้นตอนอนุมัติโดยเฉพาะ โดยนับเวลาตั้งแต่กิจกรรม 'ส่งรายการบัญชีเพื่อตรวจสอบ' จนถึงกิจกรรมถัดไปที่เป็น 'อนุมัติรายการบัญชี' หรือ 'ปฏิเสธรายการบัญชี' KPI นี้สำคัญต่อการค้นหาคอขวดในเวิร์กโฟลว์อนุมัติ หากใช้เวลาอนุมัตินาน กระบวนการโดยรวมก็อาจล่าช้าอย่างมาก การวิเคราะห์ตัวชี้วัดนี้ตามผู้อนุมัติ รหัสบริษัท หรือประเภทรายการบัญชี จะช่วยระบุจุดที่ควรปรับปรุงได้. เหตุผลที่สำคัญ แสดงระยะเวลาของขั้นตอนอนุมัติโดยเฉพาะ ช่วยระบุและแก้ไขคอขวดในเวิร์กโฟลว์ตรวจสอบและอนุมัติ. แหล่งข้อมูล คำนวณจากเวลาระหว่างเหตุการณ์ 'ส่งรายการบัญชีเพื่อตรวจสอบ' กับเหตุการณ์ 'อนุมัติรายการบัญชี' หรือ 'ปฏิเสธรายการบัญชี'. ตัวอย่าง 1 วัน 2 ชั่วโมง4 ชั่วโมง 25 นาที5 วัน 0 ชั่วโมง | |||
| ลงบัญชีด้วยตนเองหรือไม่ IsManualPosting | ค่าสถานะแบบบูลีนที่ระบุว่าผู้ใช้ลงบัญชีรายการด้วยตนเองหรือไม่. | ||
| คำอธิบาย แอตทริบิวต์นี้ระบุรายการบัญชีที่ผู้ใช้ลงบัญชีด้วยตนเอง แทนการลงบัญชีโดยงานระบบหรืออินเทอร์เฟซอัตโนมัติ โดยทั่วไปจะพิจารณาจากรหัสธุรกรรมที่ใช้ลงบัญชีเอกสาร ค่าสถานะนี้ใช้คำนวณ KPI อัตราการลงบัญชีด้วยตนเอง และช่วยให้องค์กรติดตามความคืบหน้าในการทำให้กระบวนการ Record to Report เป็นระบบอัตโนมัติ เมื่อนักวิเคราะห์กรองเฉพาะรายการที่ลงบัญชีด้วยตนเอง ก็จะเห็นกรณีที่ยังต้องใช้คนดำเนินการและประเมินโอกาสในการนำระบบอัตโนมัติมาใช้ได้. เหตุผลที่สำคัญ แยกการลงบัญชีที่ทำโดยคนออกจากการลงบัญชีที่ระบบดำเนินการ ซึ่งจำเป็นต่อการวัดระดับระบบอัตโนมัติและค้นหาโอกาสในการนำระบบอัตโนมัติมาใช้. แหล่งข้อมูล แอตทริบิวต์นี้คำนวณจาก TransactionCode โดยใช้รายการรหัสธุรกรรมที่กำหนดไว้สำหรับการทำงานด้วยตนเอง เช่น 'FB01' และ 'F-02' เพื่อตั้งค่าสถานะเป็น 'true'. ตัวอย่าง truefalse | |||
| เวลาสิ้นสุด EndTime | วันและเวลาที่กิจกรรมเสร็จสิ้น. | ||
| คำอธิบาย เวลาสิ้นสุดระบุว่ากิจกรรมเสร็จเมื่อใด ในบันทึกเหตุการณ์หลายชุด เวลาเริ่มต้นและเวลาสิ้นสุดของกิจกรรมอาจตรงกัน ซึ่งหมายถึงเหตุการณ์ที่เกิดขึ้นทันที แต่สำหรับกิจกรรมที่ใช้เวลานาน เช่น ผู้ใช้ตรวจทานเอกสาร แอตทริบิวต์นี้จะบันทึกระยะเวลาที่ใช้ได้ การระบุเวลาสิ้นสุดแยกต่างหากช่วยคำนวณเวลาประมวลผลกิจกรรมได้แม่นยำขึ้น และแยกเวลาที่มีผู้ปฏิบัติงานออกจากเวลาที่งานรออยู่ในคิว. เหตุผลที่สำคัญ ช่วยคำนวณเวลาประมวลผลกิจกรรมได้อย่างแม่นยำ โดยแยกเวลาทำงานจริงออกจากเวลารอคอย. แหล่งข้อมูล โดยทั่วไปจะตรงกับ StartTime สำหรับเหตุการณ์ที่เกิดขึ้นทันที ส่วนกิจกรรมที่ใช้เวลานานอาจดึงข้อมูลจากบันทึกเวิร์กโฟลว์ หรือคำนวณจากเหตุการณ์ถัดไป. ตัวอย่าง 2023-10-26T10:05:00Z2023-11-15T14:45:20Z2024-01-20T09:10:30Z | |||
| เวลาอัปเดตข้อมูลล่าสุด LastDataUpdate | วันและเวลาที่ข้อมูลของระเบียนนี้ได้รับการอัปเดตจากระบบต้นทางครั้งล่าสุด. | ||
| คำอธิบาย แอตทริบิวต์นี้บันทึกวันที่และเวลาที่ดึงหรืออัปเดตข้อมูลจากระบบต้นทางครั้งล่าสุด ช่วยให้ทราบว่าข้อมูลที่นำมาวิเคราะห์เป็นข้อมูลล่าสุดเพียงใด การทราบเวลาอัปเดตล่าสุดช่วยให้คุณเข้าใจว่าผลการวิเคราะห์กระบวนการเป็นปัจจุบันแค่ไหน และอ่านแดชบอร์ดกับ KPI ได้ถูกต้อง โดยดูได้ว่าข้อมูลใกล้เคียงเวลาจริงหรือเป็นภาพข้อมูลจากช่วงก่อนหน้า. เหตุผลที่สำคัญ ระบุความใหม่ของข้อมูล เพื่อให้ผู้ใช้ทราบว่าผลการวิเคราะห์กระบวนการเป็นปัจจุบันเพียงใด. แหล่งข้อมูล แอตทริบิวต์ข้อมูลกำกับนี้มักสร้างและบันทึกลงในแต่ละระเบียนระหว่างขั้นตอนนำเข้าข้อมูล. ตัวอย่าง 2024-03-10T02:00:00Z2024-03-11T02:00:00Z2024-03-12T02:00:00Z | |||
| สถานะเอกสาร DocumentStatus | สถานะปัจจุบันของรายการบัญชี เช่น พักรายการ ลงบัญชีแล้ว หรือเคลียร์แล้ว. | ||
| คำอธิบาย สถานะเอกสารแสดงว่ารายการบัญชีอยู่ในขั้นตอนใดของวงจรการทำงาน ตัวอย่างเช่น เอกสารที่ 'พักรายการ' จะบันทึกไว้แล้วแต่ยังไม่ได้ลงบัญชีในบัญชีแยกประเภททั่วไป ส่วนเอกสารที่ 'ลงบัญชีแล้ว' ถือว่าเสร็จสมบูรณ์ การวิเคราะห์สถานะช่วยให้เข้าใจลำดับงานและค้นหาคอขวดได้ หากมีเอกสารจำนวนมากค้างอยู่ในสถานะ 'พักรายการ' หรือ 'รออนุมัติ' เป็นเวลานาน อาจบ่งชี้ว่ากระบวนการยังไม่มีประสิทธิภาพ นอกจากนี้ สถานะยังเป็นแหล่งข้อมูลสำคัญสำหรับระบุกิจกรรมในกระบวนการ. เหตุผลที่สำคัญ แสดงสถานะปัจจุบันของรายการบัญชีในวงจรการทำงาน ช่วยค้นหาคิวงานและคอขวด. แหล่งข้อมูล ตาราง BKPF ของ SAP S/4HANA ฟิลด์ BSTAT (Document status). ตัวอย่าง VAB | |||
| เหตุผลในการกลับรายการ ReversalReason | รหัสที่ระบุเหตุผลในการกลับรายการบัญชีที่ลงบัญชีแล้ว. | ||
| คำอธิบาย เมื่อพบข้อผิดพลาดในรายการบัญชีที่ลงบัญชีแล้ว จะลบรายการนั้นไม่ได้ แต่ต้องกลับรายการด้วยเอกสารใหม่ รหัสเหตุผลในการกลับรายการจะอธิบายสาเหตุ เช่น วันที่ลงบัญชีหรือจำนวนเงินไม่ถูกต้อง การวิเคราะห์เหตุผลในการกลับรายการช่วยค้นหาสาเหตุหลักของข้อผิดพลาดในกระบวนการ Record to Report หากพบเหตุผลใดบ่อยเป็นพิเศษ อาจชี้ถึงปัญหาเชิงระบบ เช่น การฝึกอบรมไม่เพียงพอหรือการควบคุมที่บกพร่อง ซึ่งควรแก้ไขเพื่อเพิ่มคุณภาพตั้งแต่ครั้งแรก. เหตุผลที่สำคัญ ช่วยวิเคราะห์สาเหตุหลักของข้อผิดพลาดที่ทำให้ต้องกลับรายการ เพื่อหาวิธีลดงานแก้ไขซ้ำและปรับปรุงคุณภาพกระบวนการ. แหล่งข้อมูล ตาราง BKPF ของ SAP S/4HANA ฟิลด์ STGRD (Reason for reversal). ตัวอย่าง 010205 | |||
กิจกรรมในกระบวนการบันทึกบัญชีถึงการรายงาน: รายการสมุดรายวัน
| กิจกรรม | คำอธิบาย | ||
|---|---|---|---|
| เคลียร์รายการบัญชีแล้ว | รายการเปิดในบรรทัดของรายการบัญชีถูกหักล้างด้วยการลงบัญชีอีกรายการ เช่น การชำระเงินที่เคลียร์ใบแจ้งหนี้ กิจกรรมนี้หมายถึงการกระทบยอดรายการย่อยที่ระบุและปิดรายการเหล่านั้น. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้เป็นขั้นตอนกระทบยอดสุดท้ายของรายการบัญชีหลายประเภท โดยเฉพาะรายการที่เกี่ยวข้องกับบัญชีพักหรือบัญชีที่จัดการแบบรายการเปิด การวิเคราะห์เวลาตั้งแต่ลงบัญชีจนถึงเคลียร์รายการช่วยวัดประสิทธิภาพการกระทบยอด. แหล่งข้อมูล อนุมานเหตุการณ์นี้ได้จากตารางรายการย่อย (BSEG หรือมุมมอง ACDOCA) เมื่อเคลียร์รายการแล้ว ฟิลด์วันที่เคลียร์ (AUGDT) และเอกสารเคลียร์ (AUGBL) ของรายการนั้นจะมีข้อมูล. บันทึก ใช้วันที่เคลียร์รายการ (BSEG-AUGDT) ของรายการย่อยเป็นเวลาของเหตุการณ์. ประเภทเหตุการณ์ inferred | |||
| ประมวลผลการกลับรายการบัญชี | กลับรายการบัญชีที่ลงบัญชีไปแล้ว โดยสร้างเอกสารใหม่ที่มีรายการตรงกันข้าม การดำเนินการนี้ใช้แก้ไขข้อผิดพลาดในเอกสารที่ลงบัญชีแล้ว และเป็นธุรกรรมที่บันทึกตรวจสอบได้. | ||
| เหตุผลที่สำคัญ การกลับรายการบ่งชี้ว่ามีข้อผิดพลาดในเอกสารที่ลงบัญชีแล้ว หากอัตราการกลับรายการสูง อาจสะท้อนถึงปัญหาในกระบวนการอนุมัติหรือคุณภาพการป้อนข้อมูล การติดตามเรื่องนี้ช่วยเพิ่มความถูกต้องตั้งแต่ครั้งแรก. แหล่งข้อมูล การกลับรายการเป็นเหตุการณ์ที่ระบุได้โดยตรง ส่วนหัวของเอกสารใหม่ที่ใช้กลับรายการ (BKPF) อ้างอิงเอกสารต้นฉบับในฟิลด์หมายเลขเอกสารที่ถูกกลับรายการ (STBLG) วันที่ลงบัญชีของเอกสารใหม่คือเวลาของเหตุการณ์. บันทึก ระบุเอกสารที่มีข้อมูลใน BKPF-STBLG เวลาของเหตุการณ์คือวันที่ลงบัญชีของเอกสารที่ใช้กลับรายการ. ประเภทเหตุการณ์ explicit | |||
| ลงบัญชีรายการบัญชีแล้ว | บันทึกรายการบัญชีในบัญชีแยกประเภททั่วไปอย่างเป็นทางการ และส่งผลต่องบการเงินของบริษัท นี่คือจุดที่เอกสารกลายเป็นบันทึกทางการเงินถาวร. | ||
| เหตุผลที่สำคัญ นี่คือหมุดหมายหลักที่แสดงว่ารอบการประมวลผลหลักสิ้นสุดลง การวิเคราะห์ปริมาณรายการที่ลงบัญชีและเวลาที่ใช้จนถึงขั้นตอนนี้เป็นตัวชี้วัดพื้นฐานของ process mining. แหล่งข้อมูล เหตุการณ์นี้ระบุไว้อย่างชัดเจนด้วยวันที่ลงบัญชี (BUDAT) ในตาราง BKPF เอกสารที่ลงบัญชีแล้วจะมีสถานะเอกสาร (BSTAT) ว่าง ซึ่งแตกต่างจากเอกสารที่พักไว้ ('V') หรือเอกสารที่พักค้างไว้ ('D'). บันทึก ใช้วันที่ลงบัญชี (BKPF-BUDAT) และวันที่บันทึกรายการ (BKPF-CPUDT) เพื่อระบุเวลาของเหตุการณ์ หาก BKPF-BSTAT ว่าง แสดงว่าเอกสารลงบัญชีแล้ว. ประเภทเหตุการณ์ explicit | |||
| ส่งรายการบัญชีเพื่อตรวจทาน | ผู้สร้างรายการบัญชีส่งเอกสารเข้าสู่เวิร์กโฟลว์ตรวจทานและอนุมัติอย่างเป็นทางการ กิจกรรมนี้เป็นจุดส่งต่องานจากการป้อนข้อมูลเข้าสู่กระบวนการควบคุมอย่างเป็นทางการ และเริ่มรอบการอนุมัติ. | ||
| เหตุผลที่สำคัญ นี่คือจุดเริ่มต้นของระยะเวลารอบการอนุมัติ การวัดเวลาตั้งแต่จุดนี้จนถึงการอนุมัติหรือปฏิเสธขั้นสุดท้ายช่วยแยกวิเคราะห์คอขวดในขั้นตอนตรวจทานและอนุมัติโดยเฉพาะ. แหล่งข้อมูล มักบันทึกเหตุการณ์นี้จากบันทึกเวิร์กโฟลว์ (ตาราง SWW_WIHEAD, SWWLOG) ที่เชื่อมโยงกับออบเจ็กต์ทางธุรกิจ หรืออนุมานจากการเปลี่ยนสถานะในฟิลด์ที่กำหนดเองบนส่วนหัวเอกสาร (BKPF) ได้. บันทึก เวลาที่สร้างรายการเวิร์กโฟลว์ หรือเวลาที่ฟิลด์สถานะเปลี่ยนเป็น 'Submitted' หรือ 'In Review'. ประเภทเหตุการณ์ inferred | |||
| สร้างรายการบัญชี | กิจกรรมนี้หมายถึงการสร้างเอกสารรายการบัญชีในระบบเป็นครั้งแรก ระบบสร้างระเบียนในตารางส่วนหัว (BKPF) แต่ยังไม่ได้ลงบัญชีในบัญชีแยกประเภททั่วไป นี่คือจุดเริ่มต้นของวงจรรายการบัญชี. | ||
| เหตุผลที่สำคัญ นี่คือเหตุการณ์เริ่มต้นหลักของกระบวนการ การวิเคราะห์เวลาตั้งแต่เหตุการณ์นี้จนถึงการลงบัญชีมีความสำคัญต่อการวัดระยะเวลารวมของกระบวนการและระบุความล่าช้าในช่วงป้อนข้อมูลเริ่มต้น. แหล่งข้อมูล บันทึกเหตุการณ์นี้ได้โดยตรงจากตาราง SAP BKPF โดยใช้ฟิลด์วันที่สร้าง (CPUDT) และเวลาที่สร้าง (CPUTM) ของหมายเลขเอกสาร (BELNR). บันทึก ใช้ BKPF-CPUDT และ BKPF-CPUTM เป็นเวลาของเหตุการณ์. ประเภทเหตุการณ์ explicit | |||
| อนุมัติรายการบัญชี | ผู้จัดการที่มีอำนาจอนุมัติรายการบัญชีขั้นสุดท้าย เพื่อยืนยันความถูกต้องและความสมบูรณ์ กิจกรรมนี้เป็นด่านสุดท้ายก่อนลงบัญชีเอกสารในบัญชีแยกประเภททั่วไป. | ||
| เหตุผลที่สำคัญ นี่คือหมุดหมายสำคัญที่สิ้นสุดรอบการอนุมัติ เวลาที่ใช้จนถึงขั้นตอนนี้เป็นส่วนสำคัญของระยะเวลากระบวนการโดยรวม และเป็นตัวชี้วัดประสิทธิภาพของผู้อนุมัติ. แหล่งข้อมูล อนุมานเหตุการณ์นี้ได้จากบันทึกเวิร์กโฟลว์ที่แสดงขั้นตอนอนุมัติสุดท้าย หรือจากการเปลี่ยนสถานะในเอกสาร รหัสผู้ใช้ของผู้อนุมัติและเวลาสามารถดึงได้จากข้อมูลเวิร์กโฟลว์หรือบันทึกการเปลี่ยนแปลง. บันทึก ระบุเวลาของขั้นตอนอนุมัติสุดท้ายในบันทึกเวิร์กโฟลว์ หรือการเปลี่ยนสถานะเป็น 'Approved' ในเอกสารการเปลี่ยนแปลง. ประเภทเหตุการณ์ inferred | |||
| แก้ไขรายการบัญชี | ผู้ใช้แก้ไขรายการบัญชีหลังจากถูกปฏิเสธหรือส่งกลับมาให้แก้ไข กิจกรรมนี้แสดงถึงงานแก้ไขที่ต้องทำเพื่อจัดการปัญหาที่พบระหว่างการตรวจทาน ก่อนส่งรายการอีกครั้ง. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้ใช้วัดการทำงานซ้ำ การวิเคราะห์ความถี่และระยะเวลาของการแก้ไขช่วยระบุสาเหตุของความไม่มีประสิทธิภาพ และชี้โอกาสในการฝึกอบรมหรือทำให้ขั้นตอนชัดเจนขึ้น. แหล่งข้อมูล อนุมานเหตุการณ์นี้ได้จากการติดตามวันที่ 'Last Changed On' (AEDAT) ในตาราง BKPF สำหรับเอกสารที่เคยมีสถานะ 'Rejected' บันทึกการเปลี่ยนแปลงเอกสารให้รายละเอียดเพิ่มเติมได้ว่าแก้ไขอะไร. บันทึก ใช้เวลาจากส่วนหัวบันทึกการเปลี่ยนแปลงเอกสาร (CDHDR-UDATE) สำหรับการแก้ไขที่เกิดขึ้นหลังเหตุการณ์ปฏิเสธ. ประเภทเหตุการณ์ inferred | |||
| แก้ไขรายการบัญชีหลังลงบัญชี | ผู้ใช้แก้ไขฟิลด์บางรายการในรายการบัญชีหลังจากลงบัญชีในบัญชีแยกประเภททั่วไปแล้ว โดยทั่วไปข้อมูลทางการเงินส่วนใหญ่จะแก้ไขไม่ได้หลังลงบัญชี แต่ยังเปลี่ยนฟิลด์บางอย่างได้ เช่น ข้อความหรือการกำหนดรายการ. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้เป็นสัญญาณเตือนสำคัญด้านการปฏิบัติตามข้อกำหนด การแก้ไขหลังลงบัญชีอาจบ่งชี้ถึงความพยายามเปลี่ยนแปลงบันทึก จึงควรติดตามอย่างใกล้ชิดเพื่อป้องกันการทุจริตและรักษาความถูกต้องของข้อมูล. แหล่งข้อมูล อนุมานเหตุการณ์นี้ได้อย่างน่าเชื่อถือจากตารางบันทึกการเปลี่ยนแปลงเอกสาร (CDHDR และ CDPOS) หากมีรายการใน CDHDR สำหรับหมายเลขเอกสารและวันที่เปลี่ยนแปลงหลังวันที่ลงบัญชี แสดงว่ามีการแก้ไขหลังลงบัญชี. บันทึก ค้นหาระเบียนใน CDHDR ที่เวลาการเปลี่ยนแปลง (UDATE/UTIME) อยู่หลังวันที่ลงบัญชีของเอกสาร (BKPF-BUDAT). ประเภทเหตุการณ์ inferred | |||
| แนบเอกสารประกอบ | ผู้ใช้แนบเอกสารประกอบอย่างน้อยหนึ่งรายการ เช่น ใบแจ้งหนี้หรือสเปรดชีต เข้ากับรายการบัญชี โดยทั่วไปจะทำเพื่อแสดงหลักฐานและบริบทของธุรกรรมทางการเงินระหว่างการตรวจทานและตรวจสอบ. | ||
| เหตุผลที่สำคัญ การแนบเอกสารก่อนตรวจทานมีความสำคัญต่อการปฏิบัติตามข้อกำหนดและประสิทธิภาพการอนุมัติ กิจกรรมนี้ช่วยวัดว่ามีการปฏิบัติตามนโยบายด้านเอกสารหรือไม่ และส่งผลต่อระยะเวลาการอนุมัติอย่างไร. แหล่งข้อมูล โดยทั่วไปอนุมานเหตุการณ์นี้ได้จากการตรวจสอบเวลาที่สร้างไฟล์แนบซึ่งเชื่อมโยงผ่าน Generic Object Services (GOS) ตาราง SRGBTBREL เชื่อมโยงออบเจ็กต์ทางธุรกิจ เช่น เอกสาร BKPF กับไฟล์แนบ. บันทึก ค้นหาตารางไฟล์แนบ GOS เช่น SRGBTBREL เพื่อหารายการที่เชื่อมโยงกับออบเจ็กต์ BKPF แล้วใช้เวลาที่สร้างไฟล์แนบ. ประเภทเหตุการณ์ inferred | |||
| ปฏิเสธรายการบัญชี | ผู้ตรวจทานหรือผู้อนุมัติปฏิเสธรายการบัญชี ทำให้ไม่สามารถลงบัญชีได้ โดยทั่วไปจะส่งเอกสารกลับไปให้ผู้สร้างแก้ไข ซึ่งเป็นจุดเริ่มต้นของการทำงานซ้ำ. | ||
| เหตุผลที่สำคัญ การติดตามการปฏิเสธเป็นกุญแจสำคัญในการทำความเข้าใจคุณภาพของกระบวนการและระบุข้อผิดพลาดที่พบบ่อย อัตราการถูกปฏิเสธที่สูงบ่งชี้ถึงปัญหาด้านความถูกต้องของข้อมูล ความเข้าใจนโยบาย หรือเอกสารประกอบที่ไม่เพียงพอ. แหล่งข้อมูล อนุมานเหตุการณ์นี้ได้จากการเปลี่ยนสถานะในบันทึกเวิร์กโฟลว์หรือฟิลด์สถานะที่กำหนดเองในเอกสารรายการบัญชี บันทึกการเปลี่ยนแปลงเอกสาร (CDHDR/CDPOS) ของฟิลด์สถานะที่เกี่ยวข้องสามารถระบุเวลาได้. บันทึก ระบุการเปลี่ยนฟิลด์สถานะเป็น 'Rejected' ผ่านเอกสารการเปลี่ยนแปลง (CDHDR/CDPOS) หรือบันทึกเวิร์กโฟลว์. ประเภทเหตุการณ์ inferred | |||
| พักรายการบัญชี | ผู้ใช้บันทึกรายการบัญชีที่ยังไม่สมบูรณ์โดยไม่ลงบัญชี เพื่อกลับมาดำเนินการต่อหรือตรวจทานภายหลัง การดำเนินการนี้จะสร้างระเบียนส่วนหัวเอกสารที่มีสถานะ 'parked' ทำให้เอกสารยังไม่ถูกลงบัญชี. | ||
| เหตุผลที่สำคัญ การพักรายการเป็นขั้นตอนที่พบได้ทั่วไปก่อนส่งรายการ การติดตามระยะเวลาที่เอกสารอยู่ในสถานะพักช่วยระบุความล่าช้าในการกรอกข้อมูลและเตรียมเอกสาร ก่อนเริ่มการตรวจทานและอนุมัติอย่างเป็นทางการ. แหล่งข้อมูล ในตาราง BKPF เอกสารที่พักไว้จะระบุได้จากฟิลด์สถานะเอกสาร (BSTAT) ที่มีค่าเป็น 'V' เวลาของเหตุการณ์คือวันที่สร้าง (CPUDT). บันทึก กรองเอกสารที่ BKPF-BSTAT = 'V' ณ เวลาที่สร้าง. ประเภทเหตุการณ์ explicit | |||
| ระบุการลงบัญชีด้วยตนเอง | ลงบัญชีรายการบัญชีด้วยรหัสธุรกรรมที่ผู้ใช้ดำเนินการเอง แทนการใช้ส่วนเชื่อมต่ออัตโนมัติหรืองานประมวลผลแบบกลุ่ม นี่ไม่ใช่เหตุการณ์ที่ระบุเวลา แต่เป็นการจัดประเภทกิจกรรมลงบัญชี. | ||
| เหตุผลที่สำคัญ การระบุรายการที่ลงบัญชีด้วยตนเองมีความสำคัญต่อโครงการระบบอัตโนมัติ หากมีรายการที่ลงบัญชีด้วยตนเองจำนวนมาก แสดงว่าอาจปรับกระบวนการให้คล่องตัวขึ้นได้ด้วยการเชื่อมต่อระบบย่อยหรือใช้โปรแกรมลงบัญชีอัตโนมัติ. แหล่งข้อมูล คำนวณโดยวิเคราะห์ฟิลด์รหัสธุรกรรม (TCODE) ในตารางส่วนหัวเอกสาร (BKPF) แล้วใช้รายการ T-Code ที่ทราบว่าเป็นการทำงานด้วยตนเอง เช่น FB01, F-02, FB50 เพื่อจัดประเภทของรายการ. บันทึก จัดประเภทเหตุการณ์โดยเทียบ BKPF-TCODE กับรายการรหัสธุรกรรมที่กำหนดไว้ว่าเป็นการทำงานด้วยตนเอง ณ เวลาที่ลงบัญชี. ประเภทเหตุการณ์ calculated | |||
คู่มือการดึงข้อมูล
ขั้นตอน
- ข้อกำหนดเบื้องต้นและสิทธิ์เข้าถึง: ตรวจสอบว่าคุณมีผู้ใช้ที่ได้รับสิทธิ์ที่จำเป็นในการสืบค้นฐานข้อมูลเบื้องหลังของ SAP S/4HANA หรือเรียกใช้รายงาน ABAP คุณต้องมีสิทธิ์อ่าน CDS view I_JournalEntry, I_JournalEntryItem และตาราง CDHDR, CDPOS, SRGBREL, SOOD, SWW_WI2OBJ และ SWWLOGHIST โดยทั่วไปจะเข้าถึงผ่านไคลเอ็นต์ฐานข้อมูล เช่น SAP HANA Studio หรือ DBeaver หรือใช้ SAP ABAP Development Tools (ADT) สำหรับ Eclipse
- ระบุการตั้งค่าเฉพาะระบบ: ก่อนเรียกใช้คำสั่ง ให้ระบุรหัสงานที่ใช้ในเวิร์กโฟลว์อนุมัติรายการบัญชี ปรึกษาผู้ดูแล SAP workflow เพื่อค้นหารหัสงาน (เช่น TS12345678) ที่ตรงกับเหตุการณ์ส่งคำขอ ปฏิเสธ และอนุมัติ คุณต้องใช้รหัสเหล่านี้แทนค่าตัวอย่างในคำสั่งสุดท้าย
- เตรียม SQL Query: คัดลอก SQL query ฉบับเต็มจากส่วน
queryไปยังไคลเอ็นต์ SQL หรือเครื่องมือพัฒนาที่คุณเลือก - กำหนดพารามิเตอร์ของคำสั่ง: ค้นหาค่าตัวอย่างในคำสั่งแล้วแทนที่ด้วยค่าของระบบคุณ รวมถึง
[YourCompanyCode],[StartDate]และ[EndDate]นอกจากนี้ ให้แทนรหัสงานตัวอย่างของเวิร์กโฟลว์ ([Workflow Submitted Task ID],[Workflow Rejected Task ID],[Workflow Approved Task ID]) ด้วยค่าที่ระบุไว้ในขั้นตอนก่อนหน้า - เรียกใช้คำสั่งดึงข้อมูล: เรียกใช้ SQL query ที่แก้ไขแล้วกับฐานข้อมูล SAP S/4HANA ระยะเวลาทำงานอาจนาน ขึ้นอยู่กับช่วงวันที่และปริมาณข้อมูล แนะนำให้เรียกใช้ในช่วงที่มีการใช้งานน้อย
- ตรวจสอบผลลัพธ์เบื้องต้น: เมื่อคำสั่งทำงานเสร็จ ให้ตรวจสอบแถวแรก ๆ ของผลลัพธ์ว่าคอลัมน์ต่าง ๆ เช่น JournalEntryId, ActivityName และ EventTime มีค่าตามที่คาดไว้ ชุดผลลัพธ์ควรมีหนึ่งแถวต่อเหตุการณ์ทางธุรกิจที่ไม่ซ้ำกันในวงจรรายการบัญชี
- ส่งออกข้อมูลเป็น CSV: ส่งออกชุดผลลัพธ์ทั้งหมดจากเครื่องมือ SQL เป็นไฟล์ CSV ไฟล์เดียว และตรวจสอบว่าไฟล์ใช้การเข้ารหัส UTF-8 เพื่อป้องกันปัญหากับอักขระพิเศษ
- เตรียมไฟล์สำหรับอัปโหลด: ก่อนอัปโหลดไปยังเครื่องมือ process mining ให้ตรวจสอบว่าไฟล์ CSV มีส่วนหัวคอลัมน์ที่จำเป็น ข้อมูลจัดเป็นบันทึกเหตุการณ์อยู่แล้ว จึงไม่จำเป็นต้องแปลงหรือหมุนข้อมูลเพิ่มเติม
การกำหนดค่า
- CDS view ของ Core Data Services: การดึงข้อมูลใช้
I_JournalEntryเป็นหลักสำหรับข้อมูลส่วนหัว และI_JournalEntryItemสำหรับรายละเอียดรายการและจำนวนเงิน view เหล่านี้เป็นอินเทอร์เฟซที่ใช้งานง่ายและมีความหมายชัดเจนสำหรับ universal journal (ACDOCA) - ตารางประกอบ: เพื่อให้เห็นภาพกระบวนการครบถ้วน คำสั่งยังเชื่อมกับตาราง SAP มาตรฐานหลายตาราง:
CDHDRและCDPOSใช้ติดตามการเปลี่ยนแปลงเอกสารSRGBRELและSOODใช้ระบุเวลาที่มีการแนบไฟล์ผ่าน Generic Object Services (GOS)SWW_WI2OBJและSWWLOGHISTใช้ดึงเหตุการณ์สำคัญจากเวิร์กโฟลว์การอนุมัติ
- การกรองช่วงวันที่: ควรกำหนดช่วงวันที่ให้ชัดเจนเพื่อควบคุมประสิทธิภาพ ใช้ฟิลด์
I_JournalEntry.CreationDateTimeในส่วนWHEREสำหรับการวิเคราะห์เบื้องต้น แนะนำให้ใช้ช่วง 3 ถึง 6 เดือน - การกรองตามองค์กร: กรองด้วย
CompanyCodeเสมอ เพื่อจำกัดข้อมูลให้เหลือเฉพาะนิติบุคคลที่เกี่ยวข้อง การสืบค้นรหัสบริษัททั้งหมดพร้อมกันในระบบขนาดใหญ่อาจใช้เวลานานมาก - รหัสงานของเวิร์กโฟลว์: คำสั่งมีค่าตัวอย่างสำหรับรหัสงานของเวิร์กโฟลว์ เช่น
[Workflow Approved Task ID]รหัสเหล่านี้แตกต่างกันไปในแต่ละการติดตั้ง SAP และต้องกำหนดให้ถูกต้องจึงจะดึงกิจกรรมจากเวิร์กโฟลว์ได้ หากไม่กำหนด จะไม่มีการบันทึกเหตุการณ์ส่งคำขอ อนุมัติ หรือปฏิเสธ - ข้อกำหนดเบื้องต้น: ผู้เรียกใช้ต้องมีสิทธิ์อ่านข้อมูลทางการเงิน ระบบ และเวิร์กโฟลว์ในระดับสูง สิทธิ์เหล่านี้ไม่ได้กำหนดมาเป็นมาตรฐานและต้องมอบหมายให้โดยเฉพาะ
ตัวอย่างคำค้น sql
WITH JournalEntryAmountCTE AS (
SELECT
CompanyCode,
AccountingDocument,
FiscalYear,
SUM(AmountInCompanyCodeCurrency) AS AmountInLocalCurrency
FROM I_JournalEntryItem
GROUP BY CompanyCode, AccountingDocument, FiscalYear
),
JournalEntryBaseCTE AS (
SELECT
JE.CompanyCode,
JE.AccountingDocument,
JE.FiscalYear,
JE.CreatedByUser,
JE.CreationDateTime,
JE.PostingDateTime,
JE.PostingDate,
JE.AccountingDocumentType,
JE.DocumentIsParked,
JE.ReversedJournalEntry,
JE.TransactionCode,
JEA.AmountInLocalCurrency
FROM I_JournalEntry AS JE
LEFT JOIN JournalEntryAmountCTE AS JEA
ON JE.CompanyCode = JEA.CompanyCode
AND JE.AccountingDocument = JEA.AccountingDocument
AND JE.FiscalYear = JEA.FiscalYear
WHERE JE.CompanyCode IN ('[YourCompanyCode]')
AND JE.CreationDateTime BETWEEN '[StartDate]' AND '[EndDate]'
)
-- 1. Journal Entry Created
SELECT
BJE.AccountingDocument AS "JournalEntryId",
'Journal Entry Created' AS "ActivityName",
BJE.CreationDateTime AS "EventTime",
BJE.CreatedByUser AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
UNION ALL
-- 2. Journal Entry Parked
SELECT
BJE.AccountingDocument AS "JournalEntryId",
'Journal Entry Parked' AS "ActivityName",
BJE.CreationDateTime AS "EventTime",
BJE.CreatedByUser AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
WHERE BJE.DocumentIsParked = 'X'
UNION ALL
-- 3. Supporting Documentation Attached
SELECT
BJE.AccountingDocument AS "JournalEntryId",
'Supporting Documentation Attached' AS "ActivityName",
TO_TIMESTAMP(SOOD.CREDAT || ' ' || SOOD.CRETIM, 'YYYYMMDD HH24MISS') AS "EventTime",
SOOD.OWNER AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
JOIN SRGBREL ON SRGBREL.INSTID_A = CONCAT(BJE.CompanyCode, BJE.AccountingDocument, BJE.FiscalYear)
AND SRGBREL.TYPEID_A = 'BKPF'
AND SRGBREL.CATID_A = 'BO'
JOIN SOOD ON SOOD.OBJTP = SRGBREL.TYPEID_B
AND SOOD.OBJYR = SRGBREL.INSTID_B(3)
AND SOOD.OBJNO = SRGBREL.INSTID_B(5)
UNION ALL
-- 4. Journal Submitted For Review
SELECT
BJE.AccountingDocument AS "JournalEntryId",
'Journal Submitted For Review' AS "ActivityName",
LOG.END_TS AS "EventTime",
LOG.EXEC_USER AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
JOIN SWW_WI2OBJ AS WF_LINK ON WF_LINK.INSTID = CONCAT(BJE.CompanyCode, BJE.AccountingDocument, BJE.FiscalYear)
AND WF_LINK.TYPEID = 'BKPF'
JOIN SWWLOGHIST AS LOG ON LOG.WI_ID = WF_LINK.WI_ID
WHERE LOG.METHOD = '[Workflow Submitted Task ID]'
UNION ALL
-- 5. Journal Entry Rejected
SELECT
BJE.AccountingDocument AS "JournalEntryId",
'Journal Entry Rejected' AS "ActivityName",
LOG.END_TS AS "EventTime",
LOG.EXEC_USER AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
JOIN SWW_WI2OBJ AS WF_LINK ON WF_LINK.INSTID = CONCAT(BJE.CompanyCode, BJE.AccountingDocument, BJE.FiscalYear)
AND WF_LINK.TYPEID = 'BKPF'
JOIN SWWLOGHIST AS LOG ON LOG.WI_ID = WF_LINK.WI_ID
WHERE LOG.METHOD = '[Workflow Rejected Task ID]'
UNION ALL
-- 6. Journal Entry Corrected (changed while parked)
SELECT DISTINCT
BJE.AccountingDocument AS "JournalEntryId",
'Journal Entry Corrected' AS "ActivityName",
TO_TIMESTAMP(CH.UDATE || ' ' || CH.UTIME, 'YYYYMMDD HH24MISS') AS "EventTime",
CH.USERNAME AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
JOIN CDHDR AS CH ON CH.OBJECTID = CONCAT(BJE.CompanyCode, BJE.AccountingDocument, BJE.FiscalYear)
AND CH.OBJECTCLASS = 'BELEG'
WHERE BJE.DocumentIsParked = 'X'
UNION ALL
-- 7. Journal Entry Approved
SELECT
BJE.AccountingDocument AS "JournalEntryId",
'Journal Entry Approved' AS "ActivityName",
LOG.END_TS AS "EventTime",
LOG.EXEC_USER AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
JOIN SWW_WI2OBJ AS WF_LINK ON WF_LINK.INSTID = CONCAT(BJE.CompanyCode, BJE.AccountingDocument, BJE.FiscalYear)
AND WF_LINK.TYPEID = 'BKPF'
JOIN SWWLOGHIST AS LOG ON LOG.WI_ID = WF_LINK.WI_ID
WHERE LOG.METHOD = '[Workflow Approved Task ID]'
UNION ALL
-- 8. Manual Posting Identified
SELECT
BJE.AccountingDocument AS "JournalEntryId",
'Manual Posting Identified' AS "ActivityName",
BJE.PostingDateTime AS "EventTime",
BJE.CreatedByUser AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
WHERE BJE.PostingDateTime IS NOT NULL AND BJE.TransactionCode IN ('FB01', 'F-02', 'FB50', 'FV50', 'FBB1', 'FBV1')
UNION ALL
-- 9. Journal Entry Posted
SELECT
BJE.AccountingDocument AS "JournalEntryId",
'Journal Entry Posted' AS "ActivityName",
BJE.PostingDateTime AS "EventTime",
BJE.CreatedByUser AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
WHERE BJE.PostingDateTime IS NOT NULL
UNION ALL
-- 10. Journal Entry Changed After Posting
SELECT DISTINCT
BJE.AccountingDocument AS "JournalEntryId",
'Journal Entry Changed After Posting' AS "ActivityName",
TO_TIMESTAMP(CH.UDATE || ' ' || CH.UTIME, 'YYYYMMDD HH24MISS') AS "EventTime",
CH.USERNAME AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
JOIN CDHDR AS CH ON CH.OBJECTID = CONCAT(BJE.CompanyCode, BJE.AccountingDocument, BJE.FiscalYear)
AND CH.OBJECTCLASS = 'BELEG'
WHERE BJE.PostingDateTime IS NOT NULL AND TO_TIMESTAMP(CH.UDATE || ' ' || CH.UTIME, 'YYYYMMDD HH24MISS') > BJE.PostingDateTime
UNION ALL
-- 11. Journal Entry Cleared
SELECT
JEI.AccountingDocument AS "JournalEntryId",
'Journal Entry Cleared' AS "ActivityName",
MIN(JEI.ClearingDateTime) AS "EventTime",
BJE.CreatedByUser AS "CreatedByUser", -- Note: Clearing user is not directly available here
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM I_JournalEntryItem AS JEI
JOIN JournalEntryBaseCTE AS BJE ON JEI.AccountingDocument = BJE.AccountingDocument
AND JEI.CompanyCode = BJE.CompanyCode
AND JEI.FiscalYear = BJE.FiscalYear
WHERE JEI.ClearingDateTime IS NOT NULL
GROUP BY JEI.AccountingDocument, BJE.CreatedByUser, BJE.CompanyCode, BJE.AccountingDocumentType, BJE.PostingDate, BJE.AmountInLocalCurrency
UNION ALL
-- 12. Journal Entry Reversal Processed
SELECT
OriginalDoc.AccountingDocument AS "JournalEntryId",
'Journal Entry Reversal Processed' AS "ActivityName",
ReversalDoc.PostingDateTime AS "EventTime",
ReversalDoc.CreatedByUser AS "CreatedByUser",
OriginalDoc.CompanyCode AS "CompanyCode",
OriginalDoc.AccountingDocumentType AS "JournalEntryType",
OriginalDoc.PostingDate AS "PostingDate",
OriginalDoc.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS ReversalDoc
JOIN JournalEntryBaseCTE AS OriginalDoc
ON ReversalDoc.ReversedJournalEntry = OriginalDoc.AccountingDocument
AND ReversalDoc.CompanyCode = OriginalDoc.CompanyCode
AND ReversalDoc.ReversalFiscalYear = OriginalDoc.FiscalYear
WHERE ReversalDoc.ReversedJournalEntry IS NOT NULL; ขั้นตอน
- ยืนยันว่าได้รับอนุมัติให้เข้าถึงฐานข้อมูล SAP HANA โดยตรง และผู้ใช้ที่ใช้ดึงข้อมูลมีสิทธิ์อ่าน BKPF และ ACDOCA รวมถึงแหล่งข้อมูลเวิร์กโฟลว์ ไฟล์แนบ ประวัติการเปลี่ยนแปลง การหักล้าง หรือการกลับรายการที่ระบบของคุณกำหนดไว้ โดยทั่วไปจะเข้าถึงฐานข้อมูลโดยใช้ SAP HANA Database Explorer, SAP HANA Studio หรือเครื่องมือ SQL ที่ได้รับอนุมัติ อย่าเรียกใช้คิวรีดึงข้อมูลในธุรกรรมของแอปพลิเคชัน SAP เว้นแต่ระบบของคุณรองรับการเข้าถึงดังกล่าวอย่างชัดเจน.
- ตรวจสอบสคีมาจริงของ BKPF และ ACDOCA รวมถึงฟิลด์ client, company code, fiscal year, document number, document type, posting date, creation date, creation time, user, local currency amount และฟิลด์การกลับรายการหรือการหักล้างที่เกี่ยวข้อง ระบบ SAP S/4HANA แต่ละชุดอาจมีสคีมาและฟิลด์ไม่เหมือนกัน ให้แทนค่าที่อยู่ในวงเล็บเหลี่ยมในคิวรีด้วยฟิลด์ที่ตรวจสอบแล้วในระบบของคุณ.
- ระบุแหล่งข้อมูลที่เชื่อถือได้สำหรับเหตุการณ์เวิร์กโฟลว์และไฟล์แนบ BKPF และ ACDOCA มีข้อมูลเอกสารบัญชีและรายการบัญชี แต่ไม่สามารถแสดงเหตุการณ์พักรายการ ส่งรายการ ปฏิเสธ แก้ไข อนุมัติ หรือแนบไฟล์ได้ครบถ้วนและเชื่อถือได้ด้วยตัวเอง ให้แทนค่าต้นทางเวิร์กโฟลว์และไฟล์แนบในวงเล็บเหลี่ยมด้วย View หรือตารางที่ได้รับอนุมัติในระบบของคุณ หากไม่มีแหล่งข้อมูล อย่าสร้างเหตุการณ์ขึ้นเอง ให้ตั้งค่าแหล่งข้อมูลที่เกี่ยวข้อง หรือตัดกิจกรรมนั้นออกโดยได้รับอนุมัติและบันทึกเหตุผลไว้.
- กำหนดพารามิเตอร์การดึงข้อมูลสำหรับช่วงวันที่ company code ประเภทเอกสาร และ client ที่ต้องการ แนะนำให้เริ่มตรวจสอบข้อมูลย้อนหลัง 3 ถึง 6 เดือน ใช้ช่วงเวลาของเหตุการณ์สำหรับกิจกรรมด้านการปฏิบัติการ และใช้ช่วงวันที่ลงบัญชีสำหรับกิจกรรมทางบัญชี ตามขอบเขตกระบวนการที่ตกลงกัน.
- เรียกใช้คิวรี SQL ทั้งหมดในเครื่องมือ HANA SQL ที่ได้รับอนุมัติ คิวรีจะสร้างหนึ่งแถวต่อกิจกรรมที่ดึงข้อมูลไว้อย่างชัดเจน โดยใช้ BKPF และ ACDOCA สำหรับเหตุการณ์ทางบัญชี และใช้ View ต้นทางที่กำหนดค่าสำหรับเหตุการณ์เวิร์กโฟลว์ ไฟล์แนบ การเปลี่ยนแปลง การหักล้าง และการกลับรายการ คิวรีจะไม่อนุมานกิจกรรมจากการมีเอกสารอยู่.
- ตรวจสอบโครงสร้างผลลัพธ์ JournalEntryId คือรหัสกรณี ActivityName คือชื่อกิจกรรม และ EventTime คือเวลาที่เกิดเหตุการณ์ ส่วนแอตทริบิวต์ทางธุรกิจที่แนะนำจะแสดงเมื่อมีข้อมูล ตรวจสอบว่า EventTime เป็นค่าเวลา และทุกรายการมี JournalEntryId กับ ActivityName.
- กระทบยอดจำนวนรายการทางบัญชี โดยเปรียบเทียบค่า JournalEntryId ที่ไม่ซ้ำกันกับจำนวนรายการ BKPF ที่คาดไว้ ตาม client, company code, fiscal year และช่วงวันที่ที่เลือก ให้กระทบยอดข้อมูลเวิร์กโฟลว์และไฟล์แนบแยกกัน เนื่องจากระยะเวลาเก็บข้อมูลและหลักเกณฑ์เวลาอาจต่างจากข้อมูลบัญชี.
- ตรวจสอบลำดับเหตุการณ์และการจัดการข้อมูลซ้ำ รายการหลายบรรทัดใน ACDOCA ต้องไม่ทำให้เกิดเหตุการณ์ทางบัญชีซ้ำ เว้นแต่การออกแบบกระบวนการกำหนดให้ติดตามระดับรายการโดยเฉพาะ ใช้ตรรกะการรวมข้อมูลในคิวรีเพื่อให้ได้หนึ่งเหตุการณ์ทางบัญชีต่อรายการสมุดรายวันและประเภทเหตุการณ์ พร้อมเก็บรหัสเหตุการณ์จากแหล่งข้อมูลที่กำหนดไว้เมื่อมี.
- ส่งออกผลลัพธ์เป็น CSV ที่เข้ารหัส UTF-8 หรือรูปแบบตารางอื่นที่ ProcessMind รองรับ คงชื่อคอลัมน์ JournalEntryId, ActivityName และ EventTime ตามเดิม เรียงข้อมูลตาม JournalEntryId และ EventTime และเก็บแอตทริบิวต์เพิ่มเติมไว้เป็นคอลัมน์ อัปโหลดไฟล์ไปยัง ProcessMind แล้วกำหนด JournalEntryId เป็นรหัสกรณี ActivityName เป็นกิจกรรม และ EventTime เป็นเวลาที่เกิดเหตุการณ์.
การกำหนดค่า
- ช่วงวันที่: เริ่มจากข้อมูลย้อนหลัง 3 ถึง 6 เดือน หากต้องการทดสอบประสิทธิภาพ ให้ใช้ช่วงที่สั้นลง และขยายช่วงเมื่อยืนยันจำนวนแถวและความครอบคลุมของเหตุการณ์แล้ว.
- ขอบเขต client และบริษัท: กำหนด [Client parameter] และจำกัด CompanyCode ให้เหลือเฉพาะนิติบุคคลที่ต้องการ อย่าละเงื่อนไข client ในระบบที่มีหลาย client.
- ขอบเขตข้อมูลบัญชี: กำหนด [Document type filter] และหากเหมาะสม ให้กรองตามปีบัญชีและวันที่ลงบัญชี รวมเอกสารที่ลงบัญชีแล้วและยังไม่ลงบัญชีเฉพาะเมื่อแหล่งข้อมูลที่เลือกแสดงข้อมูลทั้งสองประเภทได้อย่างเชื่อถือได้.
- ขอบเขตเวิร์กโฟลว์: กำหนด [Workflow event source] และการจับคู่ประเภทเหตุการณ์สำหรับกิจกรรมส่งรายการ ปฏิเสธ แก้ไข และอนุมัติ ตรวจสอบว่าเวลาที่บันทึกหมายถึงเวลาสร้าง เริ่มดำเนินการ หรือเสร็จสิ้นการดำเนินการในเวิร์กโฟลว์.
- ขอบเขตไฟล์แนบ: กำหนด [Attachment event source] และฟิลด์ความสัมพันธ์ที่เชื่อมไฟล์แนบกับรายการสมุดรายวัน ตรวจสอบว่าแหล่งข้อมูลบันทึกการสร้าง แทนที่ หรือลบไฟล์แนบ.
- ขอบเขตการเปลี่ยนแปลง: กำหนด [Change history source] สำหรับการเปลี่ยนแปลงหลังลงบัญชี ตรวจสอบว่าแหล่งข้อมูลระบุรายการสมุดรายวันและมีเวลาที่เปลี่ยนแปลงซึ่งเชื่อถือได้.
- ขอบเขตการหักล้าง: กำหนด [Clearing source] และความสัมพันธ์ระหว่างเอกสารบัญชีที่ถูกหักล้างกับเอกสารหักล้าง ตัดสินใจว่าจะผูกเหตุการณ์กับรายการสมุดรายวันต้นฉบับ เอกสารหักล้าง หรือทั้งสองรายการ.
- ขอบเขตการกลับรายการ: กำหนด [Reversal source] และความสัมพันธ์ระหว่างเอกสารต้นฉบับกับเอกสารกลับรายการ หากมีข้อมูลความสัมพันธ์ คิวรีจะผูกกิจกรรมการกลับรายการกับ JournalEntryId ของรายการต้นฉบับ.
- การจัดประเภทการลงบัญชีด้วยตนเอง: กำหนด [Manual posting source] หรือฟิลด์ต้นทางการลงบัญชีที่ตรวจสอบแล้ว Manual Posting Identified เป็นเหตุการณ์จัดประเภท ควรใช้เวลาลงบัญชีหรือเวลาที่ได้รับอนุมัติอื่นอย่างสม่ำเสมอ.
- จำนวนเงินและสกุลเงิน: ACDOCA จัดเก็บข้อมูลในระดับรายการ คิวรีจะรวมจำนวนเงินสกุลเงินท้องถิ่นตามรายการสมุดรายวัน ตรวจสอบหลักเกณฑ์เครื่องหมาย และพิจารณาว่าควรรวมรายการทางสถิติ รายการเฉพาะบัญชีแยกประเภท หรือรายการบัญชีแยกประเภทส่วนขยายหรือไม่.
- ประสิทธิภาพ: เลือกเฉพาะคอลัมน์ที่จำเป็น กรองข้อมูลตั้งแต่ต้น หลีกเลี่ยงการสแกน ACDOCA โดยไม่จำกัด และเรียกใช้ในช่วงเวลารายงานที่ได้รับอนุมัติ ใช้การตัดพาร์ทิชันผ่านเงื่อนไข client, fiscal year, company code และ posting date หากระบบรองรับ.
- การจัดการข้อมูลซ้ำ: ใช้รหัสเหตุการณ์จากแหล่งข้อมูลเมื่อมี หากแหล่งข้อมูลมีระเบียนทางเทคนิคซ้ำ ให้ใช้กฎกำจัดข้อมูลซ้ำที่บันทึกไว้ โดยไม่รวมการดำเนินการเวิร์กโฟลว์ที่เกิดขึ้นแยกกันเข้าด้วยกัน.
- ข้อกำหนดเบื้องต้น: ต้องมีสิทธิ์ฐานข้อมูล การเชื่อมต่อ SAP HANA ที่ได้รับอนุมัติ สิทธิ์เข้าถึงแหล่งข้อมูลเวิร์กโฟลว์และไฟล์แนบที่กำหนดค่าไว้ การตั้งค่า SAP Financial Accounting และเวิร์กโฟลว์ที่เหมาะสม รวมถึงรูปแบบไฟล์ส่งออกที่ ProcessMind รองรับ.
ตัวอย่างคำค้น sql
WITH
accounting_base AS (
SELECT
b.[Client field] AS ClientId,
b.[Company code field] AS CompanyCode,
b.[Fiscal year field] AS FiscalYear,
b.[Document number field] AS AccountingDocumentNumber,
b.[Document type field] AS JournalEntryType,
b.[Created by field] AS CreatedByUser,
b.[Document date field] AS DocumentDate,
b.[Posting date field] AS PostingDate,
b.[Creation date field] AS CreationDate,
b.[Creation time field] AS CreationTime,
b.[Reversal document field] AS ReversalDocumentNumber,
b.[Reversed document field] AS ReversedDocumentNumber,
b.[Reversal fiscal year field] AS ReversalFiscalYear,
SUM(a.[Local currency amount field]) AS AmountInLocalCurrency,
MAX(a.[Local currency field]) AS LocalCurrency
FROM [Your schema].[BKPF] b
INNER JOIN [Your schema].[ACDOCA] a
ON a.[Client field] = b.[Client field]
AND a.[Company code field] = b.[Company code field]
AND a.[Fiscal year field] = b.[Fiscal year field]
AND a.[Document number field] = b.[Document number field]
WHERE b.[Client field] = '[Client parameter]'
AND b.[Company code field] IN ([Company code filter])
AND b.[Posting date field] BETWEEN '[Start date parameter]' AND '[End date parameter]'
AND b.[Document type field] IN ([Document type filter])
GROUP BY
b.[Client field],
b.[Company code field],
b.[Fiscal year field],
b.[Document number field],
b.[Document type field],
b.[Created by field],
b.[Document date field],
b.[Posting date field],
b.[Creation date field],
b.[Creation time field],
b.[Reversal document field],
b.[Reversed document field],
b.[Reversal fiscal year field]
),
base_cases AS (
SELECT
ClientId,
CompanyCode,
FiscalYear,
AccountingDocumentNumber,
CAST(CompanyCode || '/' || FiscalYear || '/' || AccountingDocumentNumber AS NVARCHAR(100)) AS JournalEntryId,
JournalEntryType,
CreatedByUser,
PostingDate,
AmountInLocalCurrency,
LocalCurrency,
CreationDate,
CreationTime,
ReversalDocumentNumber,
ReversedDocumentNumber,
ReversalFiscalYear
FROM accounting_base
),
created_events AS (
SELECT
JournalEntryId,
'Journal Entry Created' AS ActivityName,
CAST(CreationDate || ' ' || CreationTime AS TIMESTAMP) AS EventTime,
CreatedByUser,
CompanyCode,
JournalEntryType,
PostingDate,
AmountInLocalCurrency,
LocalCurrency
FROM base_cases
),
parked_events AS (
SELECT
CAST(w.[Journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Journal Entry Parked' AS ActivityName,
CAST(w.[Event timestamp field] AS TIMESTAMP) AS EventTime,
w.[User field] AS CreatedByUser,
w.[Company code field] AS CompanyCode,
w.[Journal entry type field] AS JournalEntryType,
w.[Posting date field] AS PostingDate,
w.[Amount in local currency field] AS AmountInLocalCurrency,
w.[Local currency field] AS LocalCurrency
FROM [Your schema].[Workflow event source] w
WHERE w.[Client field] = '[Client parameter]'
AND w.[Event type field] = '[Parked event type]'
AND CAST(w.[Event timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
),
attachment_events AS (
SELECT
CAST(x.[Journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Supporting Documentation Attached' AS ActivityName,
CAST(x.[Event timestamp field] AS TIMESTAMP) AS EventTime,
x.[User field] AS CreatedByUser,
x.[Company code field] AS CompanyCode,
x.[Journal entry type field] AS JournalEntryType,
x.[Posting date field] AS PostingDate,
x.[Amount in local currency field] AS AmountInLocalCurrency,
x.[Local currency field] AS LocalCurrency
FROM [Your schema].[Attachment event source] x
WHERE x.[Client field] = '[Client parameter]'
AND x.[Event type field] = '[Attachment created event type]'
AND CAST(x.[Event timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
),
submitted_events AS (
SELECT
CAST(w.[Journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Journal Submitted For Review' AS ActivityName,
CAST(w.[Event timestamp field] AS TIMESTAMP) AS EventTime,
w.[User field] AS CreatedByUser,
w.[Company code field] AS CompanyCode,
w.[Journal entry type field] AS JournalEntryType,
w.[Posting date field] AS PostingDate,
w.[Amount in local currency field] AS AmountInLocalCurrency,
w.[Local currency field] AS LocalCurrency
FROM [Your schema].[Workflow event source] w
WHERE w.[Client field] = '[Client parameter]'
AND w.[Event type field] = '[Submitted event type]'
AND CAST(w.[Event timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
),
rejected_events AS (
SELECT
CAST(w.[Journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Journal Entry Rejected' AS ActivityName,
CAST(w.[Event timestamp field] AS TIMESTAMP) AS EventTime,
w.[User field] AS CreatedByUser,
w.[Company code field] AS CompanyCode,
w.[Journal entry type field] AS JournalEntryType,
w.[Posting date field] AS PostingDate,
w.[Amount in local currency field] AS AmountInLocalCurrency,
w.[Local currency field] AS LocalCurrency
FROM [Your schema].[Workflow event source] w
WHERE w.[Client field] = '[Client parameter]'
AND w.[Event type field] = '[Rejected event type]'
AND CAST(w.[Event timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
),
corrected_events AS (
SELECT
CAST(w.[Journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Journal Entry Corrected' AS ActivityName,
CAST(w.[Event timestamp field] AS TIMESTAMP) AS EventTime,
w.[User field] AS CreatedByUser,
w.[Company code field] AS CompanyCode,
w.[Journal entry type field] AS JournalEntryType,
w.[Posting date field] AS PostingDate,
w.[Amount in local currency field] AS AmountInLocalCurrency,
w.[Local currency field] AS LocalCurrency
FROM [Your schema].[Workflow event source] w
WHERE w.[Client field] = '[Client parameter]'
AND w.[Event type field] = '[Corrected event type]'
AND CAST(w.[Event timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
),
approved_events AS (
SELECT
CAST(w.[Journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Journal Entry Approved' AS ActivityName,
CAST(w.[Event timestamp field] AS TIMESTAMP) AS EventTime,
w.[User field] AS CreatedByUser,
w.[Company code field] AS CompanyCode,
w.[Journal entry type field] AS JournalEntryType,
w.[Posting date field] AS PostingDate,
w.[Amount in local currency field] AS AmountInLocalCurrency,
w.[Local currency field] AS LocalCurrency
FROM [Your schema].[Workflow event source] w
WHERE w.[Client field] = '[Client parameter]'
AND w.[Event type field] = '[Approved event type]'
AND CAST(w.[Event timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
),
manual_events AS (
SELECT
JournalEntryId,
'Manual Posting Identified' AS ActivityName,
CAST(PostingDate AS TIMESTAMP) AS EventTime,
CreatedByUser,
CompanyCode,
JournalEntryType,
PostingDate,
AmountInLocalCurrency,
LocalCurrency
FROM base_cases
WHERE [Manual posting condition verified for this system]
),
posted_events AS (
SELECT
JournalEntryId,
'Journal Entry Posted' AS ActivityName,
CAST(PostingDate AS TIMESTAMP) AS EventTime,
CreatedByUser,
CompanyCode,
JournalEntryType,
PostingDate,
AmountInLocalCurrency,
LocalCurrency
FROM base_cases
WHERE [Posted document condition verified for this system]
),
changed_events AS (
SELECT
CAST(c.[Journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Journal Entry Changed After Posting' AS ActivityName,
CAST(c.[Change timestamp field] AS TIMESTAMP) AS EventTime,
c.[User field] AS CreatedByUser,
c.[Company code field] AS CompanyCode,
c.[Journal entry type field] AS JournalEntryType,
c.[Posting date field] AS PostingDate,
c.[Amount in local currency field] AS AmountInLocalCurrency,
c.[Local currency field] AS LocalCurrency
FROM [Your schema].[Change history source] c
WHERE c.[Client field] = '[Client parameter]'
AND c.[Post posting change indicator field] = '[Post posting change value]'
AND CAST(c.[Change timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
),
cleared_events AS (
SELECT
CAST(cl.[Journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Journal Entry Cleared' AS ActivityName,
CAST(cl.[Clearing timestamp field] AS TIMESTAMP) AS EventTime,
cl.[User field] AS CreatedByUser,
cl.[Company code field] AS CompanyCode,
cl.[Journal entry type field] AS JournalEntryType,
cl.[Posting date field] AS PostingDate,
cl.[Amount in local currency field] AS AmountInLocalCurrency,
cl.[Local currency field] AS LocalCurrency
FROM [Your schema].[Clearing source] cl
WHERE cl.[Client field] = '[Client parameter]'
AND CAST(cl.[Clearing timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
),
reversal_events AS (
SELECT
CAST(r.[Original journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Journal Entry Reversal Processed' AS ActivityName,
CAST(r.[Reversal timestamp field] AS TIMESTAMP) AS EventTime,
r.[User field] AS CreatedByUser,
r.[Company code field] AS CompanyCode,
r.[Journal entry type field] AS JournalEntryType,
r.[Posting date field] AS PostingDate,
r.[Amount in local currency field] AS AmountInLocalCurrency,
r.[Local currency field] AS LocalCurrency
FROM [Your schema].[Reversal source] r
WHERE r.[Client field] = '[Client parameter]'
AND CAST(r.[Reversal timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
)
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM created_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM parked_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM attachment_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM submitted_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM rejected_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM corrected_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM approved_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM manual_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM posted_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM changed_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM cleared_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM reversal_events
ORDER BY JournalEntryId, EventTime, ActivityName; ขั้นตอน
- สร้างโปรแกรม ABAP: เปิด ABAP Editor ด้วยรหัสธุรกรรม
SE38ตั้งชื่อโปรแกรมใหม่ เช่นZ_PM_JE_EXTRACTแล้วคลิก 'Create' ระบุชื่อที่เหมาะสม ตั้งค่า 'Type' เป็น 'Executable Program' แล้วบันทึกเป็นออบเจ็กต์ภายในหรือไว้ในแพ็กเกจ. - กำหนด Selection Screen: กำหนดพารามิเตอร์และ select-options ในโปรแกรม เพื่อให้ผู้ใช้กรองข้อมูลได้ โดยควรมีช่วงวันที่สร้างรายการสมุดรายวัน (
P_CPUDT_FR,P_CPUDT_TO), select-option สำหรับ Company Code (SO_BUKRS) และพาธไฟล์ผลลัพธ์บน application server (P_FPATH). - ประกาศโครงสร้างข้อมูล: กำหนดโครงสร้างตารางภายในให้ตรงกับรูปแบบบันทึกเหตุการณ์ที่ต้องการ โครงสร้างนี้จะเก็บผลลัพธ์สุดท้าย และประกาศตารางภายในกับพื้นที่ทำงานสำหรับตาราง SAP ที่จะดึงข้อมูล เช่น BKPF, ACDOCA, CDHDR, CDPOS และตารางเวิร์กโฟลว์ต่าง ๆ.
- เขียนตรรกะการเลือกข้อมูล: เขียนตรรกะ ABAP หลักเพื่อดึงข้อมูลสำหรับกิจกรรมที่จำเป็นทั้ง 12 รายการ สร้างรูทีนย่อย (FORM) แยกตามกิจกรรมเพื่อให้โค้ดเป็นระเบียบ เช่น FORM สำหรับ
get_created_events,get_parked_eventsและget_workflow_events. - เลือกเหตุการณ์ 'Created' และ 'Posted': อ่านข้อมูลจากตาราง BKPF ตามเงื่อนไขใน Selection Screen ของผู้ใช้ รายการใน BKPF หมายถึงมีการสร้างเอกสารแล้ว เอกสารที่มีสถานะ
BSTAT = ' 'ถือว่าลงบัญชีแล้ว ใช้เวลาสร้าง (CPUDT,CPUTM) เป็นเวลาของเหตุการณ์. - เลือกเหตุการณ์ 'Parked': อ่านข้อมูลจากตาราง VBKPF ซึ่งเก็บส่วนหัวของเอกสารที่พักรายการไว้ เวลาสร้างในตารางนี้ใช้แทนเวลาที่พักรายการ.
- เลือกเหตุการณ์ 'Workflow' (Submitted, Approved, Rejected): เรียกดูตารางเวิร์กโฟลว์ เช่น SWW_WI2OBJ (ใช้เชื่อมออบเจ็กต์รายการสมุดรายวันกับอินสแตนซ์เวิร์กโฟลว์) และ SWWLOGHIST หรือ SWWIHEAD (ใช้ดูรายละเอียดและเวลาของแต่ละขั้นตอน) คุณต้องตรวจสอบรหัสงานเวิร์กโฟลว์ที่ใช้ส่งรายการ อนุมัติ และปฏิเสธในระบบของคุณ.
- เลือกเหตุการณ์ 'Change' และ 'Correction': เรียกดูตารางเอกสารการเปลี่ยนแปลง CDHDR (ส่วนหัว) และ CDPOS (รายการ) โดยใช้
OBJECTCLAS = 'BELEG'สำหรับ 'Changed After Posting' ให้กรองการเปลี่ยนแปลงที่เกิดหลังวันที่ลงบัญชีของเอกสาร สำหรับ 'Corrected' ให้กรองการเปลี่ยนแปลงของเอกสารที่พักรายการหรือถูกปฏิเสธ. - เลือกเหตุการณ์ 'Reversal' และ 'Cleared': ค้นหาเอกสารกลับรายการโดยตรวจสอบว่าฟิลด์
STBLG(หมายเลขเอกสารที่ถูกกลับรายการ) ใน BKPF มีค่า เวลาของเหตุการณ์กลับรายการคือเวลาสร้างเอกสารที่ใช้กลับรายการ ค้นหาเหตุการณ์หักล้างโดยเลือกวันที่หักล้างล่าสุด (AUGDT) จากตาราง ACDOCA สำหรับรายการบัญชีของรายการสมุดรายวันที่เกี่ยวข้อง. - รวมและเรียงข้อมูล: เมื่อเลือกข้อมูลของแต่ละกิจกรรมแล้ว ให้เพิ่มผลลัพธ์ลงในตารางภายในหลัก หลังเลือกข้อมูลครบแล้ว ให้เรียงตารางตาม
JournalEntryIdและEventTimeเพื่อให้แต่ละกรณีเรียงตามลำดับเวลา. - สร้างไฟล์ผลลัพธ์: ใช้คำสั่ง
OPEN DATASET,LOOP AT... TRANSFERและCLOSE DATASETเพื่อเขียนข้อมูลจากตารางภายในที่เรียงแล้วไปยังพาธไฟล์ที่ระบุบน SAP application server ไฟล์ควรอยู่ในรูปแบบ CSV และมีแถวส่วนหัว. - ตั้งเวลาการทำงาน: หากต้องดึงข้อมูลเป็นประจำ ให้ใช้รหัสธุรกรรม
SM36สร้างงานเบื้องหลังเพื่อเรียกใช้โปรแกรมZ_PM_JE_EXTRACTตามกำหนด เช่น รายสัปดาห์หรือรายเดือน วิธีนี้ช่วยให้ส่งออกข้อมูลได้โดยอัตโนมัติ.
การกำหนดค่า
- ช่วงวันที่: Selection Screen ควรกำหนดช่วงวันที่สร้างรายการสมุดรายวัน (
CPUDT) เป็นข้อมูลบังคับ แนะนำให้ดึงข้อมูลเป็นช่วงที่จัดการได้ เช่น ครั้งละ 3-6 เดือน เพื่อให้ทำงานได้รวดเร็ว. - Company Code (
BUKRS): ใช้ตัวกรองสำคัญนี้เพื่อจำกัดข้อมูลเฉพาะนิติบุคคลที่เกี่ยวข้องกับการวิเคราะห์ process mining ไม่แนะนำให้ดึงข้อมูลทุก company code พร้อมกัน. - ประเภทเอกสาร (
BLART): คุณสามารถเพิ่มตัวกรองนี้เพื่อเลือกประเภทรายการสมุดรายวัน เช่น 'SA' สำหรับการลงบัญชี G/L หรือ 'KR' สำหรับใบแจ้งหนี้ผู้ขาย ซึ่งช่วยลดปริมาณข้อมูลและทำให้ชุดข้อมูลตรงประเด็นยิ่งขึ้น. - พาธไฟล์: โปรแกรมต้องใช้พาธไฟล์แบบตรรกะบน SAP application server เพื่อบันทึกไฟล์ผลลัพธ์ ตรวจสอบว่าพาธใช้งานได้และผู้ใช้ระบบ SAP มีสิทธิ์เขียนไฟล์ในไดเรกทอรีนั้น ใช้ธุรกรรม
AL11เพื่อจัดการและดูไดเรกทอรีบนเซิร์ฟเวอร์. - รหัสงานเวิร์กโฟลว์: ต้องตั้งค่าตรรกะดึงเหตุการณ์เวิร์กโฟลว์ (Submitted, Approved, Rejected) ด้วยรหัสงานเฉพาะที่ใช้ในเวิร์กโฟลว์อนุมัติรายการสมุดรายวันขององค์กร โดยมากเป็นรหัสที่กำหนดขึ้นเอง ผู้ดูแลหรือผู้พัฒนาเวิร์กโฟลว์ต้องช่วยตรวจสอบ.
- ข้อกำหนดเบื้องต้น: ผู้ใช้หรือบัญชีระบบที่เรียกใช้โปรแกรมต้องมีสิทธิ์สำหรับสร้างและเรียกใช้โปรแกรม ABAP (
S_DEVELOP) รวมถึงสิทธิ์อ่านข้อมูลทางการเงิน (BKPF, ACDOCA), ตารางบันทึกการเปลี่ยนแปลง (CDHDR, CDPOS) และตารางเวิร์กโฟลว์ (SWW*).
ตัวอย่างคำค้น abap
REPORT Z_PM_JE_EXTRACT.
*&---------------------------------------------------------------------*
*&-- Data Structures for Event Log --*
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
journalentryid TYPE string,
activityname TYPE string,
eventtime TYPE string,
createdbyuser TYPE uname,
companycode TYPE bukrs,
journalentrytype TYPE blart,
postingdate TYPE budat,
amountinlocalcurrency TYPE wrbtr,
END OF ty_event_log.
*&---------------------------------------------------------------------*
*&-- Selection Screen Definition --*
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_erdat_fr TYPE dats OBLIGATORY DEFAULT sy-datum-30,
p_erdat_to TYPE dats OBLIGATORY DEFAULT sy-datum.
SELECT-OPTIONS: so_bukrs FOR bkpf-bukrs OBLIGATORY.
PARAMETERS: p_fpath TYPE string OBLIGATORY DEFAULT '/usr/sap/trans/tmp/je_event_log.csv'.
SELECTION-SCREEN END OF BLOCK b1.
*&---------------------------------------------------------------------*
*&-- Internal Tables --*
*&---------------------------------------------------------------------*
DATA: gt_event_log TYPE TABLE OF ty_event_log.
*&---------------------------------------------------------------------*
*&-- Main Processing Block --*
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM get_created_posted_events.
PERFORM get_parked_events.
PERFORM get_attachment_events.
PERFORM get_workflow_events.
PERFORM get_change_events.
PERFORM get_cleared_events.
PERFORM get_reversal_events.
SORT gt_event_log BY journalentryid eventtime.
PERFORM write_output_file.
*&---------------------------------------------------------------------*
*&-- Subroutines for Extracting Individual Activities --*
*&---------------------------------------------------------------------*
FORM get_created_posted_events.
DATA: lt_bkpf TYPE TABLE OF bkpf,
ls_event_log TYPE ty_event_log,
lv_timestamp TYPE string.
SELECT * FROM bkpf INTO TABLE lt_bkpf
WHERE bukrs IN so_bukrs
AND cpudt BETWEEN p_erdat_fr AND p_erdat_to.
LOOP AT lt_bkpf ASSIGNING FIELD-SYMBOL(<fs_bkpf>).
CLEAR ls_event_log.
CONCATENATE <fs_bkpf>-bukrs <fs_bkpf>-belnr <fs_bkpf>-gjahr INTO ls_event_log-journalentryid.
ls_event_log-companycode = <fs_bkpf>-bukrs.
ls_event_log-journalentrytype = <fs_bkpf>-blart.
ls_event_log-postingdate = <fs_bkpf>-budat.
ls_event_log-createdbyuser = <fs_bkpf>-usnam.
" Timestamp format YYYY-MM-DDTHH:MI:SS
CONCATENATE <fs_bkpf>-cpudt(4) '-' <fs_bkpf>-cpudt+4(2) '-' <fs_bkpf>-cpudt+6(2) 'T' <fs_bkpf>-cputm(2) ':' <fs_bkpf>-cputm+2(2) ':' <fs_bkpf>-cputm+4(2) INTO lv_timestamp.
ls_event_log-eventtime = lv_timestamp.
" Activity: Journal Entry Created
ls_event_log-activityname = 'Journal Entry Created'.
SELECT SUM( hsl ) INTO ls_event_log-amountinlocalcurrency FROM acdoca WHERE belnr = <fs_bkpf>-belnr AND gjahr = <fs_bkpf>-gjahr AND bukrs = <fs_bkpf>-bukrs.
APPEND ls_event_log TO gt_event_log.
" Activity: Journal Entry Posted (if not parked)
IF <fs_bkpf>-bstat = ' '.
ls_event_log-activityname = 'Journal Entry Posted'.
APPEND ls_event_log TO gt_event_log.
" Activity: Manual Posting Identified (based on T-Code)
CASE <fs_bkpf>-tcode.
WHEN 'FB01' OR 'F-02' OR 'FB50' OR 'F-22' OR 'F-43'.
ls_event_log-activityname = 'Manual Posting Identified'.
APPEND ls_event_log TO gt_event_log.
ENDCASE.
ENDIF.
ENDLOOP.
ENDFORM.
FORM get_parked_events.
DATA: ls_event_log TYPE ty_event_log, lv_timestamp TYPE string.
SELECT * FROM vbkpf
WHERE bukrs IN so_bukrs
AND cpudt BETWEEN p_erdat_fr AND p_erdat_to.
CLEAR ls_event_log.
CONCATENATE vbkpf-bukrs vbkpf-belnr vbkpf-gjahr INTO ls_event_log-journalentryid.
CONCATENATE vbkpf-cpudt(4) '-' vbkpf-cpudt+4(2) '-' vbkpf-cpudt+6(2) 'T' vbkpf-cputm(2) ':' vbkpf-cputm+2(2) ':' vbkpf-cputm+4(2) INTO lv_timestamp.
ls_event_log-activityname = 'Journal Entry Parked'.
ls_event_log-eventtime = lv_timestamp.
ls_event_log-createdbyuser = vbkpf-usnam.
ls_event_log-companycode = vbkpf-bukrs.
ls_event_log-journalentrytype = vbkpf-blart.
ls_event_log-postingdate = vbkpf-budat.
APPEND ls_event_log TO gt_event_log.
ENDSELECT.
ENDFORM.
FORM get_attachment_events.
DATA: lt_bdocs TYPE TABLE OF srgbtbrel, ls_event_log TYPE ty_event_log, lv_timestamp TYPE string.
SELECT * FROM srgbtbrel INTO TABLE lt_bdocs
WHERE typeid_a = 'BUS2081' " Object type for Accounting Document
AND catid_a = 'BO'.
LOOP AT lt_bdocs ASSIGNING FIELD-SYMBOL(<fs_bdocs>).
CHECK <fs_bdocs>-instid_a(4) IN so_bukrs.
DATA(lv_bukrs) = <fs_bdocs>-instid_a(4).
DATA(lv_belnr) = <fs_bdocs>-instid_a+4(10).
DATA(lv_gjahr) = <fs_bdocs>-instid_a+14(4).
SELECT SINGLE cpudt, cputm, usnam, blart, budat FROM bkpf
INTO (DATA(lv_cpudt), DATA(lv_cputm), DATA(lv_usnam), DATA(lv_blart), DATA(lv_budat))
WHERE bukrs = lv_bukrs AND belnr = lv_belnr AND gjahr = lv_gjahr.
IF sy-subrc = 0 AND lv_cpudt BETWEEN p_erdat_fr AND p_erdat_to.
CLEAR ls_event_log.
CONCATENATE lv_bukrs lv_belnr lv_gjahr INTO ls_event_log-journalentryid.
" Note: Using document creation time as a proxy for attachment time.
CONCATENATE lv_cpudt(4) '-' lv_cpudt+4(2) '-' lv_cpudt+6(2) 'T' lv_cputm(2) ':' lv_cputm+2(2) ':' lv_cputm+4(2) INTO lv_timestamp.
ls_event_log-activityname = 'Supporting Documentation Attached'.
ls_event_log-eventtime = lv_timestamp.
ls_event_log-createdbyuser = lv_usnam.
ls_event_log-companycode = lv_bukrs.
ls_event_log-journalentrytype = lv_blart.
ls_event_log-postingdate = lv_budat.
APPEND ls_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
ENDFORM.
FORM get_workflow_events.
" This is a simplified example. Real workflow logic can be complex.
" You must identify your specific Task IDs for these events.
DATA: ls_event_log TYPE ty_event_log, lv_timestamp TYPE string.
DATA: BEGIN OF ls_wi, wi_id TYPE sww_wiid, cr_date TYPE sww_cd, cr_time TYPE sww_ct, task TYPE sww_task, instid TYPE swo_typeid, END OF ls_wi.
SELECT h~wi_id h~cr_date h~cr_time h~wi_rh_task o~instid
FROM swwwihead AS h
JOIN sww_wi2obj AS o ON h~wi_id = o~wi_id
INTO @ls_wi
WHERE o~typeid = 'BUS2081' AND o~catid = 'BO'
AND h~cr_date BETWEEN @p_erdat_fr AND @p_erdat_to.
DATA(lv_bukrs) = ls_wi-instid(4).
DATA(lv_belnr) = ls_wi-instid+4(10).
DATA(lv_gjahr) = ls_wi-instid+14(4).
IF lv_bukrs IN so_bukrs.
CLEAR ls_event_log.
CONCATENATE lv_bukrs lv_belnr lv_gjahr INTO ls_event_log-journalentryid.
CONCATENATE ls_wi-cr_date(4) '-' ls_wi-cr_date+4(2) '-' ls_wi-cr_date+6(2) 'T' ls_wi-cr_time(2) ':' ls_wi-cr_time+2(2) ':' ls_wi-cr_time+4(2) INTO lv_timestamp.
ls_event_log-eventtime = lv_timestamp.
ls_event_log-companycode = lv_bukrs.
CASE ls_wi-task.
WHEN '[Your Submit Task ID]'. " e.g., TS20000139
ls_event_log-activityname = 'Journal Submitted For Review'.
APPEND ls_event_log TO gt_event_log.
WHEN '[Your Approve Task ID]'. " e.g., TS20000142
ls_event_log-activityname = 'Journal Entry Approved'.
APPEND ls_event_log TO gt_event_log.
WHEN '[Your Reject Task ID]'. " e.g., TS20000141
ls_event_log-activityname = 'Journal Entry Rejected'.
APPEND ls_event_log TO gt_event_log.
ENDCASE.
ENDIF.
ENDSELECT.
ENDFORM.
FORM get_change_events.
DATA: lt_cdhdr TYPE TABLE OF cdhdr, ls_event_log TYPE ty_event_log, lv_timestamp TYPE string.
SELECT * FROM cdhdr INTO TABLE lt_cdhdr
WHERE objectclas = 'BELEG'
AND udate BETWEEN p_erdat_fr AND p_erdat_to.
LOOP AT lt_cdhdr ASSIGNING FIELD-SYMBOL(<fs_cdhdr>).
DATA(lv_bukrs) = <fs_cdhdr>-objectid(4).
DATA(lv_belnr) = <fs_cdhdr>-objectid+4(10).
DATA(lv_gjahr) = <fs_cdhdr>-objectid+14(4).
IF lv_bukrs IN so_bukrs.
SELECT SINGLE bstat, budat, blart FROM bkpf
INTO (DATA(lv_bstat), DATA(lv_budat), DATA(lv_blart))
WHERE bukrs = lv_bukrs AND belnr = lv_belnr AND gjahr = lv_gjahr.
IF sy-subrc = 0.
CLEAR ls_event_log.
CONCATENATE lv_bukrs lv_belnr lv_gjahr INTO ls_event_log-journalentryid.
CONCATENATE <fs_cdhdr>-udate(4) '-' <fs_cdhdr>-udate+4(2) '-' <fs_cdhdr>-udate+6(2) 'T' <fs_cdhdr>-utime(2) ':' <fs_cdhdr>-utime+2(2) ':' <fs_cdhdr>-utime+4(2) INTO lv_timestamp.
ls_event_log-eventtime = lv_timestamp.
ls_event_log-createdbyuser = <fs_cdhdr>-username.
ls_event_log-companycode = lv_bukrs.
ls_event_log-journalentrytype = lv_blart.
ls_event_log-postingdate = lv_budat.
IF lv_bstat = ' ' AND <fs_cdhdr>-udate > lv_budat.
ls_event_log-activityname = 'Journal Entry Changed After Posting'.
APPEND ls_event_log TO gt_event_log.
ELSEIF lv_bstat <> ' '.
ls_event_log-activityname = 'Journal Entry Corrected'.
APPEND ls_event_log TO gt_event_log.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
FORM get_cleared_events.
DATA: ls_event_log TYPE ty_event_log, lv_timestamp TYPE string.
DATA: BEGIN OF ls_clear, belnr TYPE belnr_d, gjahr TYPE gjahr, bukrs TYPE bukrs, augdt TYPE augdt, END OF ls_clear, lt_clear LIKE TABLE OF ls_clear.
SELECT belnr, gjahr, bukrs, MAX( augdt ) AS augdt FROM acdoca
INTO TABLE @lt_clear
WHERE bukrs IN @so_bukrs
AND augdt NE '00000000'
AND augdt BETWEEN @p_erdat_fr AND @p_erdat_to
GROUP BY belnr, gjahr, bukrs.
LOOP AT lt_clear INTO ls_clear.
SELECT SINGLE usnam, blart, budat FROM bkpf
INTO (DATA(lv_usnam), DATA(lv_blart), DATA(lv_budat))
WHERE bukrs = ls_clear-bukrs AND belnr = ls_clear-belnr AND gjahr = ls_clear-gjahr.
IF sy-subrc = 0.
CLEAR ls_event_log.
CONCATENATE ls_clear-bukrs ls_clear-belnr ls_clear-gjahr INTO ls_event_log-journalentryid.
CONCATENATE ls_clear-augdt(4) '-' ls_clear-augdt+4(2) '-' ls_clear-augdt+6(2) 'T12:00:00' INTO lv_timestamp. " Clearing date has no time, use midday
ls_event_log-activityname = 'Journal Entry Cleared'.
ls_event_log-eventtime = lv_timestamp.
ls_event_log-createdbyuser = lv_usnam.
ls_event_log-companycode = ls_clear-bukrs.
ls_event_log-journalentrytype = lv_blart.
ls_event_log-postingdate = lv_budat.
APPEND ls_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
ENDFORM.
FORM get_reversal_events.
DATA: lt_reversals TYPE TABLE OF bkpf, ls_event_log TYPE ty_event_log, lv_timestamp TYPE string.
SELECT * FROM bkpf INTO TABLE lt_reversals
WHERE bukrs IN so_bukrs
AND cpudt BETWEEN p_erdat_fr AND p_erdat_to
AND stblg IS NOT NULL.
LOOP AT lt_reversals ASSIGNING FIELD-SYMBOL(<fs_rev>).
SELECT SINGLE usnam, blart, budat FROM bkpf
INTO (DATA(lv_usnam), DATA(lv_blart), DATA(lv_budat))
WHERE bukrs = <fs_rev>-bukrs AND belnr = <fs_rev>-stblg AND gjahr = <fs_rev>-gjahr.
IF sy-subrc = 0.
CLEAR ls_event_log.
CONCATENATE <fs_rev>-bukrs <fs_rev>-stblg <fs_rev>-gjahr INTO ls_event_log-journalentryid.
CONCATENATE <fs_rev>-cpudt(4) '-' <fs_rev>-cpudt+4(2) '-' <fs_rev>-cpudt+6(2) 'T' <fs_rev>-cputm(2) ':' <fs_rev>-cputm+2(2) ':' <fs_rev>-cputm+4(2) INTO lv_timestamp.
ls_event_log-activityname = 'Journal Entry Reversal Processed'.
ls_event_log-eventtime = lv_timestamp.
ls_event_log-createdbyuser = lv_usnam.
ls_event_log-companycode = <fs_rev>-bukrs.
ls_event_log-journalentrytype = lv_blart.
ls_event_log-postingdate = lv_budat.
APPEND ls_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
ENDFORM.
FORM write_output_file.
DATA: lv_line TYPE string.
FIELD-SYMBOLS: <fs_event_log> TYPE ty_event_log.
OPEN DATASET p_fpath FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc NE 0.
MESSAGE 'Error opening file.' TYPE 'E'.
RETURN.
ENDIF.
" Write Header
lv_line = 'JournalEntryId,ActivityName,EventTime,CreatedByUser,CompanyCode,JournalEntryType,PostingDate,AmountInLocalCurrency'.
TRANSFER lv_line TO p_fpath.
LOOP AT gt_event_log ASSIGNING <fs_event_log>.
CONCATENATE <fs_event_log>-journalentryid <fs_event_log>-activityname <fs_event_log>-eventtime <fs_event_log>-createdbyuser <fs_event_log>-companycode <fs_event_log>-journalentrytype <fs_event_log>-postingdate <fs_event_log>-amountinlocalcurrency
INTO lv_line SEPARATED BY ','.
TRANSFER lv_line TO p_fpath.
ENDLOOP.
CLOSE DATASET p_fpath.
WRITE: / 'File successfully written to', p_fpath.
ENDFORM. พร้อมเริ่มต้นหรือยัง?
ใช้เทมเพลตนี้เตรียมข้อมูลได้อย่างมั่นใจ และค้นหาข้อมูลเชิงลึกที่สำคัญเกี่ยวกับกระบวนการบันทึกบัญชีถึงการรายงาน: รายการสมุดรายวัน เริ่มปรับปรุงกระบวนการของคุณได้วันนี้.
ปรับกระบวนการรายการสมุดรายวันในบันทึกบัญชีถึงการรายงานให้มีประสิทธิภาพสูงสุด
ปรับปรุงกระบวนการและลดระยะเวลารอบการบันทึกรายการสมุดรายวันในกระบวนการบันทึกบัญชีถึงการรายงานลง 30%.
ไม่ต้องใช้บัตรเครดิต ตั้งค่าเสร็จภายในไม่กี่นาที.