Templat data manajemen rantai pasok Anda
Templat data manajemen rantai pasok Anda
- Atribut yang disarankan untuk dikumpulkan
- Aktivitas utama yang perlu dilacak
- Panduan ekstraksi
Atribut manajemen rantai pasok
| Nama | Deskripsi | ||
|---|---|---|---|
| Nama aktivitas ActivityName | Nama aktivitas bisnis atau peristiwa yang terjadi pada titik tertentu dalam proses rantai pasok. | ||
| Deskripsi Atribut ini menjelaskan langkah atau tonggak tertentu dalam siklus Pesanan logistik, seperti 'Pesanan pembelian diterbitkan' atau 'Pengeluaran barang dibukukan'. Aktivitas-aktivitas ini membentuk urutan peristiwa dalam proses. Analisis urutan aktivitas merupakan inti process mining. Analisis ini membantu menemukan alur proses yang sebenarnya, membandingkannya dengan prosedur operasi standar, serta mengidentifikasi langkah yang menyebabkan keterlambatan atau pekerjaan ulang. Mengapa ini penting Atribut ini menentukan langkah-langkah proses. Hal ini penting untuk menemukan peta proses, menganalisis variasi, dan mengukur waktu siklus antaraktivitas. Sumber data Dihasilkan dengan memetakan kode transaksi atau perubahan status dari berbagai tabel SAP (misalnya, EKKO, LIKP, VBUK) ke nama aktivitas yang mudah dipahami saat transformasi data. Contoh Pesanan pembelian diterbitkanPenerimaan barang untuk pesanan pembelian dicatatPengiriman keluar dibuatBukti pengiriman dikonfirmasi | |||
| Pesanan logistik LogisticsOrder | Pengenal unik untuk satu proses rantai pasok dari awal, mulai dari permintaan, hingga konfirmasi pengiriman akhir. | ||
| Deskripsi Pesanan logistik menjadi pengenal kasus utama yang menghubungkan semua aktivitas terkait permintaan atau permintaan pemenuhan tertentu dalam rantai pasok. Dengan pendekatan ini, Anda dapat melacak seluruh perjalanan produk, mulai dari perencanaan dan pengadaan hingga produksi dan distribusi, sehingga proses terlihat secara utuh. Dalam process mining, analisis berdasarkan Pesanan logistik menunjukkan seluruh jalur yang ditempuh untuk memenuhi permintaan. Analisis ini membantu menemukan variasi yang umum, hambatan, dan penyimpangan di seluruh rantai pasok, bukan hanya melihat proses pengadaan atau penjualan secara terpisah. Mengapa ini penting Kunci ini menghubungkan semua peristiwa terkait ke dalam satu instans proses, sehingga analisis rantai pasok dapat dilakukan dari awal hingga akhir. Sumber data Ini adalah pengenal konseptual yang mungkin perlu dibentuk dengan menghubungkan berbagai nomor dokumen, seperti nomor Pesanan penjualan dengan nomor Pesanan pembelian dan Pengiriman berikutnya. Lihat dokumentasi SAP S/4HANA Supply Chain atau tanyakan kepada ahli terkait. Contoh LO-4500078192LO-4500078193LO-4500078194 | |||
| Waktu peristiwa EventTime | Stempel waktu yang menunjukkan kapan aktivitas terjadi, termasuk tanggal dan waktunya. | ||
| Deskripsi Atribut ini mencatat tanggal dan waktu yang tepat untuk setiap aktivitas dalam proses. Informasi ini menjadi dasar kronologis log peristiwa dan mengurutkan langkah proses sesuai urutan terjadinya. Waktu peristiwa penting untuk semua analisis berbasis waktu. Data ini digunakan untuk menghitung waktu siklus antaraktivitas, mengukur total waktu penyelesaian proses, melihat tren kinerja dari waktu ke waktu, dan mengetahui kapan hambatan kemungkinan besar terjadi. Mengapa ini penting Stempel waktu ini diperlukan untuk menghitung durasi dan metrik kinerja, serta menganalisis hambatan proses dan waktu penyelesaian. Sumber data Diambil dari field stempel waktu yang terkait dengan pembuatan dokumen atau perubahan status di tabel inti SAP, seperti CDHDR/CDPOS untuk dokumen perubahan, atau field tanggal dan waktu tertentu seperti ERDAT/ERZET di tabel header. Contoh 2023-04-15T10:25:00Z2023-04-18T14:00:00Z2023-04-22T08:15:00Z | |||
| Pembaruan data terakhir LastDataUpdate | Stempel waktu saat data terakhir kali diperbarui atau diekstrak dari sistem sumber. | ||
| Deskripsi Atribut ini menunjukkan kapan data log peristiwa terakhir diperbarui. Tanggal ini memberi tahu pengguna seberapa baru data yang dianalisis. Untuk mengambil keputusan yang tepat, penting untuk mengetahui kapan data terakhir diperbarui. Stempel waktu ini membantu pengguna mempercayai data dan memahami rentang waktu yang dicakup oleh dasbor dan KPI. Mengapa ini penting Menunjukkan kapan data terakhir diperbarui, sehingga pengguna tahu seberapa mutakhir analisis proses. Sumber data Field metadata ini biasanya dibuat dan diisi oleh alat ekstraksi data atau ETL setelah pembaruan data berhasil. Contoh 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| Sistem sumber SourceSystem | Sistem asal data. | ||
| Deskripsi Menunjukkan instans sistem sumber tempat data peristiwa dihasilkan. Dalam lanskap sistem yang kompleks, perusahaan mungkin memiliki beberapa instans SAP S/4HANA untuk wilayah atau unit bisnis yang berbeda. Atribut ini penting untuk tata kelola data dan pemisahan analisis. Analis dapat membandingkan kinerja proses antar sistem atau membatasi data pada satu sumber yang menjadi acuan. Mengapa ini penting Memberikan konteks penting tentang asal data, yang berguna untuk validasi data dan perbandingan proses di berbagai lanskap sistem. Sumber data Biasanya berupa nilai statis yang ditambahkan saat ekstraksi data untuk menunjukkan asalnya, misalnya SAP System ID (SAPSID). Contoh S4H_PROD_EUS4H_PROD_NAS4H_DEV | |||
| Hasil inspeksi kualitas QualityInspectionResult | Hasil pemeriksaan kualitas, seperti 'Lulus' atau 'Gagal'. | ||
| Deskripsi Atribut ini mencatat hasil pemeriksaan kualitas barang yang diproduksi atau diterima. Hasilnya menentukan apakah barang dapat melanjutkan ke langkah berikutnya atau perlu dikerjakan ulang, dikembalikan, atau dibuang. Atribut ini penting untuk dasbor dan KPI Tingkat penolakan kontrol kualitas. Analisis frekuensi dan penyebab kegagalan membantu menemukan masalah kualitas sistemik pada produk, pemasok, atau lini produksi tertentu. Mengapa ini penting Mendukung penghitungan KPI terkait kualitas secara langsung dan membantu menemukan sumber masalah kualitas dalam rantai pasok. Sumber data Informasi ini biasanya disimpan di modul Quality Management (QM). Data dapat berasal dari tabel lot inspeksi seperti QALS dan kode keputusan penggunaan di QAVE. Contoh LulusGagalPerlu dikerjakan ulangLulus dengan penyimpangan | |||
| Nama pelanggan CustomerName | Nama pelanggan yang pesanannya sedang dipenuhi. | ||
| Deskripsi Atribut ini menunjukkan pelanggan akhir yang terkait dengan pesanan penjualan dan aktivitas pemenuhan berikutnya. Atribut ini memberi konteks pada sisi permintaan dalam proses rantai pasok. Dalam process mining, analisis berdasarkan pelanggan membantu menemukan pola pemenuhan atau tingkat kinerja yang berbeda untuk pelanggan utama. Atribut ini digunakan di dasbor seperti Analisis keterlambatan bukti pengiriman untuk melihat apakah pelanggan tertentu sering terlambat memberikan konfirmasi. Mengapa ini penting Memungkinkan analisis dikelompokkan berdasarkan pelanggan, sehingga perilaku, hambatan, atau kinerja perjanjian tingkat layanan yang spesifik bagi pelanggan dapat diketahui. Sumber data Nomor pelanggan (KUNNR) disimpan dalam dokumen penjualan (misalnya, tabel VBAK). Nama pelanggan diambil dari tabel master pelanggan pusat KNA1. Contoh Retail CorpInnovate SolutionsManufacturing Partners | |||
| Nama pemasok SupplierName | Nama pemasok atau vendor yang terkait dengan aktivitas pengadaan. | ||
| Deskripsi Atribut ini menunjukkan pemasok barang atau jasa. Biasanya atribut ini terkait dengan aktivitas seperti 'Permintaan pembelian dibuat' dan 'Pesanan pembelian diterbitkan'. Nama pemasok penting untuk dasbor Kinerja pengiriman pemasok. Anda dapat memfilter dan mengelompokkan data untuk membandingkan tingkat ketepatan waktu pengiriman, waktu penyelesaian, dan kualitas antar pemasok. Informasi ini penting untuk strategi pengadaan dan pengelolaan hubungan dengan pemasok. Mengapa ini penting Memungkinkan analisis kinerja berdasarkan pemasok, yang penting untuk mengoptimalkan proses pengadaan dan menilai keandalan pemasok. Sumber data Nomor pemasok (LIFNR) disimpan dalam dokumen pembelian (misalnya, tabel EKKN, EBAN). Nama pemasok diambil dari tabel master vendor pusat LFA1. Contoh Global Components Inc.Advanced Materials LLCPrecision Parts Co. | |||
| Nomor material MaterialNumber | Pengenal unik untuk produk atau material yang diproses. | ||
| Deskripsi Nomor material, yang sering disebut SKU, adalah kode unik untuk produk tertentu di SAP. Kode ini menghubungkan aktivitas proses dengan barang fisik atau digital yang diproduksi, dibeli, atau dikirim. Atribut ini penting untuk analisis berdasarkan produk. Atribut ini membantu mengetahui apakah produk tertentu lebih sering mengalami masalah kualitas, keterlambatan produksi, atau kehabisan stok. Anda dapat memfilter dasbor berdasarkan material untuk memeriksa kinerja lini produk tertentu. Mengapa ini penting Memungkinkan analisis pada tingkat produk untuk mengetahui apakah masalah proses, seperti keterlambatan atau kegagalan kualitas, terpusat pada material tertentu. Sumber data Tersedia di tabel tingkat item untuk sebagian besar dokumen, seperti VBAP untuk pesanan penjualan, EKPO untuk pesanan pembelian, dan LIPS untuk pengiriman. Nama field biasanya MATNR. Contoh FG-100-ARM-2034-BSA-5500 | |||
| Pabrik Plant | Fasilitas produksi atau distribusi tempat aktivitas berlangsung. | ||
| Deskripsi Pabrik adalah unit organisasi SAP yang mewakili lokasi produksi, penyimpanan, atau distribusi barang. Pabrik memberikan konteks geografis atau fungsional untuk aktivitas proses. Analisis kinerja proses berdasarkan pabrik sering dibutuhkan. Analisis ini memungkinkan perbandingan efisiensi, hasil produksi, dan kepatuhan antar lokasi operasional, sehingga praktik yang baik atau lokasi yang perlu diperbaiki dapat diketahui. Mengapa ini penting Memberikan dimensi geografis atau organisasi untuk analisis, sehingga kinerja dapat dibandingkan antar fasilitas. Sumber data Tersedia di banyak tabel item dokumen, seperti VBAP (penjualan), EKPO (pembelian), dan LIPS (pengiriman). Nama field biasanya WERKS. Contoh 100021003500 | |||
| Pengguna yang menjalankan ExecutingUser | ID pengguna yang menjalankan aktivitas. | ||
| Deskripsi Atribut ini mencatat nama atau ID pengguna SAP karyawan yang melakukan aktivitas, seperti membuat pesanan pembelian atau membukukan penerimaan barang. Atribut ini menghubungkan langkah proses dengan sumber daya manusia yang terlibat. Analisis berdasarkan pengguna membantu memahami pembagian beban kerja, mengetahui kebutuhan pelatihan, dan melihat perbedaan kinerja antarindividu atau tim. Atribut ini juga berguna untuk analisis kepatuhan, misalnya untuk mengetahui siapa yang menjalankan langkah proses penting. Mengapa ini penting Mengaitkan aktivitas dengan pengguna tertentu, sehingga beban kerja dan kinerja dapat dianalisis serta tindakan yang tidak sesuai dapat diselidiki. Sumber data Tersedia di field 'Dibuat oleh' atau 'Diubah oleh' pada banyak tabel SAP, seperti ERNAM di EKKO (header PO), LIKP (header pengiriman), dan VBRK (header faktur). Contoh CBROWNJSMITHASINGH | |||
| Tanggal pengiriman yang diminta RequestedDeliveryDate | Tanggal yang diminta kepada pemasok untuk mengirimkan barang. | ||
| Deskripsi Tanggal pengiriman yang tercantum dalam pesanan pembelian dan menjadi target bagi pemasok. Tanggal ini menjadi acuan untuk mengukur kinerja pengiriman aktual. Tanggal ini penting untuk menghitung KPI Tingkat ketepatan waktu pengiriman pemasok. Dengan membandingkan tanggal penerimaan barang aktual dengan tanggal yang diminta, perusahaan dapat mengukur secara objektif apakah pemasok memenuhi komitmennya. Mengapa ini penting Tanggal ini menjadi acuan untuk menghitung KPI 'Tingkat ketepatan waktu pengiriman pemasok', sehingga penting untuk mengelola kinerja pemasok. Sumber data Tersedia di tabel item pesanan pembelian EKPO, dengan nama field EINDT (Tanggal pengiriman). Contoh 2023-05-20T00:00:00Z2023-06-15T00:00:00Z2023-07-01T00:00:00Z | |||
| Kuantitas pesanan OrderQuantity | Jumlah material dalam item baris pesanan. | ||
| Deskripsi Atribut ini menunjukkan jumlah unit material yang diminta dalam item baris pesanan penjualan atau pesanan pembelian. Atribut ini mengukur volume setiap transaksi. Analisis berdasarkan kuantitas membantu memprioritaskan pesanan bervolume tinggi yang mungkin berdampak lebih besar pada bisnis. Kuantitas juga dapat digunakan untuk menormalkan metrik lain, seperti menghitung biaya per unit, atau memahami pengaruh ukuran pesanan terhadap waktu pemrosesan. Mengapa ini penting Memberikan konteks volume untuk transaksi, sehingga dampak dapat dianalisis dan kasus dapat dikelompokkan berdasarkan ukuran. Sumber data Tersedia di tabel tingkat item, seperti MENGE di EKPO (pesanan pembelian) atau KWMENG di VBAP (pesanan penjualan). Contoh 100500025 | |||
| Nama pengangkut CarrierName | Nama perusahaan transportasi atau perusahaan ekspedisi yang menangani pengiriman. | ||
| Deskripsi Nama pengangkut menunjukkan penyedia layanan logistik yang bertanggung jawab mengangkut barang antar lokasi, misalnya dari gudang ke pelanggan. Atribut ini penting untuk dasbor Analisis waktu siklus transportasi. Atribut ini memungkinkan perbandingan waktu transit, biaya, dan keandalan antar pengangkut, sehingga perencanaan logistik dan pemilihan pengangkut dapat ditingkatkan. Mengapa ini penting Memungkinkan analisis kinerja berdasarkan penyedia transportasi, yang penting untuk mengoptimalkan biaya logistik dan waktu pengiriman. Sumber data ID pengangkut (agen ekspedisi) disimpan dalam dokumen pengiriman, seperti tabel VTTK (header pengiriman). Namanya diambil dari tabel data master seperti LFA1. Contoh DHLFedExMaersk Logistics | |||
| Nomor pesanan pembelian PurchaseOrderNumber | Pengenal unik untuk dokumen Pesanan pembelian (PO). | ||
| Deskripsi Nomor pesanan pembelian adalah nomor dokumen resmi untuk memesan material dari pemasok. Nomor ini menjadi pengenal penting dalam proses pengadaan di rantai pasok. Atribut ini memungkinkan Anda menelusuri proses pengadaan secara terperinci. Atribut ini digunakan di dasbor Waktu siklus pengadaan dari awal hingga akhir dan untuk menghitung KPI Tingkat ketepatan waktu pengiriman pemasok, dengan menghubungkan aktivitas permintaan, pemesanan, penerimaan, dan pembayaran. Mengapa ini penting Menjadi pengenal utama untuk menelusuri satu tingkat lebih dalam ke subproses pengadaan dan menghubungkan peristiwa pengadaan terkait. Sumber data Tersedia di tabel header PO EKKO dan tabel item EKPO. Nama field-nya EBELN. Contoh 450007819245000781934500078194 | |||
| Nomor pesanan penjualan SalesOrderNumber | Pengenal unik untuk dokumen Pesanan penjualan (SO). | ||
| Deskripsi Nomor pesanan penjualan adalah nomor dokumen resmi yang mengonfirmasi penjualan kepada pelanggan. Nomor ini menjadi pengenal penting dalam proses pesanan hingga pembayaran di rantai pasok. Atribut ini penting untuk melacak pemenuhan pesanan pelanggan tertentu. Atribut ini menghubungkan permintaan awal pelanggan dengan aktivitas berikutnya, seperti pengiriman dan penagihan, serta mendukung Analisis waktu pemenuhan pesanan. Mengapa ini penting Menjadi pengenal utama untuk subproses pemenuhan pesanan, yang menghubungkan permintaan pelanggan dengan logistik dan penyelesaian keuangan. Sumber data Tersedia di tabel header SO VBAK dan tabel item VBAP. Nama field-nya VBELN. Contoh 100023451000234610002347 | |||
| Pekerjaan ulang IsRework | Penanda yang menunjukkan apakah suatu aktivitas atau rangkaian aktivitas merupakan pekerjaan ulang. | ||
| Deskripsi Atribut ya atau tidak ini menandai aktivitas yang mengulangi langkah sebelumnya dalam proses, yang menunjukkan adanya pekerjaan ulang atau koreksi. Misalnya, jika langkah 'Inspeksi kualitas' diikuti oleh 'Pesanan produksi dibuat', lalu diikuti lagi oleh 'Inspeksi kualitas', inspeksi kedua dapat ditandai sebagai pekerjaan ulang. Menemukan pekerjaan ulang penting untuk memahami inefisiensi proses dan biaya tersembunyi. Penanda ini membantu mengukur frekuensi dan dampak siklus pekerjaan ulang, mendukung penghitungan KPI Tingkat kesalahan pemrosesan pesanan, dan menunjukkan area yang perlu diperbaiki. Mengapa ini penting Membantu mengukur inefisiensi proses dengan menandai dan menghitung aktivitas yang termasuk dalam siklus pekerjaan ulang. Sumber data Biasanya dihitung di dalam alat process mining dengan menemukan urutan aktivitas yang berulang dalam kasus yang sama. Contoh truefalse | |||
| Pengiriman terlambat IsLateDelivery | Penanda ya atau tidak yang menunjukkan apakah pemasok mengirim barang setelah tanggal pengiriman yang diminta. | ||
| Deskripsi Penanda hasil perhitungan ini menunjukkan apakah pengiriman tepat waktu. Nilainya ditentukan dengan membandingkan stempel waktu aktivitas 'Penerimaan barang untuk PO dibukukan' dengan atribut 'Tanggal pengiriman yang diminta'. Atribut ini memudahkan pembuatan dasbor dan KPI terkait kinerja pemasok. Anda dapat memfilter dan mengelompokkan data dengan cepat untuk menghitung Tingkat ketepatan waktu pengiriman pemasok serta mengetahui pemasok, material, atau wilayah yang paling sering mengalami keterlambatan. Mengapa ini penting Memudahkan analisis kinerja pemasok dengan menunjukkan hasil yang jelas untuk setiap pengiriman, yang penting untuk KPI ketepatan waktu pengiriman. Sumber data Ini adalah field hasil perhitungan. Logikanya: IF ('Penerimaan barang untuk PO dibukukan'.EventTime > PurchaseOrder.RequestedDeliveryDate) THEN True ELSE False. Contoh truefalse | |||
| Waktu selesai EndTime | Stempel waktu yang menunjukkan kapan aktivitas selesai, digunakan untuk menghitung waktu pemrosesan. | ||
| Deskripsi Waktu selesai menandai berakhirnya suatu aktivitas. Waktu mulai (EventTime) menunjukkan kapan aktivitas dimulai, sedangkan waktu selesai diperlukan untuk mengetahui durasi pelaksanaannya, terutama untuk aktivitas yang tidak berlangsung seketika. Dengan waktu mulai dan selesai, analisis dapat mengukur waktu pemrosesan dan waktu tunggu secara akurat. Ini membantu membedakan waktu yang digunakan untuk mengerjakan tugas dari waktu menunggu langkah berikutnya, sehingga peluang peningkatan efisiensi lebih mudah ditemukan. Mengapa ini penting Memungkinkan penghitungan waktu pemrosesan aktivitas secara akurat dan membantu membedakan pekerjaan yang memberi nilai tambah dari waktu tunggu. Sumber data Dapat ditentukan dari perubahan status di SAP. Misalnya, waktu mulai berasal dari pembaruan status 'Sedang diproses' dan waktu selesai dari pembaruan status 'Selesai' di tabel seperti JEST/JCDS. Untuk peristiwa yang berlangsung seketika, EndTime dapat sama dengan StartTime. Contoh 2023-04-15T11:30:00Z2023-04-18T14:05:00Z2023-04-22T09:00:00Z | |||
Aktivitas manajemen rantai pasok
| Aktivitas | Deskripsi | ||
|---|---|---|---|
| Barang selesai diproduksi | Aktivitas ini menandai konfirmasi bahwa produksi barang telah selesai. Biasanya, aktivitas ini dicatat sebagai penerimaan barang dari pesanan produksi, yang menambahkan produk jadi ke persediaan. | ||
| Mengapa ini penting Aktivitas ini menandai akhir siklus produksi. Waktu antara pembuatan pesanan produksi dan peristiwa ini menunjukkan waktu tunggu produksi, salah satu metrik penting untuk mengukur efisiensi produksi. Sumber data Peristiwa ini dapat dicatat secara eksplisit melalui pencatatan dokumen material (penerimaan barang dari pesanan produksi), atau disimpulkan dari konfirmasi akhir pesanan produksi (tabel AFRU) maupun perubahan status menjadi 'Delivered'. Pengumpulan data Simpulkan dari tanggal pencatatan dokumen material penerimaan barang terakhir untuk pesanan produksi atau dari perubahan status. Jenis peristiwa inferred | |||
| Bukti pengiriman dikonfirmasi | Menandai konfirmasi resmi dari pelanggan atau pengangkut bahwa barang telah diterima sesuai spesifikasi. Konfirmasi ini sering dicatat dengan memperbarui informasi POD pada pengiriman keluar. | ||
| Mengapa ini penting Aktivitas ini menandai berakhirnya proses pemenuhan pesanan. Aktivitas ini penting untuk penagihan yang akurat, penyelesaian sengketa, dan pengukuran tahap akhir siklus pengiriman. Sumber data Peristiwa ini tercatat secara eksplisit. Tanggal bukti pengiriman dicatat di tabel header pengiriman (LIKP, field PODAT) atau tabel POD terkait (VLPOD). Pengumpulan data Gunakan tanggal Proof of Delivery (LIKP-PODAT) dari dokumen pengiriman. Jenis peristiwa explicit | |||
| Penerimaan barang untuk pesanan pembelian dicatat | Menunjukkan penerimaan fisik bahan baku atau barang dari pemasok berdasarkan pesanan pembelian. Peristiwa ini dicatat saat barang diterima di gudang atau pabrik. | ||
| Mengapa ini penting Aktivitas ini menuntaskan tahap pengiriman pemasok dalam siklus pengadaan. Aktivitas ini penting untuk menghitung tingkat pengiriman pemasok tepat waktu dan memahami kinerja logistik masuk. Sumber data Peristiwa ini dicatat secara eksplisit melalui pencatatan dokumen material. Stempel waktu peristiwa tersimpan di tabel header dokumen material (MKPF, kolom BUDAT). Tautan ke pesanan pembelian terdapat di tabel item (MSEG). Pengumpulan data Gunakan tanggal pencatatan (MKPF-BUDAT) dari dokumen material yang terkait dengan pesanan pembelian. Jenis peristiwa explicit | |||
| Pengeluaran barang dibukukan | Aktivitas ini menandai keluarnya barang dari gudang secara fisik dan legal. Stok berkurang dan harga pokok penjualan dibukukan, sebagai tanda bahwa pesanan resmi dikirim. | ||
| Mengapa ini penting Tonggak penting ini menandai dimulainya masa pengiriman. Pada titik ini, barang resmi meninggalkan penguasaan perusahaan untuk dikirim. Sumber data Peristiwa ini tercatat secara eksplisit dan membuat dokumen material. Stempel waktunya dicatat di header dokumen material (MKPF, field BUDAT) dan memperbarui status pergerakan barang di dokumen pengiriman (LIKP, field WBSTK). Pengumpulan data Gunakan tanggal pembukuan (MKPF-BUDAT) dari dokumen material pengeluaran barang yang terkait dengan pengiriman keluar. Jenis peristiwa explicit | |||
| Pesanan pembelian diterbitkan | Menandai pembuatan dan penerbitan resmi pesanan pembelian kepada pemasok eksternal untuk memperoleh bahan yang dibutuhkan. Aktivitas ini mengubah permintaan pembelian menjadi komitmen yang mengikat secara hukum dengan pemasok. | ||
| Mengapa ini penting Sebagai tonggak penting, aktivitas ini diperlukan untuk mengukur waktu tunggu pemasok dan siklus pengadaan. Aktivitas ini menjadi dasar untuk menilai kinerja pengiriman pemasok tepat waktu. Sumber data Peristiwa ini dicatat secara eksplisit saat pesanan pembelian dibuat. Stempel waktu pembuatan tersimpan di tabel header pesanan pembelian (EKKO, kolom AEDAT). Pengumpulan data Gunakan tanggal pembuatan dokumen (EKKO-AEDAT) untuk pesanan pembelian. Jenis peristiwa explicit | |||
| Pesanan penjualan dibuat | Aktivitas ini menandai pembuatan pesanan penjualan baru yang mencatat permintaan barang dari pelanggan secara resmi. Peristiwa ini tercatat secara eksplisit saat pengguna menyimpan dokumen pesanan penjualan baru di sistem. | ||
| Mengapa ini penting Ini adalah titik awal utama proses dari pesanan hingga pembayaran. Dengan menganalisis waktu antara peristiwa ini dan peristiwa lainnya, Anda dapat mengetahui keseluruhan waktu pemenuhan pesanan dan menemukan keterlambatan pada tahap awal. Sumber data Peristiwa ini dicatat secara eksplisit. Anda dapat menemukannya di dokumen perubahan tabel pesanan penjualan (CDHDR/CDPOS) atau menggunakan stempel waktu pembuatan di tabel header pesanan penjualan (VBAK, kolom ERDAT). Pengumpulan data Gunakan tanggal pembuatan (VBAK-ERDAT) dan waktu (VBAK-ERZET) dokumen pesanan penjualan. Jenis peristiwa explicit | |||
| Barang dibongkar di tujuan | Aktivitas ini menandai pembongkaran barang secara fisik di lokasi pelanggan. SAP mungkin tidak mencatat peristiwa ini secara eksplisit, sehingga biasanya perlu disimpulkan dari data pengangkut atau peristiwa berikutnya. | ||
| Mengapa ini penting Peristiwa ini menandai berakhirnya perjalanan pengiriman. Durasi dari pengeluaran barang hingga titik ini menunjukkan waktu transportasi, yang penting untuk mengoptimalkan logistik. Sumber data Peristiwa ini jarang tercatat secara eksplisit di ERP inti. Peristiwa ini dapat disimpulkan dari pesan EDI pengangkut, data dari modul Transportation Management (TM), atau stempel waktu dokumen bukti pengiriman jika tersedia. Pengumpulan data Simpulkan dari pembaruan status pengangkut (misalnya, EDI 214) atau gunakan stempel waktu Proof of Delivery sebagai perkiraan terdekat. Jenis peristiwa inferred | |||
| Dokumen pengiriman dibuat | Menandai pembuatan dokumen pengiriman yang mengelompokkan satu atau beberapa pengiriman untuk perencanaan transportasi. Dokumen ini memuat informasi tentang pengangkut, rute, dan moda transportasi. | ||
| Mengapa ini penting Aktivitas ini menandai dimulainya perencanaan transportasi secara resmi. Analisis waktu antara pengeluaran barang dan penyelesaian pengiriman menunjukkan efisiensi proses transportasi. Sumber data Peristiwa ini tercatat secara eksplisit di tabel header pengiriman (VTTK, field ERDAT). Peristiwa ini merupakan bagian dari modul LE-TRA, yang mungkin tidak digunakan oleh semua organisasi. Pengumpulan data Gunakan tanggal pembuatan (VTTK-ERDAT) dari header dokumen pengiriman. Jenis peristiwa explicit | |||
| Faktur pelanggan dibuat | Aktivitas ini menandai pembuatan dokumen penagihan kepada pelanggan berdasarkan barang atau jasa yang dikirim. Aktivitas ini memulai tahap akhir penyelesaian keuangan dalam proses. | ||
| Mengapa ini penting Aktivitas ini penting untuk menganalisis waktu siklus penagihan. Keterlambatan antara konfirmasi pengiriman dan pembuatan faktur dapat mengganggu arus kas. Sumber data Peristiwa ini tercatat secara eksplisit. Stempel waktu pembuatannya dicatat di tabel header dokumen penagihan (VBRK, field ERDAT). Pengumpulan data Gunakan tanggal pembuatan (VBRK-ERDAT) dari header dokumen penagihan. Jenis peristiwa explicit | |||
| Ketersediaan persediaan diperiksa | Menunjukkan pemeriksaan oleh sistem atau secara manual untuk memastikan barang yang diminta tersedia guna memenuhi pesanan penjualan. Pemeriksaan ini sering dilakukan otomatis saat pesanan penjualan dibuat, tetapi mungkin tidak dicatat sebagai peristiwa tersendiri. | ||
| Mengapa ini penting Memahami waktu antara pembuatan pesanan dan pemeriksaan ini, serta hasilnya, membantu Anda menganalisis dampak tingkat persediaan terhadap waktu pemenuhan. Keterlambatan pada tahap ini sering memicu aktivitas pengadaan atau produksi. Sumber data Biasanya, tahap ini tidak dicatat sebagai peristiwa tersendiri. Tahap ini dapat disimpulkan dari pembuatan baris jadwal pertama yang dikonfirmasi di tabel item pesanan penjualan (VBEP) atau dari perubahan status pada item pesanan. Pengumpulan data Simpulkan dari pembaruan status konfirmasi pada baris jadwal pesanan penjualan (tabel VBEP). Jenis peristiwa inferred | |||
| Pemeriksaan kualitas dilakukan | Menunjukkan selesainya pemeriksaan kualitas barang yang diproduksi. Hasil pemeriksaan, lulus atau gagal, dicatat dalam keputusan penggunaan. | ||
| Mengapa ini penting Aktivitas ini penting untuk memantau kualitas produk dan menemukan masalah produksi. Tingkat penolakan yang tinggi atau waktu pemeriksaan yang lama dapat menjadi hambatan serius. Sumber data Peristiwa ini dicatat secara eksplisit saat keputusan penggunaan dibuat untuk lot pemeriksaan kualitas. Tanggal keputusan tersimpan di tabel QALS (kolom PASTRTERM) atau tabel QAVE. Pengumpulan data Gunakan stempel waktu saat keputusan penggunaan dicatat untuk lot pemeriksaan (tabel QALS/QAVE). Jenis peristiwa explicit | |||
| Pengambilan barang selesai | Aktivitas ini menandai selesainya proses fisik pengambilan barang dari gudang untuk pengiriman keluar. Di banyak sistem, aktivitas ini dikonfirmasi saat status pengambilan pada dokumen pengiriman diperbarui. | ||
| Mengapa ini penting Pengambilan barang yang efisien penting untuk kelancaran arus kerja gudang. Melacak aktivitas ini membantu menemukan hambatan dalam operasional gudang dan mengukur kinerja pengambilan barang. Sumber data Peristiwa ini sering kali bukan satu kejadian tersendiri, tetapi dapat disimpulkan dari perubahan status. Peristiwa dicatat saat status picking pada tabel item pengiriman (LIPS, field KOSTA) berubah menjadi 'C' (Diproses sepenuhnya). Pengumpulan data Simpulkan dari dokumen perubahan saat status picking (LIPS-KOSTA) diperbarui menjadi sudah dipicking sepenuhnya. Jenis peristiwa inferred | |||
| Pengiriman keluar dibuat | Menandai pembuatan dokumen pengiriman yang mengizinkan pengambilan dan pengiriman barang kepada pelanggan. Aktivitas ini mengalihkan proses dari pengelolaan pesanan ke pelaksanaan logistik. | ||
| Mengapa ini penting Langkah penting ini memulai proses pemenuhan pesanan secara fisik. Keterlambatan antara pembuatan pesanan dan pembuatan dokumen pengiriman dapat menunjukkan masalah perencanaan atau ketersediaan barang. Sumber data Peristiwa ini dicatat secara eksplisit. Stempel waktu pembuatan tersimpan di tabel header pengiriman (LIKP, kolom ERDAT). Pengumpulan data Gunakan tanggal pembuatan (LIKP-ERDAT) dan waktu (LIKP-ERZET) dari header dokumen pengiriman. Jenis peristiwa explicit | |||
| Permintaan pembelian dibuat | Aktivitas ini menandai pembuatan permintaan internal untuk membeli barang atau bahan baku yang diperlukan. Permintaan ini sering dibuat saat persediaan tidak cukup untuk memenuhi pesanan penjualan atau turun di bawah titik pemesanan ulang. | ||
| Mengapa ini penting Ini adalah langkah pertama dalam siklus pengadaan. Melacak waktu pembuatannya membantu menemukan keterlambatan dalam memulai pengadaan dan menganalisis proses pembelian dari awal hingga akhir. Sumber data Peristiwa ini dicatat secara eksplisit. Stempel waktu pembuatan tersimpan di tabel header permintaan pembelian (EBAN, kolom BADAT). Pengumpulan data Gunakan tanggal pembuatan (EBAN-BADAT) dokumen permintaan pembelian. Jenis peristiwa explicit | |||
| Pesanan produksi dibuat | Menunjukkan bahwa pesanan produksi telah dibuat untuk memproduksi barang jadi yang diperlukan bagi pesanan penjualan. Ini menandai dimulainya proses produksi internal secara resmi. | ||
| Mengapa ini penting Pembuatan pesanan produksi menandai awal waktu tunggu produksi. Analisis ini membantu menemukan keterlambatan antara sinyal permintaan dan dimulainya produksi. Sumber data Peristiwa ini dicatat secara eksplisit. Tanggal pembuatan tersimpan di tabel header pesanan produksi (AUFK, kolom ERDAT). Pengumpulan data Gunakan tanggal pembuatan (AUFK-ERDAT) dari tabel header pesanan. Jenis peristiwa explicit | |||
Panduan ekstraksi
Langkah
- Prasyarat: Pastikan Anda memiliki pengguna dengan otorisasi yang memadai untuk mengakses SAP S/4HANA Core Data Services (CDS) view yang diperlukan. Biasanya, tim keamanan SAP perlu menetapkan peran khusus. Anda juga memerlukan klien SQL, seperti DBeaver atau SAP HANA Studio, yang dapat terhubung ke database SAP HANA.
- Buat koneksi database: Atur klien SQL agar terhubung ke database SAP S/4HANA. Siapkan host server database, port (misalnya, 3xx15, dengan xx sebagai nomor instans), nama pengguna database, dan kata sandi.
- Siapkan kueri SQL: Salin seluruh kueri SQL dari bagian kueri dokumen ini ke editor klien SQL Anda. Kueri ini dirancang untuk mengekstrak semua aktivitas yang ditentukan dari berbagai modul logistik dan penjualan.
- Atur parameter ekstraksi: Sebelum menjalankan kueri, cari kondisi placeholder di klausa
WHEREsetiap subkueri. Ganti'YourCompanyCode'dengan kode perusahaan yang akan dianalisis, lalu sesuaikan placeholder rentang tanggal seperti'YYYY-MM-DD'untuk menentukan periode ekstraksi. - Jalankan kueri: Jalankan seluruh skrip SQL. Waktu eksekusi bergantung pada rentang tanggal yang dipilih dan volume data di sistem Anda. Sebaiknya jalankan di luar jam sibuk untuk mengurangi beban sistem.
- Periksa hasil awal: Setelah kueri selesai, periksa sekilas hasilnya di klien SQL. Pastikan jumlah barisnya wajar, kolom seperti LogisticsOrder, ActivityName, dan EventTime terisi, serta beragam nama aktivitas muncul.
- Ekspor data ke CSV: Ekspor seluruh hasil kueri dari klien SQL ke file CSV. Pilih encoding UTF-8 agar karakter khusus tetap terbaca.
- Siapkan file untuk diunggah: Pastikan nama header kolom di file CSV akhir sama persis dengan nama atribut yang diperlukan untuk pemuatan data, misalnya
LogisticsOrder,ActivityName, danEventTime. Jika kueri SQL digunakan seperti yang diberikan, Anda tidak perlu mengubah data lagi.
Konfigurasi
- Prasyarat: Anda perlu memiliki akses ke database SAP HANA yang mendasarinya. Pengguna database harus memiliki hak
SELECTpada semua CDS view yang dirujuk dalam kueri, termasuk I_SalesOrderItem, I_PurchaseOrderItem, I_OutboundDeliveryItem, I_MaterialDocumentItem, I_ProductionOrder, I_QualityInspection, I_Shipment, dan I_BillingDocumentItem. - Filter rentang tanggal: Kueri yang disediakan memiliki placeholder untuk filter rentang tanggal, biasanya pada kolom tanggal pembuatan (
CreationDateatauDocumentDate). Untuk analisis awal, gunakan periode 3 hingga 6 bulan agar data cukup mewakili proses tanpa membebani sistem. - Filter bisnis utama: Filter data berdasarkan unit organisasi tertentu agar hasilnya relevan. Kueri sudah menyediakan placeholder
CompanyCode. Anda juga dapat menambahkan filterSalesOrganization,DistributionChannel, atauPlantsesuai cakupan analisis. - Pertimbangan kinerja: Kueri ini menggabungkan beberapa CDS view berukuran besar. Eksekusinya dapat menggunakan banyak sumber daya sistem. Jadwalkan ekstraksi di luar jam kerja. Untuk kumpulan data yang sangat besar, jalankan kueri dalam beberapa tahap berurutan, misalnya per bulan.
Contoh kueri sql
WITH SalesOrderLink AS (
SELECT DISTINCT
sd.SalesDocument AS SalesOrder,
pr.PurchaseRequisition AS PurchaseRequisition,
po.PurchaseOrder AS PurchaseOrder,
od.DeliveryDocument AS OutboundDelivery,
bd.BillingDocument AS BillingDocument
FROM I_SalesDocItemProcessFlow AS pf
LEFT JOIN I_SalesDocumentItem AS sd ON pf.PrecedingDocument = sd.SalesDocument AND pf.PrecedingDocumentItem = sd.SalesDocumentItem
LEFT JOIN I_PurchaseRequisitionItem AS pr ON pf.SubsequentDocument = pr.PurchaseRequisition AND pf.SubsequentDocumentItem = pr.PurchaseRequisitionItem
LEFT JOIN I_PurchaseOrderItem AS po ON pf.SubsequentDocument = po.PurchaseOrder AND pf.SubsequentDocumentItem = po.PurchaseOrderItem
LEFT JOIN I_OutboundDeliveryItem AS od ON pf.SubsequentDocument = od.DeliveryDocument AND pf.SubsequentDocumentItem = od.DeliveryDocumentItem
LEFT JOIN I_BillingDocumentItem AS bd ON pf.SubsequentDocument = bd.BillingDocument AND pf.SubsequentDocumentItem = bd.BillingDocumentItem
WHERE sd.SalesDocument IS NOT NULL
)
SELECT
so.SalesOrder AS "LogisticsOrder",
'Sales Order Created' AS "ActivityName",
so.CreationDate || ' ' || so.CreationTime AS "EventTime",
so.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
soi.Material AS "MaterialNumber",
soi.Plant AS "Plant",
soi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_SalesOrder AS so
JOIN I_SalesOrderItem AS soi ON so.SalesOrder = soi.SalesOrder
LEFT JOIN I_Customer AS cust ON so.SoldToParty = cust.Customer
WHERE so.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
so.SalesOrder AS "LogisticsOrder",
'Inventory Availability Checked' AS "ActivityName",
so.CreationDate || ' ' || so.CreationTime AS "EventTime",
so.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
soi.Material AS "MaterialNumber",
soi.Plant AS "Plant",
soi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_SalesOrder AS so
JOIN I_SalesOrderItem AS soi ON so.SalesOrder = soi.SalesOrder
LEFT JOIN I_Customer AS cust ON so.SoldToParty = cust.Customer
WHERE so.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Purchase Requisition Created' AS "ActivityName",
pr.CreationDate || ' ' || '00:00:00' AS "EventTime",
pr.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
pri.Material AS "MaterialNumber",
pri.Plant AS "Plant",
pri.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_PurchaseRequisition AS pr
JOIN I_PurchaseRequisitionItem AS pri ON pr.PurchaseRequisition = pri.PurchaseRequisition
JOIN SalesOrderLink sl ON pr.PurchaseRequisition = sl.PurchaseRequisition
WHERE pr.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND pr.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Purchase Order Issued' AS "ActivityName",
po.PurchaseOrderDate || ' ' || '00:00:00' AS "EventTime",
po.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
sup.SupplierName AS "SupplierName",
poi.Material AS "MaterialNumber",
poi.Plant AS "Plant",
poi.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_PurchaseOrder AS po
JOIN I_PurchaseOrderItem AS poi ON po.PurchaseOrder = poi.PurchaseOrder
LEFT JOIN I_Supplier AS sup ON po.Supplier = sup.Supplier
JOIN SalesOrderLink sl ON po.PurchaseOrder = sl.PurchaseOrder
WHERE po.PurchaseOrderDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND po.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Goods Receipt For PO Posted' AS "ActivityName",
md.DocumentDate || ' ' || md.CreationTime AS "EventTime",
md.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
sup.SupplierName AS "SupplierName",
mdi.Material AS "MaterialNumber",
mdi.Plant AS "Plant",
poi.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_MaterialDocumentHeader AS md
JOIN I_MaterialDocumentItem AS mdi ON md.MaterialDocument = mdi.MaterialDocument AND md.MaterialDocumentYear = mdi.MaterialDocumentYear
JOIN I_PurchaseOrderItem AS poi ON mdi.PurchaseOrder = poi.PurchaseOrder AND mdi.PurchaseOrderItem = poi.PurchaseOrderItem
LEFT JOIN I_Supplier AS sup ON poi.Supplier = sup.Supplier
JOIN SalesOrderLink sl ON poi.PurchaseOrder = sl.PurchaseOrder
WHERE md.DocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND mdi.GoodsMovementType = '101' AND mdi.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Production Order Created' AS "ActivityName",
po.CreationDate || ' ' || po.CreationTime AS "EventTime",
po.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
po.Material AS "MaterialNumber",
po.ProductionPlant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_ProductionOrder AS po
JOIN SalesOrderLink sl ON po.SalesOrder = sl.SalesOrder
WHERE po.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Goods Produced' AS "ActivityName",
md.DocumentDate || ' ' || md.CreationTime AS "EventTime",
md.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
mdi.Material AS "MaterialNumber",
mdi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_MaterialDocumentHeader AS md
JOIN I_MaterialDocumentItem AS mdi ON md.MaterialDocument = mdi.MaterialDocument AND md.MaterialDocumentYear = mdi.MaterialDocumentYear
JOIN I_ProductionOrder AS po ON mdi.ManufacturingOrder = po.ManufacturingOrder
JOIN SalesOrderLink sl ON po.SalesOrder = sl.SalesOrder
WHERE md.DocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND mdi.GoodsMovementType = '101'
UNION ALL
SELECT
qi.SalesOrder AS "LogisticsOrder",
'Quality Inspection Performed' AS "ActivityName",
qi.InspLotUsageDecisionDate || ' ' || qi.InspLotUsageDecisionTime AS "EventTime",
qi.InspLotUsageDecisionMadeByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
qi.Material AS "MaterialNumber",
qi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
qi.InspLotUsageDecisionCode AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_QualityInspection AS qi
WHERE qi.InspLotUsageDecisionDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND qi.SalesOrder IS NOT NULL
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Outbound Delivery Created' AS "ActivityName",
od.CreationDate || ' ' || od.CreationTime AS "EventTime",
od.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Picking Completed' AS "ActivityName",
od.PickingDate || ' ' || od.PickingTime AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.PickingDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallPickingStatus = 'C'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Goods Issue Posted' AS "ActivityName",
od.ActualGoodsMovementDate || ' ' || od.ActualGoodsMovementTime AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.ActualGoodsMovementDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallGoodsMovementStatus = 'C'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Shipment Created' AS "ActivityName",
sh.CreationDate || ' ' || sh.CreationTime AS "EventTime",
sh.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
NULL AS "MaterialNumber",
sh.ShippingPoint AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_Shipment AS sh
JOIN I_ShipmentDelivery AS sd ON sh.Shipment = sd.Shipment
JOIN SalesOrderLink sl ON sd.Delivery = sl.OutboundDelivery
WHERE sh.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Proof Of Delivery Confirmed' AS "ActivityName",
od.PODActualDate || ' ' || '00:00:00' AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.PODActualDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallPODStatus = 'C'
UNION ALL
SELECT
bdi.SalesDocument AS "LogisticsOrder",
'Customer Invoice Created' AS "ActivityName",
bd.BillingDocumentDate || ' ' || bd.CreationTime AS "EventTime",
bd.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
bdi.Material AS "MaterialNumber",
bdi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_BillingDocument AS bd
JOIN I_BillingDocumentItem AS bdi ON bd.BillingDocument = bdi.BillingDocument
LEFT JOIN I_Customer AS cust ON bd.SoldToParty = cust.Customer
WHERE bd.BillingDocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND bd.CompanyCode = 'YourCompanyCode' AND bdi.SalesDocument IS NOT NULL; Langkah
- Pastikan akses baca langsung ke skema SAP HANA yang berisi data logistik, penjualan, pengadaan, inventaris, produksi, kualitas, pengiriman, pengangkutan, bukti pengiriman, dan penagihan tersedia. Minta nama skema, detail koneksi, dan otorisasi dari tim SAP Basis atau platform data. Jangan menulis ke sistem sumber.
- Pastikan model data S/4HANA yang tepat di sistem tujuan. EKKO dan EKPO digunakan untuk pesanan pembelian, LIKP dan LIPS untuk pengiriman keluar. Objek tambahan perlu dikonfigurasi untuk pesanan penjualan, permintaan pembelian, dokumen material, pesanan produksi, hasil inspeksi kualitas, pengangkutan, bukti pengiriman, dan penagihan. Ganti setiap placeholder objek atau kolom dalam tanda kurung siku pada kueri dengan objek yang sudah diverifikasi di kamus data sistem.
- Tentukan aturan korelasi LogisticsOrder. Utamakan hubungan alur dokumen yang sudah diverifikasi, dari pesanan penjualan ke dokumen pengiriman, material, produksi atau pengadaan, dan penagihan berikutnya. Jika hubungan langsung tidak tersedia, siapkan tabel korelasi terdokumentasi atau pemetaan khusus bisnis. Jangan menghubungkan kasus hanya berdasarkan nomor material atau tanggal.
- Atur periode ekstraksi menggunakan [Start date parameter] dan [End date parameter]. Terapkan periode secara konsisten pada stempel waktu peristiwa, tetapi tetap sertakan dokumen yang dibuat sebelum periode jika diperlukan untuk menjelaskan peristiwa di dalam periode tersebut.
- Atur kode perusahaan, organisasi penjualan, pabrik, organisasi pembelian, jenis dokumen, dan filter bisnis lainnya di bagian filter yang ditandai. Gunakan filter hanya setelah memastikan nilainya di sistem tujuan.
- Ganti referensi tabel dan kolom dalam tanda kurung siku di setiap cabang aktivitas dengan nama yang sudah diverifikasi. Setiap cabang harus menghasilkan kolom yang sama dengan tipe data yang kompatibel. Kueri secara eksplisit membuat satu baris untuk setiap 15 aktivitas yang diwajibkan karena ProcessMind tidak menyimpulkan peristiwa yang tidak ada.
- Jalankan kueri di SAP HANA Database Explorer, SAP HANA cockpit SQL Console, atau klien SQL yang disetujui. Uji setiap cabang aktivitas secara terpisah sebelum menjalankan seluruh kueri UNION ALL. Periksa rencana eksekusi dan batasi pengujian awal pada rentang tanggal yang singkat.
- Validasi hubungan dokumen, stempel waktu, ID pengguna, nilai pemasok dan pelanggan, nilai material dan pabrik, serta hasil kualitas. Periksa baris duplikat akibat penggabungan pada tingkat item, lalu terapkan aturan tingkat peristiwa yang sudah ditentukan, misalnya satu peristiwa per dokumen atau per item dokumen.
- Ekspor hasil sebagai CSV UTF-8 atau format tabular lain yang didukung ProcessMind. Pertahankan nama kolom keluaran berikut persis: LogisticsOrder, ActivityName, EventTime, SourceSystem, LastDataUpdate, ExecutingUser, SupplierName, CustomerName, MaterialNumber, Plant, RequestedDeliveryDate, dan QualityInspectionResult. Pastikan EventTime berisi stempel waktu dan LastDataUpdate terisi secara konsisten.
- Unggah file ke ProcessMind, lalu petakan LogisticsOrder sebagai ID kasus, ActivityName sebagai aktivitas, dan EventTime sebagai stempel waktu peristiwa. Pastikan semua 15 label aktivitas diperlakukan sebagai peristiwa eksplisit, lalu jadwalkan pembaruan terkontrol setelah perilaku ekstraksi inkremental divalidasi.
Konfigurasi
- Rentang tanggal: Mulai dengan data selama 3 hingga 6 bulan. Gunakan periode yang lebih singkat untuk pengujian awal, lalu perpanjang setelah kinerja dan hubungan dokumen divalidasi.
- Skema sumber: Isi [SAP HANA schema name] dengan skema yang berisi tabel atau view S/4HANA terverifikasi. Jangan berasumsi bahwa tabel ERP klasik tersedia dengan nama yang sama di setiap penerapan S/4HANA.
- Cakupan dokumen: Atur [Company Code filter], [Sales Organization filter], [Plant filter], [Purchasing Organization filter], dan [Document Type filter] sesuai cakupan proses.
- Korelasi: Atur [Your document flow or correlation object] agar setiap peristiwa dikaitkan dengan satu LogisticsOrder. Laporkan korelasi yang hilang atau ambigu, jangan menetapkannya secara diam-diam.
- Tingkat peristiwa: Pilih satu peristiwa per dokumen, item dokumen, atau perubahan status yang relevan bagi bisnis. Terapkan aturan yang sama di semua cabang dan hapus hanya baris yang terduplikasi secara teknis.
- Urutan prioritas stempel waktu: Untuk setiap aktivitas, gunakan stempel waktu posting, pembuatan, konfirmasi, perubahan status, inspeksi, pengiriman, pembongkaran, POD, atau penagihan yang sudah diverifikasi. Jangan mengganti waktu peristiwa bisnis dengan waktu ekstraksi.
- Label sumber: Atur [Source system label] ke nilai stabil, seperti ID sistem SAP S/4HANA yang disetujui.
- Stempel waktu pembaruan: Atur [Last data update expression] ke stempel waktu ekstraksi atau pembaruan sumber yang disetujui.
- Kinerja: Terapkan filter tanggal dan organisasi sejak awal, pilih hanya kolom yang diperlukan, hindari penggabungan tingkat item tanpa batas, periksa rencana eksekusi, dan pertimbangkan view ekstraksi tersimpan atau tabel staging untuk pemuatan berkala.
- Otorisasi: Akses yang diperlukan mencakup otorisasi baca ke objek skema SAP HANA terkait dan izin untuk menjalankan SQL. Validasi bisnis memerlukan akses ke data penjualan, pengadaan, inventaris, produksi, kualitas, pelaksanaan logistik, transportasi, dan penagihan yang relevan.
- Cakupan fungsi: Pastikan sistem yang diterapkan mencakup proses bisnis yang diwakili oleh aktivitas yang diminta. Data pengangkutan, pembongkaran, POD, kualitas, produksi, dan penagihan mungkin tersimpan di aplikasi atau ekstensi terpisah.
- Keamanan: Terapkan aturan organisasi untuk data pelanggan, pemasok, material, keuangan, dan pengguna. Samarkan atau batasi akses ke kolom sensitif bila diperlukan.
Contoh kueri sql
WITH
parameters AS (
SELECT
CAST('[Start date parameter]' AS TIMESTAMP) AS start_ts,
CAST('[End date parameter]' AS TIMESTAMP) AS end_ts,
CAST('[Last data update expression]' AS TIMESTAMP) AS last_data_update,
CAST('[Source system label]' AS NVARCHAR(100)) AS source_system,
CAST('[Company Code filter]' AS NVARCHAR(20)) AS company_code_filter,
CAST('[Sales Organization filter]' AS NVARCHAR(20)) AS sales_org_filter,
CAST('[Plant filter]' AS NVARCHAR(20)) AS plant_filter,
CAST('[Purchasing Organization filter]' AS NVARCHAR(20)) AS purchasing_org_filter,
CAST('[Document Type filter]' AS NVARCHAR(20)) AS document_type_filter
FROM DUMMY
),
base_events AS (
SELECT
CAST('[Sales order correlation column]' AS NVARCHAR(100)) AS LogisticsOrder,
CAST('Sales Order Created' AS NVARCHAR(100)) AS ActivityName,
CAST('[Sales order creation timestamp]' AS TIMESTAMP) AS EventTime,
CAST('[Executing user column]' AS NVARCHAR(100)) AS ExecutingUser,
CAST('[Supplier name column]' AS NVARCHAR(255)) AS SupplierName,
CAST('[Customer name column]' AS NVARCHAR(255)) AS CustomerName,
CAST('[Material number column]' AS NVARCHAR(100)) AS MaterialNumber,
CAST('[Plant column]' AS NVARCHAR(100)) AS Plant,
CAST('[Requested delivery date column]' AS DATE) AS RequestedDeliveryDate,
CAST('[Quality inspection result column]' AS NVARCHAR(100)) AS QualityInspectionResult
FROM [Your sales order source object]
CROSS JOIN parameters p
WHERE CAST('[Sales order creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Sales order creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Sales order company code column]' AS NVARCHAR(20)) = p.company_code_filter
AND CAST('[Sales order sales organization column]' AS NVARCHAR(20)) = p.sales_org_filter
AND CAST('[Sales order document type column]' AS NVARCHAR(20)) = p.document_type_filter
UNION ALL
SELECT
CAST('[Inventory check correlation column]' AS NVARCHAR(100)),
CAST('Inventory Availability Checked' AS NVARCHAR(100)),
CAST('[Inventory check timestamp]' AS TIMESTAMP),
CAST('[Inventory check user column]' AS NVARCHAR(100)),
CAST('[Inventory supplier name column]' AS NVARCHAR(255)),
CAST('[Inventory customer name column]' AS NVARCHAR(255)),
CAST('[Inventory material number column]' AS NVARCHAR(100)),
CAST('[Inventory plant column]' AS NVARCHAR(100)),
CAST('[Inventory requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your inventory availability source object]
CROSS JOIN parameters p
WHERE CAST('[Inventory check timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Inventory check timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Inventory company code column]' AS NVARCHAR(20)) = p.company_code_filter
AND CAST('[Inventory sales organization column]' AS NVARCHAR(20)) = p.sales_org_filter
UNION ALL
SELECT
CAST('[Purchase requisition correlation column]' AS NVARCHAR(100)),
CAST('Purchase Requisition Created' AS NVARCHAR(100)),
CAST('[Purchase requisition creation timestamp]' AS TIMESTAMP),
CAST('[Purchase requisition user column]' AS NVARCHAR(100)),
CAST('[Purchase requisition supplier name column]' AS NVARCHAR(255)),
CAST('[Purchase requisition customer name column]' AS NVARCHAR(255)),
CAST('[Purchase requisition material number column]' AS NVARCHAR(100)),
CAST('[Purchase requisition plant column]' AS NVARCHAR(100)),
CAST('[Purchase requisition requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your purchase requisition source object]
CROSS JOIN parameters p
WHERE CAST('[Purchase requisition creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Purchase requisition creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Purchase requisition plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Purchase order correlation column]' AS NVARCHAR(100)),
CAST('Purchase Order Issued' AS NVARCHAR(100)),
CAST('[Purchase order issue timestamp]' AS TIMESTAMP),
CAST('[Purchase order user column]' AS NVARCHAR(100)),
CAST('[Purchase order supplier name column]' AS NVARCHAR(255)),
CAST('[Purchase order customer name column]' AS NVARCHAR(255)),
CAST('[Purchase order material number column]' AS NVARCHAR(100)),
CAST('[Purchase order plant column]' AS NVARCHAR(100)),
CAST('[Purchase order requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM EKKO po_header
INNER JOIN EKPO po_item
ON po_header.[Purchase order number column] = po_item.[Purchase order number column]
CROSS JOIN parameters p
WHERE CAST('[Purchase order issue timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Purchase order issue timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Purchase order company code column]' AS NVARCHAR(20)) = p.company_code_filter
AND CAST('[Purchase order purchasing organization column]' AS NVARCHAR(20)) = p.purchasing_org_filter
AND CAST('[Purchase order document type column]' AS NVARCHAR(20)) = p.document_type_filter
UNION ALL
SELECT
CAST('[Goods receipt correlation column]' AS NVARCHAR(100)),
CAST('Goods Receipt For PO Posted' AS NVARCHAR(100)),
CAST('[Goods receipt posting timestamp]' AS TIMESTAMP),
CAST('[Goods receipt user column]' AS NVARCHAR(100)),
CAST('[Goods receipt supplier name column]' AS NVARCHAR(255)),
CAST('[Goods receipt customer name column]' AS NVARCHAR(255)),
CAST('[Goods receipt material number column]' AS NVARCHAR(100)),
CAST('[Goods receipt plant column]' AS NVARCHAR(100)),
CAST('[Goods receipt requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your material document header source object] material_header
INNER JOIN [Your material document item source object] material_item
ON material_header.[Material document number column] = material_item.[Material document number column]
AND material_header.[Material document year column] = material_item.[Material document year column]
CROSS JOIN parameters p
WHERE CAST('[Goods receipt posting timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Goods receipt posting timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Goods receipt plant column]' AS NVARCHAR(20)) = p.plant_filter
AND CAST('[Goods receipt movement type column]' AS NVARCHAR(20)) = '[Goods receipt movement type value]'
UNION ALL
SELECT
CAST('[Production order correlation column]' AS NVARCHAR(100)),
CAST('Production Order Created' AS NVARCHAR(100)),
CAST('[Production order creation timestamp]' AS TIMESTAMP),
CAST('[Production order user column]' AS NVARCHAR(100)),
CAST('[Production order supplier name column]' AS NVARCHAR(255)),
CAST('[Production order customer name column]' AS NVARCHAR(255)),
CAST('[Production order material number column]' AS NVARCHAR(100)),
CAST('[Production order plant column]' AS NVARCHAR(100)),
CAST('[Production order requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your production order source object]
CROSS JOIN parameters p
WHERE CAST('[Production order creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Production order creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Production order plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Production receipt correlation column]' AS NVARCHAR(100)),
CAST('Goods Produced' AS NVARCHAR(100)),
CAST('[Production receipt timestamp]' AS TIMESTAMP),
CAST('[Production receipt user column]' AS NVARCHAR(100)),
CAST('[Production receipt supplier name column]' AS NVARCHAR(255)),
CAST('[Production receipt customer name column]' AS NVARCHAR(255)),
CAST('[Production receipt material number column]' AS NVARCHAR(100)),
CAST('[Production receipt plant column]' AS NVARCHAR(100)),
CAST('[Production receipt requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your production receipt source object]
CROSS JOIN parameters p
WHERE CAST('[Production receipt timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Production receipt timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Production receipt plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Quality inspection correlation column]' AS NVARCHAR(100)),
CAST('Quality Inspection Performed' AS NVARCHAR(100)),
CAST('[Quality inspection completion timestamp]' AS TIMESTAMP),
CAST('[Quality inspection user column]' AS NVARCHAR(100)),
CAST('[Quality supplier name column]' AS NVARCHAR(255)),
CAST('[Quality customer name column]' AS NVARCHAR(255)),
CAST('[Quality material number column]' AS NVARCHAR(100)),
CAST('[Quality plant column]' AS NVARCHAR(100)),
CAST('[Quality requested delivery date column]' AS DATE),
CAST('[Quality inspection result column]' AS NVARCHAR(100))
FROM [Your quality inspection source object]
CROSS JOIN parameters p
WHERE CAST('[Quality inspection completion timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Quality inspection completion timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Quality plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Outbound delivery correlation column]' AS NVARCHAR(100)),
CAST('Outbound Delivery Created' AS NVARCHAR(100)),
CAST('[Outbound delivery creation timestamp]' AS TIMESTAMP),
CAST('[Outbound delivery user column]' AS NVARCHAR(100)),
CAST('[Outbound delivery supplier name column]' AS NVARCHAR(255)),
CAST('[Outbound delivery customer name column]' AS NVARCHAR(255)),
CAST('[Outbound delivery material number column]' AS NVARCHAR(100)),
CAST('[Outbound delivery plant column]' AS NVARCHAR(100)),
CAST('[Outbound delivery requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM LIKP delivery_header
INNER JOIN LIPS delivery_item
ON delivery_header.[Delivery number column] = delivery_item.[Delivery number column]
CROSS JOIN parameters p
WHERE CAST('[Outbound delivery creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Outbound delivery creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Outbound delivery plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Picking correlation column]' AS NVARCHAR(100)),
CAST('Picking Completed' AS NVARCHAR(100)),
CAST('[Picking completion timestamp]' AS TIMESTAMP),
CAST('[Picking user column]' AS NVARCHAR(100)),
CAST('[Picking supplier name column]' AS NVARCHAR(255)),
CAST('[Picking customer name column]' AS NVARCHAR(255)),
CAST('[Picking material number column]' AS NVARCHAR(100)),
CAST('[Picking plant column]' AS NVARCHAR(100)),
CAST('[Picking requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your picking status source object]
CROSS JOIN parameters p
WHERE CAST('[Picking completion timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Picking completion timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Picking plant column]' AS NVARCHAR(20)) = p.plant_filter
AND CAST('[Picking completion status column]' AS NVARCHAR(50)) = '[Picking completed status value]'
UNION ALL
SELECT
CAST('[Goods issue correlation column]' AS NVARCHAR(100)),
CAST('Goods Issue Posted' AS NVARCHAR(100)),
CAST('[Goods issue posting timestamp]' AS TIMESTAMP),
CAST('[Goods issue user column]' AS NVARCHAR(100)),
CAST('[Goods issue supplier name column]' AS NVARCHAR(255)),
CAST('[Goods issue customer name column]' AS NVARCHAR(255)),
CAST('[Goods issue material number column]' AS NVARCHAR(100)),
CAST('[Goods issue plant column]' AS NVARCHAR(100)),
CAST('[Goods issue requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your goods issue source object]
CROSS JOIN parameters p
WHERE CAST('[Goods issue posting timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Goods issue posting timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Goods issue plant column]' AS NVARCHAR(20)) = p.plant_filter
AND CAST('[Goods issue movement type column]' AS NVARCHAR(20)) = '[Goods issue movement type value]'
UNION ALL
SELECT
CAST('[Shipment correlation column]' AS NVARCHAR(100)),
CAST('Shipment Created' AS NVARCHAR(100)),
CAST('[Shipment creation timestamp]' AS TIMESTAMP),
CAST('[Shipment user column]' AS NVARCHAR(100)),
CAST('[Shipment supplier name column]' AS NVARCHAR(255)),
CAST('[Shipment customer name column]' AS NVARCHAR(255)),
CAST('[Shipment material number column]' AS NVARCHAR(100)),
CAST('[Shipment plant column]' AS NVARCHAR(100)),
CAST('[Shipment requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your shipment source object]
CROSS JOIN parameters p
WHERE CAST('[Shipment creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Shipment creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Shipment plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Unloading correlation column]' AS NVARCHAR(100)),
CAST('Goods Unloaded at Destination' AS NVARCHAR(100)),
CAST('[Unloading timestamp]' AS TIMESTAMP),
CAST('[Unloading user column]' AS NVARCHAR(100)),
CAST('[Unloading supplier name column]' AS NVARCHAR(255)),
CAST('[Unloading customer name column]' AS NVARCHAR(255)),
CAST('[Unloading material number column]' AS NVARCHAR(100)),
CAST('[Unloading plant column]' AS NVARCHAR(100)),
CAST('[Unloading requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your unloading or carrier event source object]
CROSS JOIN parameters p
WHERE CAST('[Unloading timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Unloading timestamp]' AS TIMESTAMP) < p.end_ts
UNION ALL
SELECT
CAST('[POD correlation column]' AS NVARCHAR(100)),
CAST('Proof Of Delivery Confirmed' AS NVARCHAR(100)),
CAST('[POD confirmation timestamp]' AS TIMESTAMP),
CAST('[POD user column]' AS NVARCHAR(100)),
CAST('[POD supplier name column]' AS NVARCHAR(255)),
CAST('[POD customer name column]' AS NVARCHAR(255)),
CAST('[POD material number column]' AS NVARCHAR(100)),
CAST('[POD plant column]' AS NVARCHAR(100)),
CAST('[POD requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your proof of delivery source object]
CROSS JOIN parameters p
WHERE CAST('[POD confirmation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[POD confirmation timestamp]' AS TIMESTAMP) < p.end_ts
UNION ALL
SELECT
CAST('[Billing correlation column]' AS NVARCHAR(100)),
CAST('Customer Invoice Created' AS NVARCHAR(100)),
CAST('[Billing creation timestamp]' AS TIMESTAMP),
CAST('[Billing user column]' AS NVARCHAR(100)),
CAST('[Billing supplier name column]' AS NVARCHAR(255)),
CAST('[Billing customer name column]' AS NVARCHAR(255)),
CAST('[Billing material number column]' AS NVARCHAR(100)),
CAST('[Billing plant column]' AS NVARCHAR(100)),
CAST('[Billing requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your billing document source object]
CROSS JOIN parameters p
WHERE CAST('[Billing creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Billing creation timestamp]' AS TIMESTAMP) < p.end_ts
)
SELECT
LogisticsOrder,
ActivityName,
EventTime,
parameters.source_system AS SourceSystem,
parameters.last_data_update AS LastDataUpdate,
ExecutingUser,
SupplierName,
CustomerName,
MaterialNumber,
Plant,
RequestedDeliveryDate,
QualityInspectionResult
FROM base_events
CROSS JOIN parameters
WHERE LogisticsOrder IS NOT NULL
AND ActivityName IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY LogisticsOrder, EventTime, ActivityName; Langkah
- Prasyarat: Pastikan Anda memiliki kunci pengembang dan otorisasi yang diperlukan di sistem SAP S/4HANA untuk membuat dan menjalankan program ABAP (akses ke transaksi SE38), serta membaca tabel rantai pasok seperti VBAK, LIKP, EKKO, dan MKPF.
- Buat program: Buka ABAP Editor melalui kode transaksi
SE38. Masukkan nama program baru, misalnyaZ_PM_SCM_EXTRACTION, lalu klik 'Create'. Isi judul yang menjelaskan program dan atur jenisnya menjadi 'Executable Program'. - Masukkan kode: Salin seluruh kode ABAP dari bagian 'query' di bawah, lalu tempelkan ke ABAP Editor untuk program baru Anda.
- Tentukan elemen teks: Buka Go To > Text Elements > Selection Texts. Aktifkan semua label layar seleksi yang disarankan agar antarmuka jelas dan mudah digunakan.
- Aktifkan program: Simpan dan aktifkan program dengan menekan CTRL+S lalu CTRL+F3, atau klik ikon aktivasi di toolbar. Perbaiki kesalahan sintaks yang mungkin muncul akibat konfigurasi khusus sistem.
- Jalankan program: Tekan F8 atau klik tombol 'Direct Processing'. Layar seleksi akan muncul agar Anda dapat memfilter data yang akan diekstrak.
- Atur parameter ekstraksi: Di layar seleksi, tentukan rentang tanggal untuk tanggal pembuatan pesanan penjualan. Sebaiknya filter juga berdasarkan kode perusahaan atau organisasi penjualan tertentu untuk mengendalikan volume data. Masukkan jalur lengkap file keluaran di server aplikasi SAP.
- Jalankan di latar belakang: Untuk kumpulan data besar yang mencakup beberapa bulan, jalankan program di latar belakang agar transaksi tidak mengalami batas waktu. Dari menu, pilih Program > Execute in Background, lalu jadwalkan tugas.
- Ambil file data: Setelah program selesai dijalankan, gunakan kode transaksi
AL11untuk membuka direktori di server aplikasi yang Anda tentukan. Cari file yang dihasilkan dan unduh ke komputer lokal menggunakan transaksiCG3Y. - Siapkan untuk diunggah: Pastikan file yang diunduh berupa teks biasa, misalnya CSV dengan pemisah koma atau titik koma, dan menggunakan encoding UTF-8. File siap diunggah ke alat process mining.
Konfigurasi
- Rentang tanggal seleksi (S_ERDAT): Ini filter yang paling penting. Filter ini menentukan rentang waktu untuk memilih pesanan penjualan berdasarkan tanggal pembuatannya (
VBAK-ERDAT). Mulailah dengan periode terbatas, misalnya 3 hingga 6 bulan terakhir, agar volume data tetap terkendali. - Organisasi penjualan (S_VKORG): Filter opsional untuk membatasi ekstraksi ke organisasi penjualan tertentu. Gunakan filter ini jika analisis berfokus pada unit bisnis atau wilayah tertentu.
- Kode perusahaan (S_BUKRS): Filter opsional untuk membatasi data ke kode perusahaan tertentu. Filter ini sangat disarankan untuk mempersempit cakupan data dan meningkatkan kinerja.
- Jalur file keluaran (P_FILE): Jalur lengkap di server aplikasi SAP tempat file log peristiwa akhir akan disimpan. Pengguna yang menjalankan program harus memiliki akses tulis ke direktori ini. Contoh:
/usr/sap/trans/tmp/scm_event_log.csv. - Mode eksekusi: Program dapat dijalankan di latar depan untuk ekstraksi uji berskala kecil. Untuk volume data yang cukup besar, pemrosesan di latar belakang wajib dilakukan agar tidak terjadi batas waktu dan beban sistem pada jam sibuk berkurang.
- Otorisasi sistem: Pengguna yang menjalankan laporan memerlukan akses baca ke semua tabel yang mendasarinya, termasuk VBAK, VBAP, EKKO, EKPO, MSEG, MKPF, LIKP, LIPS, VBRK, AUFK, QAVE, KNA1, dan LFA1.
Contoh kueri abap
REPORT Z_PM_SCM_EXTRACTION.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
PARAMETERS: p_file TYPE string LOWER CASE DEFAULT '/usr/sap/trans/tmp/scm_event_log.csv'.
SELECT-OPTIONS: s_erdat FOR sy-datum OBLIGATORY,
s_vkorg FOR vbak-vkorg,
s_bukrs FOR vbak-bukrs.
*&---------------------------------------------------------------------*
*& Data Type Definitions
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
LogisticsOrder TYPE vbeln_va,
ActivityName TYPE string,
EventTime TYPE string,
SourceSystem TYPE sysysid,
LastDataUpdate TYPE string,
ExecutingUser TYPE ernam,
SupplierName TYPE name1_gp,
CustomerName TYPE name1_gp,
MaterialNumber TYPE matnr,
Plant TYPE werks_d,
RequestedDeliveryDate TYPE vdatu,
QualityInspectionResult TYPE string,
END OF ty_event_log.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
DATA: lt_event_log TYPE TABLE OF ty_event_log,
ls_event_log TYPE ty_event_log,
lv_sysid TYPE sysysid,
lv_last_update TYPE string.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
lv_sysid = sy-sysid.
CONCATENATE sy-datum sy-uzeit INTO lv_last_update.
" Select base data: Sales Orders
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, h~kunnr, h~bukrs, h~vdatu, i~posnr, i~matnr, i~werks
INTO TABLE @DATA(lt_so)
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~bukrs IN @s_bukrs.
IF lt_so IS INITIAL.
MESSAGE 'No sales orders found for the given criteria.' TYPE 'I'.
RETURN.
ENDIF.
" Select related documents using Document Flow (VBFA)
SELECT *
INTO TABLE @DATA(lt_vbfa)
FROM vbfa
FOR ALL ENTRIES IN @lt_so
WHERE vbelv = @lt_so-vbeln
AND posnv = @lt_so-posnr.
" Collect all unique document numbers
DATA: lt_vbeln_pr TYPE RANGE OF banfn,
lt_vbeln_po TYPE RANGE OF ebeln,
lt_vbeln_dn TYPE RANGE OF vbeln_vl,
lt_vbeln_gi TYPE RANGE OF mblnr,
lt_vbeln_auf TYPE RANGE OF aufnr,
lt_vbeln_inv TYPE RANGE OF vbeln_vf,
lt_vbeln_shp TYPE RANGE OF tknum.
LOOP AT lt_vbfa INTO DATA(ls_vbfa).
CASE ls_vbfa-vbtyp_n.
WHEN 'H'. " Purchase Requisition
APPEND ls_vbfa-vbeln TO lt_vbeln_pr.
WHEN 'K'. " Purchase Order
APPEND ls_vbfa-vbeln TO lt_vbeln_po.
WHEN 'J'. " Delivery
APPEND ls_vbfa-vbeln TO lt_vbeln_dn.
WHEN 'R'. " Goods Movement (GI)
APPEND ls_vbfa-vbeln TO lt_vbeln_gi.
WHEN 'L'. " Production Order
APPEND ls_vbfa-vbeln TO lt_vbeln_auf.
WHEN 'M'. " Invoice
APPEND ls_vbfa-vbeln TO lt_vbeln_inv.
WHEN '8'. " Shipment
APPEND ls_vbfa-vbeln TO lt_vbeln_shp.
ENDCASE.
ENDLOOP.
SORT lt_vbeln_pr. DELETE ADJACENT DUPLICATES FROM lt_vbeln_pr.
SORT lt_vbeln_po. DELETE ADJACENT DUPLICATES FROM lt_vbeln_po.
SORT lt_vbeln_dn. DELETE ADJACENT DUPLICATES FROM lt_vbeln_dn.
SORT lt_vbeln_gi. DELETE ADJACENT DUPLICATES FROM lt_vbeln_gi.
SORT lt_vbeln_auf. DELETE ADJACENT DUPLICATES FROM lt_vbeln_auf.
SORT lt_vbeln_inv. DELETE ADJACENT DUPLICATES FROM lt_vbeln_inv.
SORT lt_vbeln_shp. DELETE ADJACENT DUPLICATES FROM lt_vbeln_shp.
" Select detailed data for each document type
SELECT banfn, badat, ernam FROM eban INTO TABLE @DATA(lt_eban) FOR ALL ENTRIES IN @lt_so WHERE bnfpo = @lt_so-posnr AND banfn IN @lt_vbeln_pr.
SELECT ebeln, aedat, ernam, lifnr FROM ekko INTO TABLE @DATA(lt_ekko) WHERE ebeln IN @lt_vbeln_po.
SELECT vbeln, erdat, erzet, ernam, kodat, wadat_ist, podat FROM likp INTO TABLE @DATA(lt_likp) WHERE vbeln IN @lt_vbeln_dn.
SELECT mblnr, mjahr, budat, usnam FROM mkpf INTO TABLE @DATA(lt_mkpf) WHERE mblnr IN @lt_vbeln_gi.
SELECT mblnr, mjahr, zeile, bwart, lfbnr, ebeln, aufnr FROM mseg INTO TABLE @DATA(lt_mseg) FOR ALL ENTRIES IN @lt_mkpf WHERE mblnr = @lt_mkpf-mblnr AND mjahr = @lt_mkpf-mjahr.
SELECT aufnr, erdat, ernam FROM aufk INTO TABLE @DATA(lt_aufk) WHERE aufnr IN @lt_vbeln_auf.
SELECT prueflos, vdatum, vcode FROM qave INTO TABLE @DATA(lt_qave) FOR ALL ENTRIES IN @lt_so WHERE aufnr IN @lt_vbeln_auf.
SELECT vbeln, erdat, erzet, ernam FROM vbrk INTO TABLE @DATA(lt_vbrk) WHERE vbeln IN @lt_vbeln_inv.
SELECT tknum, erdat, erzet FROM vttk INTO TABLE @DATA(lt_vttk) WHERE tknum IN @lt_vbeln_shp.
SELECT kunnr, name1 FROM kna1 INTO TABLE @DATA(lt_kna1) FOR ALL ENTRIES IN @lt_so WHERE kunnr = @lt_so-kunnr.
SELECT lifnr, name1 FROM lfa1 INTO TABLE @DATA(lt_lfa1) FOR ALL ENTRIES IN @lt_ekko WHERE lifnr = @lt_ekko-lifnr.
" Assemble Event Log
LOOP AT lt_so INTO DATA(ls_so).
CLEAR ls_event_log.
READ TABLE lt_kna1 INTO DATA(ls_kna1) WITH KEY kunnr = ls_so-kunnr BINARY SEARCH.
ls_event_log-LogisticsOrder = ls_so-vbeln.
ls_event_log-SourceSystem = lv_sysid.
ls_event_log-LastDataUpdate = lv_last_update.
ls_event_log-CustomerName = ls_kna1-name1.
ls_event_log-MaterialNumber = ls_so-matnr.
ls_event_log-Plant = ls_so-werks.
ls_event_log-RequestedDeliveryDate = ls_so-vdatu.
" 1. Sales Order Created
ls_event_log-ActivityName = 'Sales Order Created'.
CONCATENATE ls_so-erdat ls_so-erzet INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_so-ernam.
APPEND ls_event_log TO lt_event_log.
" 2. Inventory Availability Checked (proxy event)
ls_event_log-ActivityName = 'Inventory Availability Checked'.
CONCATENATE ls_so-erdat ls_so-erzet INTO ls_event_log-EventTime. " Using SO creation time as a proxy
ls_event_log-ExecutingUser = ls_so-ernam.
APPEND ls_event_log TO lt_event_log.
" Find related documents for this SO item
LOOP AT lt_vbfa INTO ls_vbfa WHERE vbelv = ls_so-vbeln AND posnv = ls_so-posnr.
CASE ls_vbfa-vbtyp_n.
WHEN 'H'. " 3. Purchase Requisition Created
READ TABLE lt_eban INTO DATA(ls_eban) WITH KEY banfn = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Purchase Requisition Created'.
CONCATENATE ls_eban-badat '000000' INTO ls_event_log-EventTime. " PR has no time field
ls_event_log-ExecutingUser = ls_eban-ernam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
WHEN 'K'. " 4. Purchase Order Issued
READ TABLE lt_ekko INTO DATA(ls_ekko) WITH KEY ebeln = ls_vbfa-vbeln.
IF sy-subrc = 0.
READ TABLE lt_lfa1 INTO DATA(ls_lfa1) WITH KEY lifnr = ls_ekko-lifnr BINARY SEARCH.
ls_event_log-ActivityName = 'Purchase Order Issued'.
CONCATENATE ls_ekko-aedat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_ekko-ernam.
ls_event_log-SupplierName = ls_lfa1-name1.
APPEND ls_event_log TO lt_event_log.
ENDIF.
WHEN 'L'. " 6. Production Order Created
READ TABLE lt_aufk INTO DATA(ls_aufk) WITH KEY aufnr = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Production Order Created'.
CONCATENATE ls_aufk-erdat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_aufk-ernam.
APPEND ls_event_log TO lt_event_log.
" 8. Quality Inspection Performed
READ TABLE lt_qave INTO DATA(ls_qave) WITH KEY prueflos = ls_vbfa-vbeln. " Approximation linking lot to order
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Quality Inspection Performed'.
CONCATENATE ls_qave-vdatum '000000' INTO ls_event_log-EventTime.
ls_event_log-QualityInspectionResult = ls_qave-vcode.
APPEND ls_event_log TO lt_event_log.
CLEAR ls_event_log-QualityInspectionResult.
ENDIF.
ENDIF.
WHEN 'J'. " 9. Outbound Delivery Created
READ TABLE lt_likp INTO DATA(ls_likp) WITH KEY vbeln = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Outbound Delivery Created'.
CONCATENATE ls_likp-erdat ls_likp-erzet INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_likp-ernam.
APPEND ls_event_log TO lt_event_log.
" 10. Picking Completed
IF ls_likp-kodat IS NOT INITIAL.
ls_event_log-ActivityName = 'Picking Completed'.
CONCATENATE ls_likp-kodat '120000' INTO ls_event_log-EventTime. " Using Picking Date as proxy
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 14. Proof Of Delivery Confirmed
IF ls_likp-podat IS NOT INITIAL.
ls_event_log-ActivityName = 'Proof Of Delivery Confirmed'.
CONCATENATE ls_likp-podat '000000' INTO ls_event_log-EventTime.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDIF.
WHEN 'M'. " 15. Customer Invoice Created
READ TABLE lt_vbrk INTO DATA(ls_vbrk) WITH KEY vbeln = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Customer Invoice Created'.
CONCATENATE ls_vbrk-erdat ls_vbrk-erzet INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_vbrk-ernam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
WHEN '8'. " 12. Shipment Created
READ TABLE lt_vttk INTO DATA(ls_vttk) WITH KEY tknum = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Shipment Created'.
CONCATENATE ls_vttk-erdat ls_vttk-erzet INTO ls_event_log-EventTime.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDCASE.
ENDLOOP.
" Find material movements (MSEG) not directly in VBFA
" 5. Goods Receipt For PO Posted
LOOP AT lt_mseg INTO DATA(ls_mseg_po) WHERE ebeln IN (SELECT ebeln FROM ekpo WHERE banfn IN (SELECT banfn FROM eban WHERE vbeln = ls_so-vbeln) ) AND bwart = '101'.
READ TABLE lt_mkpf INTO DATA(ls_mkpf_po) WITH KEY mblnr = ls_mseg_po-mblnr mjahr = ls_mseg_po-mjahr.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Goods Receipt For PO Posted'.
CONCATENATE ls_mkpf_po-budat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_mkpf_po-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 7. Goods Produced
LOOP AT lt_mseg INTO DATA(ls_mseg_pp) WHERE aufnr IN (SELECT aufnr FROM afpo WHERE kdauf = ls_so-vbeln) AND bwart = '101'.
READ TABLE lt_mkpf INTO DATA(ls_mkpf_pp) WITH KEY mblnr = ls_mseg_pp-mblnr mjahr = ls_mseg_pp-mjahr.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Goods Produced'.
CONCATENATE ls_mkpf_pp-budat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_mkpf_pp-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 11. Goods Issue Posted
LOOP AT lt_mseg INTO DATA(ls_mseg_gi) WHERE lfbnr IN (SELECT vbeln FROM lips WHERE vgbel = ls_so-vbeln) AND bwart = '601'.
READ TABLE lt_mkpf INTO DATA(ls_mkpf_gi) WITH KEY mblnr = ls_mseg_gi-mblnr mjahr = ls_mseg_gi-mjahr.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Goods Issue Posted'.
CONCATENATE ls_mkpf_gi-budat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_mkpf_gi-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
ENDLOOP.
" Remove duplicate events for the same case
SORT lt_event_log BY LogisticsOrder ActivityName EventTime.
DELETE ADJACENT DUPLICATES FROM lt_event_log COMPARING LogisticsOrder ActivityName EventTime.
" Write data to file
DATA: lt_output TYPE TABLE OF string.
APPEND 'LogisticsOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate,ExecutingUser,SupplierName,CustomerName,MaterialNumber,Plant,RequestedDeliveryDate,QualityInspectionResult' TO lt_output.
LOOP AT lt_event_log INTO ls_event_log.
DATA(lv_line) = |
{ ls_event_log-LogisticsOrder },
{ ls_event_log-ActivityName },
{ ls_event_log-EventTime },
{ ls_event_log-SourceSystem },
{ ls_event_log-LastDataUpdate },
{ ls_event_log-ExecutingUser },
{ ls_event_log-SupplierName },
{ ls_event_log-CustomerName },
{ ls_event_log-MaterialNumber },
{ ls_event_log-Plant },
{ ls_event_log-RequestedDeliveryDate },
{ ls_event_log-QualityInspectionResult }|
.
REPLACE ALL OCCURRENCES OF ',' IN lv_line WITH ' '.
REPLACE ALL OCCURRENCES OF REGEX '\s+' IN lv_line WITH '' LEADING.
CONDENSE lv_line.
APPEND lv_line TO lt_output.
ENDLOOP.
cl_gui_frontend_services=>gui_download(
EXPORTING
filename = p_file
filetype = 'ASC'
CHANGING
data_tab = lt_output
EXCEPTIONS
OTHERS = 24
).
IF sy-subrc <> 0.
MESSAGE 'Error downloading file.' TYPE 'E'.
ELSE.
MESSAGE |File downloaded successfully to { p_file }| TYPE 'S'.
ENDIF. Siap memulai?
Gunakan templat ini untuk menyiapkan data dan mulai meningkatkan kinerja rantai pasok Anda. Kami siap membantu Anda di setiap tahap.
Tingkatkan manajemen rantai pasok sekarang
Dapatkan visibilitas menyeluruh dan tingkatkan akurasi perkiraan hingga 90% dalam hitungan hari.
Uji coba gratis selama 14 hari, tanpa perlu kartu kredit.