Templat data Order to Cash untuk penagihan dan faktur
Templat data Order to Cash untuk penagihan dan faktur
- Atribut yang disarankan untuk analisis menyeluruh
- Langkah dan tonggak utama proses yang perlu dilacak
- Panduan praktis mengekstrak data dari SAP ECC
Atribut Order to Cash untuk penagihan dan faktur
| Nama | Deskripsi | ||
|---|---|---|---|
| Aktivitas ActivityName | Nama peristiwa bisnis atau langkah yang terjadi dalam siklus faktur. | ||
| Deskripsi Atribut ini menjelaskan tindakan atau perubahan status tertentu dalam proses penagihan, seperti 'Faktur dibuat', 'Faktur diposting', atau 'Pembayaran pelanggan diterima'. Aktivitas ini diturunkan dari berbagai peristiwa sistem, perubahan status dokumen, atau kode transaksi tertentu yang dijalankan pengguna. Urutan aktivitas membentuk alur proses dan menjadi dasar analisis process mining. Dengan memeriksa aktivitas, organisasi dapat memahami langkah yang dilakukan, urutannya, dan frekuensinya. Hasilnya menunjukkan pelaksanaan proses yang sebenarnya dibandingkan dengan proses yang dirancang. Mengapa ini penting Atribut ini menentukan langkah dalam peta proses agar alur proses, penyimpangan, dan hambatan dapat divisualisasikan dan dianalisis. Sumber data Atribut konseptual ini diturunkan dari beberapa sumber, seperti kode transaksi (CDHDR-TCODE), perubahan status dokumen (VBUK-FKSTK), dan posting dokumen akuntansi. Contoh Faktur dibuatFaktur dibukukanPengingat pembayaran dikirimFaktur dilunasi | |||
| Nomor faktur InvoiceNumber | Pengenal unik untuk dokumen penagihan yang berfungsi sebagai ID kasus utama dalam proses pembuatan faktur. | ||
| Deskripsi Nomor faktur, yang disebut Nomor Dokumen Penagihan di SAP, menjadi pengenal unik untuk setiap faktur. Dalam process mining, nomor ini berfungsi sebagai CaseId yang mengelompokkan semua aktivitas terkait, seperti pembuatan, posting, pengiriman, pembayaran, dan clearing, ke dalam satu rangkaian proses. Analisis berdasarkan Nomor faktur memberi gambaran lengkap tentang siklus setiap transaksi penagihan, dari awal hingga pelunasan. Informasi ini penting untuk menghitung indikator kinerja utama seperti Days Sales Outstanding (DSO) dan waktu siklus faktur secara keseluruhan, sehingga kinerja dapat diukur dan ditingkatkan dengan jelas. Mengapa ini penting Nomor ini menjadi kunci untuk melacak seluruh perjalanan faktur dan menganalisis waktu siklus, hambatan, serta variasi pada setiap transaksi penagihan. Sumber data Tabel SAP ECC: VBRK, Field: VBELN Contoh 90001234900012359000123690001237 | |||
| Waktu mulai EventTime | Stempel waktu yang menunjukkan kapan aktivitas atau peristiwa tertentu terjadi. | ||
| Deskripsi Waktu peristiwa mencatat tanggal dan waktu tepat setiap aktivitas dalam siklus faktur. Stempel waktu ini menjadi dasar analisis berbasis waktu dalam process mining, termasuk menghitung waktu siklus, menemukan hambatan, dan memantau kinerja proses terhadap perjanjian tingkat layanan. Atribut ini biasanya dibuat dengan menggabungkan field tanggal, seperti Tanggal Posting (BUDAT), dan field waktu (UZEIT) dari berbagai tabel SAP yang mencatat perubahan atau pembuatan dokumen. Stempel waktu yang akurat penting untuk menyusun log peristiwa yang andal dan memastikan analisis kinerja valid. Mengapa ini penting Atribut ini menjadi dasar analisis kinerja, termasuk menghitung waktu siklus, durasi, dan waktu tunggu antar langkah proses. Sumber data Dibuat dari berbagai field tanggal dan waktu di beberapa tabel, seperti BKPF (BUDAT, CPUTM), VBRK (ERDAT, ERZET), dan tabel log perubahan seperti CDHDR (UDATE, UTIME). Contoh 2023-04-15T10:30:00Z2023-04-16T11:00:00Z2023-05-20T09:00:00Z | |||
| Jenis dokumen penagihan BillingDocumentType | Kode yang mengelompokkan jenis dokumen penagihan, seperti faktur, memo kredit, atau memo debit. | ||
| Deskripsi Jenis dokumen penagihan mengelompokkan transaksi berdasarkan tujuan bisnisnya. Contohnya, 'F2' adalah faktur pelanggan standar, sedangkan 'G2' adalah memo kredit. SAP menggunakan konfigurasi ini untuk mengatur pemrosesan berbagai dokumen penagihan. Dalam process mining, atribut ini penting untuk memfilter dan membandingkan berbagai skenario penagihan. Analis dapat memeriksa proses faktur standar secara terpisah dari memo kredit untuk memahami alur, waktu siklus, dan tantangannya. Hasilnya membantu menentukan perbaikan proses yang lebih tepat sasaran. Mengapa ini penting Memungkinkan pemisahan dan analisis berbagai proses penagihan, seperti faktur standar dan memo kredit yang sering memiliki alur proses sangat berbeda. Sumber data Tabel SAP ECC: VBRK, Field: FKART Contoh F2G2L2IV | |||
| Kode perusahaan CompanyCode | Pengenal badan hukum yang menerbitkan faktur. | ||
| Deskripsi Kode perusahaan mewakili unit hukum dan akuntansi yang berdiri sendiri di SAP. Semua transaksi keuangan, termasuk faktur, diposting ke kode perusahaan tertentu. Ini merupakan elemen data organisasi yang mendasar. Dalam process mining, kode perusahaan digunakan untuk menganalisis dan membandingkan kinerja proses penagihan antar badan hukum dalam perusahaan. Analisis ini membantu menemukan praktik baik yang dapat diterapkan di unit lain dan memastikan struktur organisasi perusahaan tetap diperhitungkan. Mengapa ini penting Memungkinkan proses difilter dan dibandingkan antar badan hukum, yang penting untuk analisis keuangan dan perbandingan kinerja organisasi. Sumber data Tabel SAP ECC: VBRK, Field: BUKRS Contoh 10002000US01DE01 | |||
| Nama pengguna UserName | ID pengguna yang menjalankan aktivitas atau membuat dokumen. | ||
| Deskripsi Atribut ini mencatat ID pengguna SAP yang bertanggung jawab atas suatu peristiwa, seperti membuat faktur atau memposting pembayaran. Data ini penting untuk menganalisis peran manusia dalam proses. Data ini dapat digunakan untuk menyelidiki perbedaan kinerja antar pengguna atau tim, menemukan kebutuhan pelatihan, dan mendeteksi potensi masalah kepatuhan. Atribut ini juga membedakan aktivitas manual yang dilakukan pengguna dari langkah otomatis yang dijalankan pengguna sistem atau batch. Pembedaan ini penting untuk menghitung tingkat otomatisasi. Mengapa ini penting Mendukung analisis kinerja pengguna dan pembagian beban kerja, serta membedakan aktivitas manual dan otomatis untuk membantu meningkatkan otomatisasi dan efisiensi. Sumber data Tabel SAP ECC: VBRK, Field: ERNAM (Dibuat oleh), atau BKPF, Field: USNAM (Nama pengguna), atau CDHDR, Field: USERNAME (Pengguna). Contoh JSMITHBW_BATCHLROSSIMKUMAR | |||
| Nomor pelanggan CustomerNumber | Nomor unik yang mengidentifikasi pelanggan penerima faktur. | ||
| Deskripsi Nomor pelanggan menghubungkan faktur dengan klien atau mitra bisnis tertentu. Atribut ini penting untuk memisahkan dan menganalisis proses penagihan berdasarkan karakteristik pelanggan. Analis dapat menggunakan field ini untuk membandingkan Days Sales Outstanding (DSO) antar pelanggan, menemukan pelanggan yang sering terlambat membayar, atau menganalisis kepatuhan terhadap ketentuan pembayaran. Memahami pola ini membantu mengelola hubungan pelanggan dan menyusun strategi penagihan yang sesuai untuk setiap segmen. Mengapa ini penting Mendukung analisis berdasarkan pelanggan, termasuk mengenali pola pembayaran, menilai DSO per pelanggan, dan menyesuaikan strategi penagihan. Sumber data Tabel SAP ECC: VBRK, Field: KUNRG (Pembayar) atau KUNAG (Pihak yang membeli). Contoh 100023200541CUST-A487910345 | |||
| Total nilai faktur TotalInvoiceAmount | Nilai bersih total dokumen penagihan. | ||
| Deskripsi Atribut ini menunjukkan jumlah bersih total faktur, tidak termasuk pajak. Nilai faktur merupakan data keuangan penting dalam proses penagihan. Nilai ini dapat digunakan untuk berbagai analisis, misalnya mengelompokkan faktur bernilai tinggi dan rendah untuk melihat apakah alur prosesnya berbeda. Nilai ini juga dapat membantu menentukan prioritas penagihan atau menyelidiki alasan faktur bernilai tinggi lebih lama disetujui atau dibayar. Konteks keuangan ini memperkaya analisis proses. Mengapa ini penting Memberi konteks keuangan penting untuk analisis berdasarkan nilai faktur, misalnya mengetahui apakah faktur bernilai tinggi mengikuti proses berbeda atau lebih lama diselesaikan. Sumber data Tabel SAP ECC: VBRK, Field: NETWR Contoh 1500.7525000.00500.0012345.67 | |||
| Diotomatisasi IsAutomated | Penanda yang menunjukkan apakah aktivitas dijalankan oleh pengguna sistem atau melalui otomatisasi. | ||
| Deskripsi Atribut terhitung ini berupa penanda boolean yang membedakan aktivitas manual dan otomatis. Nilainya biasanya ditentukan dengan mencocokkan atribut Nama pengguna dengan daftar ID pengguna sistem atau batch yang dikenal, seperti 'BATCHUSER' atau 'SAPSYSTEM'. Penanda ini penting untuk mengukur tingkat otomatisasi dalam proses penagihan, salah satu sasaran utama organisasi yang ingin meningkatkan efisiensi dan mengurangi biaya. KPI Tingkat Penagihan Otomatis dihitung langsung dari atribut ini untuk memantau kemajuan inisiatif otomatisasi. Mengapa ini penting Mendukung penghitungan tingkat penagihan otomatis secara langsung, membantu mengukur efisiensi proses dan memantau dampak proyek otomatisasi. Sumber data Ditentukan dari atribut Nama pengguna. Logikanya dapat berupa: IF UserName IN ('BATCH', 'SYSTEM', 'RFCUSER') THEN true ELSE false. Contoh truefalse | |||
| Ketentuan pembayaran PaymentTerms | Ketentuan yang mengatur penyelesaian penjualan oleh penjual, termasuk jadwal pembayaran. | ||
| Deskripsi Ketentuan pembayaran menetapkan kapan pembayaran harus dilakukan, misalnya 'Net 30' atau 'Net 60'. Ketentuan ini disepakati dengan pelanggan dan berpengaruh besar terhadap arus kas. Analisis proses berdasarkan ketentuan pembayaran dapat menunjukkan apakah ketentuan tertentu berkaitan dengan siklus pembayaran yang lebih lama atau tingkat keterlambatan yang lebih tinggi. Temuan ini dapat membantu perusahaan menegosiasikan ketentuan yang lebih baik dengan pelanggan atau menyesuaikan perencanaan keuangan. Ketentuan pembayaran juga menjadi masukan utama untuk menghitung tanggal jatuh tempo faktur. Mengapa ini penting Membantu menganalisis perilaku pembayaran pelanggan dan dampaknya terhadap arus kas berdasarkan ketentuan yang disepakati, sehingga perusahaan dapat menyempurnakan perjanjian komersial. Sumber data Tabel SAP ECC: VBRK, Field: ZTERM Contoh Z030Z060Z001 | |||
| Kode transaksi TransactionCode | Kode transaksi SAP yang digunakan untuk menjalankan aktivitas. | ||
| Deskripsi Kode transaksi, atau T-Code, adalah pengenal unik untuk fungsi atau program tertentu di SAP, seperti 'VF01' untuk membuat dokumen penagihan. Mencatat T-Code untuk setiap peristiwa memberi gambaran teknis di tingkat sistem tentang cara proses dijalankan. Informasi ini berguna untuk analisis akar masalah. Misalnya, jika kesalahan sering terjadi, analis dapat memeriksa apakah pengguna memakai kode transaksi yang tidak standar. Informasi ini juga membantu menentukan nama aktivitas dan memahami fungsi sistem yang digunakan dalam proses. Mengapa ini penting Memberi konteks teknis tentang cara aktivitas dijalankan, mendukung analisis akar masalah atas penyimpangan proses, dan membantu menemukan tindakan pengguna yang tidak standar. Sumber data Tabel SAP ECC: CDHDR, Field: TCODE Contoh VF01VF02FB01F-28 | |||
| Mata uang Currency | Kode mata uang untuk jumlah yang tercantum pada faktur. | ||
| Deskripsi Atribut ini menunjukkan mata uang transaksi, seperti USD, EUR, atau JPY. Informasi ini memberi konteks yang diperlukan untuk nilai uang, seperti Total nilai faktur. Saat menganalisis data dari perusahaan multinasional, field mata uang penting untuk menafsirkan dan mengonversi angka keuangan dengan benar. Field ini mendukung pelaporan yang konsisten dan mencegah penjumlahan nilai tanpa konversi mata uang yang tepat, yang dapat menghasilkan analisis keuangan keliru. Mengapa ini penting Memberi konteks yang diperlukan untuk semua nilai uang agar analisis keuangan akurat, terutama di lingkungan dengan banyak mata uang. Sumber data Tabel SAP ECC: VBRK, Field: WAERK Contoh USDEURGBPJPY | |||
| Nomor dokumen penjualan SalesDocumentNumber | Pengenal pesanan penjualan asli yang menjadi dasar pembuatan faktur. | ||
| Deskripsi Atribut ini menghubungkan faktur secara langsung dengan pesanan penjualan yang memulai transaksi. Keterlacakan ini penting untuk analisis Order to Cash dari awal hingga akhir. Dengan menghubungkan proses penagihan ke proses pesanan penjualan sebelumnya, organisasi dapat menganalisis total waktu siklus dari pesanan pelanggan hingga penerimaan kas. Analisis ini membantu mengetahui apakah keterlambatan penagihan disebabkan oleh masalah di bagian penjualan, pemenuhan pesanan, atau bagian penagihan, sehingga memberi gambaran proses yang lebih menyeluruh. Mengapa ini penting Menghubungkan proses penagihan dengan pesanan penjualan, mendukung analisis Order to Cash dari awal hingga akhir, dan membantu menemukan keterlambatan antarbagian. Sumber data Tabel SAP ECC: VBRP, Field: VGBEL Contoh 100000451000004610000047 | |||
| Organisasi penjualan SalesOrganization | Unit organisasi yang bertanggung jawab menjual produk atau layanan. | ||
| Deskripsi Organisasi penjualan adalah unit organisasi di SAP yang bertanggung jawab mendistribusikan barang dan layanan serta menegosiasikan ketentuan penjualan. Unit ini menjadi bagian penting dalam struktur penjualan dan distribusi. Dalam process mining, atribut ini memungkinkan analisis proses penagihan berdasarkan struktur penjualan. Kinerja antar organisasi penjualan dapat dibandingkan untuk mengetahui wilayah atau lini bisnis yang lebih efisien dalam proses penagihan, sekaligus mendukung penerapan praktik baik secara konsisten. Mengapa ini penting Mendukung perbandingan dan analisis kinerja antar divisi penjualan atau wilayah, serta membantu menemukan praktik baik dan area yang perlu diperbaiki. Sumber data Tabel SAP ECC: VBRK, Field: VKORG Contoh 1000NA01EU01AP01 | |||
| Pembaruan data terakhir LastDataUpdate | Stempel waktu pembaruan atau ekstraksi data terbaru dari sistem sumber. | ||
| Deskripsi Atribut ini menunjukkan waktu terakhir kumpulan data diperbarui dari sistem sumber. Informasi ini memberi konteks penting untuk analisis agar pengguna mengetahui seberapa baru data yang mereka lihat. Dalam dasbor dan laporan, stempel waktu ini memberi tahu pemangku kepentingan tentang kebaruan data dan membantu mengatur ekspektasi terkait transaksi terbaru yang terlihat. Nilainya biasanya dibuat setelah proses ekstraksi data selesai. Mengapa ini penting Memberi tahu pengguna seberapa baru data, hal yang penting saat mengambil keputusan operasional berdasarkan analisis. Sumber data Dibuat dan disimpan selama proses ekstraksi, transformasi, dan pemuatan data (ETL). Contoh 2023-10-27T02:00:00Z2023-10-28T02:00:00Z | |||
| Pengerjaan ulang IsRework | Penanda yang menunjukkan apakah aktivitas merupakan langkah pengerjaan ulang atau koreksi. | ||
| Deskripsi Atribut terhitung ini mengidentifikasi aktivitas yang menunjukkan pengerjaan ulang, seperti 'Faktur dikoreksi' atau pembalikan dokumen. Nilainya biasanya berupa penanda boolean yang ditentukan dari nama aktivitas atau kode transaksi untuk koreksi dan pembatalan, seperti 'VF11' untuk membatalkan dokumen penagihan. Dalam process mining, penanda ini sangat berguna untuk mengukur pengerjaan ulang dalam proses penagihan. Penanda ini mendukung KPI seperti Tingkat Koreksi Faktur dan membantu memvisualisasikan alur pengerjaan ulang pada peta proses. Dengan begitu, ketidakefisienan dan masalah kualitas yang meningkatkan biaya operasional serta menunda pembayaran dapat terlihat. Mengapa ini penting Membantu mengukur ketidakefisienan proses dan masalah kualitas dengan menunjukkan upaya yang digunakan untuk memperbaiki kesalahan, sekaligus mendukung KPI pengerjaan ulang. Sumber data Ditentukan dari Nama aktivitas atau Kode transaksi. Contoh: IF ActivityName = 'Invoice Corrected' OR TransactionCode = 'VF11' THEN true ELSE false. Contoh truefalse | |||
| Sistem sumber SourceSystem | Menunjukkan sistem sumber tempat data diekstrak. | ||
| Deskripsi Atribut ini menunjukkan sistem pencatatan asal data. Di perusahaan yang menggunakan beberapa instans ERP atau sistem terintegrasi, field ini membantu membedakan data dari setiap sumber. Dalam process mining, atribut ini penting untuk memvalidasi data dan membandingkan proses di berbagai sistem atau unit organisasi. Nilainya biasanya diisi secara tetap saat ekstraksi data untuk menandai kumpulan data. Mengapa ini penting Memberi konteks tentang asal data. Informasi ini penting untuk menjaga integritas data dan mendukung analisis khusus sistem di lingkungan dengan banyak sistem. Sumber data Biasanya berupa nilai tetap yang ditambahkan selama proses ekstraksi, transformasi, dan pemuatan data (ETL) untuk menunjukkan instans SAP ECC tertentu, misalnya 'ECC_PROD_NA'. Contoh SAP_ECC_PRODECC_EU_100SAP_US_FIN | |||
| Tanggal clearing ClearingDate | Tanggal pembayaran diterima dan faktur diselesaikan dari piutang usaha. | ||
| Deskripsi Tanggal clearing adalah tanggal saat item terbuka, seperti faktur, ditandai sebagai dibayar atau 'diselesaikan' di sistem keuangan. Tanggal ini menunjukkan kapan kas dianggap telah diterima dan direkonsiliasi. Tanggal ini merupakan salah satu tanggal terpenting dalam siklus Order to Cash. Tanggal ini menjadi titik akhir untuk menghitung Days Sales Outstanding (DSO) dan waktu siklus faktur hingga kas secara keseluruhan. Analisis tanggal clearing membantu mengukur efektivitas proses penagihan. Mengapa ini penting Menandai tahap akhir siklus faktur dan menjadi tanggal akhir untuk menghitung DSO serta waktu siklus keseluruhan. Tanggal ini juga mencerminkan efisiensi penerimaan kas. Sumber data Tabel SAP ECC: BSAD, Field: AUGDT Contoh 2023-05-142023-06-012023-06-25 | |||
| Tanggal dokumen DocumentDate | Tanggal pada dokumen asli yang diberikan oleh vendor atau pembuatnya. | ||
| Deskripsi Tanggal dokumen adalah tanggal penerbitan dokumen asli. Dalam penagihan, tanggal ini biasanya merupakan tanggal pembuatan faktur dan sering digunakan sebagai dasar untuk menghitung tanggal jatuh tempo pembayaran. Tanggal ini penting untuk pelaporan keuangan dan penghitungan metrik utama seperti Days Sales Outstanding (DSO). Dari sisi pelanggan, tanggal ini menandai awal periode penagihan. Analisis selisih antara tanggal dokumen dan tanggal posting dapat menunjukkan keterlambatan internal dalam memproses faktur masuk. Mengapa ini penting Menjadi dasar untuk menghitung umur faktur dan DSO, serta acuan penting dalam analisis keuangan dan ketentuan pembayaran. Sumber data Tabel SAP ECC: VBRK, Field: FKDAT (Tanggal penagihan) Contoh 2023-04-152023-04-162023-05-20 | |||
| Tanggal jatuh tempo faktur InvoiceDueDate | Tanggal batas pembayaran yang diharapkan dari pelanggan. | ||
| Deskripsi Tanggal jatuh tempo faktur adalah batas waktu pembayaran sesuai ketentuan pembayaran. Tanggal ini penting untuk mengelola piutang usaha dan memulai kegiatan penagihan. Atribut ini digunakan untuk menghitung KPI Tingkat Pembayaran Tepat Waktu dengan membandingkannya dengan tanggal pembayaran aktual. Analisis faktur berdasarkan tanggal jatuh tempo membantu memperkirakan arus kas dan menentukan prioritas penagihan untuk pembayaran yang akan jatuh tempo atau sudah terlambat. Tanggal ini biasanya dihitung dari tanggal dasar dan ketentuan pembayaran. Mengapa ini penting Menjadi acuan untuk mengukur ketepatan waktu pembayaran dan penting untuk mengelola piutang usaha serta memperkirakan arus kas. Sumber data Dihitung berdasarkan tanggal dasar (BSEG-ZFBDT) dan ketentuan pembayaran (BSEG-ZTERM). Nilainya tidak selalu tersimpan di field khusus. Contoh 2023-05-152023-05-302023-06-20 | |||
| Tanggal posting PostingDate | Tanggal dokumen diposting ke pembukuan akuntansi keuangan. | ||
| Deskripsi Tanggal posting menentukan periode fiskal saat transaksi dicatat di General Ledger. Tanggal ini penting untuk akuntansi dan pelaporan keuangan. Jeda antara tanggal pembuatan dokumen dan tanggal posting dapat menunjukkan ketidakefisienan dalam penanganan internal dokumen penagihan. Dalam process mining, tanggal posting menandai tonggak penting dalam siklus faktur. Jeda antara pembuatan dan posting faktur dapat menjadi indikator kinerja utama untuk mengukur efisiensi bagian penagihan. Mengapa ini penting Menandai tonggak keuangan yang penting untuk akuntansi. Jeda antara pembuatan dan posting faktur menjadi ukuran utama efisiensi pemrosesan internal. Sumber data Tabel SAP ECC: BKPF, Field: BUDAT Contoh 2023-04-152023-04-172023-05-21 | |||
Aktivitas Order to Cash untuk penagihan dan faktur
| Aktivitas | Deskripsi | ||
|---|---|---|---|
| Faktur dibuat | Menandai pembuatan dokumen penagihan di sistem. Peristiwa ini tercatat saat entri baru dibuat di tabel header dokumen akuntansi (BKPF) dengan jenis dokumen khusus untuk faktur. | ||
| Mengapa ini penting Ini adalah titik awal seluruh proses pembuatan faktur. Analisis waktu sejak peristiwa ini membantu mengukur Waktu Siklus Pembuatan Faktur dan menjadi dasar penghitungan Days Sales Outstanding (DSO). Sumber data Tercatat di tabel BKPF. Tanggal (CPUDT) dan waktu (CPUTM) pembuatan untuk nomor dokumen tertentu (BELNR) menandai peristiwa ini. Jenis dokumen (BLART) menunjukkan bahwa dokumen tersebut adalah faktur. Pengumpulan data Berdasarkan stempel waktu pembuatan (CPUDT) di tabel BKPF untuk dokumen faktur. Jenis peristiwa explicit | |||
| Faktur dibukukan | Faktur secara resmi dicatat dalam subbuku besar Piutang Usaha dan Buku Besar. Peristiwa ini membuat faktur mengikat secara hukum dan mencatat utang pelanggan. | ||
| Mengapa ini penting Ini adalah tonggak penting yang secara resmi memulai penghitungan waktu penagihan. Jeda antara pembuatan dan pembukuan dapat menunjukkan keterlambatan pemrosesan internal yang berdampak pada arus kas. Sumber data Tercatat di tabel BKPF. Tanggal pembukuan (BUDAT) untuk nomor dokumen (BELNR) menandai peristiwa ini. Untuk dokumen sementara, peristiwa ini terjadi saat dokumen diubah menjadi dokumen yang dibukukan. Pengumpulan data Berdasarkan tanggal pembukuan (BUDAT) di tabel BKPF untuk dokumen faktur. Jenis peristiwa explicit | |||
| Faktur dikirim kepada pelanggan | Menandakan bahwa faktur telah dikirim kepada pelanggan melalui saluran keluaran tertentu, seperti cetak, email, atau EDI. Peristiwa ini biasanya diambil dari log sistem pengelolaan keluaran. | ||
| Mengapa ini penting Peristiwa ini menjadi tonggak penting yang memulai penghitungan jangka waktu pembayaran pelanggan. Keterlambatan pada tahap ini langsung memengaruhi perkiraan waktu pembayaran dan efisiensi penagihan pembayaran. Sumber data Dapat disimpulkan dari tanggal dan waktu pemrosesan di tabel status pesan (NAST) untuk jenis keluaran yang terkait dengan faktur. Pengumpulan data Disimpulkan dari entri tabel NAST dengan status pemrosesan '1' (berhasil diproses). Jenis peristiwa inferred | |||
| Faktur dilunasi | Status akhir faktur yang berhasil dibayar. Status ini menunjukkan bahwa item terbuka telah ditutup dengan pembayaran atau nota kredit yang sesuai. Faktur dianggap lunas sepenuhnya. | ||
| Mengapa ini penting Menandai selesainya siklus Order to Cash untuk sebuah faktur. Ini adalah peristiwa akhir utama untuk mengukur Rata-rata Waktu Siklus Faktur secara keseluruhan. Sumber data Terjadi saat kolom dokumen pelunasan (AUGBL) dan tanggal pelunasan (AUGDT) terisi untuk item baris faktur di tabel BSEG. Pengumpulan data Peristiwa terjadi pada tanggal pelunasan (AUGDT) yang tercatat di tabel BSEG untuk item baris faktur. Jenis peristiwa explicit | |||
| Pembayaran pelanggan diterima | Pembayaran dari pelanggan telah diterima dan dicatat di sistem sebagai penerimaan kas atau setoran bank. Pembayaran ini membuat dokumen pembayaran terpisah yang belum diterapkan ke faktur tertentu. | ||
| Mengapa ini penting Ini adalah tonggak penting dalam siklus konversi kas. Waktu dari pengiriman faktur hingga pembayaran diterima menjadi komponen utama Days Sales Outstanding (DSO). Sumber data Dicatat sebagai dokumen baru di BKPF dan BSEG, biasanya dengan jenis dokumen yang menandakan pembayaran pelanggan, seperti 'DZ'. Tanggal pembukuan (BUDAT) menandai peristiwa ini. Pengumpulan data Berdasarkan tanggal pembukuan dokumen pembayaran pelanggan di BKPF. Jenis peristiwa explicit | |||
| Faktur dihapuskan | Status akhir alternatif saat faktur dinyatakan tidak dapat ditagih dan jumlah yang belum dibayar dihapuskan ke akun piutang tak tertagih. Faktur ditutup tanpa pembayaran dari pelanggan. | ||
| Mengapa ini penting Menandai hasil proses yang merugikan dan hilangnya pendapatan. Pelacakan peristiwa ini membantu menganalisis penyebab piutang tak tertagih dan memperbaiki kebijakan pengelolaan kredit. Sumber data Disimpulkan dari analisis transaksi clearing untuk faktur. Jika dokumen clearing diposting ke akun G/L beban piutang tak tertagih tertentu, faktur dianggap telah dihapuskan. Pengumpulan data Disimpulkan saat transaksi clearing mencakup posting ke akun G/L piutang tak tertagih yang telah ditentukan. Jenis peristiwa inferred | |||
| Faktur dikoreksi | Menandai pengerjaan ulang setelah faktur awal diketahui salah dan kemudian dibalik. Peristiwa ini dicatat dengan menemukan dokumen pembalik yang terhubung ke faktur asli. | ||
| Mengapa ini penting Menunjukkan inefisiensi proses dan masalah kualitas. Koreksi yang sering terjadi menandakan masalah pada data penjualan atau penagihan di tahap sebelumnya, dan mendukung dashboard Pengerjaan Ulang dan Tingkat Kesalahan Faktur. Sumber data Ditemukan dengan mencari dokumen pembalik yang kolom BKPF-STBLG-nya merujuk ke dokumen asli. Pembuatan dokumen pembalik ini menjadi peristiwanya. Pengumpulan data Dicatat saat dokumen pembalik dibuat, misalnya melalui FB08. Jenis peristiwa explicit | |||
| Faktur disetujui | Menandai persetujuan resmi atas faktur, sehingga faktur dapat dibukukan atau dikirim kepada pelanggan. Persetujuan ini biasanya disimpulkan saat dokumen sementara diubah menjadi dokumen yang dibukukan. | ||
| Mengapa ini penting Melacak alur kerja persetujuan internal, yang sering menjadi sumber hambatan. Analisis aktivitas ini mendukung dashboard Analisis Alur Persetujuan Faktur dengan menunjukkan pihak yang lambat menyetujui. Sumber data Dapat disimpulkan dari perubahan status dokumen, dari sementara (di VBKPF) menjadi dibukukan (di BKPF). Jika menggunakan sistem workflow, peristiwa ini mungkin tercatat secara langsung di log workflow. Pengumpulan data Bandingkan tanggal pembuatan dokumen sementara (VBKPF) dengan tanggal pembukuan dokumen akhir (BKPF). Jenis peristiwa inferred | |||
| Faktur disimpan sementara | Dokumen faktur telah disimpan dalam status sementara, tetapi belum dibukukan ke buku besar. Status ini biasanya digunakan jika informasi belum lengkap atau perlu ditinjau sebelum pembukuan akhir. | ||
| Mengapa ini penting Melacak langkah sebelum pembukuan dan kemungkinan keterlambatan. Status sementara yang berlangsung lama dapat menandakan masalah kualitas data atau hambatan dalam proses persetujuan awal. Sumber data Dokumen sementara disimpan di tabel VBKPF. Aktivitas ini ditandai dengan pembuatan dokumen di tabel tersebut yang kemudian dibukukan. Pengumpulan data Dicatat saat dokumen sementara disimpan menggunakan transaksi seperti FV70. Jenis peristiwa explicit | |||
| Kasus sengketa dibuat | Sengketa resmi telah dicatat untuk faktur, biasanya karena keluhan pelanggan. Sengketa ini dicatat di sistem SAP Dispute Management. | ||
| Mengapa ini penting Menemukan faktur yang berisiko mengalami keterlambatan pembayaran dan menunjukkan masalah mendasar yang menyebabkan ketidakpuasan pelanggan. Peristiwa ini menandai dimulainya proses penting untuk menangani pengecualian. Sumber data Diambil dari pembuatan kasus di tabel kasus sengketa (UDM_CASE) yang terhubung ke dokumen akuntansi faktur. Pengumpulan data Dicatat saat pengguna membuat kasus sengketa melalui transaksi UDM_DISPUTE. Jenis peristiwa explicit | |||
| Pembayaran diterapkan ke faktur | Pembayaran pelanggan yang diterima telah dicocokkan dan diterapkan ke faktur terbuka tertentu, sehingga item tersebut dapat dilunasi. Langkah rekonsiliasi ini menghubungkan pembayaran dengan utang. | ||
| Mengapa ini penting Aktivitas ini penting untuk mengukur Waktu Siklus Penerapan Pembayaran. Keterlambatan penerapan kas dapat membuat status piutang tidak akurat dan menyamarkan kas yang tersedia. Sumber data Disimpulkan dari transaksi pelunasan, misalnya F-32, yang mengisi kolom pelunasan pada item baris faktur. Stempel waktu peristiwa ini adalah tanggal pelunasan. Pengumpulan data Disimpulkan dari terisinya tanggal pelunasan (AUGDT) pada tabel item baris faktur (BSEG). Jenis peristiwa inferred | |||
| Pengingat pembayaran dikirim | Sistem telah membuat dan mengirim pemberitahuan penagihan atau pengingat pembayaran kepada pelanggan untuk faktur yang telah jatuh tempo. Peristiwa ini diambil dari log riwayat penagihan. | ||
| Mengapa ini penting Membantu menilai efektivitas strategi penagihan. Analisis waktu dari pengiriman pengingat hingga pembayaran diterima penting untuk KPI Efektivitas Pengingat Pembayaran. Sumber data Tercatat di tabel data penagihan, khususnya MHNK (header data penagihan) dan MHND (item baris data penagihan), yang dibuat saat proses penagihan dijalankan (Transaksi F150). Pengumpulan data Dicatat saat proses penagihan (F150) dijalankan untuk item yang telah jatuh tempo. Jenis peristiwa explicit | |||
| Tanggal jatuh tempo faktur tercapai | Peristiwa hasil perhitungan yang menandai tanggal pembayaran faktur jatuh tempo sesuai ketentuan pembayaran. Peristiwa ini bukan aktivitas yang dilakukan pengguna atau sistem, melainkan titik waktu yang penting. | ||
| Mengapa ini penting Penting untuk menganalisis perilaku pembayaran dan kepatuhan. Peristiwa ini menjadi acuan untuk menentukan pembayaran tepat waktu atau terlambat, serta menghitung KPI Tingkat Pembayaran Tepat Waktu. Sumber data Dihitung dengan membandingkan tanggal saat ini dengan tanggal jatuh tempo bersih. Tanggal jatuh tempo terdapat di kolom BSEG-ZFBDT atau dihitung dari tanggal dasar dan ketentuan pembayaran. Pengumpulan data Bandingkan tanggal sistem dengan kolom tanggal jatuh tempo bersih pada item baris faktur (BSEG). Jenis peristiwa calculated | |||
Panduan ekstraksi
Langkah
- Buka ABAP Editor: Masuk ke sistem SAP ECC Anda. Buka ABAP Editor menggunakan kode transaksi
SE38. - Buat program: Masukkan nama program baru di kolom Program, misalnya
Z_PM_O2C_INVOICE_EXTRACT, lalu klik tombol Create. Beri judul yang menjelaskan fungsi program dan atur Type menjadi 'Executable Program'. - Tentukan layar seleksi: Di kode sumber program, tentukan parameter layar seleksi agar pengguna dapat memfilter data yang akan diekstrak. Parameter utama mencakup rentang tanggal pembuatan dokumen (
S_ERDAT), Company Code (S_BUKRS), dan Billing Document Type (S_VBTYP). - Tentukan struktur data: Deklarasikan struktur tabel internal untuk menampung data log peristiwa akhir. Struktur ini harus mencakup kolom
InvoiceNumber,ActivityName,EventTime, serta atribut yang disarankan sepertiUserName,BillingDocumentType,CustomerNumber,CompanyCode, danTotalInvoiceAmount. - Terapkan logika pemilihan data: Tulis logika inti ABAP untuk memilih data. Pertama, pilih dokumen penagihan utama dari tabel
VBRKdanBKPFberdasarkan masukan pada layar seleksi pengguna. Simpan data ini dalam tabel internal sementara. - Ekstrak aktivitas: Telusuri daftar awal dokumen penagihan. Untuk setiap dokumen, pilih data dari tabel lain untuk mengidentifikasi 13 aktivitas yang diperlukan. Misalnya, cari peristiwa 'Faktur Dikirim ke Pelanggan' di tabel
NAST, informasi pelunasan ('Faktur Dilunasi', 'Pembayaran Diterapkan') diBSEG, dan data penagihan tunggakan ('Pengingat Pembayaran Dikirim') diMHNK. - Susun tabel log peristiwa: Untuk setiap aktivitas yang ditemukan pada langkah sebelumnya, tambahkan catatan ke tabel internal log peristiwa akhir. Pastikan
InvoiceNumber,ActivityName,EventTime, dan atribut lainnya dipetakan dengan benar dari tabel sumber. - Tulis ke server aplikasi: Setelah proses perulangan selesai dan tabel log peristiwa akhir terisi, gunakan pernyataan
OPEN DATASET,LOOP AT... TRANSFER, danCLOSE DATASETuntuk menulis isi tabel internal ke file datar di server aplikasi SAP. Tentukan jalur file logis yang dapat diakses. - Ambil file: Gunakan kode transaksi
AL11untuk membuka direktori server aplikasi dan menemukan file yang dibuat. Koordinasikan dengan tim SAP Basis untuk mengunduh file ke komputer Anda atau ke lokasi jaringan bersama. - Format akhir: Buka file yang diunduh dan pastikan formatnya comma-separated values (CSV) dengan baris header. Simpan file dengan encoding UTF-8 agar kompatibel dengan ProcessMind saat diunggah.
Konfigurasi
- Prasyarat: Akses untuk membuat dan menjalankan program ABAP (transaksi SE38). Otorisasi untuk membaca tabel FI dan SD, termasuk
VBRK,VBRP,BKPF,BSEG,NAST,MHNK, danUDM_CASE_ATTR00(untuk Dispute Management). - Pemilihan rentang tanggal: Program harus memiliki parameter rentang tanggal wajib, biasanya berdasarkan tanggal pembuatan dokumen (
ERDATdi VBRK/BKPF). Untuk ekstraksi awal, gunakan rentang 3-6 bulan agar ukuran data tetap terkendali. - Filter utama: Selalu filter berdasarkan
CompanyCode(BUKRS) untuk membatasi cakupan ekstraksi. Sebaiknya filter juga berdasarkan Billing Document Type (VBTYPdari VBRK) atau Accounting Document Type (BLARTdari BKPF) agar hanya jenis faktur yang relevan yang disertakan. Contohnya, gunakan 'RV' untuk faktur akuntansi standar dan kecualikan nota kredit atau dokumen lainnya. - Pertimbangan kinerja: Untuk kumpulan data besar yang mencakup lebih dari beberapa bulan, jalankan program sebagai pekerjaan latar belakang agar sesi tidak kehabisan waktu. Optimalkan logika ABAP dengan membaca tabel berindeks dan menghindari perulangan bersarang yang menjalankan pemilihan data dari basis data. Sebaiknya pilih data ke tabel internal terlebih dahulu, lalu proses data tersebut.
- Konfigurasi file keluaran: Kode ABAP harus menentukan jalur file keluaran di server aplikasi dan pemisah untuk file CSV, biasanya koma atau titik koma. Pastikan jalur tersebut mengarah ke direktori yang telah dikonfigurasi dan dapat diakses secara global.
Contoh kueri 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. Langkah
- Prasyarat dan akses: Pastikan Anda memiliki pengguna basis data dengan akses hanya-baca ke tabel SAP ECC yang diperlukan, termasuk VBRK, BKPF, BSAD, NAST, CDHDR, CDPOS, SCASE, dan tabel lain yang disebutkan dalam kueri. Akses seperti ini biasanya hanya diberikan kepada administrator sistem atau tim analitik data tertentu.
- Hubungkan ke basis data: Gunakan aplikasi klien SQL standar seperti DBeaver, Oracle SQL Developer, atau Microsoft SQL Server Management Studio untuk terhubung ke basis data SAP ECC.
- Siapkan kueri SQL: Salin seluruh kueri SQL dari bagian 'query' ke editor klien SQL Anda.
- Sesuaikan placeholder: Kueri ini berisi beberapa placeholder yang perlu diganti dengan nilai sesuai lingkungan Anda. Placeholder tersebut meliputi:
'YYYYMMDD': Ganti semua kemunculannya dengan tanggal awal dan akhir periode analisis yang diinginkan. Batasi rentang waktu agar jumlah data tetap terkendali.'XXXX': Ganti dengan Company Code yang ingin Anda analisis.[Your Invoice Output Type]: Masukkan kode jenis keluaran yang digunakan untuk mengirim faktur kepada pelanggan, misalnya 'RD00'.[Your Bad Debt G/L Account]: Masukkan nomor akun General Ledger yang digunakan untuk menghapus nilai faktur yang tidak tertagih.[Your Dispute Case Invoice Attribute]: Masukkan nama atribut yang menyimpan nomor faktur dalam konfigurasi Dispute Management Anda, misalnya 'INVOICE_ID'.
- Periksa fungsi timestamp: Kueri ini menggunakan sintaks umum
CAST(CONCAT(date_field, time_field) AS TIMESTAMP). Anda mungkin perlu menyesuaikannya dengan sistem basis data yang digunakan, misalnya memakaiTO_TIMESTAMPuntuk Oracle atauDATETIMEFROMPARTSuntuk SQL Server. - Jalankan kueri: Jalankan kueri yang telah disesuaikan. Waktu eksekusi dapat cukup lama, bergantung pada ukuran tabel SAP dan rentang tanggal yang dipilih.
- Periksa hasil: Setelah kueri selesai, pastikan hasilnya memuat kolom yang diharapkan: InvoiceNumber, ActivityName, EventTime, dan atribut yang disarankan. Periksa apakah ada kesalahan atau hasil kosong.
- Ekspor ke CSV: Ekspor seluruh hasil dari klien SQL ke file CSV. Gunakan encoding UTF-8 agar karakter khusus tidak bermasalah.
- Siapkan untuk diunggah: Sebelum mengunggah ke alat process mining, pastikan header kolom CSV sama persis dengan nama atribut yang diwajibkan, misalnya
InvoiceNumber,ActivityName,EventTime,UserName.
Konfigurasi
- Koneksi basis data: Anda memerlukan koneksi SQL langsung dengan akses hanya-baca ke basis data SAP ECC. Metode ini sepenuhnya melewati lapisan aplikasi SAP.
- Otorisasi: Pengguna basis data harus memiliki izin
SELECTuntuk semua tabel dalam kueri, yang mencakup modul FI, SD, dan mungkin FSCM. - Rentang tanggal: Batasi kueri ke rentang tanggal tertentu agar kinerja dan volume data tetap terkendali. Sebaiknya mulai dengan periode 3 hingga 6 bulan. Placeholder filter tanggal
'YYYYMMDD'harus diisi di beberapa bagian kueri. - Filter Company Code: Kueri ini dirancang untuk difilter berdasarkan Company Code (
BUKRS). Praktik umum adalah menganalisis satu atau beberapa kode perusahaan sekaligus. - Konfigurasi jenis dokumen: Logika untuk mengidentifikasi peristiwa seperti koreksi faktur, penghapusan piutang, atau pengiriman dokumen bergantung pada konfigurasi standar SAP. Anda mungkin perlu menyesuaikan kueri jika organisasi menggunakan jenis dokumen khusus (
BLART), jenis keluaran (KSCHL), atau akun G/L untuk proses tersebut. - Pertimbangan kinerja: Menjalankan kueri ini pada sistem SAP produksi yang aktif dapat menghabiskan banyak sumber daya dan mengganggu kinerja operasional. Sebaiknya jalankan ekstraksi besar di luar jam sibuk atau gunakan replika basis data khusus untuk pelaporan.
Contoh kueri 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 Langkah
- Prasyarat: Pastikan Anda memiliki lisensi alat ETL dengan konektor SAP bersertifikasi, misalnya Informatica PowerCenter dengan SAP Connector atau Talend dengan SAP Connector. Pastikan kredensial pengguna SAP Anda memiliki otorisasi yang diperlukan untuk membaca tabel keuangan, penjualan, dan sistem, seperti BKPF, BSEG, VBRK, NAST, MHNK, UDM_CASE_ATTR00, CDHDR, dan CDPOS.
- Buat koneksi SAP: Di alat ETL, buat koneksi baru ke sistem SAP ECC Anda. Atur detail koneksi, termasuk server aplikasi, nomor sistem, klien, pengguna, dan kata sandi. Uji koneksi untuk memastikan semuanya berfungsi.
- Tentukan sumber data: Untuk setiap aktivitas yang akan diekstrak, tentukan tabel SAP terkait sebagai sumber data dalam pekerjaan ETL. Misalnya, tambahkan VBRK untuk pembuatan faktur, BKPF untuk peristiwa posting, dan NAST untuk komunikasi dengan pelanggan.
- Buat logika ekstraksi untuk setiap aktivitas: Buat aliran data atau transformasi terpisah untuk masing-masing dari 13 aktivitas yang diperlukan. Terapkan filter di setiap aliran untuk memilih catatan yang relevan. Misalnya, filter berdasarkan Company Code (BUKRS), jenis dokumen (BLART), dan rentang tanggal tertentu seperti tanggal pembuatan ERDAT.
- Petakan kolom dan transformasikan data: Di setiap aliran data, petakan kolom tabel SAP sumber ke struktur log peristiwa tujuan: InvoiceNumber, ActivityName, EventTime, UserName, dan atribut lain yang disarankan. Gunakan logika transformasi untuk menetapkan 'ActivityName' pada setiap aliran dan memformat tanggal serta timestamp dengan benar.
- Tangani aktivitas kompleks: Untuk peristiwa hasil perhitungan seperti 'Tanggal Jatuh Tempo Faktur Tercapai', gunakan Tanggal Dasar Pembayaran (ZFBDT) dan logika syarat pembayaran untuk menghitung tanggal jatuh tempo, atau ambil Net Due Date (NETDT) dari BSEG. Untuk peristiwa yang berasal dari log perubahan seperti 'Faktur Disetujui', Anda mungkin perlu menggabungkan tabel seperti BKPF dan CDHDR/CDPOS berdasarkan nomor dan tanggal dokumen.
- Gabungkan data aktivitas: Gunakan transformasi 'Union' atau 'Merge' di alat ETL untuk menggabungkan keluaran dari 13 aliran data menjadi satu kumpulan data. Pastikan nama kolom dan tipe data konsisten di semua aliran sebelum digabungkan.
- Atur tujuan keluaran: Tentukan tujuan akhir log peristiwa. Tujuannya dapat berupa file datar (CSV), tabel basis data, atau koneksi langsung ke area penyiapan data.
- Atur jadwal ekstraksi: Tentukan parameter rentang tanggal untuk ekstraksi. Untuk pemuatan awal, Anda dapat mengambil data selama 6-12 bulan. Untuk pemuatan delta berikutnya, atur pekerjaan agar mengambil data sejak tanggal proses terakhir.
- Jalankan dan ekspor: Jalankan pekerjaan ETL. Setelah selesai, periksa file keluaran dan pastikan formatnya sesuai. Hasil akhir harus berupa satu file CSV dengan setiap baris mewakili satu peristiwa unik, siap diunggah ke ProcessMind.
Konfigurasi
- Koneksi SAP: Anda memerlukan koneksi server aplikasi ke sistem SAP ECC tujuan. Pengguna SAP harus memiliki akses RFC dan otorisasi untuk tabel seperti VBRK, BKPF, BSEG, NAST, serta tabel lain yang disebutkan dalam kueri.
- Lisensi alat ETL: Anda wajib memiliki lisensi yang berlaku untuk alat ETL komersial dan konektor SAP terkait.
- Rentang tanggal: Sebaiknya ekstrak data selama 3 hingga 6 bulan agar sampel cukup mewakili untuk analisis tanpa membebani sistem. Gunakan parameter yang dapat diatur untuk tanggal mulai dan akhir.
- Filter utama: Selalu filter berdasarkan Company Code (BUKRS) untuk membatasi cakupan ekstraksi. Filter juga berdasarkan Billing Document Type (VBRK-FKART) dan Accounting Document Type (BKPF-BLART) yang relevan agar hanya faktur standar yang disertakan dan jenis dokumen lain, seperti nota kredit atau dokumen internal, dikecualikan.
- Kinerja: Ekstraksi dari tabel besar seperti BSEG dapat berjalan lambat. Gunakan filter yang selektif, hindari mengambil kolom yang tidak diperlukan, dan jadwalkan ekstraksi di luar jam sibuk untuk mengurangi dampak pada kinerja sistem SAP sumber.
Contoh kueri 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 Siap memulai?
Gunakan templat ini untuk menyiapkan data dengan lebih mudah dan mendapatkan wawasan berguna tentang proses penagihan dan faktur. Mulailah mempercepat arus kas Anda hari ini.
Percepat arus kas: tingkatkan proses penagihan dan faktur sekarang!
Hilangkan inefisiensi, pangkas waktu siklus hingga 30%, dan tingkatkan arus kas Anda.
Tidak perlu kartu kredit. Mulai tingkatkan proses dalam hitungan menit.