Templat data pemrosesan pesanan penjualan Order to Cash
Templat data pemrosesan pesanan penjualan Order to Cash
- Atribut yang disarankan untuk dikumpulkan
- Aktivitas utama yang perlu dilacak
- Panduan ekstraksi untuk SAP ECC
Atribut pemrosesan pesanan penjualan Order to Cash
| Nama | Deskripsi | ||
|---|---|---|---|
| Pesanan penjualan SalesOrder | Pengenal unik untuk dokumen pesanan penjualan, yang menjadi kasus utama untuk melacak seluruh proses Order-to-Cash. | ||
| Deskripsi Pesanan penjualan adalah dokumen utama dalam proses penjualan. Dokumen ini mencatat permintaan pelanggan atas barang atau jasa beserta semua informasi yang diperlukan untuk memprosesnya dari awal hingga selesai. Dalam process mining, atribut ini digunakan sebagai ID kasus. Setiap nomor pesanan penjualan yang unik mewakili satu instans proses dari awal hingga akhir. Analisis berdasarkan pesanan penjualan membantu melacak seluruh siklus proses, mengukur waktu siklus, dan menemukan variasi pada setiap pesanan pelanggan. Mengapa ini penting Atribut ini menjadi kunci untuk menghubungkan semua aktivitas dan peristiwa terkait, sehingga setiap perjalanan pesanan pelanggan dapat dianalisis secara menyeluruh dari awal hingga akhir. Sumber data Tersimpan di tabel Data Header Dokumen Penjualan (VBAK), pada kolom VBELN. Contoh 900001234590000123469000012347 | |||
| Aktivitas Activity | Nama langkah bisnis atau peristiwa tertentu yang terjadi dalam proses pesanan penjualan. | ||
| Deskripsi Atribut ini menjelaskan satu langkah dalam proses Order-to-Cash, seperti “Pesanan penjualan dibuat”, “Pengiriman dibuat”, atau “Pembayaran diterima”. Aktivitas ini menjadi bagian dasar untuk menyusun kembali alur proses setiap pesanan penjualan. Analisis urutan dan waktu aktivitas merupakan inti process mining. Analisis ini membantu memvisualisasikan peta proses, menemukan hambatan dan variasi proses, serta memeriksa kepatuhan terhadap model standar. Aktivitas biasanya diturunkan dari gabungan peristiwa pembuatan dokumen, perubahan status, atau kode transaksi tertentu yang tercatat di sistem. Mengapa ini penting Aktivitas menjadi dasar peta proses untuk memvisualisasikan dan menganalisis alur proses, penyimpangan, serta hambatan. Sumber data Atribut ini diturunkan dari data. Biasanya, atribut dibuat saat ekstraksi data dengan memetakan kode transaksi SAP (T-Code), perubahan status dokumen (misalnya, dari tabel VBUK dan VBUP), atau log perubahan dokumen (tabel CDHDR dan CDPOS) ke nama aktivitas yang mudah dipahami. Contoh Sales order dibuatPengiriman dibuatBarang dikeluarkanFaktur dibuatPembayaran diterima | |||
| Pembaruan data terakhir LastDataUpdate | Stempel waktu yang menunjukkan kapan data untuk rekaman ini terakhir diperbarui dari sistem sumber. | ||
| Deskripsi Atribut ini mencatat tanggal dan waktu ekstraksi atau pembaruan data terbaru untuk suatu peristiwa atau kasus. Informasi ini menunjukkan seberapa baru data yang dianalisis. Di dashboard dan laporan, informasi ini membantu pengguna memahami kebaruan data. Pengguna dapat memastikan apakah analisis mencerminkan kondisi operasional terkini atau masih menggunakan data lama, sehingga ekspektasi terhadap kemutakhiran data tetap jelas. Mengapa ini penting Membantu pengguna mengetahui kebaruan data, hal yang penting untuk mengambil keputusan tepat waktu dan berdasarkan analisis process mining. Sumber data Atribut metadata ini diisi oleh alat atau proses ekstraksi data saat data dimasukkan. Atribut ini tidak tersimpan di tabel SAP sumber. Contoh 2024-06-10T05:00:00Z2024-06-11T05:00:00Z2024-06-12T05:00:00Z | |||
| Sistem sumber SourceSystem | Menunjukkan sistem sumber tempat data diekstrak. | ||
| Deskripsi Atribut ini menunjukkan sistem asal data, misalnya nama instans SAP ECC atau nomor klien tertentu. Informasi ini memberi konteks pada data, terutama jika organisasi menggunakan beberapa sistem produksi atau memiliki data dari sistem lama. Dalam analisis, atribut ini digunakan untuk memfilter atau mengelompokkan data berdasarkan asalnya. Atribut ini berguna untuk membandingkan proses di berbagai sistem atau menjaga integritas dan konsistensi data selama migrasi sistem. Mengapa ini penting Memberi konteks penting, terutama saat data berasal dari beberapa sistem. Atribut ini juga memungkinkan perbandingan proses dan memperjelas asal-usul data. Sumber data Nilai ini biasanya ditambahkan saat ekstraksi data. Nilainya sering kali tetap dan mewakili ID Sistem SAP (SAPSID) atau klien (MANDT). Contoh ECC_PROD_800SAP_ERP_EU1ECC_QAS_300 | |||
| Waktu mulai StartTime | Stempel waktu yang menunjukkan kapan suatu aktivitas atau peristiwa dimulai. | ||
| Deskripsi Waktu mulai, yang juga dikenal sebagai stempel waktu peristiwa, mencatat tanggal dan waktu persis saat aktivitas tertentu terjadi. Contohnya, waktu pesanan penjualan dibuat, barang dikeluarkan, atau faktur diposting. Stempel waktu ini menjadi dasar semua analisis waktu dalam process mining. Data ini digunakan untuk menghitung waktu siklus antaraktivitas, mengukur durasi total suatu kasus, serta menemukan keterlambatan atau hambatan. Stempel waktu yang akurat sangat penting untuk dashboard analisis kinerja, misalnya untuk memantau ketepatan waktu pengiriman atau waktu tunggu pemenuhan pesanan. Mengapa ini penting Atribut ini penting untuk menghitung semua metrik kinerja, seperti waktu siklus dan durasi, yang diperlukan untuk menemukan hambatan. Sumber data Atribut gabungan ini biasanya diperoleh dengan menggabungkan kolom tanggal (misalnya, ERDAT) dan kolom waktu (misalnya, ERZET) dari berbagai tabel SAP, seperti VBAK (Pesanan Penjualan), LIKP (Pengiriman), dan VBRK (Faktur). Contoh 2023-04-15T09:00:12Z2023-04-16T14:30:00Z2023-04-20T11:22:45Z | |||
| Alasan penolakan RejectionReason | Kode yang menunjukkan alasan suatu pos pesanan penjualan ditolak atau dibatalkan. | ||
| Deskripsi Alasan penolakan menjelaskan mengapa pesanan penjualan atau pos tertentu tidak dipenuhi. Penyebabnya dapat berupa pembatalan oleh pelanggan, produk tidak tersedia, atau alasan bisnis lainnya. Atribut ini penting untuk dashboard “Tren Pembatalan Pesanan Penjualan”. Dengan menganalisis alasan penolakan yang paling umum, perusahaan dapat menemukan akar penyebab hilangnya penjualan. Temuan ini dapat mendorong perbaikan pengelolaan inventaris, strategi harga, atau komunikasi dengan pelanggan untuk mengurangi tingkat pembatalan pesanan. Mengapa ini penting Menjelaskan alasan di balik pembatalan pesanan, sehingga akar penyebab hilangnya penjualan dapat dianalisis dan akurasi perkiraan ditingkatkan. Sumber data Tersimpan di tabel Data Pos Dokumen Penjualan (VBAP), pada kolom ABGRU. Contoh 0215Z5 | |||
| Blokir pengiriman DeliveryBlock | Kode yang menunjukkan apakah pesanan penjualan diblokir untuk pengiriman, sehingga dokumen pengiriman tidak dapat dibuat. | ||
| Deskripsi Blokir pengiriman adalah status pada pesanan penjualan, di tingkat header atau pos, yang menghentikan sementara proses sebelum tahap pengiriman. Pengguna dapat menetapkan blokir secara manual, atau sistem dapat menetapkannya otomatis karena batas kredit terlampaui atau data belum lengkap. Atribut ini penting untuk dashboard “Analisis Pemblokiran dan Pengerjaan Ulang Pesanan Penjualan”. Analisis frekuensi, durasi, dan alasan blokir pengiriman membantu menemukan hambatan utama dalam proses pemenuhan pesanan. Mengurangi blokir ini penting untuk meningkatkan ketepatan waktu pengiriman dan memperpendek waktu siklus secara keseluruhan. Mengapa ini penting Menunjukkan hambatan dalam proses pemenuhan pesanan secara langsung. Memahami alasan dan frekuensi pesanan diblokir penting untuk memperlancar alur proses. Sumber data Tersimpan di tabel Data Header Dokumen Penjualan (VBAK), pada kolom LIFSK. Contoh 0102Z1 | |||
| Nilai bersih NetAmount | Nilai total pesanan penjualan sebelum pajak dan diskon pada tingkat header. | ||
| Deskripsi Nilai bersih menunjukkan nilai uang dari pesanan penjualan. Atribut ini menjadi metrik keuangan utama untuk setiap instans proses. Atribut ini penting untuk process mining berbasis nilai. Anda dapat memprioritaskan perbaikan proses dengan berfokus pada pesanan bernilai tinggi. Analis juga dapat menghubungkan masalah proses, seperti keterlambatan atau pengerjaan ulang, dengan dampak keuangan untuk memperkuat alasan bisnis di balik perubahan. Misalnya, atribut ini dapat digunakan untuk membandingkan efisiensi pemrosesan pesanan bernilai tinggi dan rendah. Mengapa ini penting Mendukung analisis berbasis nilai, sehingga upaya perbaikan dapat diprioritaskan pada pesanan yang berdampak paling besar terhadap keuangan perusahaan. Sumber data Tersimpan di tabel Data Header Dokumen Penjualan (VBAK), pada kolom NETWR. Contoh 1500.0012550.75850.50 | |||
| Nomor material MaterialNumber | Pengenal unik untuk produk atau layanan yang dijual. | ||
| Deskripsi Nomor material mengidentifikasi barang tertentu pada baris pesanan penjualan. Karena satu pesanan dapat berisi beberapa material, atribut ini biasanya dianalisis pada tingkat pos. Analisis proses berdasarkan nomor material membantu menemukan masalah pada produk tertentu. Analisis ini dapat menunjukkan produk yang terkait dengan waktu pemenuhan lebih lama, blokir pengiriman lebih sering, atau ketidaksesuaian faktur yang lebih banyak. Informasi ini penting bagi tim rantai pasok dan pengelola produk untuk mengoptimalkan proses bagi tiap lini produk. Mengapa ini penting Mendukung analisis proses berdasarkan produk dan menunjukkan produk yang terkait dengan inefisiensi, seperti keterlambatan, pemblokiran, atau pengerjaan ulang. Sumber data Tersimpan di tabel Data Pos Dokumen Penjualan (VBAP), pada kolom MATNR. Contoh FG-1001-ARAW-205BSERV-INSTALL | |||
| Nomor pelanggan CustomerNumber | Pengenal unik pelanggan yang membuat pesanan penjualan. | ||
| Deskripsi Atribut ini mewakili “Pihak pembeli”, yaitu akun pelanggan utama yang terkait dengan pesanan penjualan. Atribut ini menghubungkan transaksi dengan pelanggan tertentu di data induk. Analisis berdasarkan nomor pelanggan membantu mengelompokkan proses untuk memahami perilaku dan kinerja tiap pelanggan. Anda dapat mengetahui pelanggan mana yang memiliki waktu siklus terlama, tingkat pengerjaan ulang tertinggi, atau perubahan pesanan paling sering. Informasi ini penting untuk meningkatkan pengelolaan hubungan pelanggan dan tingkat layanan. Mengapa ini penting Mendukung analisis yang berfokus pada pelanggan, membantu menemukan masalah proses yang berdampak pada pelanggan tertentu dan mengukur kinerja untuk tiap pelanggan. Sumber data Tersimpan di tabel Data Header Dokumen Penjualan (VBAK), pada kolom KUNNR. Contoh 100234100567200112 | |||
| Organisasi penjualan SalesOrganization | Unit organisasi yang bertanggung jawab menjual produk atau layanan. | ||
| Deskripsi Organisasi penjualan adalah entitas organisasi utama di SAP yang menyusun perusahaan sesuai kebutuhan penjualannya. Unit ini bertanggung jawab menegosiasikan ketentuan penjualan serta mendistribusikan barang dan layanan. Dalam process mining, atribut ini menjadi dimensi penting untuk analisis. Anda dapat membandingkan kinerja proses, efisiensi, dan kepatuhan di berbagai unit penjualan, wilayah, atau divisi. Perbandingan ini membantu menemukan praktik yang berhasil di unit berkinerja tinggi dan area yang perlu diperbaiki di unit lain. Mengapa ini penting Mendukung perbandingan kinerja antarunit bisnis atau wilayah, termasuk efisiensi dan kepatuhan proses. Sumber data Tersimpan di tabel Data Header Dokumen Penjualan (VBAK), pada kolom VKORG. Contoh 100025003100 | |||
| Pengguna User | ID pengguna karyawan yang membuat atau terakhir mengubah dokumen, atau melakukan aktivitas. | ||
| Deskripsi Atribut ini mencatat ID pengguna SAP yang bertanggung jawab atas suatu peristiwa dalam proses. Contohnya, atribut ini menunjukkan petugas penjualan yang membuat pesanan atau staf gudang yang memposting pengeluaran barang. Analisis berdasarkan pengguna membantu memahami pembagian beban kerja, menemukan kebutuhan pelatihan, dan mendeteksi perbedaan cara pengguna menjalankan tugas yang sama. Atribut ini penting untuk dashboard yang memantau kinerja sumber daya, kepatuhan, dan intervensi manual. Mengapa ini penting Menunjukkan kinerja dan beban kerja sumber daya, membantu menemukan penyimpangan proses yang terkait dengan pengguna tertentu, serta mendukung analisis kepatuhan dan otomatisasi. Sumber data Tersimpan di banyak tabel header SAP, seperti VBAK, LIKP, dan VBRK, pada kolom “Dibuat oleh” (ERNAM) atau “Diubah oleh” (AENAM). Contoh CBURKEJSMITHRWILLIAMS | |||
| Ketentuan pengiriman ShippingConditions | Menentukan strategi umum pengiriman barang kepada pelanggan. | ||
| Deskripsi Ketentuan pengiriman menentukan cara pesanan dikirim, misalnya “Reguler”, “Ekspres”, atau “Diambil sendiri”. Ketentuan ini disepakati dengan pelanggan dan memengaruhi perencanaan logistik. Atribut ini digunakan dalam analisis “Efisiensi dan Biaya Metode Pengiriman”. Dengan mengelompokkan proses berdasarkan ketentuan pengiriman, perusahaan dapat melihat apakah metode tertentu lebih sering mengalami keterlambatan atau memiliki waktu siklus lebih lama. Data ini membantu mengoptimalkan logistik dan mengelola ekspektasi pelanggan terkait waktu pengiriman. Mengapa ini penting Mendukung analisis kinerja logistik dan membantu menentukan apakah metode pengiriman tertentu berkaitan dengan keterlambatan atau efisiensi yang lebih tinggi. Sumber data Tersimpan di tabel Data Header Dokumen Penjualan (VBAK), pada kolom VSBED. Contoh 011020 | |||
| Mengalami pengerjaan ulang IsRework | Penanda boolean yang menunjukkan apakah pesanan penjualan mengalami perubahan besar atau pengerjaan ulang setelah pertama kali dibuat. | ||
| Deskripsi Atribut hasil perhitungan ini mengidentifikasi instans proses yang mengalami pengerjaan ulang, misalnya karena satu atau beberapa aktivitas “Pesanan penjualan diubah”. Logika untuk menentukan pengerjaan ulang, seperti perubahan harga, jumlah, atau tanggal pengiriman, ditetapkan saat penyiapan proyek. Atribut ini penting untuk dashboard “Pengerjaan Ulang dan Frekuensi Perubahan Pesanan Penjualan” serta KPI Tingkat Pengerjaan Ulang Pesanan Penjualan. Atribut ini memudahkan analisis dengan memungkinkan Anda memfilter dan membandingkan pesanan yang berjalan langsung tanpa hambatan dengan pesanan yang memerlukan perubahan manual. Dengan begitu, dampak pengerjaan ulang terhadap waktu siklus dan biaya dapat diukur. Mengapa ini penting Mengukur frekuensi pengerjaan ulang secara langsung, sehingga penyebab dan dampaknya terhadap efisiensi proses serta waktu siklus dapat dianalisis. Sumber data Atribut hasil perhitungan ini diturunkan dari log peristiwa. Logikanya memeriksa apakah terdapat aktivitas “Pesanan penjualan diubah” atau peristiwa perubahan tertentu dari tabel CDHDR/CDPOS. Contoh truefalse | |||
| Pengiriman tepat waktu IsOnTimeDelivery | Penanda boolean yang menunjukkan apakah barang dikirim pada atau sebelum tanggal pengiriman yang dikonfirmasi. | ||
| Deskripsi Atribut hasil perhitungan ini membandingkan tanggal aktual pengeluaran barang dengan “ConfirmedDeliveryDate” untuk pesanan penjualan. Jika barang dikeluarkan pada atau sebelum tanggal yang dikonfirmasi, nilainya benar. Jika tidak, nilainya salah. Atribut ini memudahkan pembuatan dashboard “Kinerja Pengiriman Tepat Waktu” dan penghitungan KPI Tingkat Pengiriman Tepat Waktu. Anda dapat menggabungkan dan memvisualisasikan kinerja dengan mudah, tanpa perlu membandingkan tanggal setiap kali membuat analisis atau diagram. Hasilnya, keandalan pengiriman dapat dilihat dengan jelas sekilas. Mengapa ini penting Memberikan ukuran kinerja pengiriman yang jelas dan sederhana, sehingga KPI Tingkat Pengiriman Tepat Waktu mudah dihitung. Sumber data Atribut hasil perhitungan ini membandingkan stempel waktu aktivitas “Barang dikeluarkan” dengan nilai atribut “ConfirmedDeliveryDate”. Contoh truefalse | |||
| Status pemeriksaan kredit CreditCheckStatus | Menunjukkan status pemeriksaan kredit untuk dokumen penjualan. | ||
| Deskripsi Atribut ini menunjukkan hasil pemeriksaan kredit otomatis atau manual pada pesanan penjualan. Status yang umum antara lain “Disetujui”, “Ditolak”, atau “Diblokir”. Atribut ini penting untuk dashboard “Analisis Waktu Pemrosesan Pemeriksaan Kredit”. Keterlambatan atau pemblokiran pada tahap pemeriksaan kredit dapat memperpanjang waktu siklus pemenuhan pesanan secara signifikan. Analisis status ini membantu memahami efisiensi proses pengelolaan kredit dan dampaknya pada kecepatan penjualan. Mengapa ini penting Status ini berdampak langsung pada kecepatan pemrosesan pesanan. Analisisnya membantu menemukan hambatan dalam pengelolaan kredit yang menunda pemenuhan pesanan. Sumber data Tersimpan di tabel Status Header Dokumen Penjualan (VBUK) atau langsung di VBAK sebagai kolom status kredit (misalnya, CMGST). Contoh ABD | |||
| Tanggal pengiriman yang dikonfirmasi ConfirmedDeliveryDate | Tanggal pengiriman barang atau layanan yang telah dikonfirmasi kepada pelanggan. | ||
| Deskripsi Ini adalah tanggal pengiriman yang dijanjikan kepada pelanggan berdasarkan ketersediaan material dan penjadwalan. Tanggal ini menjadi acuan untuk mengukur kinerja pengiriman. Atribut ini menjadi dasar dashboard “Kinerja Pengiriman Tepat Waktu” dan KPI Tingkat Pengiriman Tepat Waktu. Dengan membandingkan tanggal pengiriman yang dikonfirmasi dengan tanggal aktual “Barang dikeluarkan”, analisis dapat menentukan apakah pesanan dikirim tepat waktu, lebih awal, atau terlambat. Ini adalah ukuran utama keandalan rantai pasok dan kepuasan pelanggan. Mengapa ini penting Menjadi acuan untuk mengukur ketepatan waktu pengiriman, KPI penting bagi kepuasan pelanggan dan efisiensi rantai pasok. Sumber data Tersimpan di tabel Baris Jadwal Dokumen Penjualan (VBEP), pada kolom EDATU. Contoh 2023-05-102023-06-202023-07-01 | |||
Aktivitas pemrosesan pesanan penjualan Order to Cash
| Aktivitas | Deskripsi | ||
|---|---|---|---|
| Barang dikeluarkan | Peristiwa penting saat kepemilikan barang berpindah dan barang resmi keluar dari gudang. Ini adalah pencatatan keuangan langsung yang membuat dokumen material dan memperbarui persediaan. | ||
| Mengapa ini penting Ini adalah peristiwa 'pengiriman' dan tonggak penting untuk mengukur pengiriman tepat waktu serta waktu tunggu pemenuhan. Peristiwa ini memicu pembaruan keuangan dan menandai titik yang tidak dapat dibatalkan dalam proses pemenuhan fisik. Sumber data Pembuatan dokumen material (MKPF/MSEG) dengan jenis pergerakan pengeluaran barang (misalnya, 601), yang terhubung ke dokumen pengiriman. Pengumpulan data Pembuatan dokumen material (MKPF/MSEG) dengan jenis pergerakan pengeluaran barang, yang terhubung ke pengiriman. Jenis peristiwa explicit | |||
| Faktur dibuat | Menandai pembuatan faktur pelanggan atau dokumen penagihan. Peristiwa ini tercatat secara eksplisit saat dokumen baru dibuat di sistem, sekaligus memulai tahap pembayaran dalam proses. | ||
| Mengapa ini penting Ini adalah tonggak penting yang memulai penghitungan “Waktu siklus faktur hingga pembayaran”. Keterlambatan pembuatan faktur berdampak langsung pada arus kas. Sumber data Tercatat di tabel VBRK (Dokumen Penagihan: Data Header) berdasarkan tanggal pembuatannya (ERDAT). Tautan ke pesanan penjualan atau pengiriman tersimpan di tabel VBFA. Pengumpulan data Peristiwa ini didasarkan pada waktu pembuatan (ERDAT) di tabel VBRK. Jenis peristiwa explicit | |||
| Order dikonfirmasi | Aktivitas ini menandakan sales order telah melewati semua pemeriksaan awal dan dikonfirmasi untuk dipenuhi. Biasanya, aktivitas ini disimpulkan saat order tidak lagi terblokir dan jumlahnya telah dikonfirmasi pada baris jadwal. | ||
| Mengapa ini penting Ini adalah tonggak penting yang memisahkan entri order dari pemenuhan. Tahap ini menjadi titik awal untuk mengukur waktu tunggu pemenuhan dan kinerja pengiriman tepat waktu. Sumber data Dapat disimpulkan saat baris jadwal di VBEP memiliki jumlah yang dikonfirmasi (BMENG > 0) dan order tidak terblokir untuk pengiriman (misalnya, VBUK-LIFSK kosong). Pengumpulan data Disimpulkan dari konfirmasi baris jadwal (VBEP-BMENG > 0) dan penghapusan blokir di tingkat header. Jenis peristiwa inferred | |||
| Pembayaran diterima | Peristiwa ini menandakan pembayaran pelanggan telah diterima dan dialokasikan ke faktur, sehingga piutang terbuka dilunasi. Ini adalah peristiwa akuntansi yang disimpulkan dari pelunasan dokumen keuangan. | ||
| Mengapa ini penting Ini adalah tahap terakhir untuk menerima pembayaran dari penjualan. Tahap ini menjadi titik akhir pengukuran “Waktu siklus faktur hingga pembayaran” dan “Waktu siklus pemenuhan pesanan penjualan” secara keseluruhan. Sumber data Disimpulkan dari informasi dokumen pelunasan di tabel BSEG untuk pos pelanggan. Pembayaran dianggap diterima jika BSEG-AUGBL (Dokumen Pelunasan) dan BSEG-AUGDT (Tanggal Pelunasan) terisi. Pengumpulan data Disimpulkan dari terisinya tanggal pelunasan (AUGDT) di tabel BSEG untuk pos piutang. Jenis peristiwa inferred | |||
| Pos pesanan ditutup | Aktivitas ini menandai penutupan akhir suatu pos pesanan penjualan, yang berarti barang telah dikirim sepenuhnya, faktur telah dibuat, dan pos dianggap selesai. Status keseluruhan pos digunakan untuk menyimpulkan peristiwa ini. | ||
| Mengapa ini penting Menjadi peristiwa akhir yang menandakan proses berhasil diselesaikan. Analisis waktu penutupan pos membantu memahami durasi proses dari awal hingga akhir dan menemukan pesanan yang masih terbuka tanpa alasan. Sumber data Disimpulkan dari kolom status keseluruhan di tabel VBUP (Dokumen Penjualan: Status Pos) untuk pos tersebut. Pos dianggap ditutup jika VBUP-GBSTA bernilai 'C' (Diproses sepenuhnya). Pengumpulan data Disimpulkan saat status pos (VBUP-GBSTA) berubah menjadi 'C' (Diproses sepenuhnya). Jenis peristiwa inferred | |||
| Sales order dibuat | Menandai pembuatan dokumen sales order baru. Peristiwa ini tercatat saat pengguna menyimpan order baru, biasanya melalui transaksi VA01 di SAP. | ||
| Mengapa ini penting Ini adalah peristiwa awal utama dalam proses Order-to-Cash. Menganalisis waktunya penting untuk mengukur waktu siklus keseluruhan dan tingkat penerimaan order. Sumber data Tercatat di tabel VBAK (data header dokumen penjualan) menggunakan tanggal pembuatan (ERDAT) dan waktu (ERZET). Kode transaksi tersimpan di VBAK-TCODE. Pengumpulan data Peristiwa berdasarkan stempel waktu pembuatan (ERDAT, ERZET) di tabel VBAK. Jenis peristiwa explicit | |||
| Blokir pengiriman ditetapkan | Menunjukkan tindakan pemblokiran pengiriman pada sales order yang mencegah pembuatan dokumen pengiriman. Peristiwa ini dapat tercatat secara langsung di log perubahan atau disimpulkan dari tabel status. | ||
| Mengapa ini penting Aktivitas ini berkaitan langsung dengan KPI 'Tingkat Sales Order Terblokir'. Mengetahui alasan dan frekuensi pemblokiran membantu menemukan penyebab keterlambatan pemenuhan. Sumber data Dapat ditemukan di log perubahan (CDHDR/CDPOS) untuk kolom VBAK-LIFSK. Peristiwa ini juga dapat disimpulkan saat kolom VBAK-LIFSK terisi. Pengumpulan data Peristiwa dari dokumen perubahan untuk kolom VBAK-LIFSK atau VBAP-LIFSP. Jenis peristiwa explicit | |||
| Faktur dibatalkan | Menandai pembalikan dokumen penagihan yang telah dibuat sebelumnya. Transaksi ini tercatat secara eksplisit saat dokumen pembatalan baru dibuat untuk mengimbangi dokumen asli. | ||
| Mengapa ini penting Pelacakan pembatalan faktur membantu menemukan masalah harga, ketidaksesuaian pengiriman, atau kesalahan data. Informasi ini mendukung KPI “Tingkat Ketidaksesuaian Faktur”. Sumber data Peristiwa ini tercatat secara eksplisit saat dokumen penagihan pembatalan dibuat (VBRK-VBTYP = 'N' atau 'O'). Faktur asli dirujuk di VBRK-SFAKN. Pengumpulan data Dokumen pembatalan dibuat di VBRK dengan merujuk pada faktur asli. Jenis peristiwa explicit | |||
| Konfirmasi bukti pengiriman | Aktivitas ini menandai konfirmasi bahwa pelanggan telah menerima barang. Peristiwa ini tercatat saat bukti pengiriman dimasukkan ke sistem, biasanya sekaligus memperbarui status dokumen pengiriman. | ||
| Mengapa ini penting Peristiwa ini mencatat tanggal pengiriman aktual, yang diperlukan untuk mengukur KPI “Tingkat Pengiriman Tepat Waktu” secara akurat berdasarkan tanggal yang dijanjikan. Sumber data Disimpulkan dari status bukti pengiriman (VBUK-PODAT) yang berubah menjadi 'C' (Dikonfirmasi). Tanggal konfirmasi tersimpan di VLPOD-PODAT. Pencatatan ini tidak selalu diterapkan. Pengumpulan data Disimpulkan dari pembaruan status POD pada pengiriman (VBUK-PODAT) atau entri pada tabel VLPOD. Jenis peristiwa inferred | |||
| Pemeriksaan kredit dilakukan | Menunjukkan bahwa pemeriksaan kredit pelanggan untuk sales order telah selesai, baik secara otomatis maupun manual. Peristiwa ini biasanya disimpulkan dari perubahan status kredit keseluruhan dokumen. | ||
| Mengapa ini penting Pemeriksaan kredit sering menjadi hambatan utama. Mengukur waktu yang dibutuhkan untuk langkah ini penting bagi 'Analisis Waktu Pemrosesan Pemeriksaan Kredit' dan untuk mempercepat pemrosesan order. Sumber data Disimpulkan dari kolom status kredit di tabel VBUK (status header dokumen penjualan). Perubahan VBUK-CMGST dari terblokir menjadi dirilis menandai aktivitas ini. Pengumpulan data Disimpulkan dari perubahan kolom status kredit keseluruhan (VBUK-CMGST). Jenis peristiwa inferred | |||
| Pengambilan barang selesai | Menandakan semua barang dalam pengiriman telah diambil secara fisik dari gudang. Jika Warehouse Management (WM) digunakan, peristiwa ini dapat disimpulkan dari status Transfer Order. | ||
| Mengapa ini penting Menganalisis waktu pengambilan barang membantu mengoptimalkan operasional gudang. Keterlambatan pada tahap ini berdampak langsung pada jadwal pengiriman dan siklus pemenuhan secara keseluruhan. Sumber data Disimpulkan saat status pengambilan barang pada item pengiriman di tabel LIPS-KOSTA berubah menjadi 'C' (seluruhnya telah diambil). Jika WM aktif, peristiwa ini dapat disimpulkan dari konfirmasi Transfer Order (tabel LTAK/LTAP). Pengumpulan data Disimpulkan dari perubahan status pengambilan barang (LIPS-KOSTA) atau konfirmasi Transfer Order WM. Jenis peristiwa inferred | |||
| Pengiriman dibuat | Peristiwa ini menandai pembuatan dokumen pengiriman keluar, yaitu instruksi bagi gudang untuk mulai mengambil dan mengirim barang. Peristiwa ini tercatat secara langsung dalam alur dokumen. | ||
| Mengapa ini penting Ini adalah langkah pertama dalam proses pemenuhan fisik. Waktu antara konfirmasi order dan pembuatan pengiriman menunjukkan seberapa cepat proses logistik dimulai. Sumber data Pembuatan catatan di tabel LIKP (data header pengiriman dokumen SD). Hubungannya dengan sales order tercatat di tabel alur dokumen VBFA. Pengumpulan data Peristiwa berdasarkan stempel waktu pembuatan di tabel LIKP, yang dihubungkan melalui tabel VBFA. Jenis peristiwa explicit | |||
| Pesanan dibatalkan | Menandakan pesanan penjualan dibatalkan sebelum dipenuhi. Biasanya, pembatalan ini tercatat saat “alasan penolakan” diterapkan pada semua pos terkait dalam pesanan. | ||
| Mengapa ini penting Ini adalah titik akhir kegagalan yang penting dan mendukung KPI “Tingkat Pembatalan Pesanan”. Memahami kapan dan mengapa pesanan dibatalkan membantu menemukan masalah dalam proses penjualan. Sumber data Disimpulkan jika kolom VBAP-ABGRU (Alasan penolakan) terisi untuk semua pos aktif dalam pesanan penjualan. Tanggal perubahan dapat ditemukan di CDHDR/CDPOS. Pengumpulan data Disimpulkan saat kolom “Alasan penolakan” (VBAP-ABGRU) terisi pada semua pos. Jenis peristiwa inferred | |||
| Sales order diubah | Menunjukkan perubahan pada sales order yang sudah ada setelah pertama kali dibuat. Perubahan ini tercatat di tabel log perubahan khusus (CDHDR, CDPOS) saat kolom seperti jumlah, harga, atau tanggal diubah. | ||
| Mengapa ini penting Melacak perubahan membantu menemukan pengerjaan ulang, ketidakstabilan proses, dan masalah kualitas data. Perubahan yang sering terjadi dapat menandakan masalah pada proses entri order awal dan menyebabkan keterlambatan. Sumber data Diambil dari tabel dokumen perubahan CDHDR (header) dan CDPOS (item) untuk OBJECTCLAS = 'VERKBELEG'. Stempel waktu dan kolom yang diubah dapat diketahui. Pengumpulan data Peristiwa dari tabel dokumen perubahan (CDHDR, CDPOS) untuk objek dokumen penjualan. Jenis peristiwa explicit | |||
Panduan ekstraksi
Langkah
- Kembangkan program: Gunakan transaksi SE38 atau SE80 untuk membuat program ABAP baru yang dapat dijalankan. Program ini akan memuat seluruh logika ekstraksi.
- Tentukan layar pemilihan: Buat layar pemilihan di program untuk memfilter data. Sertakan parameter Tanggal Pembuatan Dokumen Penjualan (VBAK-ERDAT), Organisasi Penjualan (VBAK-VKORG), dan Jenis Dokumen Penjualan (VBAK-AUART). Dengan begitu, ekstraksi dapat digunakan kembali dan dikelola dengan mudah.
- Deklarasikan data: Tentukan tabel internal dan struktur yang diperlukan untuk menampung data dari berbagai tabel SAP (misalnya, VBAK, VBAP, VBFA, CDHDR, CDPOS, VBRK, BSAD). Tentukan juga struktur keluaran akhir untuk log peristiwa agar sesuai dengan atribut yang diwajibkan.
- Pilih pesanan penjualan dasar: Tulis pernyataan SELECT awal untuk mengambil header pesanan penjualan (VBAK) dan item (VBAP) berdasarkan masukan pengguna di layar pemilihan. Data ini menjadi kumpulan kasus utama untuk dianalisis.
- Ekstrak peristiwa 'Creation': Ulangi setiap catatan VBAK yang dipilih. Untuk setiap catatan, isi struktur log peristiwa dengan aktivitas 'Sales Order Created'. Gunakan VBAK-ERDAT dan VBAK-ERZET sebagai StartTime.
- Ekstrak peristiwa dari log perubahan: Pilih catatan dari CDHDR dan CDPOS dengan OBJECTCLAS bernilai 'VERKBELEG' untuk pesanan penjualan yang dipilih. Ulangi hasilnya untuk menemukan perubahan kolom tertentu. Misalnya, perubahan pada VBAK-LIFSK menandakan 'Delivery Block Set', sedangkan perubahan pada VBUK-CMGST menandakan 'Credit Check Performed'. Perubahan lain yang relevan dapat dicatat sebagai 'Sales Order Changed'.
- Ekstrak data alur dokumen: Untuk pesanan penjualan yang dipilih, kueri tabel alur dokumen (VBFA). Tabel ini menghubungkan pesanan penjualan dengan dokumen lanjutan seperti pengiriman, pergerakan barang, dan faktur. Pilih semua dokumen terkait untuk diproses lebih lanjut.
- Ekstrak peristiwa pengiriman dan pemenuhan: Gunakan nomor dokumen pengiriman dari VBFA untuk mengueri LIKP dan LIPS guna mengambil peristiwa 'Delivery Created'. Kueri MKPF dan MSEG untuk dokumen pengeluaran barang (jenis pergerakan '601') guna merekam peristiwa 'Goods Issued'. Jika Warehouse Management aktif, kueri LTAK dan LTAP untuk menemukan waktu konfirmasi item pesanan transfer terakhir dan menentukan 'Picking Completed'. Periksa status header pengiriman VBUK-PODAT untuk peristiwa 'Proof of Delivery Confirmed'.
- Ekstrak peristiwa penagihan dan pembayaran: Gunakan nomor dokumen penagihan dari VBFA untuk mengueri VBRK dan VBRP guna mengambil peristiwa 'Invoice Created' dan 'Invoice Cancelled' (dengan VBRK-FKSTO = 'X'). Untuk menemukan 'Payment Received', hubungkan faktur dari VBRK ke dokumen akuntansi di BKPF, lalu cari dokumen penyelesaian dan tanggal penyelesaian di BSAD.
- Ekstrak peristiwa berdasarkan status: Gunakan tabel status VBUP (Item Status) dan VBUK (Header Status) untuk menyimpulkan peristiwa bisnis. Misalnya, item dianggap 'Order Item Closed' saat VBUP-GBSTA bernilai 'C'. Pesanan dianggap 'Order Cancelled' jika 'Reason for Rejection' (VBAP-ABGRU) diisi untuk semua item terkait.
- Konsolidasikan dan format data: Gabungkan semua peristiwa yang diambil ke dalam satu tabel internal akhir. Pastikan semua atribut (SalesOrder, Activity, StartTime, User, dan seterusnya) terisi dengan benar untuk setiap catatan peristiwa. Tambahkan stempel waktu SourceSystem dan LastDataUpdate.
- Buat file keluaran: Gunakan modul fungsi GUI_DOWNLOAD atau metode cl_gui_frontend_services=>gui_download untuk mengekspor tabel internal akhir ke file CSV di komputer lokal pengguna. Pastikan file disimpan dengan pengodean UTF-8.
Konfigurasi
- Prasyarat: Otorisasi pengembang ABAP, misalnya akses ke transaksi SE38, serta izin baca untuk semua tabel SAP yang diperlukan, termasuk VBAK, VBAP, CDHDR, CDPOS, VBFA, LIKP, LIPS, VBRK, VBRP, MKPF, MSEG, dan BSAD.
- Parameter pemilihan: Program harus memiliki layar pemilihan dengan parameter filter. Parameter utama:
- Rentang tanggal: Rentang tanggal wajib untuk pembuatan pesanan penjualan (VBAK-ERDAT). Mulailah dengan periode terbaru, sekitar 3-6 bulan, agar kumpulan data tetap mudah dikelola.
- Organisasi penjualan: Filter berdasarkan VBAK-VKORG untuk memfokuskan analisis pada unit bisnis tertentu.
- Jenis dokumen penjualan: Filter berdasarkan VBAK-AUART untuk menyertakan hanya jenis pesanan yang relevan, misalnya pesanan standar, dan mengecualikan jenis lain seperti penawaran dan retur.
- Pertimbangan kinerja: Ekstraksi dari tabel log perubahan (CDHDR, CDPOS) dan alur dokumen (VBFA) dapat berjalan sangat lambat untuk volume data besar. Optimalkan program dengan menggunakan kolom indeks dalam klausa WHERE. Untuk ekstraksi yang sangat besar, jadwalkan program sebagai pekerjaan latar belakang di luar jam sibuk melalui transaksi SM36.
- Aktivasi log perubahan: Metode ini bergantung pada fungsi dokumen perubahan SAP. Pastikan pencatatan perubahan aktif untuk elemen data utama, misalnya LIFSK, CMGST, dan ABGRU. Periksa melalui transaksi SCDO untuk objek VERKBELEG.
Contoh kueri abap
REPORT Z_O2C_PM_EXTRACTOR.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
TABLES: vbak.
TYPES: BEGIN OF ty_event_log,
salesorder TYPE vbeln_va,
activity TYPE string,
starttime TYPE string,
sourcesystem TYPE logsys,
lastdataupdate TYPE string,
user TYPE ernam,
customernumber TYPE kunnr,
salesorganization TYPE vkorg,
netamount TYPE netwr,
materialnumber TYPE matnr,
deliveryblock TYPE lifsk,
rejectionreason TYPE abgru,
salesordercycletime TYPE string, " Placeholder for calculation
END OF ty_event_log.
DATA: gt_event_log TYPE TABLE OF ty_event_log.
DATA: gs_event_log TYPE ty_event_log.
DATA: gv_sysid TYPE logsys.
DATA: gv_last_update TYPE string.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_erdat FOR vbak-erdat OBLIGATORY,
s_vkorg FOR vbak-vkorg,
s_auart FOR vbak-auart.
PARAMETERS: p_file TYPE rlgrap-filename OBLIGATORY DEFAULT 'C:\temp\o2c_event_log.csv'.
*&---------------------------------------------------------------------*
*& Main Processing Block
*&---------------------------------------------------------------------*
START-OF-SELECTION.
CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
IMPORTING
own_logical_system = gv_sysid.
CONCATENATE sy-datum sy-uzeit INTO gv_last_update.
PERFORM get_base_data.
PERFORM write_output_file.
*&---------------------------------------------------------------------*
*& Form get_base_data
*&---------------------------------------------------------------------*
FORM get_base_data.
TYPES: BEGIN OF ty_order_item,
vbeln TYPE vbeln_va,
posnr TYPE posnr_va,
erdat TYPE erdat,
erzet TYPE erzet,
ernam TYPE ernam,
kunnr TYPE kunnr,
vkorg TYPE vkorg,
netwr TYPE netwr_ak,
matnr TYPE matnr,
lifsk TYPE lifsk,
abgru TYPE abgru,
END OF ty_order_item.
DATA: lt_order_items TYPE TABLE OF ty_order_item.
SELECT h~vbeln i~posnr h~erdat h~erzet h~ernam h~kunnr h~vkorg h~netwr i~matnr h~lifsk i~abgru
INTO TABLE lt_order_items
FROM vbak AS h
INNER JOIN vbap AS i ON h~vbeln = i~vbeln
WHERE h~erdat IN s_erdat
AND h~vkorg IN s_vkorg
AND h~auart IN s_auart.
CHECK sy-subrc = 0.
DATA(lt_vbeln_range) = VALUE rsdsselopt_t(
FOR <fs_item> IN lt_order_items WHERE ( vbeln = <fs_item>-vbeln )
( sign = 'I' option = 'EQ' low = <fs_item>-vbeln ) ).
SORT lt_vbeln_range BY low.
DELETE ADJACENT DUPLICATES FROM lt_vbeln_range COMPARING low.
PERFORM extract_order_created USING lt_order_items.
PERFORM extract_changes USING lt_vbeln_range lt_order_items.
PERFORM extract_doc_flow_events USING lt_vbeln_range lt_order_items.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form extract_order_created
*&---------------------------------------------------------------------*
FORM extract_order_created USING it_order_items TYPE ANY TABLE.
FIELD-SYMBOLS: <fs_item> TYPE any.
DATA: lt_unique_orders TYPE HASHED TABLE OF vbeln_va WITH UNIQUE KEY table_line.
lt_unique_orders = VALUE #( FOR <order> IN it_order_items ( CONV vbeln_va( <order>-vbeln ) ) ).
LOOP AT it_order_items ASSIGNING <fs_item> WHERE table_line IN lt_unique_orders.
CLEAR gs_event_log.
gs_event_log-salesorder = <fs_item>-vbeln.
gs_event_log-activity = 'Sales Order Created'.
CONCATENATE <fs_item>-erdat <fs_item>-erzet INTO gs_event_log-starttime.
gs_event_log-user = <fs_item>-ernam.
gs_event_log-customernumber = <fs_item>-kunnr.
gs_event_log-salesorganization = <fs_item>-vkorg.
gs_event_log-netamount = <fs_item>-netwr.
APPEND gs_event_log TO gt_event_log.
DELETE lt_unique_orders WHERE table_line = <fs_item>-vbeln.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form extract_changes
*&---------------------------------------------------------------------*
FORM extract_changes USING it_vbeln_range TYPE rsdsselopt_t it_order_items TYPE ANY TABLE.
DATA: lt_cdhdr TYPE TABLE OF cdhdr,
lt_cdpos TYPE TABLE OF cdpos.
SELECT * INTO TABLE lt_cdhdr FROM cdhdr
WHERE objectclas = 'VERKBELEG'
AND objectid IN it_vbeln_range
AND tcode = 'VA02'.
IF sy-subrc = 0.
SELECT * INTO TABLE lt_cdpos FROM cdpos
FOR ALL ENTRIES IN lt_cdhdr
WHERE objectclas = lt_cdhdr-objectclas
AND objectid = lt_cdhdr-objectid
AND changenr = lt_cdhdr-changenr.
ENDIF.
LOOP AT lt_cdhdr ASSIGNING FIELD-SYMBOL(<fs_cdhdr>).
DATA(lv_order_info) = REF #( it_order_items[ vbeln = <fs_cdhdr>-objectid ] ).
IF lv_order_info IS NOT BOUND. CONTINUE. ENDIF.
CLEAR gs_event_log.
gs_event_log-salesorder = <fs_cdhdr>-objectid.
gs_event_log-user = <fs_cdhdr>-username.
CONCATENATE <fs_cdhdr>-udate <fs_cdhdr>-utime INTO gs_event_log-starttime.
gs_event_log-customernumber = lv_order_info->kunnr.
gs_event_log-salesorganization = lv_order_info->vkorg.
gs_event_log-netamount = lv_order_info->netwr.
" Generic Change Event
gs_event_log-activity = 'Sales Order Changed'.
APPEND gs_event_log TO gt_event_log.
LOOP AT lt_cdpos ASSIGNING FIELD-SYMBOL(<fs_cdpos>)
WHERE objectclas = <fs_cdhdr>-objectclas
AND objectid = <fs_cdhdr>-objectid
AND changenr = <fs_cdhdr>-changenr.
CASE <fs_cdpos>-fname.
WHEN 'LIFSK'. " Delivery Block
gs_event_log-activity = 'Delivery Block Set'.
gs_event_log-deliveryblock = <fs_cdpos>-value_new.
APPEND gs_event_log TO gt_event_log.
WHEN 'CMGST'. " Credit Status
IF <fs_cdpos>-value_new = 'B'. " B = Credit Check OK
gs_event_log-activity = 'Credit Check Performed'.
APPEND gs_event_log TO gt_event_log.
ENDIF.
WHEN 'ABGRU'. " Rejection Reason
IF <fs_cdpos>-value_new IS NOT INITIAL.
gs_event_log-activity = 'Order Cancelled'.
gs_event_log-rejectionreason = <fs_cdpos>-value_new.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDCASE.
ENDLOOP.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form extract_doc_flow_events
*&---------------------------------------------------------------------*
FORM extract_doc_flow_events USING it_vbeln_range TYPE rsdsselopt_t it_order_items TYPE ANY TABLE.
DATA: lt_vbfa TYPE TABLE OF vbfa,
lt_vbrk TYPE TABLE OF vbrk,
lt_likp TYPE TABLE OF likp,
lt_mseg TYPE TABLE OF mseg,
lt_bsad TYPE TABLE OF bsad,
lt_vbup TYPE TABLE OF vbup.
SELECT * INTO TABLE lt_vbfa FROM vbfa
WHERE vbelv IN it_vbeln_range
AND ( vbtyp_n = 'J' " Delivery
OR vbtyp_n = 'M' " Invoice
OR vbtyp_n = 'N' " Invoice Cancellation
OR vbtyp_n = 'R' ). " Goods Movement
IF lt_vbfa IS INITIAL. RETURN. ENDIF.
SELECT vbeln, erdat, erzet, ernam, fksto, belnr FROM vbrk INTO TABLE lt_vbrk
FOR ALL ENTRIES IN lt_vbfa
WHERE vbeln = lt_vbfa-vbeln
AND ( lt_vbfa-vbtyp_n = 'M' OR lt_vbfa-vbtyp_n = 'N' ).
SELECT vbeln, erdat, erzet, ernam, podat FROM likp INTO TABLE lt_likp
FOR ALL ENTRIES IN lt_vbfa
WHERE vbeln = lt_vbfa-vbeln AND lt_vbfa-vbtyp_n = 'J'.
SELECT mblnr, mjahr, zeile, bwart, budat, cpuzt, usnam FROM mseg INTO TABLE lt_mseg
FOR ALL ENTRIES IN lt_vbfa
WHERE mblnr = lt_vbfa-vbeln AND mjahr = lt_vbfa-mjahr AND zeile = lt_vbfa-posnn AND lt_vbfa-vbtyp_n = 'R' AND bwart = '601'.
SELECT augdt, belnr, gjahr, kunnr FROM bsad INTO TABLE lt_bsad
FOR ALL ENTRIES IN lt_vbrk
WHERE belnr = lt_vbrk-belnr AND gjahr = SUBSTRING( val = lt_vbrk-erdat len = 4 ).
SELECT vbeln, posnr, gbsta FROM vbup INTO TABLE lt_vbup
FOR ALL ENTRIES IN lt_vbfa
WHERE vbeln = lt_vbfa-vbelv AND posnr = lt_vbfa-posnv.
LOOP AT lt_vbfa ASSIGNING FIELD-SYMBOL(<fs_vbfa>).
DATA(lv_order_info) = REF #( it_order_items[ vbeln = <fs_vbfa>-vbelv ] ).
IF lv_order_info IS NOT BOUND. CONTINUE. ENDIF.
CLEAR gs_event_log.
gs_event_log-salesorder = <fs_vbfa>-vbelv.
gs_event_log-customernumber = lv_order_info->kunnr.
gs_event_log-salesorganization = lv_order_info->vkorg.
gs_event_log-netamount = lv_order_info->netwr.
gs_event_log-materialnumber = lv_order_info->matnr.
CASE <fs_vbfa>-vbtyp_n.
WHEN 'J'. " Delivery
READ TABLE lt_likp ASSIGNING FIELD-SYMBOL(<fs_likp>) WITH KEY vbeln = <fs_vbfa>-vbeln.
IF sy-subrc = 0.
gs_event_log-activity = 'Delivery Created'.
CONCATENATE <fs_likp>-erdat <fs_likp>-erzet INTO gs_event_log-starttime.
gs_event_log-user = <fs_likp>-ernam.
APPEND gs_event_log TO gt_event_log.
" Picking Completed - simplified logic, check status
gs_event_log-activity = 'Picking Completed'. APPEND gs_event_log TO gt_event_log.
" POD Confirmed
IF <fs_likp>-podat IS NOT INITIAL.
gs_event_log-activity = 'Proof Of Delivery Confirmed'.
gs_event_log-starttime = <fs_likp>-podat.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
WHEN 'R'. " Goods Issue
READ TABLE lt_mseg ASSIGNING FIELD-SYMBOL(<fs_mseg>) WITH KEY mblnr = <fs_vbfa>-vbeln mjahr = <fs_vbfa>-mjahr zeile = <fs_vbfa>-posnn.
IF sy-subrc = 0.
gs_event_log-activity = 'Goods Issued'.
CONCATENATE <fs_mseg>-budat <fs_mseg>-cpuzt INTO gs_event_log-starttime.
gs_event_log-user = <fs_mseg>-usnam.
APPEND gs_event_log TO gt_event_log.
ENDIF.
WHEN 'M'. " Invoice
READ TABLE lt_vbrk ASSIGNING FIELD-SYMBOL(<fs_vbrk>) WITH KEY vbeln = <fs_vbfa>-vbeln.
IF sy-subrc = 0.
gs_event_log-activity = 'Invoice Created'.
CONCATENATE <fs_vbrk>-erdat <fs_vbrk>-erzet INTO gs_event_log-starttime.
gs_event_log-user = <fs_vbrk>-ernam.
APPEND gs_event_log TO gt_event_log.
" Payment Received
READ TABLE lt_bsad ASSIGNING FIELD-SYMBOL(<fs_bsad>) WITH KEY belnr = <fs_vbrk>-belnr.
IF sy-subrc = 0 AND <fs_bsad>-augdt IS NOT INITIAL.
gs_event_log-activity = 'Payment Received'.
gs_event_log-starttime = <fs_bsad>-augdt.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
WHEN 'N'. " Invoice Cancellation
READ TABLE lt_vbrk ASSIGNING <fs_vbrk> WITH KEY vbeln = <fs_vbfa>-vbeln.
IF sy-subrc = 0 AND <fs_vbrk>-fksto = 'X'.
gs_event_log-activity = 'Invoice Cancelled'.
CONCATENATE <fs_vbrk>-erdat <fs_vbrk>-erzet INTO gs_event_log-starttime.
gs_event_log-user = <fs_vbrk>-ernam.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDCASE.
ENDLOOP.
" Infer other events from status
LOOP AT lt_vbup ASSIGNING FIELD-SYMBOL(<fs_vbup>).
IF <fs_vbup>-gbsta = 'C'.
DATA(lv_order_info_stat) = REF #( it_order_items[ vbeln = <fs_vbup>-vbeln ] ).
IF lv_order_info_stat IS NOT BOUND. CONTINUE. ENDIF.
gs_event_log-salesorder = <fs_vbup>-vbeln.
gs_event_log-activity = 'Order Item Closed'.
" Timestamp for closed is harder, using current time as placeholder
CONCATENATE sy-datum sy-uzeit INTO gs_event_log-starttime.
gs_event_log-user = sy-uname.
gs_event_log-customernumber = lv_order_info_stat->kunnr.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
" Order Confirmed (Simplified - assumes if not blocked it's confirmed)
LOOP AT it_order_items ASSIGNING FIELD-SYMBOL(<fs_item>).
IF <fs_item>-lifsk IS INITIAL.
gs_event_log-salesorder = <fs_item>-vbeln.
gs_event_log-activity = 'Order Confirmed'.
CONCATENATE <fs_item>-erdat <fs_item>-erzet INTO gs_event_log-starttime.
gs_event_log-user = <fs_item>-ernam.
gs_event_log-customernumber = <fs_item>-kunnr.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form write_output_file
*&---------------------------------------------------------------------*
FORM write_output_file.
DATA: lt_final_output TYPE TABLE OF ty_event_log.
" Add common fields
LOOP AT gt_event_log ASSIGNING FIELD-SYMBOL(<fs_event>).
<fs_event>-sourcesystem = gv_sysid.
<fs_event>-lastdataupdate = gv_last_update.
ENDLOOP.
SORT gt_event_log BY salesorder starttime.
DELETE ADJACENT DUPLICATES FROM gt_event_log COMPARING ALL FIELDS.
lt_final_output = gt_event_log.
DATA: lt_fieldnames TYPE TABLE OF string.
APPEND 'SalesOrder' TO lt_fieldnames.
APPEND 'Activity' TO lt_fieldnames.
APPEND 'StartTime' TO lt_fieldnames.
APPEND 'SourceSystem' TO lt_fieldnames.
APPEND 'LastDataUpdate' TO lt_fieldnames.
APPEND 'User' TO lt_fieldnames.
APPEND 'CustomerNumber' TO lt_fieldnames.
APPEND 'SalesOrganization' TO lt_fieldnames.
APPEND 'NetAmount' TO lt_fieldnames.
APPEND 'MaterialNumber' TO lt_fieldnames.
APPEND 'DeliveryBlock' TO lt_fieldnames.
APPEND 'RejectionReason' TO lt_fieldnames.
APPEND 'SalesOrderCycleTime' TO lt_fieldnames.
DATA(lv_header) = REDUCE string(
INIT s = ''
FOR field IN lt_fieldnames
NEXT s = s && COND #( WHEN s = '' THEN field ELSE |,{ field }| ) ).
DATA: lt_file_content TYPE TABLE OF string.
APPEND lv_header TO lt_file_content.
LOOP AT lt_final_output INTO DATA(ls_output).
DATA(lv_line) = |"{ ls_output-salesorder }","{ ls_output-activity }","{ ls_output-starttime }","{ ls_output-sourcesystem }","{ ls_output-lastdataupdate }","{ ls_output-user }","{ ls_output-customernumber }","{ ls_output-salesorganization }",{ ls_output-netamount },"{ ls_output-materialnumber }","{ ls_output-deliveryblock }","{ ls_output-rejectionreason }","{ ls_output-salesordercycletime }"|.
APPEND lv_line TO lt_file_content.
ENDLOOP.
cl_gui_frontend_services=>gui_download(
EXPORTING
filename = p_file
filetype = 'ASC'
CHANGING
data_tab = lt_file_content ).
ENDFORM. Langkah
- Prasyarat: Pastikan Anda memiliki akses langsung hanya-baca ke basis data SAP ECC. Anda memerlukan alat klien basis data seperti DBeaver, SQL Server Management Studio, atau Oracle SQL Developer untuk terhubung dan menjalankan kueri.
- Dapatkan skrip SQL: Salin kueri SQL lengkap yang disediakan di bagian 'query' dokumen ini.
- Hubungkan ke basis data: Buka klien basis data dan hubungkan ke instans basis data SAP ECC. Anda memerlukan alamat server, port, nama basis data, dan kredensial login yang sesuai.
- Atur kueri: Tempel skrip SQL ke jendela editor kueri baru. Cari bagian konfigurasi di dalam Common Table Expression (CTE) utama bernama SalesOrders. Ganti nilai placeholder untuk tanggal mulai ('{StartDate}'), tanggal akhir ('{EndDate}'), organisasi penjualan ('{SalesOrgs}'), dan jenis dokumen ('{DocTypes}') dengan nilai yang sesuai untuk analisis Anda.
- Jalankan kueri: Jalankan skrip SQL yang sudah diatur. Bergantung pada rentang tanggal dan ukuran basis data SAP Anda, kueri ini mungkin memerlukan beberapa menit.
- Periksa hasil: Setelah kueri selesai, hasilnya akan ditampilkan. Periksa sekilas apakah kolom yang diharapkan tersedia (SalesOrder, Activity, StartTime, dan seterusnya) dan apakah baris untuk berbagai aktivitas berhasil ditampilkan.
- Ekspor data: Gunakan fungsi ekspor di klien basis data untuk menyimpan hasil sebagai file CSV. Beri nama file yang jelas, misalnya SAP_O2C_Event_Log.csv.
- Siapkan untuk ProcessMind: Buka file CSV di editor spreadsheet. Pastikan judul kolom sama persis dengan atribut yang diwajibkan (misalnya, SalesOrder, Activity, StartTime). Pastikan format tanggal dan waktu untuk StartTime dan LastDataUpdate konsisten dan didukung ProcessMind, misalnya YYYY-MM-DD HH:MI:SS.
- Unggah ke ProcessMind: Unggah file CSV akhir yang sudah diformat ke proyek ProcessMind Anda untuk dianalisis.
Konfigurasi
- Rentang tanggal: Kueri menggunakan placeholder ('{StartDate}' dan '{EndDate}') untuk memfilter pesanan penjualan berdasarkan tanggal pembuatannya (VBAK.ERDAT). Periode analisis yang umum adalah 3 hingga 6 bulan data. Rentang ini memberi sampel yang mewakili tanpa membebani database secara berlebihan.
- Filter organisasi penjualan: Gunakan placeholder '{SalesOrgs}' untuk membatasi ekstraksi ke organisasi penjualan tertentu, misalnya '1000' dan '2000'. Filter ini penting untuk memfokuskan analisis dan meningkatkan kinerja kueri.
- Filter jenis dokumen: Gunakan placeholder '{DocTypes}' untuk memilih jenis pesanan penjualan tertentu, misalnya 'OR' untuk Standard Order. Dengan begitu, dokumen yang tidak relevan, seperti pengiriman gratis atau retur, tidak masuk ke alur proses utama.
- Pengenal sistem sumber: Placeholder tetap '{SourceSystemName}' digunakan untuk menandai setiap catatan dengan sistem asalnya. Ganti dengan nama yang sesuai untuk instans SAP ECC Anda, misalnya SAP_ECC_PRD.
- Kompatibilitas database: Fungsi untuk menggabungkan kolom tanggal dan waktu, [Your DB-specific timestamp function], hanyalah placeholder. Ganti dengan fungsi yang sesuai untuk database Anda, misalnya TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UZEIT), 'YYYYMMDDHH24MISS') untuk SAP HANA atau CAST(CDHDR.UDATE AS DATETIME) + CAST(CDHDR.UZEIT AS DATETIME) untuk SQL Server.
- Prasyarat: Metode ini memerlukan kredensial database dengan akses langsung hanya-baca. Pengguna database harus memiliki otorisasi untuk mengakses semua tabel yang dirujuk dalam kueri, termasuk VBAK, VBAP, VBFA, CDHDR, CDPOS, LIKP, VBRK, dan BSAD.
Contoh kueri sql
WITH SalesOrders AS (
SELECT VBELN
FROM VBAK
WHERE ERDAT BETWEEN '{StartDate}' AND '{EndDate}' -- Filter by creation date
AND VKORG IN ('{SalesOrgs}') -- Filter by Sales Organization(s)
AND AUART IN ('{DocTypes}') -- Filter by Sales Document Type(s)
)
-- 1. Sales Order Created
SELECT
vbak.VBELN AS "SalesOrder",
'Sales Order Created' AS "Activity",
[Your DB-specific timestamp function](vbak.ERDAT, vbak.ERZET) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
vbak.ERNAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
vbak.LIFSK AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBAK vbak
JOIN SalesOrders so ON vbak.VBELN = so.VBELN
UNION ALL
-- 2. Sales Order Changed
SELECT
cdhdr.OBJECTID AS "SalesOrder",
'Sales Order Changed' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
vbak.LIFSK AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM CDHDR cdhdr
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG' AND cdhdr.TCODE IN ('VA02')
UNION ALL
-- 3. Credit Check Performed (Release)
SELECT
cdhdr.OBJECTID AS "SalesOrder",
'Credit Check Performed' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
vbak.LIFSK AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM CDHDR cdhdr
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG'
AND cdpos.TABNAME = 'VBUK'
AND cdpos.FNAME = 'CMGST'
AND cdpos.VALUE_NEW = 'B' -- Credit status 'Released'
UNION ALL
-- 4. Order Confirmed (Overall status not blocked)
SELECT
cdhdr.OBJECTID AS "SalesOrder",
'Order Confirmed' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM CDHDR cdhdr
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG'
AND cdpos.TABNAME = 'VBUK'
AND cdpos.FNAME = 'GBSTK'
AND cdpos.VALUE_OLD <> 'A' AND cdpos.VALUE_NEW = 'A' -- Status changes to 'Not yet processed'
UNION ALL
-- 5. Delivery Block Set
SELECT
cdhdr.OBJECTID AS "SalesOrder",
'Delivery Block Set' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
cdpos.VALUE_NEW AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM CDHDR cdhdr
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG'
AND cdpos.TABNAME = 'VBAK'
AND cdpos.FNAME = 'LIFSK'
AND cdpos.VALUE_NEW IS NOT NULL AND cdpos.VALUE_NEW <> ''
UNION ALL
-- 6. Delivery Created
SELECT
vbfa.VBELV AS "SalesOrder",
'Delivery Created' AS "Activity",
[Your DB-specific timestamp function](likp.ERDAT, likp.ERZET) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
likp.ERNAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
vbak.LIFSK AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN LIKP likp ON vbfa.VBELN = likp.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'C' AND vbfa.VBTYP_N = 'J'
UNION ALL
-- 7. Picking Completed
SELECT
vbfa.VBELV AS "SalesOrder",
'Picking Completed' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN CDHDR cdhdr ON vbfa.VBELN = cdhdr.OBJECTID
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'C' AND vbfa.VBTYP_N = 'J'
AND cdhdr.OBJECTCLASS = 'LIEFERUNG'
AND cdpos.TABNAME = 'VBUK'
AND cdpos.FNAME = 'PKSTK'
AND cdpos.VALUE_NEW = 'C'
UNION ALL
-- 8. Goods Issued
SELECT
vbfa_gi.VBELV AS "SalesOrder",
'Goods Issued' AS "Activity",
[Your DB-specific timestamp function](mkpf.BUDAT, mkpf.CPUTM) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
mkpf.USNAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa_gi
JOIN SalesOrders so ON vbfa_gi.VBELV = so.VBELN
JOIN MKPF mkpf ON vbfa_gi.VBELN = mkpf.XBLNR -- XBLNR is Reference Document Number
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa_gi.VBTYP_V = 'J' AND vbfa_gi.VBTYP_N = 'R'
UNION ALL
-- 9. Proof Of Delivery Confirmed
SELECT
vbfa.VBELV AS "SalesOrder",
'Proof Of Delivery Confirmed' AS "Activity",
[Your DB-specific timestamp function](likp.PODAT, '000000') AS "StartTime", -- PODAT is only a date
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
likp.AENAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN LIKP likp ON vbfa.VBELN = likp.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'C' AND vbfa.VBTYP_N = 'J' AND likp.PODAT IS NOT NULL AND likp.PODAT <> '00000000'
UNION ALL
-- 10. Invoice Created
SELECT
vbfa.VBELV AS "SalesOrder",
'Invoice Created' AS "Activity",
[Your DB-specific timestamp function](vbrk.ERDAT, vbrk.ERZET) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
vbrk.ERNAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN VBRK vbrk ON vbfa.VBELN = vbrk.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'C' AND vbfa.VBTYP_N = 'M'
UNION ALL
-- 11. Invoice Cancelled
SELECT
vbfa.VBELV AS "SalesOrder",
'Invoice Cancelled' AS "Activity",
[Your DB-specific timestamp function](vbrk.ERDAT, vbrk.ERZET) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
vbrk.ERNAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN VBRK vbrk ON vbfa.VBELN = vbrk.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'M' AND vbfa.VBTYP_N = 'N'
UNION ALL
-- 12. Payment Received
SELECT
vbfa.VBELV AS "SalesOrder",
'Payment Received' AS "Activity",
[Your DB-specific timestamp function](bsad.AUGDT, '000000') AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
NULL AS "User", -- Clearing user not readily available here
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN VBRK vbrk ON vbfa.VBELN = vbrk.VBELN
JOIN BSAD bsad ON vbrk.VBELN = bsad.VBLNR
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'C' AND vbfa.VBTYP_N = 'M'
AND bsad.AUGDT IS NOT NULL AND bsad.AUGDT <> '00000000'
UNION ALL
-- 13. Order Item Closed
SELECT DISTINCT
cdhdr.OBJECTID AS "SalesOrder",
'Order Item Closed' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
vbap.MATNR AS "MaterialNumber",
NULL AS "DeliveryBlock",
vbap.ABGRU AS "RejectionReason"
FROM CDHDR cdhdr
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN VBAP vbap ON cdhdr.OBJECTID = vbap.VBELN AND SUBSTRING(cdpos.TABKEY, 4, 6) = vbap.POSNR
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG'
AND cdpos.TABNAME = 'VBUP'
AND cdpos.FNAME = 'GBSTA'
AND cdpos.VALUE_NEW = 'C' -- Item is completely processed
UNION ALL
-- 14. Order Cancelled
SELECT DISTINCT
cdhdr.OBJECTID AS "SalesOrder",
'Order Cancelled' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
vbap.MATNR AS "MaterialNumber",
NULL AS "DeliveryBlock",
cdpos.VALUE_NEW AS "RejectionReason"
FROM CDHDR cdhdr
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN VBAP vbap ON cdhdr.OBJECTID = vbap.VBELN AND SUBSTRING(cdpos.TABKEY, 4, 6) = vbap.POSNR
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG'
AND cdpos.TABNAME = 'VBAP'
AND cdpos.FNAME = 'ABGRU'
AND cdpos.VALUE_NEW IS NOT NULL AND cdpos.VALUE_NEW <> ''; Siap memulai?
Gunakan templat data ini untuk memahami proses pemrosesan pesanan penjualan Order to Cash secara lebih baik. Mulai tingkatkan efisiensi dan percepat arus kas Anda.
Optimalkan proses penjualan Order to Cash sekarang
Atasi hambatan, pangkas waktu siklus hingga 30%, dan percepat arus kas.
Tidak perlu kartu kredit. Siapkan dalam hitungan menit.