เทมเพลตข้อมูล Order to Cash ด้านการวางบิลและออกใบแจ้งหนี้
เทมเพลตข้อมูล Order to Cash ด้านการวางบิลและออกใบแจ้งหนี้
- แอตทริบิวต์ที่แนะนำสำหรับการวิเคราะห์อย่างละเอียด
- ขั้นตอนและจุดสำคัญของกระบวนการที่ควรติดตาม
- คำแนะนำที่นำไปใช้ได้จริงสำหรับการดึงข้อมูลจาก SAP ECC
แอตทริบิวต์ Order to Cash ด้านการวางบิลและออกใบแจ้งหนี้
| ชื่อ | คำอธิบาย | ||
|---|---|---|---|
| กิจกรรม ActivityName | ชื่อของเหตุการณ์หรือขั้นตอนทางธุรกิจที่เกิดขึ้นในวงจรชีวิตของใบแจ้งหนี้. | ||
| คำอธิบาย แอตทริบิวต์นี้อธิบายการดำเนินการหรือการเปลี่ยนสถานะในกระบวนการเรียกเก็บเงิน เช่น 'สร้างใบแจ้งหนี้แล้ว' 'ลงบัญชีใบแจ้งหนี้แล้ว' หรือ 'ได้รับชำระเงินจากลูกค้าแล้ว' กิจกรรมเหล่านี้อนุมานจากเหตุการณ์ต่างๆ ในระบบ การเปลี่ยนสถานะของเอกสาร หรือรหัสธุรกรรมที่ผู้ใช้เรียกใช้ ลำดับกิจกรรมเหล่านี้ประกอบกันเป็นลำดับการทำงาน ซึ่งเป็นพื้นฐานของการวิเคราะห์ process mining การตรวจสอบกิจกรรมช่วยให้องค์กรเห็นว่ามีขั้นตอนใดบ้าง เกิดขึ้นตามลำดับใด และเกิดขึ้นบ่อยเพียงใด จึงเปรียบเทียบการทำงานจริงกับกระบวนการที่ออกแบบไว้ได้. เหตุผลที่สำคัญ ใช้ระบุขั้นตอนในแผนผังกระบวนการ เพื่อแสดงและวิเคราะห์ลำดับการทำงาน ความเบี่ยงเบน และคอขวด. แหล่งข้อมูล แอตทริบิวต์เชิงแนวคิดนี้อนุมานจากหลายแหล่ง เช่น รหัสธุรกรรม (CDHDR-TCODE) การเปลี่ยนสถานะเอกสาร (VBUK-FKSTK) และรายการลงบัญชีในเอกสารบัญชี. ตัวอย่าง สร้างใบแจ้งหนี้แล้วลงบัญชีใบแจ้งหนี้แล้วส่งข้อความเตือนให้ชำระเงินแล้วตัดรายการใบแจ้งหนี้แล้ว | |||
| เวลาเริ่มต้น EventTime | วันและเวลาที่ระบุว่ากิจกรรมหรือเหตุการณ์เกิดขึ้นเมื่อใด. | ||
| คำอธิบาย เวลาเกิดเหตุการณ์ระบุวันและเวลาที่แน่นอนของแต่ละกิจกรรมในวงจรชีวิตของใบแจ้งหนี้ ข้อมูลเวลานี้เป็นพื้นฐานของการวิเคราะห์ตามเวลาใน process mining ทั้งการคำนวณระยะเวลาดำเนินการ การระบุคอขวด และการติดตามประสิทธิภาพของกระบวนการเทียบกับข้อตกลงระดับการให้บริการ โดยทั่วไปจะสร้างข้อมูลนี้จากการรวมฟิลด์วันที่ เช่น วันที่ลงบัญชี (BUDAT) กับฟิลด์เวลา (UZEIT) จากตาราง SAP ที่บันทึกการเปลี่ยนแปลงหรือการสร้างเอกสาร การบันทึกเวลาอย่างถูกต้องจำเป็นต่อการสร้างบันทึกเหตุการณ์ที่เชื่อถือได้และทำให้ผลวิเคราะห์ประสิทธิภาพมีความถูกต้อง. เหตุผลที่สำคัญ เป็นพื้นฐานของการวิเคราะห์ประสิทธิภาพ ช่วยคำนวณระยะเวลาดำเนินการ ระยะเวลาของแต่ละขั้นตอน และเวลารอระหว่างขั้นตอน. แหล่งข้อมูล สร้างจากฟิลด์วันที่และเวลาหลายรายการในตารางต่างๆ เช่น BKPF (BUDAT, CPUTM), VBRK (ERDAT, ERZET) และตารางบันทึกการเปลี่ยนแปลง เช่น CDHDR (UDATE, UTIME). ตัวอย่าง 2023-04-15T10:30:00Z2023-04-16T11:00:00Z2023-05-20T09:00:00Z | |||
| หมายเลขใบแจ้งหนี้ InvoiceNumber | รหัสเฉพาะของเอกสารเรียกเก็บเงิน ซึ่งใช้เป็น Case ID หลักของกระบวนการออกใบแจ้งหนี้. | ||
| คำอธิบาย หมายเลขใบแจ้งหนี้ หรือที่ SAP เรียกว่าเลขที่เอกสารเรียกเก็บเงิน ใช้ระบุใบแจ้งหนี้แต่ละฉบับโดยไม่ซ้ำกัน ใน process mining หมายเลขนี้ทำหน้าที่เป็น CaseId เพื่อรวมกิจกรรมที่เกี่ยวข้อง เช่น การสร้าง การลงบัญชี การส่ง การรับชำระ และการตัดบัญชี ให้เป็นกระบวนการเดียวตั้งแต่ต้นจนจบ การวิเคราะห์ตามหมายเลขใบแจ้งหนี้ช่วยให้เห็นวงจรชีวิตของรายการเรียกเก็บเงินแต่ละรายการ ตั้งแต่เริ่มต้นจนถึงการชำระเสร็จสิ้น ข้อมูลนี้จำเป็นต่อการคำนวณตัวชี้วัดสำคัญ เช่น Days Sales Outstanding (DSO) และระยะเวลาตั้งแต่ออกใบแจ้งหนี้จนถึงรับชำระเงิน อีกทั้งยังเป็นพื้นฐานที่ชัดเจนสำหรับวัดผลและปรับปรุงประสิทธิภาพ. เหตุผลที่สำคัญ เป็นรหัสสำคัญที่ใช้ติดตามเส้นทางของใบแจ้งหนี้ตั้งแต่ต้นจนจบ และช่วยวิเคราะห์ระยะเวลาดำเนินการ คอขวด และความแตกต่างของรายการเรียกเก็บเงินแต่ละรายการ. แหล่งข้อมูล ตาราง SAP ECC: VBRK, ฟิลด์: VBELN ตัวอย่าง 90001234900012359000123690001237 | |||
| ชื่อผู้ใช้ UserName | ID ของผู้ใช้ที่ดำเนินกิจกรรมหรือสร้างเอกสาร. | ||
| คำอธิบาย แอตทริบิวต์นี้บันทึก SAP user ID ของผู้รับผิดชอบเหตุการณ์ เช่น การสร้างใบแจ้งหนี้หรือการลงบัญชีรับชำระเงิน จึงจำเป็นต่อการวิเคราะห์บทบาทของผู้ปฏิบัติงานในกระบวนการ ข้อมูลนี้ช่วยตรวจสอบความแตกต่างด้านประสิทธิภาพระหว่างผู้ใช้หรือทีม ระบุความต้องการในการฝึกอบรม และค้นหาปัญหาที่อาจเกี่ยวข้องกับการปฏิบัติตามข้อกำหนด นอกจากนี้ยังใช้แยกกิจกรรมที่ผู้ใช้ดำเนินการด้วยตนเองออกจากขั้นตอนอัตโนมัติที่ระบบหรือผู้ใช้แบบแบตช์ดำเนินการ ซึ่งจำเป็นต่อการคำนวณอัตราการทำงานอัตโนมัติ. เหตุผลที่สำคัญ ช่วยวิเคราะห์ประสิทธิภาพของผู้ใช้และการกระจายภาระงาน รวมถึงแยกกิจกรรมที่ทำด้วยตนเองกับกิจกรรมอัตโนมัติ เพื่อสนับสนุนการเพิ่มระบบอัตโนมัติและประสิทธิภาพ. แหล่งข้อมูล ตาราง SAP ECC: VBRK, ฟิลด์: ERNAM (ผู้สร้าง) หรือ BKPF, ฟิลด์: USNAM (ชื่อผู้ใช้) หรือ CDHDR, ฟิลด์: USERNAME (ผู้ใช้). ตัวอย่าง JSMITHBW_BATCHLROSSIMKUMAR | |||
| ประเภทเอกสารเรียกเก็บเงิน BillingDocumentType | รหัสที่ใช้จัดประเภทเอกสารเรียกเก็บเงิน เช่น ใบแจ้งหนี้ ใบลดหนี้ หรือใบเพิ่มหนี้. | ||
| คำอธิบาย ประเภทเอกสารเรียกเก็บเงินใช้จัดหมวดหมู่รายการตามวัตถุประสงค์ทางธุรกิจ เช่น 'F2' คือใบแจ้งหนี้ลูกค้ามาตรฐาน ส่วน 'G2' คือใบลดหนี้ การตั้งค่าใน SAP จะกำหนดวิธีประมวลผลเอกสารเรียกเก็บเงินแต่ละประเภท สำหรับ process mining แอตทริบิวต์นี้จำเป็นต่อการกรองและเปรียบเทียบรูปแบบการเรียกเก็บเงิน นักวิเคราะห์สามารถตรวจสอบกระบวนการของใบแจ้งหนี้มาตรฐานแยกจากใบลดหนี้ เพื่อทำความเข้าใจลำดับการทำงาน ระยะเวลาดำเนินการ และปัญหาเฉพาะของแต่ละประเภท แล้วนำผลไปปรับปรุงกระบวนการได้ตรงจุด. เหตุผลที่สำคัญ ช่วยแยกและวิเคราะห์กระบวนการเรียกเก็บเงินประเภทต่างๆ เช่น ใบแจ้งหนี้มาตรฐานกับใบลดหนี้ ซึ่งมักมีลำดับการทำงานแตกต่างกันมาก. แหล่งข้อมูล ตาราง SAP ECC: VBRK, ฟิลด์: FKART ตัวอย่าง F2G2L2IV | |||
| ยอดรวมใบแจ้งหนี้ TotalInvoiceAmount | มูลค่าสุทธิรวมของเอกสารเรียกเก็บเงิน. | ||
| คำอธิบาย แอตทริบิวต์นี้แสดงยอดสุทธิรวมของใบแจ้งหนี้ โดยไม่รวมภาษี ยอดใบแจ้งหนี้เป็นข้อมูลทางการเงินสำคัญที่เกี่ยวข้องกับกระบวนการเรียกเก็บเงิน นำไปใช้วิเคราะห์ได้หลายแบบ เช่น แบ่งใบแจ้งหนี้เป็นยอดสูงและยอดต่ำเพื่อดูว่ามีลำดับการทำงานต่างกันหรือไม่ นอกจากนี้ยังใช้จัดลำดับความสำคัญในการติดตามรับชำระ หรือหาสาเหตุที่ใบแจ้งหนี้ยอดสูงใช้เวลานานกว่าจะได้รับอนุมัติหรือชำระเงินได้ บริบททางการเงินนี้ช่วยให้วิเคราะห์กระบวนการได้ละเอียดขึ้น. เหตุผลที่สำคัญ ให้บริบททางการเงินที่จำเป็นสำหรับการวิเคราะห์ตามมูลค่าใบแจ้งหนี้ เช่น ตรวจสอบว่าใบแจ้งหนี้ยอดสูงมีขั้นตอนต่างออกไปหรือใช้เวลาตัดยอดนานกว่าหรือไม่. แหล่งข้อมูล ตาราง SAP ECC: VBRK, ฟิลด์: NETWR ตัวอย่าง 1500.7525000.00500.0012345.67 | |||
| รหัสบริษัท CompanyCode | รหัสนิติบุคคลที่ออกใบแจ้งหนี้. | ||
| คำอธิบาย รหัสบริษัทใช้แทนหน่วยงานอิสระด้านกฎหมายและบัญชีใน SAP รายการทางการเงินทั้งหมด รวมถึงใบแจ้งหนี้ จะลงบัญชีภายใต้รหัสบริษัทที่ระบุ จึงเป็นองค์ประกอบข้อมูลพื้นฐานของโครงสร้างองค์กร ในการทำ process mining สามารถใช้รหัสบริษัทวิเคราะห์และเปรียบเทียบประสิทธิภาพของกระบวนการเรียกเก็บเงินระหว่างนิติบุคคลต่างๆ ในองค์กร ช่วยค้นหาแนวปฏิบัติที่ดีจากหน่วยงานหนึ่งเพื่อนำไปปรับใช้กับหน่วยงานอื่น และทำให้การวิเคราะห์สอดคล้องกับโครงสร้างองค์กร. เหตุผลที่สำคัญ ช่วยกรองและเปรียบเทียบกระบวนการระหว่างนิติบุคคลต่างๆ ซึ่งเป็นพื้นฐานสำคัญของการวิเคราะห์ทางการเงินและการเปรียบเทียบผลการดำเนินงานภายในองค์กร. แหล่งข้อมูล ตาราง SAP ECC: VBRK, ฟิลด์: BUKRS ตัวอย่าง 10002000US01DE01 | |||
| หมายเลขลูกค้า CustomerNumber | หมายเลขเฉพาะที่ใช้ระบุลูกค้าที่ออกใบแจ้งหนี้ให้. | ||
| คำอธิบาย หมายเลขลูกค้าเชื่อมโยงใบแจ้งหนี้กับลูกค้าหรือคู่ค้าทางธุรกิจรายใดรายหนึ่ง แอตทริบิวต์นี้สำคัญต่อการแบ่งกลุ่มและวิเคราะห์กระบวนการเรียกเก็บเงินตามลักษณะของลูกค้า นักวิเคราะห์ใช้ฟิลด์นี้เปรียบเทียบ Days Sales Outstanding (DSO) ระหว่างลูกค้า ระบุลูกค้าที่ชำระเงินล่าช้าเป็นประจำ หรือวิเคราะห์การปฏิบัติตามเงื่อนไขการชำระเงิน การเข้าใจรูปแบบเหล่านี้ช่วยบริหารความสัมพันธ์กับลูกค้าและปรับกลยุทธ์การติดตามรับชำระให้เหมาะกับลูกค้าแต่ละกลุ่ม. เหตุผลที่สำคัญ ช่วยวิเคราะห์โดยเน้นลูกค้า ระบุพฤติกรรมการชำระเงิน ประเมิน DSO แยกตามลูกค้า และปรับกลยุทธ์การติดตามรับชำระให้เหมาะสม. แหล่งข้อมูล ตาราง SAP ECC: VBRK, ฟิลด์: KUNRG (ผู้ชำระเงิน) หรือ KUNAG (ผู้ซื้อ). ตัวอย่าง 100023200541CUST-A487910345 | |||
| เงื่อนไขการชำระเงิน PaymentTerms | ข้อตกลงระหว่างผู้ขายกับผู้ซื้อ ซึ่งระบุเงื่อนไขการขายและกำหนดการชำระเงิน. | ||
| คำอธิบาย เงื่อนไขการชำระเงินกำหนดเวลาที่ต้องชำระ เช่น 'Net 30' หรือ 'Net 60' โดยตกลงร่วมกับลูกค้าและมีผลต่อกระแสเงินสดโดยตรง การวิเคราะห์กระบวนการตามเงื่อนไขการชำระเงินช่วยให้เห็นว่าเงื่อนไขใดสัมพันธ์กับรอบการชำระเงินที่นานขึ้นหรือมีการชำระล่าช้าบ่อยขึ้น ข้อมูลนี้ช่วยให้ธุรกิจเจรจาเงื่อนไขกับลูกค้าได้เหมาะสมขึ้น หรือปรับแผนการเงินได้ อีกทั้งยังเป็นข้อมูลสำคัญในการคำนวณวันครบกำหนดชำระใบแจ้งหนี้. เหตุผลที่สำคัญ ช่วยวิเคราะห์พฤติกรรมการชำระเงินของลูกค้าและผลต่อกระแสเงินสดตามเงื่อนไขที่ตกลงกัน เพื่อใช้ปรับข้อตกลงทางการค้าให้เหมาะสม. แหล่งข้อมูล ตาราง SAP ECC: VBRK, ฟิลด์: ZTERM ตัวอย่าง Z030Z060Z001 | |||
| เป็นงานแก้ไขหรือไม่ IsRework | ตัวบ่งชี้ว่ากิจกรรมเป็นขั้นตอนแก้ไขหรือทำงานซ้ำหรือไม่. | ||
| คำอธิบาย แอตทริบิวต์ที่คำนวณนี้ระบุกิจกรรมที่เป็นการทำงานซ้ำ เช่น 'แก้ไขใบแจ้งหนี้แล้ว' หรือการกลับรายการเอกสาร โดยทั่วไปเป็นค่าบูลีนที่อนุมานจากชื่อกิจกรรมหรือรหัสธุรกรรมที่เกี่ยวข้องกับการแก้ไขและการยกเลิก เช่น 'VF11' สำหรับยกเลิกเอกสารเรียกเก็บเงิน ใน process mining ตัวบ่งชี้นี้ช่วยวัดปริมาณงานแก้ไขซ้ำในกระบวนการเรียกเก็บเงินได้โดยตรง และใช้ติดตาม KPI เช่น อัตราการแก้ไขใบแจ้งหนี้ รวมถึงแสดงวงจรการทำงานซ้ำในแผนผังกระบวนการ เพื่อให้เห็นความไม่มีประสิทธิภาพและปัญหาด้านคุณภาพที่เพิ่มต้นทุนการปฏิบัติการและทำให้การรับชำระล่าช้า. เหตุผลที่สำคัญ ช่วยวัดความไม่มีประสิทธิภาพและปัญหาด้านคุณภาพ โดยแสดงปริมาณงานที่ใช้แก้ไขข้อผิดพลาด และสนับสนุน KPI การทำงานซ้ำโดยตรง. แหล่งข้อมูล อนุมานจากชื่อกิจกรรมหรือรหัสธุรกรรม ตัวอย่างเช่น IF ActivityName = 'Invoice Corrected' OR TransactionCode = 'VF11' THEN true ELSE false. ตัวอย่าง truefalse | |||
| เป็นระบบอัตโนมัติหรือไม่ IsAutomated | ตัวบ่งชี้ว่ากิจกรรมดำเนินการโดยผู้ใช้ระบบหรือผ่านระบบอัตโนมัติหรือไม่. | ||
| คำอธิบาย แอตทริบิวต์ที่คำนวณนี้เป็นค่าบูลีน ใช้แยกกิจกรรมที่ทำด้วยตนเองออกจากกิจกรรมอัตโนมัติ โดยทั่วไปจะตรวจสอบแอตทริบิวต์ชื่อผู้ใช้กับรายชื่อ ID ของผู้ใช้ระบบหรือผู้ใช้แบบแบตช์ เช่น 'BATCHUSER' หรือ 'SAPSYSTEM' ตัวบ่งชี้นี้จำเป็นต่อการวัดระดับการทำงานอัตโนมัติในกระบวนการเรียกเก็บเงิน ซึ่งเป็นเป้าหมายสำคัญของหลายองค์กรที่ต้องการเพิ่มประสิทธิภาพและลดต้นทุน KPI อัตราการเรียกเก็บเงินอัตโนมัติคำนวณจากแอตทริบิวต์นี้โดยตรง จึงช่วยติดตามความคืบหน้าของโครงการระบบอัตโนมัติได้. เหตุผลที่สำคัญ ใช้คำนวณอัตราการเรียกเก็บเงินอัตโนมัติโดยตรง ช่วยวัดประสิทธิภาพกระบวนการและติดตามผลของโครงการระบบอัตโนมัติ. แหล่งข้อมูล อนุมานจากแอตทริบิวต์ชื่อผู้ใช้ ตรรกะอาจเป็นดังนี้: IF UserName IN ('BATCH', 'SYSTEM', 'RFCUSER') THEN true ELSE false. ตัวอย่าง truefalse | |||
| รหัสธุรกรรม TransactionCode | รหัสธุรกรรม SAP ที่ใช้ดำเนินกิจกรรม. | ||
| คำอธิบาย รหัสธุรกรรม หรือ T-Code เป็นรหัสเฉพาะของฟังก์ชันหรือโปรแกรมใน SAP เช่น 'VF01' สำหรับสร้างเอกสารเรียกเก็บเงิน การบันทึก T-Code ของแต่ละเหตุการณ์ช่วยให้เห็นรายละเอียดทางเทคนิคว่าระบบดำเนินกระบวนการอย่างไร ข้อมูลนี้มีประโยชน์มากต่อการวิเคราะห์หาสาเหตุที่แท้จริงของปัญหา เช่น หากเกิดข้อผิดพลาดบ่อย นักวิเคราะห์สามารถตรวจสอบว่ามีการใช้รหัสธุรกรรมที่ไม่เป็นมาตรฐานหรือไม่ นอกจากนี้ยังช่วยระบุชื่อกิจกรรมและทำความเข้าใจว่ากระบวนการใช้ฟังก์ชันใดของระบบ. เหตุผลที่สำคัญ ให้บริบททางเทคนิคเกี่ยวกับวิธีดำเนินกิจกรรม ช่วยวิเคราะห์หาสาเหตุที่แท้จริงของความเบี่ยงเบนในกระบวนการและระบุการดำเนินการที่ไม่เป็นมาตรฐานของผู้ใช้. แหล่งข้อมูล ตาราง SAP ECC: CDHDR, ฟิลด์: TCODE ตัวอย่าง VF01VF02FB01F-28 | |||
| ระบบต้นทาง SourceSystem | ระบุระบบต้นทางที่ใช้ดึงข้อมูล. | ||
| คำอธิบาย แอตทริบิวต์นี้ระบุระบบบันทึกข้อมูลต้นทาง ในองค์กรที่มี ERP หลายระบบหรือมีระบบเชื่อมต่อกัน ฟิลด์นี้ช่วยแยกข้อมูลจากแต่ละแหล่งได้ สำหรับ process mining แอตทริบิวต์นี้จำเป็นต่อการตรวจสอบความถูกต้องของข้อมูล และการเปรียบเทียบกระบวนการระหว่างระบบหรือหน่วยงานต่างๆ โดยทั่วไปจะกำหนดค่าไว้ตายตัวระหว่างการดึงข้อมูล เพื่อระบุชุดข้อมูล. เหตุผลที่สำคัญ ระบุที่มาของข้อมูล ซึ่งจำเป็นต่อการตรวจสอบความถูกต้องและการวิเคราะห์แยกตามระบบในองค์กรที่ใช้หลายระบบ. แหล่งข้อมูล โดยทั่วไปจะกำหนดค่าไว้ระหว่างกระบวนการดึง แปลง และโหลดข้อมูล (ETL) เพื่อระบุ SAP ECC instance ที่ใช้ เช่น 'ECC_PROD_NA'. ตัวอย่าง SAP_ECC_PRODECC_EU_100SAP_US_FIN | |||
| วันครบกำหนดชำระใบแจ้งหนี้ InvoiceDueDate | วันที่คาดว่าลูกค้าจะชำระเงินภายในวันดังกล่าว. | ||
| คำอธิบาย วันครบกำหนดชำระใบแจ้งหนี้คือวันสุดท้ายที่ต้องชำระตามเงื่อนไขการชำระเงิน วันที่นี้เป็นข้อมูลพื้นฐานสำหรับบริหารบัญชีลูกหนี้และเริ่มติดตามรับชำระ ใช้คำนวณ KPI อัตราการชำระตรงเวลา โดยเปรียบเทียบกับวันที่ได้รับชำระจริง การวิเคราะห์ใบแจ้งหนี้ตามวันครบกำหนดช่วยคาดการณ์กระแสเงินสดและจัดลำดับความสำคัญในการติดตามยอดที่ใกล้ครบกำหนดหรือเกินกำหนด โดยทั่วไปจะคำนวณจากวันที่ฐานและเงื่อนไขการชำระเงิน. เหตุผลที่สำคัญ เป็นเกณฑ์วัดการชำระเงินตรงเวลา และจำเป็นต่อการบริหารบัญชีลูกหนี้กับการคาดการณ์กระแสเงินสด. แหล่งข้อมูล คำนวณจากวันที่ฐาน (BSEG-ZFBDT) และเงื่อนไขการชำระเงิน (BSEG-ZTERM) โดยไม่ได้จัดเก็บไว้ในฟิลด์โดยตรงเสมอไป. ตัวอย่าง 2023-05-152023-05-302023-06-20 | |||
| วันที่ตัดบัญชี ClearingDate | วันที่ได้รับชำระเงินและตัดใบแจ้งหนี้ออกจากบัญชีลูกหนี้. | ||
| คำอธิบาย วันที่ตัดบัญชีคือวันที่ระบบการเงินระบุว่ารายการค้างชำระ เช่น ใบแจ้งหนี้ ได้รับชำระหรือ 'ตัดยอด' แล้ว วันที่นี้แสดงว่าระบบถือว่าได้รับและกระทบยอดเงินสดเรียบร้อยแล้ว วันที่นี้เป็นหนึ่งในวันที่สำคัญที่สุดของวงจร Order to Cash ใช้เป็นวันสิ้นสุดในการคำนวณ Days Sales Outstanding (DSO) และระยะเวลาตั้งแต่ออกใบแจ้งหนี้จนถึงรับชำระเงินโดยรวม การวิเคราะห์วันที่ตัดบัญชีช่วยวัดประสิทธิภาพของกระบวนการติดตามรับชำระ. เหตุผลที่สำคัญ ระบุขั้นตอนสุดท้ายของวงจรชีวิตใบแจ้งหนี้ ใช้เป็นวันสิ้นสุดในการคำนวณ DSO และระยะเวลาดำเนินการโดยรวม อีกทั้งสะท้อนประสิทธิภาพการรับชำระเงิน. แหล่งข้อมูล ตาราง SAP ECC: BSAD, ฟิลด์: AUGDT ตัวอย่าง 2023-05-142023-06-012023-06-25 | |||
| วันที่ลงบัญชี PostingDate | วันที่ลงรายการในบัญชีการเงิน. | ||
| คำอธิบาย วันที่ลงบัญชีกำหนดรอบระยะเวลาบัญชีที่จะบันทึกรายการในบัญชีแยกประเภททั่วไป เป็นวันที่สำคัญต่อการบัญชีและการรายงานทางการเงิน หากมีความล่าช้าระหว่างวันที่สร้างเอกสารกับวันที่ลงบัญชี อาจบ่งชี้ถึงความไม่มีประสิทธิภาพในการจัดการเอกสารเรียกเก็บเงินภายใน ในมุมมองของ process mining วันที่ลงบัญชีเป็นหมุดหมายสำคัญในวงจรชีวิตของใบแจ้งหนี้ ระยะเวลาตั้งแต่ออกใบแจ้งหนี้จนถึงลงบัญชีอาจใช้เป็นตัวชี้วัดประสิทธิภาพของฝ่ายเรียกเก็บเงิน. เหตุผลที่สำคัญ เป็นหมุดหมายสำคัญทางการเงินและจำเป็นต่อการบัญชี ระยะเวลาตั้งแต่สร้างใบแจ้งหนี้จนถึงลงบัญชีเป็นตัวชี้วัดสำคัญของประสิทธิภาพการประมวลผลภายใน. แหล่งข้อมูล ตาราง SAP ECC: BKPF, ฟิลด์: BUDAT ตัวอย่าง 2023-04-152023-04-172023-05-21 | |||
| วันที่เอกสาร DocumentDate | วันที่บนเอกสารต้นฉบับ ซึ่งระบุโดยผู้ขายหรือผู้จัดทำเอกสาร. | ||
| คำอธิบาย วันที่เอกสารคือวันที่ออกเอกสารต้นฉบับ สำหรับการเรียกเก็บเงิน โดยทั่วไปคือวันที่สร้างใบแจ้งหนี้ และมักใช้เป็นฐานในการคำนวณวันครบกำหนดชำระ วันที่นี้สำคัญต่อการรายงานทางการเงินและการคำนวณตัวชี้วัดสำคัญ เช่น Days Sales Outstanding (DSO) โดยเป็นจุดเริ่มต้นของช่วงเวลาติดตามรับชำระในมุมมองของลูกค้า การวิเคราะห์ความแตกต่างระหว่างวันที่เอกสารกับวันที่ลงบัญชีอาจช่วยให้เห็นความล่าช้าภายในในการประมวลผลเอกสารเรียกเก็บเงิน. เหตุผลที่สำคัญ ใช้เป็นฐานคำนวณอายุใบแจ้งหนี้และ DSO รวมถึงเป็นจุดอ้างอิงสำคัญสำหรับการวิเคราะห์ทางการเงินและเงื่อนไขการชำระเงิน. แหล่งข้อมูล ตาราง SAP ECC: VBRK, ฟิลด์: FKDAT (วันที่เรียกเก็บเงิน) ตัวอย่าง 2023-04-152023-04-162023-05-20 | |||
| สกุลเงิน Currency | รหัสสกุลเงินของยอดเงินที่ระบุในใบแจ้งหนี้. | ||
| คำอธิบาย แอตทริบิวต์นี้ระบุสกุลเงินของรายการ เช่น USD, EUR หรือ JPY เพื่อให้มีบริบทที่จำเป็นสำหรับมูลค่าเงินต่างๆ เช่น ยอดรวมใบแจ้งหนี้ เมื่อต้องวิเคราะห์ข้อมูลจากองค์กรข้ามชาติ ฟิลด์สกุลเงินมีความสำคัญต่อการตีความและแปลงตัวเลขทางการเงินให้ถูกต้อง ช่วยให้รายงานมีมาตรฐานเดียวกัน และป้องกันการรวมยอดเงินต่างสกุลโดยไม่แปลงสกุลเงินก่อน ซึ่งอาจทำให้ผลวิเคราะห์ทางการเงินคลาดเคลื่อน. เหตุผลที่สำคัญ ให้บริบทที่จำเป็นสำหรับมูลค่าเงินทั้งหมด เพื่อให้วิเคราะห์ทางการเงินได้ถูกต้อง โดยเฉพาะเมื่อมีหลายสกุลเงิน. แหล่งข้อมูล ตาราง SAP ECC: VBRK, ฟิลด์: WAERK ตัวอย่าง USDEURGBPJPY | |||
| หมายเลขเอกสารการขาย SalesDocumentNumber | รหัสของใบสั่งขายต้นทางที่นำไปสู่การออกใบแจ้งหนี้. | ||
| คำอธิบาย แอตทริบิวต์นี้เชื่อมโยงใบแจ้งหนี้กลับไปยังใบสั่งขายที่เริ่มต้นรายการ ทำให้ติดตามกระบวนการ Order to Cash ได้ตั้งแต่ต้นจนจบ เมื่อเชื่อมกระบวนการเรียกเก็บเงินกับกระบวนการใบสั่งขายก่อนหน้า องค์กรจะวิเคราะห์ระยะเวลาตั้งแต่ลูกค้าสั่งซื้อจนถึงได้รับชำระเงินได้ ช่วยระบุว่าความล่าช้าในการเรียกเก็บเงินเกิดจากปัญหาด้านการขาย การจัดส่งสินค้า หรือฝ่ายเรียกเก็บเงินเอง ทำให้เห็นภาพกระบวนการได้ครบถ้วนขึ้น. เหตุผลที่สำคัญ เชื่อมกระบวนการเรียกเก็บเงินกลับไปยังใบสั่งขาย ช่วยวิเคราะห์ Order to Cash ตั้งแต่ต้นจนจบและระบุความล่าช้าระหว่างแผนก. แหล่งข้อมูล ตาราง SAP ECC: VBRP, ฟิลด์: VGBEL ตัวอย่าง 100000451000004610000047 | |||
| องค์กรฝ่ายขาย SalesOrganization | หน่วยงานที่รับผิดชอบการขายสินค้าหรือบริการ. | ||
| คำอธิบาย องค์กรฝ่ายขายเป็นหน่วยงานใน SAP ที่รับผิดชอบการจัดจำหน่ายสินค้าและบริการ รวมถึงการเจรจาเงื่อนไขการขาย เป็นฟิลด์สำคัญสำหรับจัดโครงสร้างงานขายและการจัดจำหน่าย ใน process mining แอตทริบิวต์นี้ช่วยวิเคราะห์กระบวนการเรียกเก็บเงินตามโครงสร้างฝ่ายขาย และเปรียบเทียบประสิทธิภาพระหว่างองค์กรฝ่ายขายต่างๆ เพื่อดูว่าภูมิภาคหรือสายธุรกิจใดดำเนินการเรียกเก็บเงินได้มีประสิทธิภาพกว่า รวมถึงสนับสนุนการนำแนวปฏิบัติที่ดีไปใช้เป็นมาตรฐาน. เหตุผลที่สำคัญ ช่วยเปรียบเทียบและวิเคราะห์ประสิทธิภาพระหว่างฝ่ายขายหรือภูมิภาคต่างๆ เพื่อระบุแนวปฏิบัติที่ดีและจุดที่ควรปรับปรุง. แหล่งข้อมูล ตาราง SAP ECC: VBRK, ฟิลด์: VKORG ตัวอย่าง 1000NA01EU01AP01 | |||
| อัปเดตข้อมูลล่าสุด LastDataUpdate | วันและเวลาที่ดึงหรือรีเฟรชข้อมูลจากระบบต้นทางครั้งล่าสุด. | ||
| คำอธิบาย แอตทริบิวต์นี้ระบุเวลาล่าสุดที่อัปเดตชุดข้อมูลจากระบบต้นทาง ช่วยให้ผู้ใช้ทราบว่าข้อมูลที่กำลังดูเป็นข้อมูลล่าสุดเพียงใด ในแดชบอร์ดและรายงาน เวลานี้ช่วยให้ผู้เกี่ยวข้องประเมินความเป็นปัจจุบันของข้อมูล และเข้าใจว่ารายการที่เพิ่งเกิดขึ้นจะแสดงในข้อมูลหรือไม่ โดยทั่วไปจะสร้างค่านี้เมื่อสิ้นสุดกระบวนการดึงข้อมูล. เหตุผลที่สำคัญ แจ้งให้ผู้ใช้ทราบว่าข้อมูลเป็นปัจจุบันเพียงใด ซึ่งสำคัญต่อการตัดสินใจด้านการปฏิบัติการโดยอิงจากผลวิเคราะห์. แหล่งข้อมูล สร้างและจัดเก็บระหว่างกระบวนการดึง แปลง และโหลดข้อมูล (ETL). ตัวอย่าง 2023-10-27T02:00:00Z2023-10-28T02:00:00Z | |||
กิจกรรม Order to Cash ด้านการวางบิลและออกใบแจ้งหนี้
| กิจกรรม | คำอธิบาย | ||
|---|---|---|---|
| ได้รับชำระเงินจากลูกค้าแล้ว | ได้รับชำระเงินจากลูกค้าและบันทึกในระบบเป็นการรับเงินสดหรือเงินฝากธนาคาร ทำให้เกิดเอกสารการชำระเงินแยกต่างหาก ซึ่งยังไม่ได้ตัดกับใบแจ้งหนี้ฉบับใดโดยเฉพาะ. | ||
| เหตุผลที่สำคัญ นี่คือจุดสำคัญในวงจรเปลี่ยนเงินสด การนับเวลาตั้งแต่ส่งใบแจ้งหนี้จนได้รับชำระเงินเป็นองค์ประกอบหลักของ Days Sales Outstanding (DSO). แหล่งข้อมูล บันทึกเป็นเอกสารใหม่ใน BKPF และ BSEG โดยทั่วไปใช้ประเภทเอกสารที่ระบุว่าเป็นการชำระเงินจากลูกค้า เช่น 'DZ' วันที่ลงบัญชี (BUDAT) เป็นตัวบ่งชี้เหตุการณ์. บันทึก ใช้วันที่ลงบัญชีของเอกสารรับชำระเงินจากลูกค้าใน BKPF. ประเภทเหตุการณ์ explicit | |||
| ตัดรายการใบแจ้งหนี้แล้ว | สถานะสุดท้ายของใบแจ้งหนี้ที่ชำระครบแล้ว หมายถึงรายการค้างชำระถูกปิดด้วยการชำระเงินหรือใบลดหนี้ที่เกี่ยวข้อง ถือว่าใบแจ้งหนี้ได้รับการชำระครบถ้วน. | ||
| เหตุผลที่สำคัญ แสดงว่ากระบวนการ Order to Cash ของใบแจ้งหนี้เสร็จสมบูรณ์ นี่คือเหตุการณ์สิ้นสุดหลักที่ใช้วัดระยะเวลารอบใบแจ้งหนี้เฉลี่ยทั้งหมด. แหล่งข้อมูล เกิดขึ้นเมื่อมีการกรอกฟิลด์เอกสารตัดรายการ (AUGBL) และวันที่ตัดรายการ (AUGDT) สำหรับรายการใบแจ้งหนี้ในตาราง BSEG. บันทึก เหตุการณ์เกิดขึ้นในวันที่ตัดรายการ (AUGDT) ที่บันทึกไว้ในตาราง BSEG สำหรับรายการใบแจ้งหนี้. ประเภทเหตุการณ์ explicit | |||
| ลงบัญชีใบแจ้งหนี้แล้ว | บันทึกใบแจ้งหนี้อย่างเป็นทางการในบัญชีแยกประเภทย่อยลูกหนี้และบัญชีแยกประเภททั่วไป เหตุการณ์นี้ทำให้ใบแจ้งหนี้มีผลผูกพันทางกฎหมายและแสดงยอดหนี้ที่ลูกค้าต้องชำระ. | ||
| เหตุผลที่สำคัญ นี่คือจุดสำคัญที่เริ่มนับระยะเวลาเก็บเงินอย่างเป็นทางการ เวลาระหว่างการสร้างและการลงบัญชีช่วยให้เห็นความล่าช้าในการดำเนินงานภายในที่กระทบกระแสเงินสด. แหล่งข้อมูล บันทึกไว้ในตาราง BKPF วันที่ลงบัญชี (BUDAT) ของหมายเลขเอกสาร (BELNR) เป็นตัวบ่งชี้เหตุการณ์ สำหรับเอกสารที่พักไว้ เหตุการณ์นี้เกิดขึ้นเมื่อเปลี่ยนเป็นเอกสารที่ลงบัญชีแล้ว. บันทึก ใช้วันที่ลงบัญชี (BUDAT) ในตาราง BKPF ของเอกสารใบแจ้งหนี้. ประเภทเหตุการณ์ explicit | |||
| ส่งใบแจ้งหนี้ให้ลูกค้าแล้ว | ระบุว่าได้ส่งใบแจ้งหนี้ให้ลูกค้าผ่านช่องทางที่กำหนด เช่น สิ่งพิมพ์ อีเมล หรือ EDI โดยทั่วไปข้อมูลนี้บันทึกจากบันทึกของระบบจัดการผลลัพธ์. | ||
| เหตุผลที่สำคัญ เหตุการณ์นี้เป็นจุดสำคัญที่เริ่มนับระยะเวลาชำระเงินของลูกค้า ความล่าช้าในขั้นตอนนี้ส่งผลโดยตรงต่อเวลาที่คาดว่าจะได้รับชำระเงินและประสิทธิภาพการเก็บเงิน. แหล่งข้อมูล อนุมานได้จากวันที่และเวลาประมวลผลในตารางสถานะข้อความ (NAST) สำหรับประเภทผลลัพธ์ที่ตรงกับใบแจ้งหนี้. บันทึก อนุมานจากรายการในตาราง NAST ที่มีสถานะประมวลผล '1' (ประมวลผลสำเร็จ). ประเภทเหตุการณ์ inferred | |||
| สร้างใบแจ้งหนี้แล้ว | ระบุว่ามีการสร้างเอกสารวางบิลในระบบ เหตุการณ์นี้บันทึกเมื่อมีรายการใหม่ในตารางส่วนหัวเอกสารบัญชี (BKPF) โดยใช้ประเภทเอกสารที่กำหนดสำหรับใบแจ้งหนี้. | ||
| เหตุผลที่สำคัญ นี่คือจุดเริ่มต้นของกระบวนการออกใบแจ้งหนี้ทั้งหมด การวิเคราะห์เวลาตั้งแต่เหตุการณ์นี้ช่วยวัดระยะเวลารอบการสร้างใบแจ้งหนี้ และเป็นพื้นฐานในการคำนวณ Days Sales Outstanding (DSO). แหล่งข้อมูล บันทึกไว้ในตาราง BKPF วันที่สร้าง (CPUDT) และเวลา (CPUTM) ของหมายเลขเอกสาร (BELNR) ที่ระบุเป็นตัวบ่งชี้เหตุการณ์ ส่วนประเภทเอกสาร (BLART) ใช้ระบุว่าเป็นใบแจ้งหนี้. บันทึก ใช้เวลาประทับการสร้าง (CPUDT) ในตาราง BKPF ของเอกสารใบแจ้งหนี้. ประเภทเหตุการณ์ explicit | |||
| แก้ไขใบแจ้งหนี้แล้ว | หมายถึงกิจกรรมแก้ไขงาน โดยพบว่าใบแจ้งหนี้ฉบับแรกไม่ถูกต้องและมีการกลับรายการในภายหลัง ตรวจจับได้จากเอกสารกลับรายการที่เชื่อมโยงกับใบแจ้งหนี้ต้นฉบับ. | ||
| เหตุผลที่สำคัญ แสดงให้เห็นความไม่มีประสิทธิภาพและปัญหาด้านคุณภาพของกระบวนการ การแก้ไขที่เกิดบ่อยบ่งชี้ถึงปัญหาในข้อมูลการขายหรือการวางบิลก่อนหน้า และช่วยสนับสนุนแดชบอร์ด Invoice Rework And Error Rates. แหล่งข้อมูล ระบุได้จากเอกสารกลับรายการที่ฟิลด์ BKPF-STBLG อ้างอิงถึงเอกสารต้นฉบับ การสร้างเอกสารกลับรายการนี้ถือเป็นเหตุการณ์. บันทึก บันทึกเมื่อสร้างเอกสารกลับรายการ เช่น ผ่าน FB08. ประเภทเหตุการณ์ explicit | |||
| ตัดหนี้สูญใบแจ้งหนี้ | สถานะสุดท้ายอีกแบบหนึ่ง ซึ่งระบุว่าไม่สามารถเรียกเก็บเงินตามใบแจ้งหนี้ได้ และตัดยอดค้างชำระกับบัญชีหนี้สูญ เป็นการปิดใบแจ้งหนี้โดยไม่ได้รับชำระเงินจากลูกค้า. | ||
| เหตุผลที่สำคัญ แสดงผลลัพธ์เชิงลบของกระบวนการและการสูญเสียรายได้ การติดตามเหตุการณ์เหล่านี้ช่วยวิเคราะห์สาเหตุของหนี้สูญและปรับปรุงนโยบายการบริหารสินเชื่อ. แหล่งข้อมูล อนุมานจากการวิเคราะห์รายการตัดบัญชีของใบแจ้งหนี้ หากเอกสารตัดบัญชีลงรายการในบัญชีแยกประเภททั่วไป (G/L) สำหรับค่าใช้จ่ายหนี้สูญที่กำหนดไว้ จะถือว่าตัดหนี้สูญใบแจ้งหนี้แล้ว. บันทึก อนุมานเมื่อรายการตัดบัญชีมีการลงรายการในบัญชีแยกประเภททั่วไป (G/L) สำหรับหนี้สูญที่กำหนดไว้. ประเภทเหตุการณ์ inferred | |||
| ถึงวันครบกำหนดชำระใบแจ้งหนี้ | เหตุการณ์ที่คำนวณขึ้นเพื่อระบุวันที่ครบกำหนดชำระใบแจ้งหนี้อย่างเป็นทางการตามเงื่อนไขการชำระเงิน ไม่ใช่กิจกรรมที่ผู้ใช้หรือระบบดำเนินการ แต่เป็นช่วงเวลาสำคัญ. | ||
| เหตุผลที่สำคัญ จำเป็นต่อการวิเคราะห์พฤติกรรมการชำระเงินและการปฏิบัติตามข้อกำหนด ใช้เป็นเกณฑ์ในการแยกการชำระตรงเวลากับล่าช้า และคำนวณ KPI อัตราการชำระตรงเวลา. แหล่งข้อมูล คำนวณจากการเปรียบเทียบวันที่ปัจจุบันกับวันครบกำหนดสุทธิ โดยดูวันครบกำหนดได้จากฟิลด์ BSEG-ZFBDT หรือคำนวณจากวันที่ฐานและเงื่อนไขการชำระเงิน. บันทึก เปรียบเทียบวันที่ของระบบกับฟิลด์วันครบกำหนดสุทธิในรายการใบแจ้งหนี้ (BSEG). ประเภทเหตุการณ์ calculated | |||
| นำยอดชำระไปตัดกับใบแจ้งหนี้แล้ว | จับคู่ยอดชำระที่ได้รับจากลูกค้ากับใบแจ้งหนี้ค้างชำระฉบับที่เกี่ยวข้องและนำไปตัดรายการ ขั้นตอนกระทบยอดนี้เชื่อมโยงยอดชำระกับหนี้ที่ต้องชำระ. | ||
| เหตุผลที่สำคัญ กิจกรรมนี้สำคัญต่อการวัดระยะเวลารอบการบันทึกรับชำระเงิน หากบันทึกรับเงินล่าช้า สถานะลูกหนี้อาจไม่ตรงกับความเป็นจริงและทำให้มองไม่เห็นเงินสดที่มีอยู่. แหล่งข้อมูล อนุมานจากธุรกรรมตัดรายการ เช่น F-32 ซึ่งกรอกข้อมูลในฟิลด์ตัดรายการของรายการใบแจ้งหนี้ เวลาประทับของเหตุการณ์คือวันที่ตัดรายการ. บันทึก อนุมานจากการกรอกวันที่ตัดรายการ (AUGDT) ในตารางรายการใบแจ้งหนี้ (BSEG). ประเภทเหตุการณ์ inferred | |||
| พักใบแจ้งหนี้ไว้ | บันทึกเอกสารใบแจ้งหนี้ไว้ในสถานะเบื้องต้น แต่ยังไม่ได้ลงบัญชีแยกประเภททั่วไป มักใช้เมื่อข้อมูลยังไม่ครบหรือจำเป็นต้องตรวจสอบก่อนลงบัญชีขั้นสุดท้าย. | ||
| เหตุผลที่สำคัญ ติดตามขั้นตอนก่อนลงบัญชีและความล่าช้าที่อาจเกิดขึ้น หากเอกสารอยู่ในสถานะพักไว้นาน อาจบ่งชี้ถึงปัญหาคุณภาพข้อมูลหรือคอขวดในขั้นตอนอนุมัติเบื้องต้น. แหล่งข้อมูล เอกสารที่พักไว้จัดเก็บในตาราง VBKPF การสร้างเอกสารในตารางนี้และนำไปลงบัญชีภายหลังถือเป็นกิจกรรมนี้. บันทึก บันทึกเมื่อบันทึกเอกสารที่พักไว้ด้วยธุรกรรม เช่น FV70. ประเภทเหตุการณ์ explicit | |||
| ส่งข้อความเตือนให้ชำระเงินแล้ว | ระบบสร้างและส่งหนังสือทวงถามหรือข้อความเตือนให้ชำระเงินสำหรับใบแจ้งหนี้ที่เกินกำหนดให้ลูกค้า โดยบันทึกข้อมูลนี้จากประวัติการทวงถาม. | ||
| เหตุผลที่สำคัญ ช่วยประเมินประสิทธิผลของกลยุทธ์ติดตามหนี้ การวิเคราะห์เวลาตั้งแต่ส่งข้อความเตือนจนได้รับชำระเงินเป็นสิ่งสำคัญต่อ KPI ประสิทธิผลของการแจ้งเตือนให้ชำระเงิน. แหล่งข้อมูล บันทึกไว้ในตารางข้อมูลการทวงถาม โดยเฉพาะ MHNK (ส่วนหัวข้อมูลการทวงถาม) และ MHND (รายการข้อมูลการทวงถาม) ซึ่งสร้างขึ้นเมื่อเรียกใช้การทวงถาม (ธุรกรรม F150). บันทึก บันทึกเมื่อเรียกใช้การทวงถาม (F150) สำหรับรายการที่เกินกำหนด. ประเภทเหตุการณ์ explicit | |||
| สร้างกรณีโต้แย้งแล้ว | มีการบันทึกข้อโต้แย้งอย่างเป็นทางการเกี่ยวกับใบแจ้งหนี้ ซึ่งมักเกิดจากข้อร้องเรียนของลูกค้า ข้อมูลนี้บันทึกในระบบ SAP Dispute Management. | ||
| เหตุผลที่สำคัญ ช่วยระบุใบแจ้งหนี้ที่เสี่ยงต่อการชำระเงินล่าช้าและชี้ปัญหาที่ทำให้ลูกค้าไม่พอใจ นับเป็นจุดเริ่มต้นของกระบวนการจัดการข้อยกเว้นที่สำคัญ. แหล่งข้อมูล บันทึกเมื่อสร้างกรณีในตารางกรณีโต้แย้ง (UDM_CASE) ที่เชื่อมโยงกับเอกสารบัญชีของใบแจ้งหนี้. บันทึก บันทึกเมื่อผู้ใช้สร้างกรณีโต้แย้งผ่านธุรกรรม UDM_DISPUTE. ประเภทเหตุการณ์ explicit | |||
| อนุมัติใบแจ้งหนี้แล้ว | หมายถึงการอนุมัติใบแจ้งหนี้อย่างเป็นทางการ ซึ่งทำให้สามารถลงบัญชีหรือส่งให้ลูกค้าได้ โดยมักอนุมานจากการเปลี่ยนเอกสารที่พักไว้เป็นเอกสารที่ลงบัญชีแล้ว. | ||
| เหตุผลที่สำคัญ ติดตามเวิร์กโฟลว์การอนุมัติภายใน ซึ่งมักเป็นสาเหตุของคอขวด การวิเคราะห์กิจกรรมนี้ช่วยสนับสนุนแดชบอร์ด Invoice Approval Flow Analysis โดยระบุผู้อนุมัติที่ดำเนินการล่าช้า. แหล่งข้อมูล อนุมานได้จากการเปลี่ยนสถานะเอกสารจากพักไว้ (ใน VBKPF) เป็นลงบัญชีแล้ว (ใน BKPF) หรือหากใช้ระบบเวิร์กโฟลว์ เหตุการณ์นี้อาจบันทึกไว้อย่างชัดเจนในบันทึกเวิร์กโฟลว์. บันทึก เปรียบเทียบวันที่สร้างเอกสารที่พักไว้ (VBKPF) กับวันที่ลงบัญชีของเอกสารฉบับสุดท้าย (BKPF). ประเภทเหตุการณ์ inferred | |||
คู่มือการดึงข้อมูล
ขั้นตอน
- เปิด ABAP Editor: เข้าสู่ระบบ SAP ECC แล้วเปิด ABAP Editor ด้วย transaction code
SE38. - สร้างโปรแกรม: กรอกชื่อโปรแกรมใหม่ในช่อง Program เช่น
Z_PM_O2C_INVOICE_EXTRACTแล้วคลิกปุ่ม Create ระบุชื่อเรื่องที่สื่อความหมาย และตั้งค่า Type ของโปรแกรมเป็น 'Executable Program'. - กำหนดหน้าจอเลือกข้อมูล: กำหนดพารามิเตอร์ของหน้าจอเลือกข้อมูลในซอร์สโค้ดของโปรแกรม เพื่อให้ผู้ใช้กรองข้อมูลที่จะดึงได้ พารามิเตอร์หลัก ได้แก่ ช่วงวันที่สร้างเอกสาร (
S_ERDAT), Company Code (S_BUKRS) และประเภทเอกสารวางบิล (S_VBTYP). - กำหนดโครงสร้างข้อมูล: ประกาศโครงสร้างตารางภายในเพื่อเก็บข้อมูลบันทึกเหตุการณ์ขั้นสุดท้าย โดยต้องมีฟิลด์
InvoiceNumber,ActivityName,EventTimeและแอตทริบิวต์ที่แนะนำ เช่นUserName,BillingDocumentType,CustomerNumber,CompanyCodeและTotalInvoiceAmount. - เขียนตรรกะเลือกข้อมูล: เขียนตรรกะ ABAP หลักเพื่อเลือกข้อมูล เริ่มจากเลือกเอกสารวางบิลหลักจากตาราง
VBRKและBKPFตามค่าที่ผู้ใช้ระบุบนหน้าจอเลือกข้อมูล แล้วเก็บข้อมูลไว้ในตารางภายในชั่วคราว. - ดึงกิจกรรม: วนดูรายการเอกสารวางบิลเริ่มต้น แล้วเลือกข้อมูลเพิ่มเติมจากตารางต่างๆ เพื่อระบุกิจกรรมที่จำเป็นทั้ง 13 รายการ ตัวอย่างเช่น ค้นหาเหตุการณ์ 'ส่งใบแจ้งหนี้ให้ลูกค้า' ในตาราง
NAST, ข้อมูลปิดรายการ ('ปิดใบแจ้งหนี้', 'บันทึกการชำระเงิน') ในBSEGและข้อมูลติดตามหนี้ ('ส่งหนังสือแจ้งเตือนการชำระเงิน') ในMHNK. - สร้างตารางบันทึกเหตุการณ์: สำหรับแต่ละกิจกรรมที่พบในขั้นตอนก่อนหน้า ให้เพิ่มระเบียนใหม่ลงในตารางบันทึกเหตุการณ์ภายในขั้นสุดท้าย ตรวจสอบว่าแมป
InvoiceNumber,ActivityName,EventTimeและแอตทริบิวต์อื่นๆ จากตารางต้นทางได้ถูกต้อง. - เขียนไฟล์ไปยัง Application Server: เมื่อวนประมวลผลครบและตารางบันทึกเหตุการณ์มีข้อมูลครบแล้ว ให้ใช้คำสั่ง
OPEN DATASET,LOOP AT... TRANSFERและCLOSE DATASETเพื่อเขียนข้อมูลจากตารางภายในลงในไฟล์ข้อความบน SAP application server ระบุพาธไฟล์เชิงตรรกะที่เข้าถึงได้. - ดึงไฟล์: ใช้ transaction code
AL11เพื่อเปิดดูไดเรกทอรีบน application server และค้นหาไฟล์ที่สร้างขึ้น ประสานงานกับทีม SAP Basis เพื่อดาวน์โหลดไฟล์จากเซิร์ฟเวอร์ไปยังเครื่องของคุณหรือพื้นที่เครือข่ายที่ใช้ร่วมกัน. - จัดรูปแบบขั้นสุดท้าย: เปิดไฟล์ที่ดาวน์โหลดและตรวจสอบว่าเป็นไฟล์ CSV ที่คั่นค่าด้วยเครื่องหมายจุลภาคและมีแถวหัวตาราง บันทึกไฟล์ด้วยการเข้ารหัส UTF-8 เพื่อให้ ProcessMind อัปโหลดได้.
การกำหนดค่า
- ข้อกำหนดเบื้องต้น: ต้องมีสิทธิ์สร้างและเรียกใช้โปรแกรม ABAP (transaction SE38) และสิทธิ์อ่านตาราง FI และ SD รวมถึง
VBRK,VBRP,BKPF,BSEG,NAST,MHNKและUDM_CASE_ATTR00(สำหรับ Dispute Management). - เลือกช่วงวันที่: โปรแกรมควรมีพารามิเตอร์บังคับสำหรับช่วงวันที่ โดยทั่วไปใช้วันที่สร้างเอกสาร (
ERDATใน VBRK/BKPF) สำหรับการดึงข้อมูลครั้งแรก แนะนำให้เลือกช่วง 3-6 เดือนเพื่อให้จัดการชุดข้อมูลได้สะดวก. - ตัวกรองหลัก: กรองด้วย
CompanyCode(BUKRS) ทุกครั้งเพื่อจำกัดขอบเขตการดึงข้อมูล นอกจากนี้ควรกรองตามประเภทเอกสารวางบิล (VBTYPจาก VBRK) หรือประเภทเอกสารบัญชี (BLARTจาก BKPF) เพื่อเลือกเฉพาะใบแจ้งหนี้ที่เกี่ยวข้อง เช่น 'RV' สำหรับใบแจ้งหนี้ทางบัญชีมาตรฐาน และตัดใบลดหนี้หรือเอกสารประเภทอื่นออก. - ข้อควรพิจารณาด้านประสิทธิภาพ: หากชุดข้อมูลครอบคลุมเวลาหลายเดือน ควรเรียกใช้โปรแกรมเป็น background job เพื่อป้องกันเซสชันหมดเวลา ปรับตรรกะ ABAP ให้ใช้การอ่านตารางที่มีดัชนี และหลีกเลี่ยงลูปซ้อนที่มีการเลือกข้อมูลจากฐานข้อมูลอยู่ภายใน ควรเลือกข้อมูลลงตารางภายในก่อนแล้วจึงประมวลผล.
- ตั้งค่าไฟล์ผลลัพธ์: โค้ด ABAP ต้องระบุพาธไฟล์ผลลัพธ์บน application server และตัวคั่นของไฟล์ CSV ซึ่งโดยทั่วไปใช้เครื่องหมายจุลภาคหรืออัฒภาค ตรวจสอบว่าพาธเป็นไดเรกทอรีที่กำหนดค่าไว้ส่วนกลางและเข้าถึงได้.
ตัวอย่างคำค้น abap
REPORT Z_PM_O2C_INVOICE_EXTRACT.
*&---------------------------------------------------------------------*
*& Tables
*&---------------------------------------------------------------------*
TABLES: VBRK, BKPF.
*&---------------------------------------------------------------------*
*& Type Definitions for Event Log Output
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
invoicenumber TYPE vbrk-vbeln,
activityname TYPE string,
eventtime TYPE timestamp,
username TYPE xubname,
billingdocumenttype TYPE vbrk-vbtyp,
customernumber TYPE vbrk-kunnr,
companycode TYPE vbrk-bukrs,
totalinvoiceamount TYPE vbrk-netwr,
END OF ty_event_log.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
DATA: gt_event_log TYPE TABLE OF ty_event_log,
gs_event_log TYPE ty_event_log.
DATA: BEGIN OF gs_invoice,
vbeln TYPE vbrk-vbeln, " SD Doc (Invoice)
awkey TYPE bkpf-awkey, " Accounting Doc Reference Key
bukrs TYPE vbrk-bukrs, " Company Code
kunnr TYPE vbrk-kunnr, " Customer
vbtyp TYPE vbrk-vbtyp, " SD Doc Type
netwr TYPE vbrk-netwr, " Net Value
waerk TYPE vbrk-waerk, " Currency
fkdat TYPE vbrk-fkdat, " Billing Date
erdat TYPE vbrk-erdat, " Creation Date
erzet TYPE vbrk-erzet, " Creation Time
ernam TYPE vbrk-ernam, " Creator
belnr TYPE bkpf-belnr, " Acct Doc
gjahr TYPE bkpf-gjahr, " Fiscal Year
cpudt TYPE bkpf-cpudt, " Acct Doc Entry Date
cputm TYPE bkpf-cputm, " Acct Doc Entry Time
usnam TYPE bkpf-usnam, " Acct Doc User
stblg TYPE bkpf-stblg, " Reversal Doc
END OF gs_invoice.
DATA: gt_invoices LIKE TABLE OF gs_invoice.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_erdat FOR vbrk-erdat OBLIGATORY,
s_bukrs FOR vbrk-bukrs OBLIGATORY,
s_vbtyp FOR vbrk-vbtyp.
PARAMETERS: p_path TYPE string DEFAULT '/usr/sap/trans/tmp/invoice_extract.csv' OBLIGATORY.
*&---------------------------------------------------------------------*
*& Main Processing Block
*&---------------------------------------------------------------------*
START-OF-SELECTION.
" 1. Select base set of invoices
SELECT vbrk~vbeln, vbrk~bukrs, vbrk~kunnr, vbrk~vbtyp, vbrk~netwr, vbrk~waerk,
vbrk~fkdat, vbrk~erdat, vbrk~erzet, vbrk~ernam,
bkpf~belnr, bkpf~gjahr, bkpf~cpudt, bkpf~cputm, bkpf~usnam, bkpf~stblg, bkpf~awkey
INTO CORRESPONDING FIELDS OF TABLE gt_invoices
FROM vbrk
INNER JOIN bkpf ON bkpf~awkey = vbrk~vbeln AND bkpf~awtyp = 'VBRK'
WHERE vbrk~erdat IN s_erdat
AND vbrk~bukrs IN s_bukrs
AND vbrk~vbtyp IN s_vbtyp.
IF gt_invoices IS INITIAL.
MESSAGE 'No invoices found for the selected criteria.' TYPE 'I'.
RETURN.
ENDIF.
LOOP AT gt_invoices INTO gs_invoice.
CLEAR gs_event_log.
gs_event_log-invoicenumber = gs_invoice-vbeln.
gs_event_log-billingdocumenttype = gs_invoice-vbtyp.
gs_event_log-customernumber = gs_invoice-kunnr.
gs_event_log-companycode = gs_invoice-bukrs.
gs_event_log-totalinvoiceamount = gs_invoice-netwr.
" Activity: Invoice Generated (using accounting doc creation)
gs_event_log-activityname = 'Invoice Generated'.
gs_event_log-username = gs_invoice-usnam.
CONCATENATE gs_invoice-cpudt gs_invoice-cputm INTO DATA(lv_ts_gen).
CONVERT DATE gs_invoice-cpudt TIME gs_invoice-cputm INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Posted (same as generated for non-parked docs)
gs_event_log-activityname = 'Invoice Posted'.
gs_event_log-username = gs_invoice-usnam.
CONVERT DATE gs_invoice-cpudt TIME gs_invoice-cputm INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Approved (inferred by posting)
gs_event_log-activityname = 'Invoice Approved'.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Sent To Customer
SELECT SINGLE addat, aduhr FROM nast
INTO (DATA(lv_nast_date), DATA(lv_nast_time))
WHERE kappl = 'V3' AND objky = gs_invoice-vbeln AND vszst > '0'.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Sent To Customer'.
gs_event_log-username = sy-uname.
CONVERT DATE lv_nast_date TIME lv_nast_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Corrected / Reversed
IF gs_invoice-stblg IS NOT INITIAL.
SELECT SINGLE cpudt, cputm, usnam FROM bkpf
INTO (DATA(lv_rev_date), DATA(lv_rev_time), DATA(lv_rev_user))
WHERE belnr = gs_invoice-stblg AND gjahr = gs_invoice-gjahr.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Corrected'.
gs_event_log-username = lv_rev_user.
CONVERT DATE lv_rev_date TIME lv_rev_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
" Activity: Payment Applied, Cleared, Due Date, Written Off (from BSEG)
SELECT SINGLE augdt, augbl, zfBDT, hkont FROM bseg
INTO (DATA(lv_augdt), DATA(lv_augbl), DATA(lv_zfbdt), DATA(lv_hkont))
WHERE bukrs = gs_invoice-bukrs
AND belnr = gs_invoice-belnr
AND gjahr = gs_invoice-gjahr
AND koart = 'D'. " Customer line
IF sy-subrc = 0.
" Due Date Reached (Calculated event)
IF lv_zfbdt IS NOT INITIAL.
gs_event_log-activityname = 'Invoice Due Date Reached'.
gs_event_log-username = 'System'.
CONVERT DATE lv_zfbdt INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Cleared, Applied, Write-Off
IF lv_augdt IS NOT INITIAL.
SELECT SINGLE usnam, cpudt, cputm, blart FROM bkpf
INTO (DATA(lv_clear_user), DATA(lv_clear_date), DATA(lv_clear_time), DATA(lv_clear_type))
WHERE belnr = lv_augbl AND bukrs = gs_invoice-bukrs.
IF sy-subrc = 0.
gs_event_log-username = lv_clear_user.
CONVERT DATE lv_clear_date TIME lv_clear_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
IF lv_clear_type = 'DZ'. " Standard Customer Payment
gs_event_log-activityname = 'Customer Payment Received'. APPEND gs_event_log TO gt_event_log.
gs_event_log-activityname = 'Payment Applied To Invoice'. APPEND gs_event_log TO gt_event_log.
gs_event_log-activityname = 'Invoice Cleared'. APPEND gs_event_log TO gt_event_log.
ELSE. " Assuming other clearing doc types could be write-offs
gs_event_log-activityname = 'Invoice Written Off'.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
" Activity: Payment Reminder Issued (Dunning)
SELECT COUNT(*) FROM mhnk WHERE kunnr = gs_invoice-kunnr AND bukrs = gs_invoice-bukrs AND lafdn > gs_invoice-cpudt.
IF sy-subrc = 0 AND sy-dbcnt > 0.
SELECT SINGLE lafdn FROM mhnk
INTO DATA(lv_dunning_date)
WHERE kunnr = gs_invoice-kunnr AND bukrs = gs_invoice-bukrs AND lafdn > gs_invoice-cpudt.
gs_event_log-activityname = 'Payment Reminder Issued'.
gs_event_log-username = 'System'.
CONVERT DATE lv_dunning_date INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Parked (Example from VBKPF, may require system specific logic)
SELECT SINGLE cpudt, cputm, usnam FROM vbkpf
INTO (DATA(lv_park_date), DATA(lv_park_time), DATA(lv_park_user))
WHERE awkey = gs_invoice-vbeln AND awsys = 'LOG' AND bstat = 'V'.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Parked'.
gs_event_log-username = lv_park_user.
CONVERT DATE lv_park_date TIME lv_park_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Dispute Case Created (Requires Dispute Management module)
SELECT SINGLE create_date, create_time, create_user FROM udm_case_attr00
INTO (DATA(lv_disp_date), DATA(lv_disp_time), DATA(lv_disp_user))
WHERE [Your logic to link invoice to dispute case, e.g., via a custom field or object link].
IF sy-subrc = 0.
gs_event_log-activityname = 'Dispute Case Created'.
gs_event_log-username = lv_disp_user.
CONVERT DATE lv_disp_date TIME lv_disp_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Write data to file
*&---------------------------------------------------------------------*
OPEN DATASET p_path FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'Error opening file.' TYPE 'E'.
ENDIF.
" Header
DATA(lv_header) = 'InvoiceNumber,ActivityName,EventTime,UserName,BillingDocumentType,CustomerNumber,CompanyCode,TotalInvoiceAmount'.
TRANSFER lv_header TO p_path.
LOOP AT gt_event_log INTO gs_event_log.
DATA(lv_line) = |
{ gs_event_log-invoicenumber }|
,{ gs_event_log-activityname }|
,{ gs_event_log-eventtime }|
,{ gs_event_log-username }|
,{ gs_event_log-billingdocumenttype }|
,{ gs_event_log-customernumber }|
,{ gs_event_log-companycode }|
,{ gs_event_log-totalinvoiceamount }|.
TRANSFER lv_line TO p_path.
ENDLOOP.
CLOSE DATASET p_path.
WRITE: 'Extraction complete. File created at:', p_path. ขั้นตอน
- ข้อกำหนดเบื้องต้นและสิทธิ์เข้าถึง: ตรวจสอบว่าคุณมีผู้ใช้ฐานข้อมูลที่มีสิทธิ์อ่านอย่างเดียวสำหรับตาราง SAP ECC ที่จำเป็น รวมถึง VBRK, BKPF, BSAD, NAST, CDHDR, CDPOS, SCASE และตารางอื่นๆ ที่ระบุในคิวรี โดยทั่วไปสิทธิ์ระดับนี้จะให้เฉพาะผู้ดูแลระบบหรือทีมวิเคราะห์ข้อมูลที่ได้รับมอบหมาย.
- เชื่อมต่อฐานข้อมูล: ใช้เครื่องมือ SQL client ทั่วไป เช่น DBeaver, Oracle SQL Developer หรือ Microsoft SQL Server Management Studio เพื่อเชื่อมต่อกับฐานข้อมูล SAP ECC.
- เตรียมคิวรี SQL: คัดลอกคิวรี SQL ทั้งหมดจากส่วน 'query' ไปวางในตัวแก้ไขของ SQL client.
- แทนค่าตัวแปร: คิวรีมีตัวแปรหลายตำแหน่งที่ต้องแทนด้วยค่าตามสภาพแวดล้อมของคุณ ได้แก่:
'YYYYMMDD': แทนทุกตำแหน่งด้วยวันเริ่มต้นและวันสิ้นสุดของช่วงเวลาที่ต้องการวิเคราะห์ ควรจำกัดช่วงเวลาให้เหมาะสมเพื่อให้จัดการข้อมูลได้.'XXXX': แทนด้วย Company Code ที่ต้องการวิเคราะห์.[Your Invoice Output Type]: ระบุรหัสประเภทผลลัพธ์ที่ใช้ส่งใบแจ้งหนี้ให้ลูกค้า เช่น 'RD00'.[Your Bad Debt G/L Account]: ระบุหมายเลขบัญชี General Ledger ที่ใช้ตัดจำหน่ายใบแจ้งหนี้ที่เรียกเก็บไม่ได้.[Your Dispute Case Invoice Attribute]: ระบุชื่อแอตทริบิวต์ที่ใช้เก็บหมายเลขใบแจ้งหนี้ในการตั้งค่า Dispute Management เช่น 'INVOICE_ID'.
- ตรวจสอบฟังก์ชันเวลา: คิวรีใช้รูปแบบทั่วไป
CAST(CONCAT(date_field, time_field) AS TIMESTAMP)คุณอาจต้องปรับให้ตรงกับฐานข้อมูลที่ใช้ เช่น ใช้TO_TIMESTAMPสำหรับ Oracle หรือDATETIMEFROMPARTSสำหรับ SQL Server. - เรียกใช้คิวรี: เรียกใช้คิวรีที่แก้ไขแล้ว ระยะเวลาประมวลผลอาจนาน ขึ้นอยู่กับขนาดตาราง SAP และช่วงวันที่ที่เลือก.
- ตรวจสอบผลลัพธ์: เมื่อคิวรีทำงานเสร็จ ให้ตรวจสอบว่าผลลัพธ์มีคอลัมน์ที่ต้องการ ได้แก่ InvoiceNumber, ActivityName, EventTime และแอตทริบิวต์ที่แนะนำ ตรวจดูว่ามีข้อผิดพลาดหรือไม่มีผลลัพธ์หรือไม่.
- ส่งออกเป็น CSV: ส่งออกผลลัพธ์ทั้งหมดจาก SQL client เป็นไฟล์ CSV และใช้การเข้ารหัส UTF-8 เพื่อป้องกันปัญหากับอักขระพิเศษ.
- เตรียมอัปโหลด: ก่อนอัปโหลดไปยังเครื่องมือ process mining ให้ตรวจสอบว่าชื่อหัวคอลัมน์ใน CSV ตรงกับชื่อแอตทริบิวต์ที่กำหนดทุกประการ เช่น
InvoiceNumber,ActivityName,EventTime,UserName.
การกำหนดค่า
- การเชื่อมต่อฐานข้อมูล: ต้องเชื่อมต่อ SQL โดยตรงกับฐานข้อมูล SAP ECC และมีสิทธิ์อ่านอย่างเดียว วิธีนี้จะข้ามชั้นแอปพลิเคชัน SAP ทั้งหมด.
- สิทธิ์อนุญาต: ผู้ใช้ฐานข้อมูลต้องมีสิทธิ์
SELECTในทุกตารางที่ใช้ในคิวรี ซึ่งอาจอยู่ในโมดูล FI, SD และ FSCM. - ช่วงวันที่: ควรกรองคิวรีตามช่วงวันที่ที่กำหนด เพื่อให้ประสิทธิภาพและปริมาณข้อมูลอยู่ในระดับเหมาะสม แนะนำให้เริ่มจากช่วง 3-6 เดือน ต้องกำหนดตัวแปรช่วงวันที่
'YYYYMMDD'ในหลายส่วนของคิวรี. - ตัวกรอง Company Code: คิวรีออกแบบมาให้กรองตาม Company Code (
BUKRS) โดยทั่วไปควรวิเคราะห์ทีละหนึ่งหรือไม่กี่ Company Code. - การตั้งค่าประเภทเอกสาร: ตรรกะที่ใช้ระบุเหตุการณ์ เช่น การแก้ไขใบแจ้งหนี้ การตัดจำหน่าย หรือการส่งเอกสาร ขึ้นอยู่กับการตั้งค่ามาตรฐานของ SAP คุณอาจต้องปรับคิวรีหากองค์กรใช้ประเภทเอกสารที่กำหนดเอง (
BLART), ประเภทผลลัพธ์ (KSCHL) หรือบัญชี G/L สำหรับกระบวนการเหล่านี้. - ข้อควรพิจารณาด้านประสิทธิภาพ: การเรียกใช้คิวรีกับระบบ SAP ที่ใช้งานจริงอาจใช้ทรัพยากรจำนวนมากและกระทบต่อประสิทธิภาพการปฏิบัติการ แนะนำอย่างยิ่งให้ดึงข้อมูลชุดใหญ่ในช่วงที่มีการใช้งานน้อย หรือใช้ฐานข้อมูลสำเนาสำหรับรายงานโดยเฉพาะ.
ตัวอย่างคำค้น sql
WITH InvoiceBase AS (
SELECT
VBRK.VBELN AS InvoiceNumber,
VBRK.FKART AS BillingDocumentType,
VBRK.KUNRG AS CustomerNumber,
VBRK.BUKRS AS CompanyCode,
VBRK.NETWR AS TotalInvoiceAmount,
VBRK.ERNAM AS CreatorName,
VBRK.ERDAT AS CreationDate,
VBRK.ERZET AS CreationTime
FROM VBRK
WHERE VBRK.ERDAT BETWEEN '20230101' AND '20231231' -- Filter by Invoice Creation Date
AND VBRK.BUKRS IN ('1000') -- Filter by Company Code
AND VBRK.FKART NOT IN ('S1', 'S2') -- Exclude cancelled invoices
)
-- 1. Invoice Generated
SELECT
ib.InvoiceNumber,
'Invoice Generated' AS ActivityName,
CAST(CONCAT(ib.CreationDate, ib.CreationTime) AS TIMESTAMP) AS EventTime,
ib.CreatorName AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM InvoiceBase ib
UNION ALL
-- 2. Invoice Parked
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Parked' AS ActivityName,
CAST(CONCAT(b.CPUDT, b.CPUTM) AS TIMESTAMP) AS EventTime,
b.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF b
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND b.BSTAT = 'V' AND b.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 3. Invoice Posted
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Posted' AS ActivityName,
CAST(CONCAT(b.CPUDT, b.CPUTM) AS TIMESTAMP) AS EventTime,
b.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF b
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND b.BSTAT = '' AND b.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 4. Invoice Approved (from Parked to Posted)
SELECT
SUBSTRING(h.OBJECTID, 4, 10) AS InvoiceNumber,
'Invoice Approved' as ActivityName,
CAST(CONCAT(h.UDATE, h.UTIME) AS TIMESTAMP) AS EventTime,
h.USERNAME AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM CDHDR h
JOIN CDPOS p ON h.MANDANT = p.MANDANT AND h.OBJECTCLAS = p.OBJECTCLAS AND h.OBJECTID = p.OBJECTID AND h.CHANGENR = p.CHANGENR
JOIN InvoiceBase ib ON SUBSTRING(h.OBJECTID, 4, 10) = ib.InvoiceNumber
WHERE h.OBJECTCLAS = 'BELEGV'
AND p.TABNAME = 'BKPF'
AND p.FNAME = 'BSTAT'
AND p.VALUE_OLD = 'V'
AND p.VALUE_NEW = ' '
AND h.UDATE BETWEEN '20230101' AND '20231231'
UNION ALL
-- 5. Invoice Sent To Customer
SELECT
n.OBJKY AS InvoiceNumber,
'Invoice Sent To Customer' AS ActivityName,
CAST(CONCAT(n.DATVR, n.UHRVR) AS TIMESTAMP) AS EventTime,
n.VSTAT AS UserName, -- User who processed is not directly available, using processing status as a proxy
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM NAST n
JOIN InvoiceBase ib ON n.OBJKY = ib.InvoiceNumber
WHERE n.KSCHL = '[Your Invoice Output Type]' -- E.g., 'RD00'
AND n.VSTAT = '1' -- Processed successfully
AND n.DATVR BETWEEN '20230101' AND '20231231'
UNION ALL
-- 6. Invoice Corrected (Reversed)
SELECT
SUBSTRING(orig_doc.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Corrected' AS ActivityName,
CAST(CONCAT(rev_doc.CPUDT, rev_doc.CPUTM) AS TIMESTAMP) AS EventTime,
rev_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
rev_doc.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF orig_doc
JOIN BKPF rev_doc ON orig_doc.STBLG = rev_doc.BELNR AND orig_doc.BUKRS = rev_doc.BUKRS AND orig_doc.GJAHR = rev_doc.STJAH
JOIN InvoiceBase ib ON SUBSTRING(orig_doc.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE orig_doc.AWTYP = 'VBRK' AND orig_doc.STBLG IS NOT NULL AND rev_doc.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 7. Invoice Due Date Reached
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Due Date Reached' AS ActivityName,
CAST(CONCAT(bs.ZFBDT, '000000') AS TIMESTAMP) AS EventTime,
'System' AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSEG bs
JOIN BKPF b ON bs.MANDT = b.MANDT AND bs.BUKRS = b.BUKRS AND bs.BELNR = b.BELNR AND bs.GJAHR = b.GJAHR
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND bs.KOART = 'D' AND bs.ZFBDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 8. Payment Reminder Issued
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Payment Reminder Issued' AS ActivityName,
CAST(CONCAT(h.LAUFD, '000000') AS TIMESTAMP) AS EventTime,
h.LAUFI AS UserName, -- Dunning Run ID
ib.BillingDocumentType,
ib.CustomerNumber,
d.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM MHND d
JOIN MHNK h ON d.MANDT = h.MANDT AND d.LAUFD = h.LAUFD AND d.LAUFI = h.LAUFI
JOIN BKPF b ON d.MANDT = b.MANDT AND d.BUKRS = b.BUKRS AND d.BELNR = b.BELNR AND d.GJAHR = b.GJAHR
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE h.LAUFD BETWEEN '20230101' AND '20231231'
UNION ALL
-- 9. Dispute Case Created
SELECT
attr.ATTR_VALUE AS InvoiceNumber,
'Dispute Case Created' AS ActivityName,
sc.CREATE_TIME AS EventTime,
sc.CREATED_BY AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM SCMG_T_CASE_ATTR attr
JOIN SCASE sc ON attr.CASE_GUID = sc.CASE_GUID
JOIN InvoiceBase ib ON attr.ATTR_VALUE = ib.InvoiceNumber
WHERE attr.ATTR_NAME = '[Your Dispute Case Invoice Attribute]' -- e.g., 'INVOICE_ID'
AND CAST(sc.CREATE_TIME AS DATE) BETWEEN '20230101' AND '20231231'
UNION ALL
-- 10, 11, 12. Clearing Events (Payment, Clearing, Write-Off)
SELECT
InvoiceNumber,
ActivityName,
EventTime,
UserName,
BillingDocumentType,
CustomerNumber,
CompanyCode,
TotalInvoiceAmount
FROM (
SELECT
bsad.XBLNR AS InvoiceNumber,
CASE
WHEN clearing_item.HKONT = '[Your Bad Debt G/L Account]' THEN 'Invoice Written Off'
ELSE 'Customer Payment Received'
END AS ActivityName,
CAST(CONCAT(clearing_doc.CPUDT, clearing_doc.CPUTM) AS TIMESTAMP) AS EventTime,
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
LEFT JOIN BSEG clearing_item ON clearing_doc.MANDT = clearing_item.MANDT AND clearing_doc.BUKRS = clearing_item.BUKRS AND clearing_doc.BELNR = clearing_item.BELNR AND clearing_doc.GJAHR = clearing_item.GJAHR AND clearing_item.HKONT = '[Your Bad Debt G/L Account]' -- e.g. '148000'
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
UNION ALL
SELECT
bsad.XBLNR AS InvoiceNumber,
'Payment Applied To Invoice' AS ActivityName,
CAST(CONCAT(bsad.AUGDT, '000000') AS TIMESTAMP) AS EventTime,
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
UNION ALL
SELECT
bsad.XBLNR AS InvoiceNumber,
'Invoice Cleared' AS ActivityName,
CAST(CONCAT(bsad.AUGDT, '235959') AS TIMESTAMP) AS EventTime, -- Add time to separate from 'Payment Applied'
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
) AS ClearingEvents ขั้นตอน
- ข้อกำหนดเบื้องต้น: ตรวจสอบว่าคุณมีไลเซนส์เครื่องมือ ETL ที่มี SAP connector ซึ่งได้รับการรับรอง เช่น Informatica PowerCenter with SAP Connector หรือ Talend with SAP Connector ตรวจสอบว่าคุณมีข้อมูลรับรองผู้ใช้ SAP พร้อมสิทธิ์อ่านตารางการเงิน การขาย และระบบที่จำเป็น (BKPF, BSEG, VBRK, NAST, MHNK, UDM_CASE_ATTR00, CDHDR, CDPOS).
- เชื่อมต่อ SAP: สร้างการเชื่อมต่อใหม่ไปยังระบบ SAP ECC ในเครื่องมือ ETL ของคุณ ตั้งค่ารายละเอียดการเชื่อมต่อ ได้แก่ application server หมายเลขระบบ client ผู้ใช้ และรหัสผ่าน จากนั้นทดสอบการเชื่อมต่อ.
- กำหนดแหล่งข้อมูล: กำหนดตาราง SAP ที่เกี่ยวข้องเป็นแหล่งข้อมูลใน ETL job สำหรับแต่ละกิจกรรมที่ต้องการดึง เช่น เพิ่ม VBRK สำหรับการสร้างใบแจ้งหนี้, BKPF สำหรับเหตุการณ์บันทึกรายการ และ NAST สำหรับการสื่อสารกับลูกค้า.
- สร้างตรรกะการดึงข้อมูลสำหรับแต่ละกิจกรรม: สร้าง data flow หรือ transformation แยกกันสำหรับกิจกรรมที่จำเป็นทั้ง 13 รายการ ในแต่ละ flow ให้ใช้ตัวกรองเพื่อเลือกระเบียนที่เกี่ยวข้อง เช่น กรองตาม Company Code (BUKRS), ประเภทเอกสาร (BLART) และช่วงวันที่ที่กำหนด (เช่น วันที่สร้าง ERDAT).
- แมปฟิลด์และแปลงข้อมูล: ในแต่ละ data flow ให้แมปฟิลด์จากตาราง SAP ต้นทางกับโครงสร้างบันทึกเหตุการณ์ปลายทาง ได้แก่ InvoiceNumber, ActivityName, EventTime, UserName และแอตทริบิวต์อื่นๆ ที่แนะนำ ใช้ตรรกะ transformation กำหนดค่า 'ActivityName' ให้แต่ละ flow และจัดรูปแบบวันที่กับเวลาให้ถูกต้อง.
- จัดการกิจกรรมที่ซับซ้อน: สำหรับเหตุการณ์ที่คำนวณ เช่น 'ถึงวันครบกำหนดชำระใบแจ้งหนี้' ให้ใช้วันที่ชำระเงินพื้นฐาน (ZFBDT) และตรรกะเงื่อนไขการชำระเงินเพื่อคำนวณวันครบกำหนด หรือดึงวันครบกำหนดสุทธิ (NETDT) จาก BSEG โดยตรง สำหรับเหตุการณ์จากบันทึกการเปลี่ยนแปลง เช่น 'อนุมัติใบแจ้งหนี้' อาจต้องรวมตาราง BKPF กับ CDHDR/CDPOS โดยใช้หมายเลขเอกสารและวันที่.
- รวมข้อมูลกิจกรรม: ใช้ transformation แบบ 'Union' หรือ 'Merge' ในเครื่องมือ ETL เพื่อรวมผลลัพธ์จาก data flow ทั้ง 13 รายการเป็นชุดข้อมูลเดียว ตรวจสอบว่าชื่อคอลัมน์และชนิดข้อมูลตรงกันทุก flow ก่อนรวม.
- กำหนดปลายทาง: ระบุปลายทางของบันทึกเหตุการณ์ขั้นสุดท้าย ซึ่งอาจเป็นไฟล์ข้อความ (CSV), ตารางฐานข้อมูล หรือการเชื่อมต่อโดยตรงไปยังพื้นที่ staging.
- ตั้งกำหนดการดึงข้อมูล: กำหนดพารามิเตอร์ช่วงวันที่สำหรับการดึงข้อมูล ในการโหลดครั้งแรก อาจดึงข้อมูลย้อนหลัง 6-12 เดือน สำหรับการโหลดส่วนต่างครั้งถัดไป ให้ตั้ง job เพื่อดึงข้อมูลตั้งแต่วันที่เรียกใช้ครั้งล่าสุด.
- เรียกใช้และส่งออก: เรียกใช้ ETL job เมื่อเสร็จแล้ว ให้ตรวจสอบไฟล์ผลลัพธ์ว่ามีรูปแบบถูกต้อง ไฟล์สุดท้ายควรเป็น CSV ไฟล์เดียว โดยแต่ละแถวแทนเหตุการณ์หนึ่งรายการ และพร้อมอัปโหลดไปยัง ProcessMind.
การกำหนดค่า
- การเชื่อมต่อ SAP: ต้องเชื่อมต่อ application server กับระบบ SAP ECC เป้าหมาย ผู้ใช้ SAP ต้องมีสิทธิ์ RFC และสิทธิ์เข้าถึงตาราง เช่น VBRK, BKPF, BSEG, NAST และตารางอื่นๆ ที่ระบุในคิวรี.
- ไลเซนส์เครื่องมือ ETL: ต้องมีไลเซนส์ที่ยังใช้งานได้สำหรับเครื่องมือ ETL เชิงพาณิชย์และ SAP connector ที่เกี่ยวข้อง.
- ช่วงวันที่: แนะนำให้ดึงข้อมูลย้อนหลัง 3-6 เดือน เพื่อให้ได้ตัวอย่างที่เหมาะสมสำหรับการวิเคราะห์โดยไม่เพิ่มภาระให้ระบบมากเกินไป ใช้พารามิเตอร์ที่กำหนดวันเริ่มต้นและวันสิ้นสุดได้.
- ตัวกรองหลัก: กรองตาม Company Code (BUKRS) ทุกครั้งเพื่อจำกัดขอบเขตการดึงข้อมูล และกรองตามประเภทเอกสารวางบิลที่เกี่ยวข้อง (VBRK-FKART) และประเภทเอกสารบัญชี (BKPF-BLART) เพื่อเลือกเฉพาะใบแจ้งหนี้มาตรฐานและตัดเอกสารประเภทอื่น เช่น ใบลดหนี้หรือเอกสารภายในออก.
- ประสิทธิภาพ: การดึงข้อมูลจากตารางขนาดใหญ่ เช่น BSEG อาจใช้เวลานาน ใช้ตัวกรองที่เจาะจง หลีกเลี่ยงการดึงฟิลด์ที่ไม่จำเป็น และกำหนดเวลาทำงานในช่วงที่มีการใช้งานน้อย เพื่อลดผลกระทบต่อระบบ SAP ต้นทาง.
ตัวอย่างคำค้น config
// ETL Data Extraction Logic for SAP Order-to-Cash Invoicing
// This represents the configuration logic within a graphical ETL tool.
// == Global Parameters ==
// $StartDate: '[Start Date]' (e.g., '2023-01-01')
// $EndDate: '[End Date]' (e.g., '2023-06-30')
// $CompanyCodes: '[Company Code(s)]' (e.g., '1000', '2000')
// $BillingDocTypes: '[Billing Document Type(s)]' (e.g., 'F1', 'F2')
// == Source 1: Invoice Generated ==
// Tables: VBRK
DATA_SOURCE generated_invoices FROM VBRK WHERE
ERDAT >= $StartDate AND ERDAT <= $EndDate
AND BUKRS IN ($CompanyCodes)
AND FKART IN ($BillingDocTypes)
MAP {
InvoiceNumber: VBELN,
ActivityName: 'Invoice Generated',
EventTime: ERDAT + ERZET, // Combine date and time
UserName: ERNAM,
BillingDocumentType: FKART,
CustomerNumber: KUNAG,
CompanyCode: BUKRS,
TotalInvoiceAmount: NETWR
}
// == Source 2: Invoice Posted ==
// Tables: BKPF joined with VBRK
DATA_SOURCE posted_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.BUDAT >= $StartDate AND A.BUDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = ' '
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Posted',
EventTime: A.BUDAT + A.CPUTM, // Posting date and entry time
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 3: Invoice Parked ==
// Tables: BKPF joined with VBRK
DATA_SOURCE parked_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.CPUDT >= $StartDate AND A.CPUDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = 'V'
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Parked',
EventTime: A.CPUDT + A.CPUTM,
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 4: Invoice Approved (Transition from Parked to Posted) ==
// Tables: BKPF joined with VBRK
DATA_SOURCE approved_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.BUDAT >= $StartDate AND A.BUDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = ' '
AND EXISTS (SELECT 1 FROM VBELEGV C WHERE C.BELNR = A.BELNR) // Check if it was ever parked
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Approved',
EventTime: A.BUDAT + A.CPUTM, // Use posting date as approval date
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 5: Invoice Sent To Customer ==
// Tables: NAST joined with VBRK
DATA_SOURCE sent_invoices FROM NAST as A
INNER JOIN VBRK as B ON (A.OBJKY = B.VBELN)
WHERE A.ERDAT >= $StartDate AND A.ERDAT <= $EndDate
AND B.BUKRS IN ($CompanyCodes)
AND A.VSTAT = '1' // Successfully processed
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Sent To Customer',
EventTime: A.ERDAT + A.ERUHR,
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: B.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 6: Invoice Corrected (Reversed) ==
// Tables: VBRK (for the reversal document)
DATA_SOURCE corrected_invoices FROM VBRK as A
WHERE A.ERDAT >= $StartDate AND A.ERDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.SFAKN <> '' // SFAKN is the original cancelled invoice
MAP {
InvoiceNumber: A.SFAKN, // Case ID is the original invoice
ActivityName: 'Invoice Corrected',
EventTime: A.ERDAT + A.ERZET,
UserName: A.ERNAM,
BillingDocumentType: A.FKART,
CustomerNumber: A.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: NULL // Amount belongs to the reversal doc, not original
}
// == Source 7: Invoice Due Date Reached ==
// Tables: BSEG joined with VBRK
DATA_SOURCE due_invoices FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
WHERE A.NETDT >= $StartDate AND A.NETDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.KOART = 'D' // Customer line item
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Due Date Reached',
EventTime: A.NETDT, // Net due date
UserName: 'System',
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 8: Payment Reminder Issued ==
// Tables: MHNK, MHND, VBRK
DATA_SOURCE reminders FROM MHNK as A
INNER JOIN MHND as D ON (A.LAUFD = D.LAUFD AND A.LAUFI = D.LAUFI)
INNER JOIN VBRK as B ON (SUBSTRING(D.XBLNR, 1, 10) = B.VBELN) // XBLNR may need parsing
WHERE A.LAUFD >= $StartDate AND A.LAUFD <= $EndDate
AND D.BUKRS IN ($CompanyCodes)
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Payment Reminder Issued',
EventTime: A.LAUFD, // Dunning date
UserName: A.IDAPS,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: D.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 9: Dispute Case Created ==
// Tables: UDM_CASE_ATTR00
DATA_SOURCE disputes FROM UDM_CASE_ATTR00 as A
WHERE A.CREATE_TIMESTAMP >= $StartDate // Timestamp format may vary
AND A.FIN_COMP_CODE IN ($CompanyCodes)
AND A.PROCESS = 'FIN_FSCM_DIS'
MAP {
InvoiceNumber: A.BILL_DOC_ID,
ActivityName: 'Dispute Case Created',
EventTime: A.CREATE_TIMESTAMP,
UserName: A.CREATE_USER,
BillingDocumentType: NULL,
CustomerNumber: A.BP_NUMBER,
CompanyCode: A.FIN_COMP_CODE,
TotalInvoiceAmount: A.DISPUTED_AMOUNT
}
// == Source 10: Customer Payment Received ==
// Tables: BKPF
DATA_SOURCE payments FROM BKPF
WHERE BUDAT >= $StartDate AND BUDAT <= $EndDate
AND BUKRS IN ($CompanyCodes)
AND BLART = 'DZ' // Example for Customer Payment
MAP {
InvoiceNumber: NULL, // Invoice not yet known
ActivityName: 'Customer Payment Received',
EventTime: BUDAT + CPUTM,
UserName: USNAM,
BillingDocumentType: NULL,
CustomerNumber: NULL, // Requires join to BSEG to get customer
CompanyCode: BUKRS,
TotalInvoiceAmount: NULL
}
// == Source 11 & 12: Payment Applied To Invoice & Invoice Cleared ==
// Tables: BSEG joined with VBRK
DATA_SOURCE cleared_items FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
WHERE A.AUGDT >= $StartDate AND A.AUGDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.AUGBL <> ''
// Generate two records from this source
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Payment Applied To Invoice',
EventTime: A.AUGDT, // Clearing Date
UserName: H.USNAM, // User from header of original invoice doc
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
UNION WITH {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Cleared',
EventTime: A.AUGDT, // Clearing Date
UserName: H.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 13: Invoice Written Off ==
// Tables: BSEG (for the invoice line) and BKPF (for clearing doc type)
DATA_SOURCE written_off FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
INNER JOIN BKPF as C ON (A.AUGBL = C.BELNR AND A.BUKRS = C.BUKRS AND A.AUGGJ = C.GJAHR)
WHERE A.AUGDT >= $StartDate AND A.AUGDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND C.BLART = '[Your Write-Off Document Type]' // e.g., 'AB'
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Written Off',
EventTime: A.AUGDT,
UserName: C.USNAM, // User who posted the write-off
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Final Union of all sources ==
OUTPUT generated_invoices
UNION ALL posted_invoices
UNION ALL parked_invoices
UNION ALL approved_invoices
UNION ALL sent_invoices
UNION ALL corrected_invoices
UNION ALL due_invoices
UNION ALL reminders
UNION ALL disputes
UNION ALL payments
UNION ALL cleared_items
UNION ALL written_off พร้อมเริ่มต้นหรือยัง?
ใช้เทมเพลตนี้ช่วยเตรียมข้อมูลให้พร้อม และค้นหาข้อมูลเชิงลึกที่เป็นประโยชน์เกี่ยวกับกระบวนการวางบิลและออกใบแจ้งหนี้ เริ่มปรับปรุงกระแสเงินสดให้เร็วขึ้นได้ตั้งแต่วันนี้.
เร่งกระแสเงินสดด้วยการปรับปรุงการวางบิลและออกใบแจ้งหนี้ตั้งแต่วันนี้!
ลดขั้นตอนที่ไม่มีประสิทธิภาพ ลดระยะเวลาดำเนินการลง 30% และเพิ่มสภาพคล่องให้ธุรกิจ.
ไม่ต้องใช้บัตรเครดิต เริ่มปรับปรุงกระบวนการได้ในไม่กี่นาที.