Templat Data Record to Report - Entri Jurnal Anda
Templat Data Record to Report - Entri Jurnal Anda
- Atribut yang disarankan untuk analisis menyeluruh
- Aktivitas utama entri jurnal yang perlu dilacak
- Panduan praktis mengekstrak data dari SAP ECC
Atribut Record to Report - Entri Jurnal
| Nama | Deskripsi | ||
|---|---|---|---|
| Journal Entry ID JournalEntryId | Pengenal unik untuk dokumen akuntansi keuangan, yang menggabungkan kode perusahaan, nomor dokumen, dan tahun fiskal. | ||
| Deskripsi Journal Entry ID adalah pengenal kasus utama untuk melacak siklus hidup jurnal. ID ini merupakan kunci gabungan yang biasanya dibentuk dengan menggabungkan Company Code (BUKRS), Document Number (BELNR), dan Fiscal Year (GJAHR), sehingga unik di seluruh sistem SAP. Dalam analisis proses, ID ini menghubungkan semua aktivitas terkait, seperti pembuatan, penangguhan, pengajuan, persetujuan, penolakan, dan pencatatan. Dengan menelusuri ID ini, kita dapat menyusun perjalanan setiap jurnal dari awal hingga akhir, mengukur waktu siklus, serta menemukan penyimpangan proses atau hambatan pada entri tertentu. Mengapa ini penting Kunci ini penting untuk melacak jurnal sejak dibuat hingga akhirnya dicatat. Dengan kunci ini, Anda dapat menganalisis proses dari awal hingga akhir dan membandingkan variasinya. Sumber data Atribut turunan ini biasanya merupakan gabungan kolom dari tabel BKPF: Company Code (BUKRS), Document Number (BELNR), dan Fiscal Year (GJAHR). Contoh 1000-1000000123-20232000-1900000456-20231000-1800000789-2024 | |||
| Nama aktivitas ActivityName | Nama aktivitas bisnis atau peristiwa yang terjadi pada titik tertentu dalam proses jurnal. | ||
| Deskripsi Nama aktivitas menjelaskan langkah tertentu dalam siklus hidup jurnal, seperti 'Jurnal dibuat', 'Jurnal disetujui', atau 'Jurnal dicatat'. Atribut ini biasanya diturunkan dari beberapa sumber di SAP, termasuk kode transaksi (TCODE), log perubahan dokumen (tabel CDHDR dan CDPOS), serta kolom status dokumen. Analisis aktivitas merupakan inti process mining. Analisis ini memungkinkan Anda memvisualisasikan peta proses, menghitung waktu perpindahan antar langkah, dan menemukan siklus pengerjaan ulang (misalnya, 'Jurnal ditolak' lalu 'Jurnal diperbaiki'). Data ini menjadi dasar dashboard waktu siklus, tingkat pengerjaan ulang, dan variasi proses. Mengapa ini penting Atribut ini menentukan langkah-langkah dalam peta proses, sehingga alur kerja jurnal dapat divisualisasikan, dianalisis, dan dioptimalkan. Sumber data Ditentukan dari berbagai sumber, termasuk kode transaksi di BKPF (TCODE), status dokumen, log alur kerja di tabel seperti SWW_WI2OBJ, atau dokumen perubahan di CDHDR dan CDPOS. Contoh Jurnal dibuatJurnal disetujuiJurnal ditolakJurnal dicatat | |||
| Waktu peristiwa EventTime | Stempel waktu yang menunjukkan kapan aktivitas atau peristiwa tertentu terjadi pada jurnal. | ||
| Deskripsi Waktu peristiwa mencatat tanggal dan waktu tepat untuk setiap aktivitas dalam proses jurnal. Data ini penting untuk menghitung semua metrik berbasis waktu, seperti waktu siklus, durasi pemrosesan, dan jeda antar langkah. Sumber stempel waktu bergantung pada aktivitasnya. Sumbernya dapat berupa tanggal dan waktu pembuatan dokumen (CPUDT/CPUTM) atau stempel waktu perubahan dari log (CDHDR-UDATE/UTIME). Dalam analisis, Waktu peristiwa digunakan untuk mengurutkan peristiwa secara kronologis dan menjadi dasar peta proses. Data ini penting untuk menghitung semua KPI terkait waktu, seperti Rata-rata Waktu Siklus Jurnal, Rata-rata Waktu Persetujuan, dan Waktu dari Persetujuan hingga Pencatatan. Mengapa ini penting Stempel waktu ini menjadi dasar semua analisis terkait waktu, termasuk penghitungan waktu siklus, durasi, dan hambatan. Sumber data Sumbernya bergantung pada aktivitas, terutama stempel waktu pembuatan (CPUDT, CPUTM) dari BKPF atau stempel waktu perubahan dokumen (UDATE, UTIME) dari CDHDR. Contoh 2023-10-26T09:00:00Z2023-10-26T14:30:15Z2023-10-27T11:05:00Z | |||
| Pembaruan data terakhir LastDataUpdate | Stempel waktu yang menunjukkan kapan data terakhir diekstrak atau diperbarui dari sistem sumber. | ||
| Deskripsi Atribut ini mencatat tanggal dan waktu pengambilan data terbaru dari SAP ECC. Kolom metadata ini penting untuk mengetahui seberapa baru dan mutakhir data yang dianalisis. Dalam dashboard atau analisis process mining, waktu pembaruan terakhir penting agar pengguna dapat memercayai data dan mengambil keputusan berdasarkan informasi yang tepat. Atribut ini membantu menjawab pertanyaan, 'Seberapa mutakhir informasi ini?'. Mengapa ini penting Memberi tahu pengguna seberapa baru data yang digunakan, sehingga mereka memahami rentang waktu analisis dan dapat memercayai hasilnya. Sumber data Kolom metadata ini dibuat dan disimpan oleh alat ekstraksi data atau proses ETL saat data diperbarui. Contoh 2024-05-20T04:00:00Z2024-05-21T04:00:00Z2024-05-22T04:00:00Z | |||
| Sistem sumber SourceSystem | Sistem tempat data proses diekstrak. | ||
| Deskripsi Atribut ini menunjukkan asal data, dalam hal ini instans SAP ECC tertentu. Biasanya, nilai statis ditambahkan saat proses ekstraksi data. Meski sederhana, atribut ini penting jika lingkungan Anda menggunakan beberapa ERP atau sumber data. Atribut ini memperjelas asal-usul data dan memungkinkan analisis difilter atau dikelompokkan berdasarkan sistem sumber. Mengapa ini penting Memperjelas asal-usul data dan penting untuk melacak kualitas data, terutama di lingkungan dengan beberapa sistem sumber. Sumber data Biasanya berupa nilai statis yang ditambahkan selama transformasi data untuk menunjukkan instans SAP ECC tertentu (misalnya, 'ECC_PROD_100'). Contoh SAP ECC EHP8ECC_FIN_PRODSAP_ERP_60 | |||
| Dibalik IsReversed | Penanda boolean yang menunjukkan apakah jurnal telah dibalik. | ||
| Deskripsi Penanda ini menunjukkan entri jurnal yang kemudian dibalik dengan dokumen akuntansi lain. Di SAP, dokumen yang dibalik ditautkan ke dokumen pembaliknya sehingga jejak auditnya jelas. Atribut ini menjadi dasar untuk dashboard 'Analisis Pembalikan Entri Jurnal' dan KPI 'Tingkat Pembalikan Entri Jurnal'. Anda dapat menggunakannya untuk memisahkan entri yang dibalik dan menyelidiki penyebabnya, seperti kesalahan input data atau perlakuan akuntansi yang keliru. Tujuannya, mengurangi frekuensi pembalikan. Mengapa ini penting Mendukung analisis pembalikan dengan menandai entri yang kemudian dibatalkan. Informasi ini membantu menemukan penyebab kesalahan dan meningkatkan integritas data. Sumber data Diambil dari kolom nomor Dokumen Pembalik (STBLG) pada tabel BKPF. Jika STBLG tidak kosong, penanda bernilai benar. Contoh truefalse | |||
| Jenis dokumen DocumentType | Klasifikasi dokumen akuntansi yang menentukan cara dokumen diproses dan disimpan. | ||
| Deskripsi Jenis dokumen membedakan berbagai transaksi bisnis, seperti entri buku besar (SA), faktur pemasok (KR), atau pencatatan aset (AA). Jenis ini ditetapkan saat konfigurasi sistem dan diberikan ke setiap jurnal. Atribut ini penting untuk analisis karena proses dapat dikelompokkan berdasarkan jenis transaksi. Dashboard 'Volume Jurnal Berdasarkan Jenis' dan KPI 'Rata-rata Waktu Siklus Berdasarkan Jenis Jurnal' bergantung langsung pada kolom ini. Atribut ini membantu menemukan apakah jenis entri tertentu lebih sering mengalami keterlambatan, pengerjaan ulang, atau pembalikan. Mengapa ini penting Memungkinkan analisis dikelompokkan berdasarkan jenis transaksi, sehingga Anda dapat mengetahui apakah masalah proses hanya terjadi pada jenis jurnal tertentu. Sumber data Terdapat di tabel header dokumen BKPF, kolom BLART. Contoh SAKRREAA | |||
| Kode perusahaan CompanyCode | Unit organisasi yang mewakili badan hukum independen dan menjadi dasar penyusunan laporan keuangan. | ||
| Deskripsi Company Code adalah unit organisasi dasar di SAP Financials. Unit ini mewakili perusahaan yang berdiri sebagai badan hukum independen dan menjadi kolom penting di header dokumen jurnal. Atribut ini penting untuk mengelompokkan analisis proses berdasarkan badan hukum. Atribut ini memungkinkan perbandingan kinerja proses, tingkat kepatuhan, dan hasil KPI di berbagai bagian bisnis. Misalnya, atribut ini dapat membantu menemukan apakah keterlambatan persetujuan atau tingginya tingkat pembalikan hanya terjadi pada kode perusahaan tertentu. Mengapa ini penting Memungkinkan Anda memfilter dan membandingkan kinerja proses di berbagai badan hukum atau unit bisnis dalam organisasi. Sumber data Terdapat di tabel header dokumen BKPF, kolom BUKRS. Contoh 10002000US01DE01 | |||
| Kode transaksi TransactionCode | Kode transaksi SAP yang digunakan untuk membuat atau memproses jurnal. | ||
| Deskripsi Kode transaksi (T-Code) adalah pengenal unik untuk fungsi atau program tertentu di SAP. Untuk jurnal, kode ini menunjukkan cara entri dibuat, misalnya secara manual (FB01, F-02), melalui penangguhan (FV50), atau lewat antarmuka otomatis. Atribut ini sangat berguna untuk dashboard 'Optimalisasi Aktivitas Manual'. Dengan menganalisis T-Code, kita dapat membedakan aktivitas manual dan otomatis, menemukan proses manual yang paling memakan waktu, serta mengidentifikasi peluang otomatisasi untuk mengurangi pekerjaan manual dan meningkatkan efisiensi. Mengapa ini penting Membantu membedakan proses manual dan otomatis, serta menemukan peluang otomatisasi dan standardisasi proses. Sumber data Terdapat di tabel header dokumen BKPF, kolom TCODE. Contoh FB01F-02FV50FBD1 | |||
| Pengguna User | ID pengguna SAP milik orang yang membuat atau mengubah jurnal. | ||
| Deskripsi Atribut ini mencatat nama pengguna SAP yang bertanggung jawab atas aktivitas tertentu, seperti membuat, menangguhkan, atau mencatat dokumen. Datanya diambil langsung dari header dokumen atau tabel log perubahan. Analisis atribut Pengguna penting untuk memahami kinerja tim dan individu. Atribut ini mendukung dashboard Produktivitas Pengguna dengan melacak jumlah aktivitas dan waktu pemrosesan per pengguna. Atribut ini juga membantu menemukan pihak yang terlibat dalam siklus pengerjaan ulang, pembalikan, atau penyimpangan kepatuhan, sehingga pelatihan atau perbaikan proses dapat diarahkan dengan tepat. Mengapa ini penting Menunjukkan pengguna yang bertanggung jawab atas setiap aktivitas, sehingga kinerja pengguna, pembagian beban kerja, dan pola pengerjaan ulang dapat dianalisis. Sumber data Biasanya diambil dari tabel BKPF (kolom USNAM untuk pembuat) atau tabel CDHDR (kolom USERNAME untuk pengubah). Contoh ABROWNCJONESDSMITH | |||
| Tanggal pencatatan PostingDate | Tanggal transaksi dicatat di buku besar dan memengaruhi periode keuangan. | ||
| Deskripsi Tanggal pencatatan menentukan periode fiskal untuk membukukan jurnal. Tanggal ini penting dari sisi keuangan dan kepatuhan karena harus sesuai dengan jadwal penutupan periode akuntansi dan peraturan yang berlaku. Dalam process mining, tanggal ini digunakan untuk memantau kepatuhan. Dashboard 'Pemantauan Kepatuhan' dan KPI 'Tingkat Kepatuhan' menggunakan atribut ini untuk memeriksa apakah entri dicatat pada periode yang tepat. Atribut ini juga dapat digunakan untuk menganalisis tren volume jurnal dari waktu ke waktu. Mengapa ini penting Penting untuk pelaporan keuangan dan analisis kepatuhan, serta memastikan entri dicatat pada periode akuntansi yang tepat. Sumber data Terdapat di tabel header dokumen BKPF, kolom BUDAT. Contoh 2023-10-312023-11-302024-01-15 | |||
| Alasan Pembalikan ReversalReason | Kode yang menunjukkan alasan entri jurnal dibalik. | ||
| Deskripsi Saat membalik dokumen, pengguna dapat menentukan kode alasan di SAP. Kode ini mencatat alasan pembalikan secara terstruktur, misalnya tanggal posting yang keliru atau kesalahan input data. Atribut ini menjadi masukan utama untuk dashboard 'Analisis Pembalikan Entri Jurnal'. Dengan menganalisis alasan pembalikan yang paling sering muncul, organisasi dapat menemukan masalah berulang dalam proses atau kekurangan pelatihan. Setelah itu, organisasi dapat mengambil tindakan yang tepat untuk mencegah kesalahan dan menurunkan tingkat pembalikan. Mengapa ini penting Menunjukkan secara langsung alasan pembalikan, sehingga Anda dapat menelusuri akar masalah dan mencegah kesalahan serupa. Sumber data Tersimpan di tabel header dokumen BKPF, kolom STGRD. Contoh 010205 | |||
| Disimpan Sementara IsParked | Penanda boolean yang menunjukkan apakah entri jurnal disimpan sebagai dokumen sementara sebelum diposting. | ||
| Deskripsi Dokumen dapat disimpan sementara agar pengguna bisa menyimpan entri jurnal yang belum lengkap tanpa memengaruhi saldo keuangan. Pengguna lain kemudian dapat melengkapi atau meninjaunya sebelum dokumen diposting. Penanda ini menunjukkan entri yang melalui tahap penyimpanan sementara. Analisis atribut ini membantu Anda memahami penggunaan fitur penyimpanan sementara. Hasilnya dapat menunjukkan apakah fitur tersebut digunakan sebagai tahap peninjauan informal yang berpotensi menimbulkan keterlambatan. Atribut ini juga mendukung analisis waktu siklus dari awal hingga akhir, dengan membedakan entri yang langsung diposting dan entri yang disimpan sementara terlebih dahulu. Mengapa ini penting Menandai entri yang menggunakan fitur penyimpanan sementara. Tahap ini dapat menyebabkan keterlambatan atau menunjukkan adanya proses peninjauan informal. Sumber data Diambil dari kolom status dokumen (BSTAT) pada tabel BKPF. Nilai 'V' menunjukkan dokumen yang disimpan sementara. Contoh truefalse | |||
| Kode Mata Uang CurrencyKey | Kode mata uang untuk jumlah yang tercatat dalam entri jurnal. | ||
| Deskripsi Atribut ini menunjukkan mata uang entri jurnal, seperti USD, EUR, atau JPY. Informasi ini memberi konteks untuk setiap nilai keuangan yang terkait dengan dokumen. Mata uang tidak selalu menjadi dimensi analisis utama, tetapi penting agar nilai uang dapat ditafsirkan dengan benar. Organisasi global juga dapat menggunakannya untuk membandingkan proses pada entri dalam mata uang asing dan mata uang lokal. Mengapa ini penting Memberi konteks yang diperlukan untuk semua nilai uang agar analisis dan interpretasi keuangan akurat. Sumber data Tersimpan di tabel header dokumen BKPF, kolom WAERS. Contoh USDEURGBPJPY | |||
| Pekerjaan Ulang IsRework | Penanda boolean yang menunjukkan apakah entri jurnal mengalami siklus pekerjaan ulang, misalnya ditolak lalu diperbaiki. | ||
| Deskripsi Penanda ini menunjukkan kasus yang menyimpang dari alur normal dan memerlukan tindakan korektif. Biasanya, nilainya menjadi benar jika urutan aktivitas seperti 'Entri Jurnal Ditolak' lalu 'Entri Jurnal Diperbaiki' ditemukan pada entri jurnal tertentu. Atribut ini penting untuk menghitung KPI 'Tingkat Pekerjaan Ulang Entri Jurnal' dan menganalisis dashboard 'Tingkat Pekerjaan Ulang dan Penolakan'. Atribut ini membantu mengukur besarnya inefisiensi dalam proses dan menjadi dasar untuk menyelidiki penyebab pekerjaan ulang, seperti persyaratan yang kurang jelas atau dokumentasi yang tidak memadai. Mengapa ini penting Menandai entri yang perlu diperbaiki. Informasi ini membantu mengukur pekerjaan ulang dan mencari penyebabnya agar lebih banyak entri selesai dengan benar sejak awal. Sumber data Atribut ini dihitung dengan menganalisis urutan aktivitas dalam suatu kasus. Siklus pekerjaan ulang terdeteksi jika terjadi aktivitas penolakan atau perbaikan. Contoh truefalse | |||
| Pusat Biaya CostCenter | Unit organisasi dalam area pengendalian yang mewakili lokasi terjadinya biaya. | ||
| Deskripsi Pusat Biaya adalah elemen data induk penting dari modul Controlling (CO), yang biasanya ditetapkan pada tingkat item baris entri jurnal. Elemen ini digunakan untuk melacak biaya pada departemen, fungsi, atau lokasi tertentu. Dengan menyertakan Pusat Biaya, Anda dapat menganalisis proses entri jurnal secara lebih terperinci. Anda dapat melihat apakah departemen tertentu menghasilkan lebih banyak pekerjaan ulang, memiliki waktu siklus lebih lama, atau mencatat lebih banyak entri manual. Hasilnya, efisiensi proses dapat ditinjau per departemen. Mengapa ini penting Mendukung analisis kinerja proses per departemen atau fungsi, sehingga inefisiensi di area tertentu lebih mudah ditemukan. Sumber data Tersimpan di tabel item baris dokumen BSEG, kolom KOSTL. Contoh 4100CC_FINANCE_US10010101 | |||
| Total nilai dokumen TotalDocumentAmount | Nilai total jurnal dalam mata uang dokumen. | ||
| Deskripsi Atribut ini menunjukkan nilai keuangan total jurnal. Biasanya, nilainya dihitung dengan menjumlahkan nilai absolut semua item baris debit atau kredit yang terkait dengan dokumen. Analisis proses berdasarkan nilai keuangan dapat mengungkap pola penting. Misalnya, entri bernilai tinggi mungkin mengikuti jalur persetujuan yang berbeda dan lebih ketat. Atribut ini dapat digunakan untuk memfilter atau mengelompokkan analisis, sehingga Anda dapat melihat apakah waktu siklus, tingkat penolakan, atau keterlambatan persetujuan berkaitan dengan nilai entri. Mengapa ini penting Memungkinkan analisis dampak keuangan, misalnya dengan membandingkan waktu pemrosesan atau tingkat penolakan dengan nilai uang jurnal. Sumber data Kolom hasil perhitungan ini diperoleh dengan menjumlahkan kolom nilai (WRBTR atau DMBTR) dari semua item baris di tabel BSEG untuk jurnal tertentu. Contoh 1500.0025000.75125.50 | |||
| Waktu Persetujuan ApprovalTime | Waktu sejak entri jurnal diajukan untuk disetujui hingga disetujui atau ditolak. | ||
| Deskripsi Metrik ini mengukur durasi subproses persetujuan, yang sering kali menjadi bagian penting dari waktu siklus keseluruhan. Nilainya dihitung dari selisih waktu antara aktivitas 'Entri Jurnal Diajukan' dan aktivitas terkait, yaitu 'Entri Jurnal Disetujui' atau 'Entri Jurnal Ditolak'. Waktu Persetujuan menjadi metrik utama untuk dashboard 'Kinerja Persetujuan Entri Jurnal' dan KPI 'Rata-rata Waktu Persetujuan Entri Jurnal'. Analisis durasi ini membantu menemukan hambatan dalam alur kerja persetujuan, mengukur kinerja pemberi persetujuan, dan menjadi dasar untuk perubahan proses, seperti penyesuaian batas persetujuan. Mengapa ini penting Mengukur durasi tahap persetujuan agar keterlambatan dalam alur kerja peninjauan dan persetujuan lebih mudah ditemukan dan ditangani. Sumber data Dihitung dengan mengurangi waktu aktivitas 'Entri Jurnal Diajukan' dari waktu aktivitas 'Entri Jurnal Disetujui' atau 'Entri Jurnal Ditolak'. Contoh P1DT2HPT4H15MP3D | |||
Aktivitas Record to Report - Entri Jurnal
| Aktivitas | Deskripsi | ||
|---|---|---|---|
| Jurnal diajukan | Aktivitas ini menandakan bahwa pembuat telah menyelesaikan jurnal tertangguh dan jurnal siap ditinjau serta disetujui. Biasanya, aktivitas ini dicatat saat tugas SAP Business Workflow yang terkait dengan dokumen tertangguh dimulai. | ||
| Mengapa ini penting Aktivitas ini menandai penyerahan dari pembuat kepada pemberi persetujuan dan menjadi awal penghitungan KPI waktu siklus persetujuan. Ini adalah tonggak penting untuk mengukur efisiensi alur kerja persetujuan. Sumber data Simpulkan dari waktu mulai instans alur kerja persetujuan yang tertaut ke objek dokumen keuangan. Untuk menemukannya, analisis tabel log alur kerja seperti SWW_WI2OBJ dan cari alur kerja yang dimulai untuk kode perusahaan, nomor dokumen, dan tahun fiskal terkait. Pengumpulan data Identifikasi peristiwa dimulainya alur kerja untuk objek dokumen tertangguh. Jenis peristiwa inferred | |||
| Jurnal dicatat | Ini adalah aktivitas utama saat jurnal resmi dicatat di buku besar dan memengaruhi laporan keuangan. SAP mencatat peristiwa ini secara eksplisit saat status dokumen diubah menjadi 'posted' dan tanggal pencatatan ditetapkan. | ||
| Mengapa ini penting Ini adalah tonggak terpenting yang menandakan jurnal berhasil diproses. Waktu siklus dari awal hingga akhir sering diukur sampai tahap ini. Peristiwa ini juga penting untuk analisis penutupan keuangan. Sumber data Peristiwa ini diidentifikasi saat dokumen di tabel BKPF memiliki tanggal pencatatan (BKPF-BUDAT). Untuk dokumen tertangguh, ini terjadi saat status BKPF-BSTAT berubah dari 'V' menjadi kosong. Waktu pencatatan menggunakan tanggal entri BKPF-CPUDT. Pengumpulan data Identifikasi saat BKPF-BSTAT berubah dari 'V' menjadi kosong, atau gunakan peristiwa pembuatan untuk pencatatan langsung. Jenis peristiwa explicit | |||
| Jurnal disetujui | Aktivitas ini menandai persetujuan akhir jurnal dalam alur kerja, sehingga jurnal siap dicatat. Peristiwa ini diambil dari log alur kerja saat langkah 'release' atau 'approve' terakhir selesai. | ||
| Mengapa ini penting Ini adalah tonggak penting yang mengakhiri proses persetujuan. Durasi hingga aktivitas ini menjadi KPI utama untuk mengukur efisiensi persetujuan. Waktu dari peristiwa ini hingga pencatatan mengukur jeda setelah persetujuan. Sumber data Simpulkan dari stempel waktu penyelesaian langkah persetujuan terakhir di log SAP Business Workflow. Ini adalah tindakan persetujuan terakhir sebelum dokumen dicatat atau siap dicatat. Pengumpulan data Identifikasi penyelesaian langkah 'release' atau 'approve' terakhir di log alur kerja. Jenis peristiwa inferred | |||
| Jurnal ditangguhkan | Aktivitas ini menandai pembuatan awal jurnal dalam status sementara, sebelum dicatat secara resmi ke buku besar. SAP mencatatnya secara eksplisit saat pengguna menyimpan dokumen melalui transaksi penangguhan, sehingga status dokumen menjadi 'parked'. | ||
| Mengapa ini penting Ini adalah peristiwa awal yang penting untuk proses yang mencakup peninjauan dan persetujuan. Analisis waktu antara penangguhan dan pencatatan membantu menemukan keterlambatan pada tahap sebelum pencatatan dan persetujuan. Sumber data Peristiwa ini diidentifikasi dari tabel header dokumen BKPF. Dokumen dianggap ditangguhkan jika dibuat dengan status BKPF-BSTAT = 'V'. Waktu peristiwa menggunakan tanggal dan waktu pembuatan, BKPF-CPUDT dan BKPF-CPUTM. Pengumpulan data Identifikasi pembuatan dokumen di BKPF saat BKPF-BSTAT bernilai 'V'. Jenis peristiwa explicit | |||
| Pembalikan jurnal diproses | Aktivitas ini menandai pembalikan jurnal yang sebelumnya telah dicatat. Pembalikan adalah dokumen akuntansi baru yang membatalkan entri awal. | ||
| Mengapa ini penting Peristiwa ini penting untuk mengukur kualitas data dan akurasi proses. Tingkat pembalikan yang tinggi menunjukkan masalah sistemis pada tahap entri data atau persetujuan awal. Setiap pembalikan juga berarti pengerjaan ulang. Sumber data Peristiwa ini diidentifikasi di header dokumen awal (tabel BKPF). Saat dokumen dibalik, SAP mengisi nomor dokumen pembalik (BKPF-STBLG) dan alasan pembalikan (BKPF-STGRD). Waktu peristiwa menggunakan tanggal pencatatan dokumen pembalik yang baru. Pengumpulan data Identifikasi saat BKPF-STBLG terisi pada dokumen awal. Gunakan tanggal pencatatan dokumen pembalik sebagai stempel waktu. Jenis peristiwa explicit | |||
| Dokumentasi dilampirkan | Aktivitas ini menunjukkan pengguna melampirkan dokumen pendukung, seperti faktur atau spreadsheet, ke jurnal. Peristiwa ini tidak dicatat secara eksplisit sebagai peristiwa akuntansi standar. Biasanya, peristiwa ini disimpulkan dengan memeriksa pembuatan lampiran yang terhubung ke objek dokumen akuntansi. | ||
| Mengapa ini penting Pelacakan aktivitas ini membantu memastikan kepatuhan terhadap kebijakan yang mewajibkan dokumentasi. Keterlambatan melampirkan dokumen dapat menjadi penyebab utama siklus persetujuan yang panjang. Sumber data Peristiwa ini sulit dicatat secara andal dengan stempel waktu. Peristiwa ini mungkin dapat disimpulkan dengan menganalisis tabel lampiran Generic Object Services (GOS), seperti SOOD, lalu menghubungkan waktu pembuatan lampiran dengan kunci objek jurnal. Pengumpulan data Simpulkan dari waktu pembuatan objek tertaut di tabel GOS (misalnya, SOOD). Jenis peristiwa inferred | |||
| Entri manual teridentifikasi | Aktivitas ini mengidentifikasi apakah jurnal dibuat melalui transaksi online manual, bukan melalui antarmuka otomatis atau proses batch. Ini bukan tindakan pengguna, melainkan atribut entri yang dihitung dari data sistem. | ||
| Mengapa ini penting Membedakan entri manual dan otomatis penting untuk menentukan sasaran perbaikan proses. Proses manual sering menjadi fokus inisiatif standardisasi dan otomatisasi. Sumber data Nilai ini dihitung dengan menganalisis kolom di tabel header dokumen BKPF. Kode transaksi (BKPF-TCODE) seperti 'FB01', 'FB50', atau 'FV50' menunjukkan entri manual, sedangkan T-code lain atau nama input batch tertentu (BKPF-AWKEY) mengindikasikan otomatisasi. Pengumpulan data Tentukan dari BKPF-TCODE atau indikator lain di header dokumen dari sistem sumber. Jenis peristiwa calculated | |||
| Item baris jurnal diselesaikan | Aktivitas ini menunjukkan rekonsiliasi item baris akun buku besar yang dikelola dengan item terbuka, seperti akun kliring bank. Aktivitas terjadi saat satu item baris dicocokkan dengan item lain hingga statusnya ditutup. | ||
| Mengapa ini penting Untuk proses seperti rekonsiliasi bank, waktu yang diperlukan untuk menyelesaikan item merupakan KPI penting. Aktivitas ini membantu menganalisis efisiensi rekonsiliasi dan prosedur penutupan akhir bulan. Sumber data Peristiwa ini diambil dari tabel item baris BSEG. Saat item baris diselesaikan, kolom tanggal kliring (BSEG-AUGDT) dan dokumen kliring (BSEG-AUGBL) akan terisi. Waktu peristiwa menggunakan tanggal kliring. Pengumpulan data Identifikasi saat tanggal kliring (BSEG-AUGDT) terisi untuk suatu item baris. Jenis peristiwa explicit | |||
| Jurnal dibuat | Menandai pembuatan jurnal yang langsung dicatat tanpa melalui tahap penangguhan. SAP mencatatnya saat dokumen dibuat menggunakan transaksi pencatatan langsung. | ||
| Mengapa ini penting Aktivitas ini menjadi titik awal alternatif untuk proses jurnal sederhana yang tidak memerlukan alur kerja persetujuan. Aktivitas ini membantu membedakan pencatatan langsung yang sederhana dari entri tertangguh yang lebih kompleks. Sumber data Peristiwa ini menunjukkan pembuatan dokumen di tabel BKPF dengan status dokumen BKPF-BSTAT kosong (sudah dicatat). Waktu peristiwa menggunakan tanggal pembuatan, BKPF-CPUDT. Untuk dokumen ini, peristiwa 'Created' dan 'Posted' terjadi bersamaan. Pengumpulan data Identifikasi pembuatan dokumen di BKPF saat BKPF-BSTAT kosong. Jenis peristiwa explicit | |||
| Jurnal diperbaiki | Aktivitas ini menunjukkan bahwa pembuat awal telah mengubah jurnal tertangguh setelah jurnal dikembalikan untuk diperbaiki. Aktivitas ini disimpulkan dengan mendeteksi perubahan dokumen setelah peristiwa 'Changes Requested'. | ||
| Mengapa ini penting Pelacakan koreksi membantu mengukur upaya yang digunakan untuk pengerjaan ulang. Waktu antara permintaan perubahan dan koreksi menunjukkan keterlambatan dalam menyelesaikan masalah pada entri yang diajukan. Sumber data Simpulkan dengan menganalisis log perubahan dokumen (tabel CDHDR dan CDPOS) untuk dokumen tertangguh. Perubahan yang tercatat setelah peristiwa penolakan di alur kerja menandakan bahwa koreksi telah dilakukan. Stempel waktunya berasal dari tabel CDHDR. Pengumpulan data Identifikasi entri log perubahan di CDHDR/CDPOS setelah peristiwa penolakan. Jenis peristiwa inferred | |||
| Jurnal ditolak | Aktivitas ini menandakan penolakan akhir jurnal. Setelah itu, jurnal tidak akan dicatat. Biasanya, ini menjadi status akhir dalam alur kerja persetujuan dan dokumen tertangguh kemudian dihapus. | ||
| Mengapa ini penting Pelacakan penolakan sangat penting untuk pengelolaan kualitas. Analisis alasan dan frekuensi penolakan membantu meningkatkan tingkat jurnal yang benar sejak pertama kali. Sumber data Hasil ini diambil dari log SAP Business Workflow dan menunjukkan keputusan akhir pengguna 'reject' yang mengakhiri proses. Dokumen tertangguh mungkin kemudian dihapus. Pengumpulan data Identifikasi status akhir 'reject' di log alur kerja untuk dokumen tersebut. Jenis peristiwa inferred | |||
| Jurnal tertangguh dihapus | Menandai penghapusan jurnal tertangguh yang tidak pernah dicatat. Ini dapat terjadi setelah penolakan atau jika entri dibuat karena kesalahan. | ||
| Mengapa ini penting Aktivitas ini menandai akhir proses yang tidak berhasil. Analisis alasan dokumen tertangguh dihapus dapat mengungkap masalah, seperti entri duplikat atau kesalahpahaman tentang proses. Sumber data Peristiwa ini dicatat saat status dokumen tertangguh di tabel BKPF berubah. Kolom status BKPF-BSTAT diperbarui menjadi 'Z' (dokumen tertangguh dihapus). Stempel waktu perubahan dapat ditemukan di log perubahan dokumen (CDHDR). Pengumpulan data Identifikasi saat BKPF-BSTAT diperbarui menjadi 'Z'. Jenis peristiwa explicit | |||
| Pencatatan lintas perusahaan teridentifikasi | Aktivitas hasil perhitungan ini menandai jurnal yang memengaruhi lebih dari satu kode perusahaan. Penentuannya dilakukan dengan menganalisis item baris dalam satu dokumen keuangan. | ||
| Mengapa ini penting Transaksi lintas perusahaan dapat memiliki persyaratan pemrosesan dan persetujuan yang lebih rumit. Dengan mengidentifikasinya, Anda dapat menganalisis waktu siklus dan jalur prosesnya secara terpisah untuk menemukan hambatan khusus. Sumber data Hitung dengan memeriksa tabel item baris BSEG untuk nomor dokumen (BELNR) tertentu. Jika item baris memuat lebih dari satu kode perusahaan (BSEG-BUKRS) yang berbeda, entri tersebut merupakan pencatatan lintas perusahaan. Pengumpulan data Periksa apakah ada beberapa nilai BSEG-BUKRS yang berbeda untuk satu BKPF-BELNR. Jenis peristiwa calculated | |||
| Perubahan jurnal diminta | Menandai tahap dalam alur kerja ketika pemberi persetujuan telah meninjau jurnal dan mengembalikannya kepada pembuat untuk diperbaiki. Peristiwa ini dicatat dari log alur kerja yang menunjukkan keputusan pengguna 'rejection' atau 'send back'. | ||
| Mengapa ini penting Aktivitas ini penting untuk menemukan siklus pengerjaan ulang, yang menjadi sumber utama inefisiensi dan penyimpangan proses. Jika peristiwa ini sering terjadi, kualitas entri mungkin bermasalah atau persyaratannya kurang jelas. Sumber data Peristiwa ini disimpulkan dari stempel waktu langkah keputusan pengguna tertentu di log SAP Business Workflow yang menunjukkan tindakan 'reject' atau 'send for correction'. Pengumpulan data Identifikasi stempel waktu keputusan 'rejection' atau 'rework' di log alur kerja. Jenis peristiwa inferred | |||
Panduan Ekstraksi
Langkah
- Buat Program ABAP: Di sistem SAP, buka kode transaksi SE38 (ABAP Editor). Masukkan nama untuk program baru, misalnya Z_PM_JE_EXTRACTION, lalu klik Create. Beri judul yang sesuai dan tetapkan jenis program sebagai 'Executable Program'.
- Tentukan Layar Seleksi: Di kode sumber program, tentukan layar seleksi. Layar ini memungkinkan pengguna mengatur parameter seperti rentang tanggal pembuatan dokumen, kode perusahaan, dan jenis dokumen untuk membatasi volume data yang diekstrak.
- Deklarasikan Struktur Data: Tentukan struktur tabel internal untuk menampung data log peristiwa akhir. Struktur ini harus mencakup semua kolom wajib: JournalEntryId, ActivityName, EventTime, SourceSystem, LastDataUpdate, serta atribut yang disarankan seperti User, CompanyCode, dan PostingDate.
- Terapkan Logika Pemilihan Data: Tulis kueri inti ABAP SQL untuk mengekstrak data bagi masing-masing dari 14 aktivitas wajib. Data diambil dari tabel utama seperti BKPF (Header) dan BSEG (Line Item), tabel log perubahan CDHDR dan CDPOS, tabel alur kerja seperti SWWLOGHIST, serta tabel kliring seperti BSAS dan BSAK.
- Ekstrak Dokumen Sementara dan Dokumen yang Diposting: Untuk peristiwa 'Entri Jurnal Disimpan Sementara', pilih data dari BKPF dengan status dokumen (BSTAT) 'V'. Untuk peristiwa 'Entri Jurnal Dibuat' dan 'Entri Jurnal Diposting', pilih data dari BKPF dengan status kosong, yang menunjukkan dokumen normal yang telah diposting.
- Ekstrak Peristiwa Perubahan dan Penghapusan: Kueri tabel dokumen perubahan CDHDR dan CDPOS untuk kelas objek 'BELEG'. Gunakan kunci dokumen sebagai filter untuk menemukan perubahan yang sesuai dengan aktivitas 'Entri Jurnal Diperbaiki' atau 'Entri Jurnal Sementara Dihapus'.
- Ekstrak Peristiwa Alur Kerja: Untuk mencatat aktivitas seperti 'Entri Jurnal Diajukan', 'Disetujui', 'Ditolak', dan 'Perubahan Diminta', kueri tabel alur kerja. Gunakan tabel SWW_WI2OBJ untuk menautkan dokumen akuntansi ke instans alur kerja, lalu baca SWWLOGHIST untuk mengetahui keputusan pengguna atau perubahan status tertentu.
- Identifikasi Peristiwa Hasil Perhitungan: Untuk aktivitas 'Entri Manual Teridentifikasi', cocokkan kode transaksi (BKPF-TCODE) dengan daftar kode transaksi manual yang diketahui. Untuk aktivitas 'Posting Antarperusahaan Teridentifikasi', analisis item baris BSEG pada dokumen untuk memeriksa apakah ada beberapa kode perusahaan.
- Gabungkan dan Ubah Data: Saat memilih data untuk setiap aktivitas, ubah formatnya ke struktur log peristiwa akhir. Gabungkan Kode Perusahaan, Nomor Dokumen, dan Tahun Fiskal untuk membuat JournalEntryId. Ubah tanggal dan waktu SAP menjadi satu timestamp EventTime. Tambahkan hasil setiap kueri ke tabel internal akhir.
- Terapkan Ekspor File: Gunakan pernyataan penanganan file ABAP, seperti OPEN DATASET, LOOP AT, TRANSFER, dan CLOSE DATASET, untuk menulis tabel internal gabungan ke file CSV atau file teks di direktori server aplikasi SAP (dapat dilihat melalui transaksi AL11).
- Jadwalkan sebagai Pekerjaan Latar Belakang: Buka transaksi SM36 (Define Background Job). Buat pekerjaan baru, tentukan langkah untuk menjalankan program ABAP, lalu atur jadwal, misalnya setiap malam atau setiap minggu di luar jam sibuk, untuk mengotomatiskan ekstraksi.
- Ambil dan Format File: Gunakan transaksi CG3Y atau minta administrator sistem mengunduh file yang dihasilkan dari server aplikasi ke komputer Anda. Pastikan pengodean dan format file sesuai untuk diunggah ke alat process mining.
Konfigurasi
- Rentang Tanggal: Tentukan rentang tanggal untuk menjaga kinerja sistem. Gunakan tanggal pembuatan dokumen (BKPF-CPUDT) sebagai filter utama. Untuk analisis awal, disarankan menggunakan periode 3 hingga 6 bulan. Untuk pengujian, gunakan rentang beberapa hari yang diketahui memiliki data.
- Filter Kode Perusahaan: Selalu filter berdasarkan kode perusahaan (BKPF-BUKRS). Mengekstrak data dari semua kode perusahaan sekaligus dapat menghabiskan banyak sumber daya. Mulailah dengan satu atau beberapa kode perusahaan yang relevan.
- Filter Jenis Dokumen: Gunakan filter jenis dokumen (BKPF-BLART) untuk membatasi cakupan ke jenis entri jurnal tertentu, seperti 'SA' untuk dokumen G/L, jika Anda tidak perlu menganalisis semua jenis dokumen.
- ID Tugas Alur Kerja: Logika untuk mengekstrak peristiwa alur kerja bergantung pada ID tugas tertentu yang digunakan di sistem Anda untuk persetujuan, penolakan, dan pengajuan. Atur ID ini di kode sumber program sesuai definisi alur kerja perusahaan Anda.
- Pertimbangan Kinerja: Program ini menggabungkan beberapa tabel besar, terutama CDPOS dan tabel riwayat alur kerja. Menjalankannya pada jam kerja sibuk dapat memengaruhi kinerja sistem. Jadwalkan program sebagai pekerjaan latar belakang di luar jam sibuk. Jika masalah kinerja terus terjadi, pertimbangkan untuk membuat indeks database sekunder.
- Prasyarat: Metode ini memerlukan pengguna dengan otorisasi pengembangan ABAP (untuk SE38) dan izin membuat serta mengelola pekerjaan latar belakang (untuk SM36). Pengguna atau pekerjaan tersebut juga memerlukan akses baca ke semua tabel keuangan, alur kerja, dan sistem yang relevan (BKPF, BSEG, CDHDR, CDPOS, SWWLOGHIST, dan lainnya).
Contoh kueri abap
REPORT Z_PM_JE_EXTRACTION.
*&---------------------------------------------------------------------*
*& Data Structures for Final Event Log
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
journalentryid TYPE string,
activityname TYPE string,
eventtime TYPE timestamp,
sourcesystem TYPE string,
lastdataupdate TYPE timestamp,
username TYPE uname,
companycode TYPE bukrs,
documenttype TYPE blart,
postingdate TYPE budat,
transactioncode TYPE tcode,
isreversed TYPE abap_bool,
END OF ty_event_log.
DATA: lt_final_log TYPE STANDARD TABLE OF ty_event_log.
DATA: ls_event TYPE ty_event_log.
*&---------------------------------------------------------------------*
*& Selection Screen Parameters
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_bukrs FOR bkpf-bukrs OBLIGATORY,
s_blart FOR bkpf-blart,
s_cpudt FOR bkpf-cpudt OBLIGATORY.
PARAMETERS: p_sysid TYPE sy-sysid DEFAULT sy-sysid.
*&---------------------------------------------------------------------*
*& Main Logic
*&---------------------------------------------------------------------*
START-OF-SELECTION.
DATA(lv_last_update) = cl_abap_context_info=>get_system_timestamp( ).
" 1. Journal Entry Parked
SELECT CONCAT( a~bukrs, a~belnr, a~gjahr ) AS journalentryid,
'Journal Entry Parked' AS activityname,
a~cpudt, a~cputm,
a~usnam AS username,
a~bukrs AS companycode,
a~blart AS documenttype,
a~bldat AS postingdate,
a~tcode AS transactioncode
FROM bkpf AS a
WHERE a~bukrs IN s_bukrs
AND a~blart IN s_blart
AND a~cpudt IN s_cpudt
AND a~bstat = 'V' " Parked Document
INTO TABLE @DATA(lt_parked).
IF sy-subrc = 0.
LOOP AT lt_parked ASSIGNING FIELD-SYMBOL(<fs_parked>).
ls_event-journalentryid = <fs_parked>-journalentryid.
ls_event-activityname = <fs_parked>-activityname.
CONVERT DATE <fs_parked>-cpudt TIME <fs_parked>-cputm INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
ls_event-sourcesystem = p_sysid.
ls_event-lastdataupdate = lv_last_update.
ls_event-username = <fs_parked>-username.
ls_event-companycode = <fs_parked>-companycode.
ls_event-documenttype = <fs_parked>-documenttype.
ls_event-postingdate = <fs_parked>-postingdate.
ls_event-transactioncode = <fs_parked>-transactioncode.
APPEND ls_event TO lt_final_log.
ENDLOOP.
ENDIF.
" 2. Journal Entry Created (directly posted, not parked first)
" 9. Journal Entry Posted
" These two events happen at the same time for a direct posting.
SELECT CONCAT( bukrs, belnr, gjahr ) AS journalentryid,
cpudt, cputm, usnam, bukrs, blart, budat, tcode, stblg
FROM bkpf
WHERE bukrs IN s_bukrs
AND blart IN s_blart
AND cpudt IN s_cpudt
AND bstat = '' " Normal, posted document
INTO TABLE @DATA(lt_posted).
IF sy-subrc = 0.
LOOP AT lt_posted ASSIGNING FIELD-SYMBOL(<fs_posted>).
" Activity: Journal Entry Created
ls_event-journalentryid = <fs_posted>-journalentryid.
ls_event-activityname = 'Journal Entry Created'.
CONVERT DATE <fs_posted>-cpudt TIME <fs_posted>-cputm INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
ls_event-sourcesystem = p_sysid.
ls_event-lastdataupdate = lv_last_update.
ls_event-username = <fs_posted>-usnam.
ls_event-companycode = <fs_posted>-bukrs.
ls_event-documenttype = <fs_posted>-blart.
ls_event-postingdate = <fs_posted>-budat.
ls_event-transactioncode = <fs_posted>-tcode.
ls_event-isreversed = COND #( WHEN <fs_posted>-stblg IS NOT INITIAL THEN abap_true ELSE abap_false ).
APPEND ls_event TO lt_final_log.
" Activity: Journal Entry Posted
ls_event-activityname = 'Journal Entry Posted'.
APPEND ls_event TO lt_final_log.
ENDLOOP.
ENDIF.
" 3. Documentation Attached (via GOS)
SELECT a~instid_a, c~cr_timestamp
FROM srgbtbrel AS a
INNER JOIN sood AS b ON a~instid_b = b~objid
INNER JOIN socf AS c ON b~filid = c~filid
WHERE a~typeid_a = 'BKPF'
AND a~bukrs IN s_bukrs
INTO TABLE @DATA(lt_attachments).
IF sy-subrc = 0.
LOOP AT lt_attachments ASSIGNING FIELD-SYMBOL(<fs_attach>).
ls_event-journalentryid = |{ <fs_attach>-instid_a(4) }{ <fs_attach>-instid_a+4(10) }{ <fs_attach>-instid_a+14(4) }|.
ls_event-activityname = 'Documentation Attached'.
ls_event-eventtime = <fs_attach>-cr_timestamp.
" Other attributes may need to be looked up from BKPF if needed.
APPEND ls_event TO lt_final_log.
ENDLOOP.
ENDIF.
" 4, 5, 6, 7, 8: Workflow events (Submitted, Changes Requested, Corrected, Approved, Rejected)
" This is a simplified example. Real logic depends on specific workflow templates.
SELECT a~instid, b~wi_cd, b~wi_ct, b~wi_aagent, b~wi_text
FROM sww_wi2obj AS a
INNER JOIN swwloghist AS b ON a~wi_id = b~wi_id
WHERE a~typeid = 'BKPF'
AND a~catid = 'BO'
AND a~bukrs IN s_bukrs
AND b~wi_cd BETWEEN s_cpudt-low AND s_cpudt-high
INTO TABLE @DATA(lt_workflow).
IF sy-subrc = 0.
LOOP AT lt_workflow ASSIGNING FIELD-SYMBOL(<fs_wf>).
ls_event-journalentryid = |{ <fs_wf>-instid(4) }{ <fs_wf>-instid+4(10) }{ <fs_wf>-instid+14(4) }|.
ls_event-activityname = CASE <fs_wf>-wi_text. " Simplified logic based on work item text
WHEN '[Placeholder for Submit Text]' THEN 'Journal Entry Submitted'
WHEN '[Placeholder for Approve Text]' THEN 'Journal Entry Approved'
WHEN '[Placeholder for Reject Text]' THEN 'Journal Entry Rejected'
WHEN '[Placeholder for Rework Text]' THEN 'Journal Entry Changes Requested'
ELSE ''
ENDCASE.
IF ls_event-activityname IS NOT INITIAL.
CONVERT DATE <fs_wf>-wi_cd TIME <fs_wf>-wi_ct INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
ls_event-username = <fs_wf>-wi_aagent.
APPEND ls_event TO lt_final_log.
ENDIF.
ENDLOOP.
ENDIF.
" 10. Manual Entry Identified & 11. Cross-Company Posting Identified
SELECT bukrs, belnr, gjahr, tcode FROM bkpf
WHERE bukrs IN s_bukrs AND blart IN s_blart AND cpudt IN s_cpudt
INTO TABLE @DATA(lt_calc_base).
LOOP AT lt_calc_base ASSIGNING FIELD-SYMBOL(<fs_calc>).
ls_event-journalentryid = |{ <fs_calc>-bukrs }{ <fs_calc>-belnr }{ <fs_calc>-gjahr }|.
" Check for manual entry T-Codes
IF <fs_calc>-tcode = 'FB01' OR <fs_calc>-tcode = 'F-02' OR <fs_calc>-tcode = 'FB50'.
ls_event-activityname = 'Manual Entry Identified'.
APPEND ls_event TO lt_final_log.
ENDIF.
" Check for cross-company posting
SELECT SINGLE bukrs FROM bseg WHERE belnr = <fs_calc>-belnr AND gjahr = <fs_calc>-gjahr AND bukrs <> <fs_calc>-bukrs INTO @DATA(lv_cross_bukrs).
IF sy-subrc = 0.
ls_event-activityname = 'Cross-Company Posting Identified'.
APPEND ls_event TO lt_final_log.
ENDIF.
ENDLOOP.
" 12. Journal Entry Line Item Cleared
SELECT a~bukrs, a~belnr, a~gjahr, a~augdt, a~augbl
FROM bsas AS a " G/L Cleared Items
WHERE a~bukrs IN s_bukrs
AND a~budat IN s_cpudt
INTO TABLE @DATA(lt_cleared_gl).
IF sy-subrc = 0.
LOOP AT lt_cleared_gl ASSIGNING FIELD-SYMBOL(<fs_clr>).
ls_event-journalentryid = |{ <fs_clr>-bukrs }{ <fs_clr>-belnr }{ <fs_clr>-gjahr }|.
ls_event-activityname = 'Journal Entry Line Item Cleared'.
CONVERT DATE <fs_clr>-augdt INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
" User is often not directly available for clearing events
APPEND ls_event TO lt_final_log.
ENDLOOP.
ENDIF.
" 13. Parked Journal Entry Deleted & 6. Journal Entry Corrected
SELECT objectid, changenr, username, udate, utime FROM cdhdr
WHERE objectclas = 'BELEG'
AND udate IN s_cpudt
INTO TABLE @DATA(lt_cdhdr).
LOOP AT lt_cdhdr ASSIGNING FIELD-SYMBOL(<fs_cdhdr>).
SELECT SINGLE tcode FROM cdpos WHERE changenr = <fs_cdhdr>-changenr AND fname = 'BSTAT' AND value_new = 'Z' INTO @DATA(lv_deleted_tcode).
ls_event-journalentryid = |{ <fs_cdhdr>-objectid(4) }{ <fs_cdhdr>-objectid+4(10) }{ <fs_cdhdr>-objectid+14(4) }|.
CONVERT DATE <fs_cdhdr>-udate TIME <fs_cdhdr>-utime INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
ls_event-username = <fs_cdhdr>-username.
IF sy-subrc = 0.
ls_event-activityname = 'Parked Journal Entry Deleted'.
APPEND ls_event TO lt_final_log.
ELSE.
ls_event-activityname = 'Journal Entry Corrected'.
APPEND ls_event TO lt_final_log.
ENDIF.
ENDLOOP.
" 14. Journal Entry Reversal Processed
SELECT CONCAT( a~bukrs, a~belnr, a~gjahr ) AS journalentryid,
a~cpudt, a~cputm, a~usnam
FROM bkpf AS a
WHERE a~bukrs IN s_bukrs
AND a~blart IN s_blart
AND a~cpudt IN s_cpudt
AND a~stblg IS NOT NULL " Document is a reversal
INTO TABLE @DATA(lt_reversals).
IF sy-subrc = 0.
LOOP AT lt_reversals ASSIGNING FIELD-SYMBOL(<fs_rev>).
ls_event-journalentryid = <fs_rev>-journalentryid.
ls_event-activityname = 'Journal Entry Reversal Processed'.
CONVERT DATE <fs_rev>-cpudt TIME <fs_rev>-cputm INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
ls_event-username = <fs_rev>-usnam.
APPEND ls_event TO lt_final_log.
ENDLOOP.
ENDIF.
" Final step: Output to file
DATA(lv_filename) = |/tmp/je_extraction_{ sy-datum }_{ sy-uzeit }.csv|.
OPEN DATASET lv_filename FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc = 0.
" Write header
DATA(lv_header) = 'JournalEntryId,ActivityName,EventTime,SourceSystem,LastDataUpdate,User,CompanyCode,DocumentType,PostingDate,TransactionCode,IsReversed'.
TRANSFER lv_header TO lv_filename.
LOOP AT lt_final_log INTO ls_event.
DATA(lv_line) = |"{ ls_event-journalentryid }","|
|{ ls_event-activityname }","|
|{ ls_event-eventtime }","|
|{ ls_event-sourcesystem }","|
|{ ls_event-lastdataupdate }","|
|{ ls_event-username }","|
|{ ls_event-companycode }","|
|{ ls_event-documenttype }","|
|{ ls_event-postingdate }","|
|{ ls_event-transactioncode }","|
|{ ls_event-isreversed }"|.
TRANSFER lv_line TO lv_filename.
ENDLOOP.
CLOSE DATASET lv_filename.
ENDIF. Langkah
- Buat Koneksi Database: Dapatkan kredensial hanya-baca untuk database SAP ECC. Gunakan klien SQL standar, seperti DBeaver, SAP HANA Studio, atau SQL Server Management Studio, untuk terhubung ke database.
- Siapkan Kueri SQL: Salin seluruh kueri SQL yang disediakan di bagian 'query' dokumen ini ke klien SQL Anda.
- Atur Parameter Ekstraksi: Sebelum menjalankan kueri, atur placeholder di dalamnya. Ganti '[START_DATE]' dan '[END_DATE]' dengan rentang tanggal yang diinginkan dalam format 'YYYYMMDD'. Ganti '[COMPANY_CODE_1]', '[COMPANY_CODE_2]' dengan kode perusahaan SAP yang ingin Anda analisis.
- Tentukan Sistem Sumber: Dalam pernyataan
SELECTutama, ganti placeholder '[Your SAP System ID]' dengan SAP System ID (SID) yang sebenarnya agar sumber data dapat dikenali dengan benar. - Jalankan Kueri: Jalankan kueri SQL yang sudah dikonfigurasi pada database SAP. Waktu eksekusi bergantung pada rentang tanggal dan ukuran tabel database Anda.
- Periksa Hasil Awal: Setelah kueri selesai, periksa sekilas baris yang dikembalikan untuk memastikan data terisi sesuai harapan. Pastikan ada beragam aktivitas dan kolom penting seperti
JournalEntryIdsertaEventTimetidak kosong. - Tangani Timestamp: Kueri menggabungkan kolom tanggal dan waktu menjadi string
YYYYMMDDHHMMSS. Pastikan sistem tujuan atau proses pascapemrosesan Anda dapat membaca format ini. Jika database mendukungnya, Anda juga dapat mengubah fungsi SQLCONCATagar menghasilkan format ISO 8601 sepertiYYYY-MM-DDTHH:MI:SS. - Ekspor Data: Ekspor seluruh hasil dari klien SQL ke file CSV. Gunakan pengodean UTF-8 agar karakter khusus tetap terbaca dengan benar.
- Siapkan Data untuk Diunggah: Sebelum mengunggah data ke alat process mining, pastikan header kolom sesuai dengan skema data yang diwajibkan.
JournalEntryId,ActivityName, danEventTimewajib tersedia. Tambahkan kolomLastDataUpdatedan isi dengan timestamp saat ekstraksi dilakukan. - Validasi Akhir: Ikuti langkah-langkah di bagian 'validationSteps' untuk memastikan data yang diekstrak lengkap dan akurat sebelum memulai analisis.
Konfigurasi
- Otorisasi Database: Pengguna database memerlukan akses baca ke tabel SAP berikut: BKPF, BSEG, CDHDR, CDPOS, T001, dan V_USERNAME. Untuk aktivitas terkait alur kerja, akses ke SWW_WI2OBJ dan SWWLOGHIST juga diperlukan. Akses seperti ini biasanya hanya diberikan kepada tim teknis khusus.
- Filter Rentang Tanggal: Filter data berdasarkan rentang tanggal tertentu untuk menjaga kinerja kueri. Kueri yang disediakan menggunakan placeholder tanggal mulai dan tanggal akhir, yang diterapkan pada tanggal pembuatan dokumen (
BKPF.CPUDT). Untuk analisis awal, disarankan menggunakan rentang 3 hingga 6 bulan. - Filter Entitas: Untuk mengelola volume data dan memusatkan analisis, selalu filter berdasarkan Kode Perusahaan (
BKPF.BUKRS). Anda juga dapat memfilter berdasarkan Jenis Dokumen (BKPF.BLART) agar hanya menyertakan jenis entri jurnal yang relevan, misalnya 'SA' untuk dokumen G/L. Kecualikan dokumen operasional seperti faktur atau pembayaran jika tidak termasuk dalam cakupan. - Pertimbangan Kinerja: Kueri langsung pada tabel inti seperti BSEG dan CDPOS dapat menghabiskan banyak sumber daya. Jalankan ekstraksi di luar jam kerja sibuk agar kinerja sistem tidak terganggu bagi pengguna. Hindari mengekstrak data lebih dari satu tahun dalam sekali proses.
- ID Tugas Alur Kerja: Kueri ini memuat placeholder seperti '[WF_TASK_ID_SUBMIT]' dan '[WF_TASK_ID_APPROVE]'. Ganti placeholder tersebut dengan ID tugas yang digunakan dalam konfigurasi alur kerja entri jurnal di sistem Anda. Anda dapat menemukan ID ini dengan bantuan spesialis SAP Workflow atau dengan menganalisis definisi teknis alur kerja melalui transaksi PFTC.
Contoh kueri sql
WITH DOC_HEADERS AS (
SELECT
BUKRS,
BELNR,
GJAHR,
BLART,
BLDAT,
BUDAT,
CPUDT,
CPUTM,
USNAM,
TCODE,
BSTAT,
STBLG,
XRECH
FROM BKPF
WHERE CPUDT BETWEEN '[START_DATE]' AND '[END_DATE]'
AND BUKRS IN ('[COMPANY_CODE_1]', '[COMPANY_CODE_2]')
)
-- Event 1: Journal Entry Created (Directly Posted)
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
'Journal Entry Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(H.CPUDT, H.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
H.TCODE AS "TransactionCode",
CASE WHEN H.STBLG IS NOT NULL AND H.STBLG <> '' THEN TRUE ELSE FALSE END AS "IsReversed"
FROM DOC_HEADERS H
LEFT JOIN V_USERNAME U ON H.USNAM = U.BNAME
WHERE H.BSTAT = '' OR H.BSTAT = 'U'
UNION ALL
-- Event 2: Journal Entry Parked
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
'Journal Entry Parked' AS "ActivityName",
TO_TIMESTAMP(CONCAT(H.CPUDT, H.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
H.TCODE AS "TransactionCode",
FALSE AS "IsReversed"
FROM DOC_HEADERS H
LEFT JOIN V_USERNAME U ON H.USNAM = U.BNAME
WHERE H.BSTAT = 'V'
UNION ALL
-- Event 3: Journal Entry Posted (from Parked state)
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
'Journal Entry Posted' AS "ActivityName",
TO_TIMESTAMP(CONCAT(C.UDATE, C.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
C.TCODE AS "TransactionCode",
CASE WHEN H.STBLG IS NOT NULL AND H.STBLG <> '' THEN TRUE ELSE FALSE END AS "IsReversed"
FROM DOC_HEADERS H
JOIN CDHDR C ON C.OBJECTCLAS = 'BELEG' AND C.OBJECTID = CONCAT(H.BUKRS, H.BELNR, H.GJAHR)
JOIN CDPOS P ON C.CHANGENR = P.CHANGENR AND P.OBJECTCLAS = 'BELEG' AND P.OBJECTID = C.OBJECTID
LEFT JOIN V_USERNAME U ON C.USERNAME = U.BNAME
WHERE H.BSTAT <> 'V'
AND P.TABNAME = 'BKPF'
AND P.FNAME = 'BSTAT'
AND P.VALUE_OLD = 'V'
AND P.VALUE_NEW <> 'V'
UNION ALL
-- Event 4: Parked Journal Entry Deleted
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
'Parked Journal Entry Deleted' AS "ActivityName",
TO_TIMESTAMP(CONCAT(C.UDATE, C.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
C.TCODE AS "TransactionCode",
FALSE AS "IsReversed"
FROM DOC_HEADERS H
JOIN CDHDR C ON C.OBJECTCLAS = 'BELEG' AND C.OBJECTID = CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AND C.TCODE = 'FBV0'
JOIN CDPOS P ON C.CHANGENR = P.CHANGENR AND P.OBJECTCLAS = 'BELEG' AND P.OBJECTID = C.OBJECTID
LEFT JOIN V_USERNAME U ON C.USERNAME = U.BNAME
WHERE P.TABNAME = 'BKPF'
AND P.FNAME = 'BSTAT'
AND P.VALUE_OLD = 'V'
AND P.VALUE_NEW = 'Z'
UNION ALL
-- Event 5: Journal Entry Reversal Processed
SELECT
CONCAT(H.BUKRS, H.STBLG, H.GJAHR) AS "JournalEntryId", -- Linking to the original document
'Journal Entry Reversal Processed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(H.CPUDT, H.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
H.TCODE AS "TransactionCode",
TRUE AS "IsReversed"
FROM DOC_HEADERS H
LEFT JOIN V_USERNAME U ON H.USNAM = U.BNAME
WHERE H.STBLG IS NOT NULL AND H.STBLG <> ''
UNION ALL
-- Event 6: Journal Entry Line Item Cleared
SELECT
CONCAT(B.BUKRS, B.BELNR, B.GJAHR) AS "JournalEntryId",
'Journal Entry Line Item Cleared' AS "ActivityName",
TO_TIMESTAMP(B.AUGDT, 'YYYYMMDD') AS "EventTime", -- Clearing date used as event time
U.NAME_TEXT AS "User",
B.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
NULL AS "TransactionCode", -- Clearing transaction is in the clearing document header, complex to retrieve here
CASE WHEN H.STBLG IS NOT NULL AND H.STBLG <> '' THEN TRUE ELSE FALSE END AS "IsReversed"
FROM BSEG B
JOIN DOC_HEADERS H ON B.BUKRS = H.BUKRS AND B.BELNR = H.BELNR AND B.GJAHR = H.GJAHR
LEFT JOIN V_USERNAME U ON H.USNAM = U.BNAME
WHERE B.AUGBL IS NOT NULL AND B.AUGBL <> '' AND B.AUGDT <> '00000000'
UNION ALL
-- Event 7: Journal Entry Corrected (changes to a parked document)
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
'Journal Entry Corrected' AS "ActivityName",
TO_TIMESTAMP(CONCAT(C.UDATE, C.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
C.TCODE AS "TransactionCode",
FALSE AS "IsReversed"
FROM DOC_HEADERS H
JOIN CDHDR C ON C.OBJECTCLAS = 'BELEG' AND C.OBJECTID = CONCAT(H.BUKRS, H.BELNR, H.GJAHR)
LEFT JOIN V_USERNAME U ON C.USERNAME = U.BNAME
WHERE H.BSTAT = 'V' AND C.TCODE IN ('FBV2', 'FBV4') -- FBV2 is change parked doc, FBV4 is change parked doc header
UNION ALL
-- Event 8: Documentation Attached (inferred from GOS attachment creation, requires configuration)
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
'Documentation Attached' AS "ActivityName",
TO_TIMESTAMP(CONCAT(REL.RECDATE, '000000'), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
H.TCODE AS "TransactionCode",
FALSE AS "IsReversed"
FROM DOC_HEADERS H
JOIN SRGBTBREL REL ON REL.INSTID_A = CONCAT('BUS2081', H.BUKRS, H.BELNR, H.GJAHR) -- BUS2081 is object type for BKPF
LEFT JOIN V_USERNAME U ON REL.RECUNAM = U.BNAME
WHERE REL.TYPEID_A = 'BUS2081' AND REL.RELTYPE = 'ATTA'
UNION ALL
-- Events 9-13 from Workflow (Submitted, Changes Requested, Approved, Rejected) requires specific workflow config
-- This is a generic template. The WI_RH_TASK must be adapted to your system.
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
CASE
WHEN LOG.WI_RH_TASK = '[WF_TASK_ID_SUBMIT]' THEN 'Journal Entry Submitted'
WHEN LOG.WI_RH_TASK = '[WF_TASK_ID_APPROVE]' AND LOG.METHOD = 'DECISION' AND LOG.EVT_ID = 'COMPLETED' THEN 'Journal Entry Approved'
WHEN LOG.WI_RH_TASK = '[WF_TASK_ID_REJECT]' AND LOG.METHOD = 'DECISION' AND LOG.EVT_ID = 'COMPLETED' THEN 'Journal Entry Rejected'
WHEN LOG.WI_RH_TASK = '[WF_TASK_ID_CHANGES_REQ]' AND LOG.METHOD = 'DECISION' AND LOG.EVT_ID = 'COMPLETED' THEN 'Journal Entry Changes Requested'
ELSE NULL
END AS "ActivityName",
TO_TIMESTAMP(CONCAT(LOG.EVT_DATE, LOG.EVT_TIME), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
NULL AS "TransactionCode",
FALSE AS "IsReversed"
FROM DOC_HEADERS H
JOIN SWW_WI2OBJ WIOBJ ON WIOBJ.INSTID = CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AND WIOBJ.TYPEID = 'BKPF'
JOIN SWWLOGHIST LOG ON WIOBJ.WI_ID = LOG.WI_ID
LEFT JOIN V_USERNAME U ON LOG.EXEC_USER = U.BNAME
WHERE LOG.WI_RH_TASK IN ('[WF_TASK_ID_SUBMIT]', '[WF_TASK_ID_APPROVE]', '[WF_TASK_ID_REJECT]', '[WF_TASK_ID_CHANGES_REQ]')
UNION ALL
-- Event 14: Manual Entry Identified
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
'Manual Entry Identified' AS "ActivityName",
TO_TIMESTAMP(CONCAT(H.CPUDT, H.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
H.TCODE AS "TransactionCode",
CASE WHEN H.STBLG IS NOT NULL AND H.STBLG <> '' THEN TRUE ELSE FALSE END AS "IsReversed"
FROM DOC_HEADERS H
LEFT JOIN V_USERNAME U ON H.USNAM = U.BNAME
WHERE H.TCODE IN ('FB01', 'F-02', 'FB50', 'F-04', 'F-22', 'F-43', 'FB60', 'FB70', 'FV50', 'FV60', 'FV70')
UNION ALL
-- Event 15: Cross-Company Posting Identified
SELECT
CONCAT(H.BUKRS, H.BELNR, H.GJAHR) AS "JournalEntryId",
'Cross-Company Posting Identified' AS "ActivityName",
TO_TIMESTAMP(CONCAT(H.CPUDT, H.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
U.NAME_TEXT AS "User",
H.BUKRS AS "CompanyCode",
H.BLART AS "DocumentType",
H.BUDAT AS "PostingDate",
H.TCODE AS "TransactionCode",
CASE WHEN H.STBLG IS NOT NULL AND H.STBLG <> '' THEN TRUE ELSE FALSE END AS "IsReversed"
FROM DOC_HEADERS H
LEFT JOIN V_USERNAME U ON H.USNAM = U.BNAME
WHERE H.XRECH = 'X' Langkah
- Siapkan koneksi SAP: Di alat ETL pihak ketiga, konfigurasi koneksi sumber baru ke sistem SAP ECC Anda. Biasanya, Anda memerlukan detail server aplikasi, client, nomor sistem, serta pengguna SAP khusus dengan otorisasi RFC yang diperlukan.
- Tentukan sumber data: Di proyek ekstraksi, tambahkan tabel SAP yang diperlukan sebagai sumber data. Tabel utama mencakup BKPF (Accounting Document Header), BSEG (Accounting Document Segment), VBSEGK (Parked Document Header), CDHDR (Change Document Header), CDPOS (Change Document Items), SWW_WI2OBJ (Workflow to Object Links), SWWLOGHIST (Workflow Log), dan SRGBTBREL (Relationships for GOS Attachments).
- Ekstrak peristiwa dasar (dibuat dan ditahan): Buat alur data pertama untuk mengekstrak peristiwa awal. Untuk 'Journal Entry Parked', gunakan VBSEGK sebagai sumber. Untuk 'Journal Entry Created', gunakan BKPF dan pastikan Anda menyaring dokumen yang bukan pembalikan dan tidak ditahan sejak awal. Anda dapat melakukannya dengan anti-join ke VBSEGK.
- Ekstrak peristiwa alur kerja: Buat alur data yang menggabungkan BKPF dengan SWW_WI2OBJ menggunakan kunci objek (kode perusahaan + nomor dokumen + tahun fiskal) untuk menemukan ID instans alur kerja. Gabungkan hasilnya dengan SWWLOGHIST untuk mengekstrak peristiwa seperti 'Submitted', 'Approved', 'Rejected', dan 'Changes Requested', berdasarkan hasil tugas alur kerja dan keputusan pengguna yang tercatat di log.
- Ekstrak peristiwa perubahan dan penghapusan: Gunakan tabel CDHDR dan CDPOS untuk mengidentifikasi perubahan. Untuk 'Journal Entry Corrected', saring perubahan pada dokumen yang ditahan (Object Class 'FIPP'). Untuk 'Parked Journal Entry Deleted', cari penanda penghapusan di log perubahan dokumen yang ditahan.
- Ekstrak peristiwa lampiran: Untuk mencatat 'Documentation Attached', gabungkan BKPF dengan SRGBTBREL saat jenis objeknya 'BKPF' dan relasinya '[Your attachment relationship type]'. Tanggal pembuatan tautan menjadi waktu peristiwa.
- Ekstrak peristiwa kliring dan pembalikan: Untuk 'Journal Entry Line Item Cleared', kueri tabel BSEG saat kolom dokumen kliring (AUGBL) terisi. Waktu peristiwanya adalah tanggal posting dokumen kliring (AUGDT). Untuk 'Journal Entry Reversal Processed', kueri BKPF untuk menemukan dokumen pembalikan, yang ditandai dengan nilai pada kolom dokumen yang dibalik (STBLG).
- Turunkan peristiwa hasil perhitungan: Buat blok logika terpisah untuk peristiwa hasil perhitungan. Untuk 'Manual Entry Identified', saring BKPF berdasarkan daftar kode transaksi manual, misalnya FB01, FB50, dan F-02. Untuk 'Cross-Company Posting Identified', kelompokkan tabel BSEG berdasarkan ID dokumen dan cari dokumen dengan lebih dari satu kode perusahaan yang berbeda.
- Gabungkan semua alur peristiwa: Gunakan transformasi UNION di alat ETL untuk menggabungkan keluaran dari setiap alur peristiwa (Created, Parked, Approved, dan seterusnya) ke dalam satu tabel log peristiwa. Pastikan nama kolom dan tipe datanya konsisten di semua alur.
- Petakan ke skema akhir: Petakan data gabungan ke struktur log peristiwa yang diperlukan. Buat kolom
JournalEntryId,ActivityName,EventTime,Pengguna, serta atribut lain yang diwajibkan atau disarankan. Tambahkan kolom statis sepertiSourceSystemdan gunakan waktu eksekusi tugas ETL untukLastDataUpdate. - Atur pemuatan inkremental: Untuk ekstraksi berkala, atur strategi pemuatan inkremental. Gunakan tanggal pembuatan atau perubahan terakhir, misalnya BKPF.CPUDT atau CDHDR.UDATE, sebagai penanda agar hanya data baru atau yang diperbarui sejak proses terakhir yang diambil.
- Ekspor untuk ProcessMind: Jadwalkan tugas ekstraksi dan atur langkah keluaran terakhir untuk menyimpan log peristiwa sebagai file CSV atau Parquet di lokasi yang dapat diakses ProcessMind untuk diunggah.
Konfigurasi
- Prasyarat: Alat ETL pihak ketiga berlisensi (misalnya, Theobald Xtract Universal, Informatica, Talend) dengan konektor SAP khusus. Akun pengguna SAP dengan akses RFC dan otorisasi untuk membaca tabel keuangan (misalnya, S_TABU_DIS untuk grup tabel F_00, F_WF), data workflow, dan log perubahan.
- Parameter koneksi: Anda memerlukan IP atau nama host SAP Application Server, System Number, dan Client ID. Gunakan pengelolaan kredensial yang aman untuk nama pengguna dan kata sandi SAP.
- Filter utama: Selalu terapkan filter Kode Perusahaan (BKPF.BUKRS) dan Tahun Fiskal (BKPF.GJAHR) di sumber untuk membatasi volume data. Sebaiknya, filter juga berdasarkan Tanggal Pembuatan Dokumen (BKPF.CPUDT) untuk menentukan periode ekstraksi tertentu, misalnya 6 bulan terakhir.
- Pemilihan rentang tanggal: Untuk pemuatan awal, pilih periode yang mewakili data, misalnya 3 hingga 6 bulan. Untuk pemuatan delta berikutnya, gunakan penanda waktu pada kolom stempel waktu seperti
CPUDTagar hanya data baru yang diambil. - Pertimbangan kinerja: Penggabungan pada tabel BSEG, CDPOS, dan tabel workflow bisa sangat lambat. Pastikan alat ETL menerapkan filter langsung di sumber SAP jika memungkinkan. Jika alat mendukungnya, ekstrak data dalam potongan atau paket yang lebih kecil, terutama untuk pemuatan data historis dalam jumlah besar.
- Kustomisasi workflow: Logika untuk mengidentifikasi aktivitas workflow seperti 'Disetujui' atau 'Ditolak' sangat bergantung pada templat workflow yang Anda gunakan. Anda perlu menemukan ID tugas workflow dan kunci keputusan pengguna yang tepat di sistem Anda untuk digunakan dalam filter.
Contoh kueri sql
/*
This is a logical representation of the extraction configuration in a third-party ETL tool.
It is not executable SQL but defines the sources, joins, and transformations for each activity.
Placeholders like [Your SAP Source], [Date Filter], and [Company Code Filter] must be configured in the tool.
*/
-- Extraction block for 'Journal Entry Parked'
SELECT
CONCAT(v.BUKRS, v.VBELN, v.GJAHR) AS JournalEntryId,
'Journal Entry Parked' AS ActivityName,
CAST(CONCAT(v.CPUDT, v.CPUTM) AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
v.USNAM AS User,
v.BUKRS AS CompanyCode,
v.BLART AS DocumentType,
v.BUDAT AS PostingDate,
v.TCODE AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].VBSEGK v
WHERE [Date Filter on v.CPUDT] AND [Company Code Filter on v.BUKRS]
UNION ALL
-- Extraction block for 'Journal Entry Created'
SELECT
CONCAT(h.BUKRS, h.BELNR, h.GJAHR) AS JournalEntryId,
'Journal Entry Created' AS ActivityName,
CAST(CONCAT(h.CPUDT, h.CPUTM) AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
h.USNAM AS User,
h.BUKRS AS CompanyCode,
h.BLART AS DocumentType,
h.BUDAT AS PostingDate,
h.TCODE AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].BKPF h
LEFT JOIN [Your SAP Source].VBSEGK v ON h.AWKEY = CONCAT(v.BUKRS, v.VBELN, v.GJAHR)
WHERE h.BSTAT = '' AND v.VBELN IS NULL AND h.STBLG IS NULL
AND [Date Filter on h.CPUDT] AND [Company Code Filter on h.BUKRS]
UNION ALL
-- Extraction block for 'Journal Entry Posted' (from parked)
SELECT
CONCAT(h.BUKRS, h.BELNR, h.GJAHR) AS JournalEntryId,
'Journal Entry Posted' AS ActivityName,
CAST(CONCAT(h.CPUDT, h.CPUTM) AS TIMESTAMP) AS EventTime, -- Or a more precise posting time from change logs if available
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
h.USNAM AS User,
h.BUKRS AS CompanyCode,
h.BLART AS DocumentType,
h.BUDAT AS PostingDate,
h.TCODE AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].BKPF h
JOIN [Your SAP Source].VBSEGK v ON h.AWKEY = CONCAT(v.BUKRS, v.VBELN, v.GJAHR)
WHERE [Date Filter on h.CPUDT] AND [Company Code Filter on h.BUKRS]
UNION ALL
-- Extraction block for 'Journal Entry Submitted', 'Approved', 'Rejected', 'Changes Requested'
SELECT
CONCAT(SUBSTRING(o.INSTID, 3, 4), SUBSTRING(o.INSTID, 7, 10), SUBSTRING(o.INSTID, 17, 4)) AS JournalEntryId,
CASE
WHEN wl.WI_TEXT LIKE '%Submit%' THEN 'Journal Entry Submitted'
WHEN wl.WI_TEXT LIKE '%Approve%' THEN 'Journal Entry Approved'
WHEN wl.WI_TEXT LIKE '%Reject%' THEN 'Journal Entry Rejected'
WHEN wl.WI_TEXT LIKE '%Request Changes%' THEN 'Journal Entry Changes Requested'
END AS ActivityName,
CAST(CONCAT(wl.WI_CD, wl.WI_CT) AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
wl.EXEC_USER AS User,
SUBSTRING(o.INSTID, 3, 4) AS CompanyCode,
NULL AS DocumentType,
NULL AS PostingDate,
NULL AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].SWW_WI2OBJ o
JOIN [Your SAP Source].SWWLOGHIST wl ON o.WI_ID = wl.WI_ID
WHERE o.TYPEID = 'BKPF' AND o.CATID = 'BO'
AND wl.WI_TEXT IN ('[Your Submit Task Name]', '[Your Approve Task Name]', '[Your Reject Task Name]', '[Your Changes Request Task Name]')
AND [Date Filter on wl.WI_CD]
UNION ALL
-- Extraction block for 'Journal Entry Corrected'
SELECT
CONCAT(cd.OBJECTID_LONG_CHAR(3,4), cd.OBJECTID_LONG_CHAR(7,10), cd.OBJECTID_LONG_CHAR(17,4)) AS JournalEntryId,
'Journal Entry Corrected' AS ActivityName,
CAST(CONCAT(cd.UDATE, cd.UTIME) AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
cd.USERNAME AS User,
cd.OBJECTID_LONG_CHAR(3,4) AS CompanyCode,
NULL AS DocumentType,
NULL AS PostingDate,
cd.TCODE AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].CDHDR cd
WHERE cd.OBJECTCLAS = 'FIPP' AND cd.CHANGE_IND = 'U'
AND [Date Filter on cd.UDATE]
UNION ALL
-- Extraction block for 'Parked Journal Entry Deleted'
SELECT
CONCAT(cd.OBJECTID_LONG_CHAR(3,4), cd.OBJECTID_LONG_CHAR(7,10), cd.OBJECTID_LONG_CHAR(17,4)) AS JournalEntryId,
'Parked Journal Entry Deleted' AS ActivityName,
CAST(CONCAT(cd.UDATE, cd.UTIME) AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
cd.USERNAME AS User,
cd.OBJECTID_LONG_CHAR(3,4) AS CompanyCode,
NULL AS DocumentType,
NULL AS PostingDate,
cd.TCODE AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].CDHDR cd
WHERE cd.OBJECTCLAS = 'FIPP' AND cd.CHANGE_IND = 'D'
AND [Date Filter on cd.UDATE]
UNION ALL
-- Extraction block for 'Documentation Attached'
SELECT
CONCAT(SUBSTRING(r.INSTID_A, 3, 4), SUBSTRING(r.INSTID_A, 7, 10), SUBSTRING(r.INSTID_A, 17, 4)) AS JournalEntryId,
'Documentation Attached' AS ActivityName,
-- Note: A precise timestamp is often unavailable. Using document creation time as a proxy.
CAST(CONCAT(h.CPUDT, h.CPUTM) AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
h.USNAM AS User,
h.BUKRS AS CompanyCode,
h.BLART AS DocumentType,
h.BUDAT AS PostingDate,
h.TCODE AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].SRGBTBREL r
JOIN [Your SAP Source].BKPF h ON h.BUKRS = SUBSTRING(r.INSTID_A, 3, 4) AND h.BELNR = SUBSTRING(r.INSTID_A, 7, 10) AND h.GJAHR = SUBSTRING(r.INSTID_A, 17, 4)
WHERE r.TYPEID_A = 'BKPF' AND r.RELTYPE = '[Configure based on your system]'
AND [Date Filter on h.CPUDT] AND [Company Code Filter on h.BUKRS]
UNION ALL
-- Extraction block for 'Journal Entry Reversal Processed'
SELECT
CONCAT(h.BUKRS, h.BELNR, h.GJAHR) AS JournalEntryId,
'Journal Entry Reversal Processed' AS ActivityName,
CAST(CONCAT(h.CPUDT, h.CPUTM) AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
h.USNAM AS User,
h.BUKRS AS CompanyCode,
h.BLART AS DocumentType,
h.BUDAT AS PostingDate,
h.TCODE AS TransactionCode,
TRUE AS IsReversed
FROM [Your SAP Source].BKPF h
WHERE h.STBLG IS NOT NULL AND h.STBLG <> ''
AND [Date Filter on h.CPUDT] AND [Company Code Filter on h.BUKRS]
UNION ALL
-- Extraction block for 'Is Reversed' flag on original document
SELECT
CONCAT(h_orig.BUKRS, h_orig.BELNR, h_orig.GJAHR) AS JournalEntryId,
'Is Reversed' AS ActivityName, -- This is an attribute update, modeled as an event
CAST(CONCAT(h_rev.CPUDT, h_rev.CPUTM) AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
h_rev.USNAM AS User,
h_orig.BUKRS AS CompanyCode,
h_orig.BLART AS DocumentType,
h_orig.BUDAT AS PostingDate,
h_orig.TCODE AS TransactionCode,
TRUE AS IsReversed
FROM [Your SAP Source].BKPF h_rev
JOIN [Your SAP Source].BKPF h_orig ON h_rev.STBLG = h_orig.BELNR AND h_rev.BUKRS = h_orig.BUKRS AND h_rev.GJAHR_S = h_orig.GJAHR
WHERE h_rev.STBLG IS NOT NULL AND h_rev.STBLG <> ''
AND [Date Filter on h_rev.CPUDT] AND [Company Code Filter on h_rev.BUKRS]
UNION ALL
-- Extraction block for 'Journal Entry Line Item Cleared'
SELECT
CONCAT(i.BUKRS, i.BELNR, i.GJAHR) AS JournalEntryId,
'Journal Entry Line Item Cleared' AS ActivityName,
CAST(i.AUGDT AS TIMESTAMP) AS EventTime,
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
NULL AS User, -- User who performed clearing is on the clearing document header
i.BUKRS AS CompanyCode,
NULL AS DocumentType,
NULL AS PostingDate,
NULL AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].BSEG i
WHERE i.AUGBL IS NOT NULL AND i.AUGBL <> ''
AND [Date Filter on i.AUGDT] AND [Company Code Filter on i.BUKRS]
UNION ALL
-- Extraction block for 'Manual Entry Identified'
SELECT
CONCAT(h.BUKRS, h.BELNR, h.GJAHR) AS JournalEntryId,
'Manual Entry Identified' AS ActivityName,
CAST(CONCAT(h.CPUDT, h.CPUTM) AS TIMESTAMP) AS EventTime, -- Same time as creation
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
h.USNAM AS User,
h.BUKRS AS CompanyCode,
h.BLART AS DocumentType,
h.BUDAT AS PostingDate,
h.TCODE AS TransactionCode,
FALSE AS IsReversed
FROM [Your SAP Source].BKPF h
WHERE h.TCODE IN ('FB01', 'F-02', 'FB50', 'FV50', '[Add other manual T-Codes]')
AND [Date Filter on h.CPUDT] AND [Company Code Filter on h.BUKRS]
UNION ALL
-- Extraction block for 'Cross-Company Posting Identified'
SELECT
JournalEntryId,
'Cross-Company Posting Identified' AS ActivityName,
EventTime, -- Same time as creation
'SAP ECC' AS SourceSystem,
NOW() AS LastDataUpdate,
User,
CompanyCode,
DocumentType,
PostingDate,
TransactionCode,
IsReversed
FROM (
SELECT
CONCAT(h.BUKRS, h.BELNR, h.GJAHR) AS JournalEntryId,
CAST(CONCAT(h.CPUDT, h.CPUTM) AS TIMESTAMP) AS EventTime,
h.USNAM AS User,
h.BUKRS AS CompanyCode,
h.BLART AS DocumentType,
h.BUDAT AS PostingDate,
h.TCODE AS TransactionCode,
FALSE AS IsReversed,
(SELECT COUNT(DISTINCT i.BUKRS) FROM [Your SAP Source].BSEG i WHERE i.BELNR = h.BELNR AND i.BUKRS = h.BUKRS AND i.GJAHR = h.GJAHR) as CompanyCodeCount
FROM [Your SAP Source].BKPF h
WHERE [Date Filter on h.CPUDT] AND [Company Code Filter on h.BUKRS]
) AS CrossCompanyCheck
WHERE CompanyCodeCount > 1 Siap Memulai?
Gunakan templat data ini untuk memulai process mining pada proses Record to Report - Entri Jurnal. Dapatkan wawasan yang lebih mendalam dan tingkatkan efisiensi operasional keuangan Anda.
Optimalkan proses Record to Report - Entri Jurnal Anda Sekarang
Kurangi waktu siklus Entri Jurnal hingga 30% dan pastikan pelaporan yang akurat.
Tidak perlu kartu kredit. Mulai tingkatkan proses Anda hari ini.