Templat data entri jurnal untuk proses pencatatan hingga pelaporan
Templat data entri jurnal untuk proses pencatatan hingga pelaporan
- Atribut yang disarankan untuk dikumpulkan
- Aktivitas utama yang perlu dilacak
- Panduan praktis untuk mengambil data
Atribut entri jurnal untuk proses pencatatan hingga pelaporan
| Nama | Deskripsi | ||
|---|---|---|---|
| Aktivitas ActivityName | Nama aktivitas bisnis yang terjadi pada tahap tertentu dalam proses entri jurnal. | ||
| Deskripsi Aktivitas menunjukkan langkah atau peristiwa tertentu dalam siklus entri jurnal, seperti 'Entri jurnal dibuat', 'Jurnal diajukan untuk ditinjau', atau 'Entri jurnal dicatat'. Aktivitas ini biasanya diambil dari log perubahan, pembaruan status, atau kode transaksi yang tercatat di sistem. Analisis aktivitas membantu memvisualisasikan alur proses, menemukan jalur yang umum, dan mengidentifikasi penyimpangan dari prosedur standar. Aktivitas juga menjadi dasar untuk menghitung metrik seperti frekuensi aktivitas, waktu tunggu antar langkah, dan tingkat kepatuhan terhadap proses. Mengapa ini penting Atribut ini menentukan langkah-langkah dalam proses, sehingga peta proses dapat divisualisasikan dan pola alur kerja dianalisis. Sumber data Diambil dari berbagai sumber, termasuk kolom status di tabel header atau item (misalnya, BKPF-BSTAT), log dokumen perubahan (CDHDR/CDPOS), dan log alur kerja. Contoh Entri jurnal dibuatEntri jurnal ditangguhkanJurnal diajukan untuk ditinjauEntri jurnal disetujuiEntri jurnal dicatat | |||
| ID entri jurnal JournalEntryId | Pengenal unik untuk entri jurnal keuangan yang digunakan sebagai ID kasus utama dalam proses. | ||
| Deskripsi ID entri jurnal adalah nomor unik yang diberikan kepada setiap dokumen akuntansi saat dibuat di SAP S/4HANA. Pengenal ini penting untuk melacak seluruh siklus entri jurnal, mulai dari pembuatan atau penangguhan, melalui alur kerja persetujuan, hingga pencatatan akhir dan kemungkinan pembalikan atau rekonsiliasi. Dalam analisis process mining, ID ini digunakan untuk menghubungkan semua aktivitas terkait ke dalam satu kasus. Dengan mengelompokkan peristiwa berdasarkan ID entri jurnal yang sama, analis dapat merekonstruksi alur proses dari awal hingga akhir, mengukur waktu siklus, serta menemukan variasi atau hambatan pada setiap transaksi keuangan. Atribut ini menjadi dasar untuk membangun keseluruhan tampilan proses. Mengapa ini penting Pengenal ini menghubungkan semua langkah proses terkait, sehingga perjalanan setiap entri jurnal dari awal hingga akhir dapat dianalisis. Sumber data Ini adalah kunci gabungan yang biasanya dibentuk dengan menggabungkan Kode Perusahaan (BKPF-BUKRS), Nomor Dokumen (BKPF-BELNR), dan Tahun Fiskal (BKPF-GJAHR). Contoh 1000-1000000001-20231710-1900000055-20242000-2100003412-2023 | |||
| Waktu peristiwa EventTime | Stempel waktu yang menunjukkan kapan aktivitas tertentu terjadi pada entri jurnal. | ||
| Deskripsi Waktu peristiwa adalah tanggal dan waktu tepat saat aktivitas bisnis dilakukan dan dicatat di sistem. Setiap aktivitas dalam satu kasus memiliki stempel waktunya sendiri, sehingga membentuk urutan peristiwa secara kronologis. Atribut ini penting untuk semua analisis proses berbasis waktu. Atribut ini digunakan untuk menghitung waktu siklus, durasi antaraktivitas, dan waktu tunggu, serta memahami sebaran pekerjaan dari waktu ke waktu. Stempel waktu yang akurat diperlukan untuk membangun model proses yang andal dan menghitung indikator kinerja utama, seperti Waktu Siklus Persetujuan. Mengapa ini penting Atribut ini menunjukkan urutan kronologis peristiwa, yang penting untuk menghitung semua metrik berbasis durasi dan memahami linimasa proses. Sumber data Diambil dari log dokumen perubahan (CDHDR-UDATE, CDHDR-UTIME), log alur kerja, atau stempel waktu pembuatan/entri pada tabel seperti BKPF (CPUDT, CPUTM). Contoh 2023-10-26T10:05:00Z2023-11-15T14:30:15Z2024-01-20T09:00:45Z | |||
| Jenis jurnal JournalEntryType | Mengelompokkan jurnal berdasarkan tujuan bisnisnya, seperti pembukuan aset, faktur pemasok, atau entri buku besar. | ||
| Deskripsi Jenis jurnal, yang dalam istilah SAP disebut Document Type, adalah kode untuk mengelompokkan dokumen akuntansi. Kode ini mengatur hal-hal seperti rentang nomor dokumen dan jenis akun yang boleh digunakan untuk pembukuan. Analisis berdasarkan jenis jurnal penting untuk memahami perbedaan proses sesuai konteksnya. Misalnya, proses persetujuan akrual sederhana (jenis SA) mungkin jauh lebih singkat daripada proses untuk akuisisi aset yang kompleks (jenis AA). Dimensi ini penting untuk dashboard 'Kepatuhan berdasarkan jenis jurnal'. Mengapa ini penting Mengelompokkan jurnal berdasarkan konteks bisnis agar Anda dapat menganalisis variasi dan kinerja proses untuk berbagai jenis transaksi keuangan. Sumber data Tabel SAP S/4HANA BKPF, kolom BLART (Document Type). Contoh SAKRAA | |||
| Jumlah dalam mata uang lokal AmountInLocalCurrency | Nilai total jurnal dalam mata uang lokal kode perusahaan. | ||
| Deskripsi Atribut ini menunjukkan nilai keuangan jurnal. Biasanya, nilainya dihitung dengan menjumlahkan nilai absolut semua baris debit atau kredit dalam dokumen, lalu mengonversinya ke mata uang lokal kode perusahaan. Analisis berdasarkan jumlah memungkinkan Anda mengelompokkan proses menurut dampak keuangannya. Misalnya, jurnal bernilai tinggi mungkin memerlukan proses persetujuan yang lebih ketat daripada jurnal bernilai rendah. Dengan begitu, upaya perbaikan proses dapat diprioritaskan pada transaksi dengan risiko keuangan tertinggi. Mengapa ini penting Menunjukkan nilai keuangan jurnal sehingga Anda dapat menganalisis perubahan perilaku proses berdasarkan nilai transaksi. Sumber data Dihitung dengan menjumlahkan nilai dari tabel baris item BSEG (kolom DMBTR) untuk jurnal tertentu (BELNR), lalu mengubah hasilnya menjadi nilai positif. Contoh 1500.75125000.0050.20 | |||
| Kode perusahaan CompanyCode | Pengenal unik perusahaan atau badan hukum tempat jurnal dibukukan. | ||
| Deskripsi Kode perusahaan adalah unit organisasi dasar di SAP Financials yang mewakili badan hukum independen dan memiliki laporan keuangan sendiri. Setiap jurnal dikaitkan dengan kode perusahaan tertentu. Atribut ini penting untuk memisahkan dan membandingkan kinerja proses di berbagai bagian organisasi. Analis dapat memfilter tampilan proses untuk badan hukum tertentu, membandingkan tingkat penolakan antar kode perusahaan, atau menemukan variasi proses di wilayah tertentu. Mengapa ini penting Memungkinkan Anda memfilter dan membandingkan proses jurnal di berbagai badan hukum atau unit bisnis dalam organisasi. Sumber data Tabel SAP S/4HANA BKPF, kolom BUKRS (Company Code). Contoh 10001710US01 | |||
| Pengguna pembuat CreatedByUser | ID pengguna yang membuat jurnal. | ||
| Deskripsi Atribut ini menyimpan pengenal unik pengguna yang memulai proses jurnal dengan membuat dokumen awal. Pengguna tersebut bisa berupa akuntan, pengguna bisnis, atau ID sistem untuk entri otomatis. Analisis berdasarkan pembuat dapat mengungkap pola yang terkait dengan pengguna atau tim tertentu. Misalnya, tingkat penolakan yang lebih tinggi dapat menunjukkan kebutuhan pelatihan, sementara kinerja yang baik dapat menonjolkan pengguna berprestasi. Atribut ini penting untuk dashboard 'Aktivitas dan produktivitas pengguna'. Mengapa ini penting Mengaitkan aktivitas proses dengan pengguna tertentu untuk menganalisis kinerja, menyeimbangkan beban kerja, dan menemukan kebutuhan pelatihan. Sumber data Tabel SAP S/4HANA BKPF, kolom USNAM (User Name). Contoh ABROWNCJONESBATCH_USER | |||
| Tanggal pembukuan PostingDate | Tanggal jurnal dicatat di buku besar, yang menentukan periode keuangannya. | ||
| Deskripsi Tanggal pembukuan menentukan periode fiskal saat transaksi muncul dalam laporan keuangan. Tanggal ini penting dalam akuntansi dan bisa berbeda dari tanggal dokumen dibuat atau dimasukkan ke sistem. Dalam process mining, tanggal pembukuan digunakan untuk analisis kelompok berdasarkan waktu, misalnya membandingkan proses penutupan akhir bulan atau menganalisis tren kinerja di berbagai periode keuangan. Tanggal ini juga digunakan untuk mengukur jeda antara pembuatan jurnal dan pembukuan keuangan. Mengapa ini penting Penting untuk memahami konteks keuangan dan menganalisis kinerja proses dalam periode akuntansi tertentu, seperti akhir bulan atau akhir tahun. Sumber data Tabel SAP S/4HANA BKPF, kolom BUDAT (Posting Date in the Document). Contoh 2023-10-312023-11-012024-02-29 | |||
| Alasan pembalikan ReversalReason | Kode yang menunjukkan alasan jurnal yang sudah dibukukan dibalik. | ||
| Deskripsi Jika jurnal yang sudah dibukukan ternyata salah, jurnal tersebut tidak dapat dihapus. Jurnal harus dibalik dengan dokumen baru. Kode alasan pembalikan menjelaskan penyebabnya, misalnya tanggal atau jumlah pembukuan yang salah. Analisis alasan pembalikan membantu menemukan akar masalah dalam proses Record to Report. Jika alasan tertentu sering muncul, hal ini dapat menunjukkan masalah sistemik, seperti pelatihan yang kurang memadai atau kegagalan kontrol. Masalah tersebut perlu ditangani untuk meningkatkan kualitas sejak awal. Mengapa ini penting Membantu menemukan akar masalah yang menyebabkan pembalikan, sehingga Anda dapat mengurangi pengerjaan ulang dan meningkatkan kualitas proses. Sumber data Tabel SAP S/4HANA BKPF, kolom STGRD (Reason for reversal). Contoh 010205 | |||
| Kode transaksi TransactionCode | Kode transaksi SAP yang digunakan untuk membuat atau mengubah jurnal. | ||
| Deskripsi Kode transaksi (T-Code) adalah pintasan untuk fungsi atau program tertentu di SAP. Untuk jurnal, T-Code yang berbeda dapat menunjukkan cara jurnal dibuat. Contohnya, FB01 untuk pembukuan GL manual, FV50 untuk menyimpan sementara, atau kode otomatis untuk entri yang dibuat sistem. Atribut ini membantu menunjukkan apakah aktivitas dilakukan secara manual oleh pengguna atau otomatis oleh sistem. Atribut ini penting untuk menghitung KPI tingkat pembukuan manual dan menemukan peluang otomatisasi. Mengapa ini penting Menunjukkan cara jurnal diproses, misalnya secara manual atau otomatis. Informasi ini penting untuk menganalisis otomatisasi dan memahami variasi proses. Sumber data Tabel SAP S/4HANA BKPF, kolom TCODE (Transaction Code). Contoh FB01FV50F-02 | |||
| Mengalami pengerjaan ulang IsRework | Penanda boolean yang menunjukkan apakah jurnal mengalami pengerjaan ulang, misalnya diperbaiki setelah ditolak. | ||
| Deskripsi Atribut hasil perhitungan ini menandai jurnal yang menyimpang dari alur proses ideal. Nilainya biasanya true jika dalam kasus tersebut terjadi aktivitas seperti 'Jurnal ditolak' atau 'Jurnal diperbaiki'. Penanda ini memudahkan analisis efisiensi proses. Anda dapat menghitung KPI tingkat pengerjaan ulang dengan cepat dan membandingkan waktu siklus serta biaya antara kasus yang mengalami pengerjaan ulang dan yang tidak. Menemukan penyebab pengerjaan ulang menjadi tujuan utama banyak inisiatif perbaikan proses. Mengapa ini penting Menandai kasus yang memerlukan perbaikan atau pengulangan langkah, sehingga Anda dapat mengukur dan mencari akar masalah inefisiensi proses. Sumber data Atribut hasil perhitungan ini ditentukan dari urutan aktivitas dalam suatu kasus. Nilainya ditandai 'true' jika terdapat aktivitas seperti 'Jurnal ditolak'. Contoh truefalse | |||
| Pembaruan data terakhir LastDataUpdate | Stempel waktu yang menunjukkan kapan data untuk rekaman ini terakhir kali diperbarui dari sistem sumber. | ||
| Deskripsi Atribut ini mencatat tanggal dan waktu ekstraksi atau pembaruan data terbaru dari sistem sumber. Dengan begitu, Anda dapat mengetahui seberapa baru data yang dianalisis. Waktu pembaruan terakhir membantu Anda memahami kebaruan analisis proses. Informasi ini juga membantu pengguna membaca dashboard dan KPI dengan tepat, serta mengetahui apakah data yang dilihat hampir real-time atau merupakan rekam data dari periode sebelumnya. Mengapa ini penting Menunjukkan kebaruan data agar pengguna mengetahui seberapa mutakhir analisis proses. Sumber data Atribut metadata ini biasanya dibuat dan dicatat pada setiap rekaman selama proses pemasukan data. Contoh 2024-03-10T02:00:00Z2024-03-11T02:00:00Z2024-03-12T02:00:00Z | |||
| Pembukuan manual IsManualPosting | Penanda boolean yang menunjukkan apakah jurnal dibukukan secara manual oleh pengguna. | ||
| Deskripsi Atribut ini mengidentifikasi jurnal yang dibukukan dengan campur tangan pengguna, bukan secara otomatis oleh pekerjaan sistem atau antarmuka. Nilainya biasanya ditentukan dari kode transaksi yang digunakan untuk membukukan dokumen. Penanda ini digunakan untuk menghitung KPI tingkat pembukuan manual dan membantu organisasi memantau kemajuan otomatisasi proses Record to Report. Dengan memfilter jurnal yang dibukukan secara manual, analis dapat menemukan situasi yang masih memerlukan campur tangan manusia dan menilai peluang otomatisasinya. Mengapa ini penting Membedakan pembukuan oleh pengguna dan oleh sistem. Informasi ini penting untuk mengukur tingkat otomatisasi dan menemukan peluang otomatisasi. Sumber data Atribut hasil perhitungan ini ditentukan dari TransactionCode. Daftar kode transaksi manual yang telah ditetapkan, misalnya 'FB01' dan 'F-02', digunakan untuk mengatur penanda menjadi 'true'. Contoh truefalse | |||
| Pengguna penyetuju ApproverUser | ID pengguna yang menyetujui atau menolak jurnal. | ||
| Deskripsi Atribut ini mengidentifikasi pengguna yang bertanggung jawab meninjau dan memutuskan jurnal yang diajukan. Dalam alur kerja persetujuan bertingkat, satu jurnal dapat memiliki beberapa penyetuju. Informasi ini penting untuk menganalisis proses persetujuan secara terperinci. Anda dapat mengukur beban kerja setiap penyetuju, menghitung waktu persetujuan masing-masing, dan menemukan hambatan dalam rantai persetujuan. Atribut ini mendukung dashboard 'Aktivitas dan produktivitas pengguna'. Mengapa ini penting Mengidentifikasi pihak yang bertanggung jawab atas persetujuan agar Anda dapat menganalisis beban kerja, kinerja, dan hambatan dalam proses persetujuan. Sumber data Diambil dari log alur kerja, misalnya SWW_WI2OBJ dan SWWLOG, atau tabel dokumen perubahan (CDHDR/CDPOS), dengan melacak pengguna yang menjalankan langkah persetujuan. Contoh DMILLERFWHITEKCHEN | |||
| Sistem sumber SourceSystem | Menunjukkan sistem sumber tempat data entri jurnal diekstrak. | ||
| Deskripsi Atribut ini menunjukkan sistem pencatatan asal data jurnal. Bagi perusahaan yang menggunakan beberapa instans ERP atau gabungan sistem lama dan modern, atribut ini membantu membedakan sumber data. Dalam analisis, atribut ini dapat digunakan untuk membandingkan kinerja proses di berbagai sistem atau memfilter data berdasarkan sumber tertentu. Atribut ini penting untuk tata kelola data dan memastikan konteks data dipahami. Mengapa ini penting Memberikan konteks asal data. Informasi ini penting untuk menganalisis dan membandingkan proses secara akurat di lingkungan dengan banyak sistem. Sumber data Biasanya berupa nilai statis yang ditambahkan saat ekstraksi data untuk mengidentifikasi instans SAP S/4HANA tertentu, misalnya SID atau nama sistem logis. Contoh S4H_PROD_100ECC_FIN_200S4C_US_EAST | |||
| Status dokumen DocumentStatus | Status pemrosesan jurnal saat ini, seperti disimpan sementara, dibukukan, atau dilunasi. | ||
| Deskripsi Status dokumen menunjukkan posisi jurnal dalam siklus prosesnya. Misalnya, dokumen yang disimpan sementara sudah tersimpan, tetapi belum dibukukan ke buku besar. Dokumen yang sudah dibukukan telah difinalisasi. Analisis status membantu Anda memahami alur kerja dan menemukan hambatan. Banyaknya dokumen yang lama tertahan dalam status 'disimpan sementara' atau 'menunggu persetujuan' dapat menandakan proses yang tidak efisien. Status dokumen juga menjadi sumber penting untuk menentukan aktivitas proses. Mengapa ini penting Menunjukkan posisi jurnal dalam siklus prosesnya agar Anda dapat menemukan antrean dan hambatan. Sumber data Tabel SAP S/4HANA BKPF, kolom BSTAT (Document status). Contoh VAB | |||
| Tahun fiskal FiscalYear | Tahun fiskal yang mencakup jurnal tersebut. | ||
| Deskripsi Tahun fiskal merupakan bagian dari kunci unik jurnal, bersama kode perusahaan dan nomor dokumen. Tahun ini menunjukkan tahun keuangan yang terkait dengan dokumen. Dalam analisis, tahun fiskal digunakan untuk melihat tren jangka panjang dan memastikan pengenal kasus tetap unik. Perbandingan metrik proses antar tahun fiskal dapat menunjukkan peningkatan atau penurunan kinerja dari waktu ke waktu. Mengapa ini penting Menjadi bagian penting untuk mengidentifikasi dokumen secara unik dan memungkinkan analisis kinerja proses dari tahun ke tahun. Sumber data Tabel SAP S/4HANA BKPF, kolom GJAHR (Fiscal Year). Contoh 202320242022 | |||
| Waktu selesai EndTime | Stempel waktu yang menunjukkan kapan aktivitas selesai. | ||
| Deskripsi Waktu selesai menandai berakhirnya suatu aktivitas. Dalam banyak log peristiwa, waktu mulai dan waktu selesai aktivitas sama karena aktivitas tersebut terjadi seketika. Namun, untuk aktivitas yang berlangsung selama jangka waktu tertentu, seperti saat pengguna meninjau dokumen, atribut ini dapat mencatat durasinya. Waktu selesai yang dicatat secara terpisah memungkinkan penghitungan waktu pemrosesan aktivitas dan waktu tunggu yang lebih akurat. Anda dapat membedakan waktu saat tugas benar-benar dikerjakan dari waktu saat tugas mengantre tanpa aktivitas. Mengapa ini penting Memungkinkan penghitungan waktu pemrosesan aktivitas secara akurat, dengan memisahkan waktu kerja aktif dari waktu tunggu. Sumber data Biasanya sama dengan StartTime untuk peristiwa atomik. Untuk aktivitas berdurasi, nilainya dapat diambil dari log alur kerja atau dihitung berdasarkan peristiwa berikutnya. Contoh 2023-10-26T10:05:00Z2023-11-15T14:45:20Z2024-01-20T09:10:30Z | |||
| Waktu siklus persetujuan ApprovalCycleTime | Waktu sejak jurnal diajukan untuk disetujui hingga disetujui atau ditolak. | ||
| Deskripsi Metrik hasil perhitungan ini mengukur durasi khusus tahap persetujuan. Pengukuran dimulai dari aktivitas 'Jurnal diajukan untuk ditinjau' hingga aktivitas berikutnya, yaitu 'Jurnal disetujui' atau 'Jurnal ditolak'. KPI ini penting untuk menemukan hambatan dalam alur kerja persetujuan. Waktu siklus persetujuan yang panjang dapat sangat memperlambat keseluruhan proses. Analisis metrik ini berdasarkan penyetuju, kode perusahaan, atau jenis jurnal dapat menunjukkan bagian yang perlu diperbaiki. Mengapa ini penting Mengukur durasi tahap persetujuan secara terpisah agar Anda dapat menemukan dan mengatasi hambatan dalam alur kerja peninjauan dan persetujuan. Sumber data Dihitung dari selisih waktu antara peristiwa 'Jurnal diajukan untuk ditinjau' dan peristiwa 'Jurnal disetujui' atau 'Jurnal ditolak'. Contoh 1 hari 2 jam4 jam 25 menit5 hari 0 jam | |||
Aktivitas entri jurnal untuk proses pencatatan hingga pelaporan
| Aktivitas | Deskripsi | ||
|---|---|---|---|
| Entri jurnal dibuat | Aktivitas ini menandai pembuatan awal dokumen entri jurnal di sistem. Catatan dibuat di tabel header (BKPF), tetapi belum dicatat ke buku besar. Ini adalah titik awal siklus entri jurnal. | ||
| Mengapa ini penting Ini adalah peristiwa awal utama dalam proses. Menganalisis waktu dari peristiwa ini hingga pencatatan penting untuk mengukur keseluruhan waktu siklus dan menemukan keterlambatan pada tahap awal entri data. Sumber data Peristiwa ini dapat diambil secara langsung dari tabel SAP BKPF menggunakan kolom tanggal pembuatan (CPUDT) dan waktu pembuatan (CPUTM) untuk nomor dokumen tertentu (BELNR). Pengumpulan data Gunakan BKPF-CPUDT dan BKPF-CPUTM sebagai stempel waktu peristiwa. Jenis peristiwa explicit | |||
| Entri jurnal dicatat | Entri jurnal resmi dicatat ke buku besar dan memengaruhi laporan keuangan perusahaan. Pada tahap ini, dokumen menjadi catatan keuangan permanen. | ||
| Mengapa ini penting Ini adalah pencapaian utama yang menandai berakhirnya siklus pemrosesan inti. Throughput entri yang dicatat dan waktu untuk mencapai tahap ini merupakan metrik penting dalam process mining. Sumber data Peristiwa ini tercatat secara langsung melalui Tanggal Pencatatan (BUDAT) di tabel BKPF. Status dokumen yang telah dicatat (BSTAT) kosong, berbeda dari dokumen yang ditangguhkan ('V') atau ditahan ('D'). Pengumpulan data Gunakan Tanggal Pencatatan (BKPF-BUDAT) dan Tanggal Entri (BKPF-CPUDT) untuk menentukan stempel waktu peristiwa. BKPF-BSTAT yang kosong menandakan dokumen telah dicatat. Jenis peristiwa explicit | |||
| Entri jurnal direkonsiliasi | Item terbuka pada baris entri jurnal ditutup dengan pencatatan lain, misalnya pembayaran yang melunasi faktur. Aktivitas ini menandai rekonsiliasi item baris tertentu hingga statusnya ditutup. | ||
| Mengapa ini penting Aktivitas ini merupakan tahap rekonsiliasi akhir bagi banyak entri jurnal, terutama yang melibatkan akun penampung atau akun yang dikelola dengan item terbuka. Menganalisis waktu dari pencatatan hingga rekonsiliasi membantu mengukur efisiensi rekonsiliasi. Sumber data Peristiwa ini disimpulkan dari tabel item baris (BSEG atau tampilan ACDOCA). Saat item direkonsiliasi, kolom Tanggal Rekonsiliasi (AUGDT) dan Dokumen Rekonsiliasi (AUGBL) akan terisi untuk baris tersebut. Pengumpulan data Gunakan tanggal rekonsiliasi (BSEG-AUGDT) untuk item baris sebagai stempel waktu peristiwa. Jenis peristiwa inferred | |||
| Entri jurnal disetujui | Manajer berwenang memberikan persetujuan akhir atas entri jurnal untuk memastikan validitas dan akurasinya. Ini adalah tahap persetujuan terakhir sebelum dokumen dapat dicatat ke buku besar. | ||
| Mengapa ini penting Ini adalah pencapaian penting yang mengakhiri siklus persetujuan. Waktu yang dibutuhkan untuk mencapai tahap ini menjadi bagian besar dari durasi keseluruhan proses dan indikator utama efisiensi pemberi persetujuan. Sumber data Peristiwa ini disimpulkan dari log alur kerja yang menunjukkan tahap persetujuan akhir atau perubahan status dokumen. ID pengguna pemberi persetujuan dan stempel waktunya dapat diambil dari data alur kerja atau log perubahan. Pengumpulan data Temukan stempel waktu tahap persetujuan akhir dalam log alur kerja atau perubahan status menjadi 'Disetujui' dalam dokumen perubahan. Jenis peristiwa inferred | |||
| Jurnal diajukan untuk ditinjau | Pembuat entri jurnal secara resmi mengajukan dokumen untuk ditinjau dan disetujui melalui alur kerja. Aktivitas ini menandai peralihan dari entri data ke proses kontrol resmi dan memulai siklus persetujuan. | ||
| Mengapa ini penting Ini menandai awal waktu siklus persetujuan. Mengukur waktu dari tahap ini hingga persetujuan atau penolakan akhir membantu menemukan hambatan khusus pada tahap peninjauan dan persetujuan. Sumber data Peristiwa ini sering dicatat dalam log alur kerja (tabel SWW_WIHEAD, SWWLOG) yang ditautkan ke objek bisnis. Peristiwa ini juga dapat disimpulkan dari perubahan status pada kolom khusus di header dokumen (BKPF). Pengumpulan data Stempel waktu pembuatan item alur kerja atau perubahan kolom status menjadi 'Diajukan' atau 'Sedang ditinjau'. Jenis peristiwa inferred | |||
| Pembalikan entri jurnal diproses | Entri jurnal yang telah dicatat dibalik dengan membuat dokumen baru yang berisi pencatatan berlawanan. Tindakan ini dilakukan untuk memperbaiki kesalahan pada dokumen yang telah dicatat dan tercatat secara eksplisit sehingga dapat diaudit. | ||
| Mengapa ini penting Pembalikan menandakan adanya kesalahan pada dokumen yang telah dicatat. Tingkat pembalikan yang tinggi dapat menunjukkan masalah mendasar dalam proses persetujuan atau kualitas entri data. Memantau pembalikan membantu meningkatkan akurasi sejak awal. Sumber data Pembalikan merupakan peristiwa yang tercatat secara langsung. Header dokumen pembalik yang baru (BKPF) merujuk ke dokumen asli melalui kolom Nomor Dokumen yang Dibalik (STBLG). Tanggal pencatatan dokumen baru menjadi waktu peristiwanya. Pengumpulan data Temukan dokumen dengan kolom BKPF-STBLG yang terisi. Stempel waktu peristiwa menggunakan tanggal pencatatan dokumen pembalik. Jenis peristiwa explicit | |||
| Dokumen pendukung dilampirkan | Pengguna melampirkan satu atau beberapa dokumen pendukung, seperti faktur atau spreadsheet, ke entri jurnal. Dokumen ini biasanya menjadi bukti dan memberikan konteks transaksi keuangan saat peninjauan dan audit. | ||
| Mengapa ini penting Dokumen pendukung harus dilampirkan sebelum peninjauan agar kepatuhan dan efisiensi persetujuan terjaga. Aktivitas ini membantu mengukur kepatuhan terhadap kebijakan dokumentasi dan dampaknya pada waktu siklus persetujuan. Sumber data Peristiwa ini biasanya disimpulkan dengan memeriksa stempel waktu pembuatan lampiran yang ditautkan melalui Generic Object Services (GOS). Tabel SRGBTBREL menghubungkan objek bisnis, misalnya dokumen BKPF, dengan lampirannya. Pengumpulan data Telusuri tabel lampiran GOS, seperti SRGBTBREL, untuk menemukan tautan ke objek BKPF. Gunakan stempel waktu pembuatan lampiran. Jenis peristiwa inferred | |||
| Entri jurnal diperbaiki | Pengguna mengubah entri jurnal setelah dokumen ditolak atau dikembalikan untuk diperbaiki. Aktivitas ini menunjukkan pekerjaan ulang yang diperlukan untuk mengatasi masalah dari proses peninjauan sebelum dokumen diajukan kembali. | ||
| Mengapa ini penting Aktivitas ini mengukur pekerjaan ulang. Dengan menganalisis frekuensi dan durasi perbaikan, Anda dapat menemukan sumber ketidakefisienan dan peluang untuk memberikan pelatihan atau memperjelas proses. Sumber data Peristiwa ini dapat disimpulkan dengan melacak tanggal 'Terakhir Diubah' (AEDAT) di tabel BKPF untuk dokumen yang sebelumnya berstatus 'Ditolak'. Dokumen perubahan memberikan detail lebih lanjut tentang perubahan yang dilakukan. Pengumpulan data Gunakan stempel waktu dari header dokumen perubahan (CDHDR-UDATE) untuk perubahan setelah peristiwa penolakan. Jenis peristiwa inferred | |||
| Entri jurnal ditangguhkan | Pengguna menyimpan entri jurnal yang belum lengkap tanpa mencatatnya, agar dapat dilengkapi atau ditinjau nanti. Tindakan ini membuat catatan header dokumen dengan status 'ditangguhkan', sehingga dokumen belum tercatat. | ||
| Mengapa ini penting Penangguhan dokumen umum dilakukan sebelum pengajuan. Dengan memantau lamanya dokumen ditangguhkan, Anda dapat menemukan keterlambatan dalam melengkapi dan menyiapkan data sebelum proses peninjauan dan persetujuan resmi dimulai. Sumber data Di tabel BKPF, dokumen yang ditangguhkan ditandai dengan nilai 'V' pada kolom status dokumen (BSTAT). Stempel waktu peristiwanya menggunakan tanggal pembuatan (CPUDT). Pengumpulan data Filter dokumen dengan BKPF-BSTAT = 'V' pada saat dibuat. Jenis peristiwa explicit | |||
| Entri jurnal ditolak | Peninjau atau pemberi persetujuan menolak entri jurnal sehingga dokumen tidak dapat dicatat. Dokumen biasanya dikembalikan kepada pembuatnya untuk diperbaiki, sehingga pekerjaan harus diulang. | ||
| Mengapa ini penting Memantau penolakan penting untuk memahami kualitas proses dan menemukan kesalahan yang umum terjadi. Tingkat penolakan yang tinggi dapat menunjukkan masalah pada akurasi data, pemahaman kebijakan, atau kelengkapan dokumen pendukung. Sumber data Peristiwa ini disimpulkan dari perubahan status dalam log alur kerja atau kolom status khusus pada dokumen entri jurnal. Log perubahan dokumen (CDHDR/CDPOS) untuk kolom status terkait dapat memberikan stempel waktunya. Pengumpulan data Temukan perubahan kolom status menjadi 'Ditolak' melalui dokumen perubahan (CDHDR/CDPOS) atau log alur kerja. Jenis peristiwa inferred | |||
| Entri jurnal diubah setelah dicatat | Pengguna mengubah sejumlah kolom terbatas pada entri jurnal setelah dokumen dicatat ke buku besar. Sebagian besar data keuangan tidak dapat diubah setelah pencatatan, tetapi beberapa kolom, seperti teks atau penetapan, masih dapat diubah. | ||
| Mengapa ini penting Aktivitas ini menjadi penanda penting untuk kepatuhan. Perubahan setelah pencatatan dapat mengindikasikan upaya mengubah catatan. Pantau perubahan ini dengan cermat untuk mencegah penipuan dan menjaga integritas data. Sumber data Peristiwa ini dapat disimpulkan dengan andal dari tabel dokumen perubahan (CDHDR dan CDPOS). Entri di CDHDR untuk nomor dokumen dengan tanggal perubahan setelah tanggal pencatatan menandakan adanya perubahan setelah pencatatan. Pengumpulan data Temukan catatan di CDHDR dengan stempel waktu perubahan (UDATE/UTIME) setelah tanggal pencatatan dokumen (BKPF-BUDAT). Jenis peristiwa inferred | |||
| Pencatatan manual teridentifikasi | Entri jurnal dicatat menggunakan kode transaksi manual, bukan melalui antarmuka otomatis atau pekerjaan batch. Ini bukan peristiwa berdasarkan waktu, melainkan klasifikasi aktivitas pencatatan. | ||
| Mengapa ini penting Mengidentifikasi pencatatan manual penting untuk inisiatif otomatisasi. Tingginya pencatatan manual menunjukkan peluang untuk menyederhanakan proses dengan mengintegrasikan subsistem atau menggunakan program pencatatan otomatis. Sumber data Peristiwa ini dihitung dengan menganalisis kolom kode transaksi (TCODE) di tabel header dokumen (BKPF). Entri diklasifikasikan menggunakan daftar T-Code manual yang diketahui, seperti FB01, F-02, dan FB50. Pengumpulan data Klasifikasikan peristiwa berdasarkan BKPF-TCODE dengan mencocokkannya ke daftar kode transaksi manual yang telah ditetapkan pada saat pencatatan. Jenis peristiwa calculated | |||
Panduan pengambilan data
Langkah
- Prasyarat dan akses: Pastikan Anda memiliki pengguna dengan otorisasi yang diperlukan untuk mengueri basis data yang mendasari SAP S/4HANA atau menjalankan laporan ABAP. Anda memerlukan akses baca ke tampilan CDS I_JournalEntry dan I_JournalEntryItem, serta tabel CDHDR, CDPOS, SRGBREL, SOOD, SWW_WI2OBJ, dan SWWLOGHIST. Akses biasanya diberikan melalui klien basis data seperti SAP HANA Studio atau DBeaver, atau melalui SAP ABAP Development Tools (ADT) untuk Eclipse.
- Identifikasi konfigurasi khusus sistem: Sebelum menjalankan kueri, identifikasi kode tugas khusus yang digunakan dalam alur kerja persetujuan entri jurnal. Hubungi administrator alur kerja SAP untuk mengetahui ID tugas (misalnya, TS12345678) yang terkait dengan peristiwa pengajuan, penolakan, dan persetujuan. ID ini diperlukan untuk mengisi placeholder dalam kueri akhir.
- Siapkan kueri SQL: Salin kueri SQL lengkap yang tersedia di bagian
queryke klien SQL atau alat pengembangan pilihan Anda. - Atur parameter kueri: Temukan placeholder dalam kueri dan ganti dengan nilai yang sesuai. Isinya mencakup
[YourCompanyCode],[StartDate], dan[EndDate]. Ganti juga placeholder ID tugas alur kerja ([Workflow Submitted Task ID],[Workflow Rejected Task ID],[Workflow Approved Task ID]) dengan nilai yang Anda temukan pada langkah sebelumnya. - Jalankan kueri ekstraksi: Jalankan kueri SQL yang telah diubah pada basis data SAP S/4HANA. Waktu yang dibutuhkan dapat cukup lama, bergantung pada rentang tanggal dan volume data. Sebaiknya jalankan di luar jam sibuk.
- Tinjau hasil awal: Setelah kueri selesai, periksa beberapa baris pertama untuk memastikan semua kolom, seperti JournalEntryId, ActivityName, dan EventTime, terisi sesuai harapan. Hasil kueri harus berisi satu baris untuk setiap peristiwa bisnis unik dalam siklus hidup entri jurnal.
- Ekspor data ke CSV: Ekspor seluruh hasil kueri dari alat SQL Anda ke satu file CSV. Gunakan pengodean UTF-8 agar karakter khusus tidak bermasalah.
- Siapkan file untuk diunggah: Sebelum mengunggah ke alat process mining, pastikan file CSV memiliki judul kolom yang diperlukan. Data sudah tersusun sebagai log peristiwa, jadi tidak perlu transformasi atau pengubahan format tambahan.
Konfigurasi
- Tampilan Core Data Services (CDS): Ekstraksi terutama menggunakan
I_JournalEntryuntuk data header danI_JournalEntryItemuntuk detail baris dan jumlah. Tampilan ini menyediakan antarmuka yang lebih sederhana dan kaya makna untuk universal journal (ACDOCA). - Tabel pendukung: Untuk mendapatkan gambaran proses yang lengkap, kueri juga menggabungkan beberapa tabel SAP standar:
CDHDRdanCDPOSuntuk melacak perubahan dokumen.SRGBRELdanSOODuntuk mengetahui kapan lampiran ditautkan melalui Generic Object Services (GOS).SWW_WI2OBJdanSWWLOGHISTuntuk mengekstrak peristiwa penting dari alur kerja persetujuan.
- Filter rentang tanggal: Filter data berdasarkan rentang tanggal tertentu untuk menjaga kinerja. Gunakan kolom
I_JournalEntry.CreationDateTimedalam klausaWHERE. Untuk analisis awal, disarankan rentang 3 hingga 6 bulan. - Filter organisasi: Selalu filter berdasarkan
CompanyCodeagar ekstraksi hanya mencakup entitas hukum yang relevan. Mengueri semua kode perusahaan sekaligus pada sistem besar dapat memakan waktu sangat lama. - ID tugas alur kerja: Kueri berisi placeholder untuk ID tugas alur kerja, misalnya
[Workflow Approved Task ID]. ID ini berbeda di setiap instalasi SAP dan harus dikonfigurasikan dengan benar agar aktivitas alur kerja dapat diekstrak. Tanpa ID tersebut, peristiwa pengajuan, persetujuan, atau penolakan tidak akan tercatat. - Prasyarat: Pengguna yang menjalankan kueri memerlukan otorisasi baca yang luas untuk tabel keuangan, sistem, dan alur kerja. Izin ini bukan izin standar dan harus diberikan secara khusus.
Contoh kueri sql
WITH JournalEntryAmountCTE AS (
SELECT
CompanyCode,
AccountingDocument,
FiscalYear,
SUM(AmountInCompanyCodeCurrency) AS AmountInLocalCurrency
FROM I_JournalEntryItem
GROUP BY CompanyCode, AccountingDocument, FiscalYear
),
JournalEntryBaseCTE AS (
SELECT
JE.CompanyCode,
JE.AccountingDocument,
JE.FiscalYear,
JE.CreatedByUser,
JE.CreationDateTime,
JE.PostingDateTime,
JE.PostingDate,
JE.AccountingDocumentType,
JE.DocumentIsParked,
JE.ReversedJournalEntry,
JE.TransactionCode,
JEA.AmountInLocalCurrency
FROM I_JournalEntry AS JE
LEFT JOIN JournalEntryAmountCTE AS JEA
ON JE.CompanyCode = JEA.CompanyCode
AND JE.AccountingDocument = JEA.AccountingDocument
AND JE.FiscalYear = JEA.FiscalYear
WHERE JE.CompanyCode IN ('[YourCompanyCode]')
AND JE.CreationDateTime BETWEEN '[StartDate]' AND '[EndDate]'
)
-- 1. Journal Entry Created
SELECT
BJE.AccountingDocument AS "JournalEntryId",
'Journal Entry Created' AS "ActivityName",
BJE.CreationDateTime AS "EventTime",
BJE.CreatedByUser AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
UNION ALL
-- 2. Journal Entry Parked
SELECT
BJE.AccountingDocument AS "JournalEntryId",
'Journal Entry Parked' AS "ActivityName",
BJE.CreationDateTime AS "EventTime",
BJE.CreatedByUser AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
WHERE BJE.DocumentIsParked = 'X'
UNION ALL
-- 3. Supporting Documentation Attached
SELECT
BJE.AccountingDocument AS "JournalEntryId",
'Supporting Documentation Attached' AS "ActivityName",
TO_TIMESTAMP(SOOD.CREDAT || ' ' || SOOD.CRETIM, 'YYYYMMDD HH24MISS') AS "EventTime",
SOOD.OWNER AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
JOIN SRGBREL ON SRGBREL.INSTID_A = CONCAT(BJE.CompanyCode, BJE.AccountingDocument, BJE.FiscalYear)
AND SRGBREL.TYPEID_A = 'BKPF'
AND SRGBREL.CATID_A = 'BO'
JOIN SOOD ON SOOD.OBJTP = SRGBREL.TYPEID_B
AND SOOD.OBJYR = SRGBREL.INSTID_B(3)
AND SOOD.OBJNO = SRGBREL.INSTID_B(5)
UNION ALL
-- 4. Journal Submitted For Review
SELECT
BJE.AccountingDocument AS "JournalEntryId",
'Journal Submitted For Review' AS "ActivityName",
LOG.END_TS AS "EventTime",
LOG.EXEC_USER AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
JOIN SWW_WI2OBJ AS WF_LINK ON WF_LINK.INSTID = CONCAT(BJE.CompanyCode, BJE.AccountingDocument, BJE.FiscalYear)
AND WF_LINK.TYPEID = 'BKPF'
JOIN SWWLOGHIST AS LOG ON LOG.WI_ID = WF_LINK.WI_ID
WHERE LOG.METHOD = '[Workflow Submitted Task ID]'
UNION ALL
-- 5. Journal Entry Rejected
SELECT
BJE.AccountingDocument AS "JournalEntryId",
'Journal Entry Rejected' AS "ActivityName",
LOG.END_TS AS "EventTime",
LOG.EXEC_USER AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
JOIN SWW_WI2OBJ AS WF_LINK ON WF_LINK.INSTID = CONCAT(BJE.CompanyCode, BJE.AccountingDocument, BJE.FiscalYear)
AND WF_LINK.TYPEID = 'BKPF'
JOIN SWWLOGHIST AS LOG ON LOG.WI_ID = WF_LINK.WI_ID
WHERE LOG.METHOD = '[Workflow Rejected Task ID]'
UNION ALL
-- 6. Journal Entry Corrected (changed while parked)
SELECT DISTINCT
BJE.AccountingDocument AS "JournalEntryId",
'Journal Entry Corrected' AS "ActivityName",
TO_TIMESTAMP(CH.UDATE || ' ' || CH.UTIME, 'YYYYMMDD HH24MISS') AS "EventTime",
CH.USERNAME AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
JOIN CDHDR AS CH ON CH.OBJECTID = CONCAT(BJE.CompanyCode, BJE.AccountingDocument, BJE.FiscalYear)
AND CH.OBJECTCLASS = 'BELEG'
WHERE BJE.DocumentIsParked = 'X'
UNION ALL
-- 7. Journal Entry Approved
SELECT
BJE.AccountingDocument AS "JournalEntryId",
'Journal Entry Approved' AS "ActivityName",
LOG.END_TS AS "EventTime",
LOG.EXEC_USER AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
JOIN SWW_WI2OBJ AS WF_LINK ON WF_LINK.INSTID = CONCAT(BJE.CompanyCode, BJE.AccountingDocument, BJE.FiscalYear)
AND WF_LINK.TYPEID = 'BKPF'
JOIN SWWLOGHIST AS LOG ON LOG.WI_ID = WF_LINK.WI_ID
WHERE LOG.METHOD = '[Workflow Approved Task ID]'
UNION ALL
-- 8. Manual Posting Identified
SELECT
BJE.AccountingDocument AS "JournalEntryId",
'Manual Posting Identified' AS "ActivityName",
BJE.PostingDateTime AS "EventTime",
BJE.CreatedByUser AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
WHERE BJE.PostingDateTime IS NOT NULL AND BJE.TransactionCode IN ('FB01', 'F-02', 'FB50', 'FV50', 'FBB1', 'FBV1')
UNION ALL
-- 9. Journal Entry Posted
SELECT
BJE.AccountingDocument AS "JournalEntryId",
'Journal Entry Posted' AS "ActivityName",
BJE.PostingDateTime AS "EventTime",
BJE.CreatedByUser AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
WHERE BJE.PostingDateTime IS NOT NULL
UNION ALL
-- 10. Journal Entry Changed After Posting
SELECT DISTINCT
BJE.AccountingDocument AS "JournalEntryId",
'Journal Entry Changed After Posting' AS "ActivityName",
TO_TIMESTAMP(CH.UDATE || ' ' || CH.UTIME, 'YYYYMMDD HH24MISS') AS "EventTime",
CH.USERNAME AS "CreatedByUser",
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS BJE
JOIN CDHDR AS CH ON CH.OBJECTID = CONCAT(BJE.CompanyCode, BJE.AccountingDocument, BJE.FiscalYear)
AND CH.OBJECTCLASS = 'BELEG'
WHERE BJE.PostingDateTime IS NOT NULL AND TO_TIMESTAMP(CH.UDATE || ' ' || CH.UTIME, 'YYYYMMDD HH24MISS') > BJE.PostingDateTime
UNION ALL
-- 11. Journal Entry Cleared
SELECT
JEI.AccountingDocument AS "JournalEntryId",
'Journal Entry Cleared' AS "ActivityName",
MIN(JEI.ClearingDateTime) AS "EventTime",
BJE.CreatedByUser AS "CreatedByUser", -- Note: Clearing user is not directly available here
BJE.CompanyCode AS "CompanyCode",
BJE.AccountingDocumentType AS "JournalEntryType",
BJE.PostingDate AS "PostingDate",
BJE.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM I_JournalEntryItem AS JEI
JOIN JournalEntryBaseCTE AS BJE ON JEI.AccountingDocument = BJE.AccountingDocument
AND JEI.CompanyCode = BJE.CompanyCode
AND JEI.FiscalYear = BJE.FiscalYear
WHERE JEI.ClearingDateTime IS NOT NULL
GROUP BY JEI.AccountingDocument, BJE.CreatedByUser, BJE.CompanyCode, BJE.AccountingDocumentType, BJE.PostingDate, BJE.AmountInLocalCurrency
UNION ALL
-- 12. Journal Entry Reversal Processed
SELECT
OriginalDoc.AccountingDocument AS "JournalEntryId",
'Journal Entry Reversal Processed' AS "ActivityName",
ReversalDoc.PostingDateTime AS "EventTime",
ReversalDoc.CreatedByUser AS "CreatedByUser",
OriginalDoc.CompanyCode AS "CompanyCode",
OriginalDoc.AccountingDocumentType AS "JournalEntryType",
OriginalDoc.PostingDate AS "PostingDate",
OriginalDoc.AmountInLocalCurrency AS "AmountInLocalCurrency"
FROM JournalEntryBaseCTE AS ReversalDoc
JOIN JournalEntryBaseCTE AS OriginalDoc
ON ReversalDoc.ReversedJournalEntry = OriginalDoc.AccountingDocument
AND ReversalDoc.CompanyCode = OriginalDoc.CompanyCode
AND ReversalDoc.ReversalFiscalYear = OriginalDoc.FiscalYear
WHERE ReversalDoc.ReversedJournalEntry IS NOT NULL; Langkah
- Pastikan akses SQL langsung ke database SAP HANA telah disetujui dan pengguna ekstraksi memiliki otorisasi baca untuk BKPF dan ACDOCA, serta sumber alur kerja, lampiran, riwayat perubahan, kliring, atau pembalikan yang dikonfigurasi dan diperlukan oleh sistem Anda. Akses database langsung biasanya dilakukan melalui SAP HANA Database Explorer, SAP HANA Studio, atau klien SQL yang disetujui. Jangan jalankan kueri ekstraksi dalam transaksi aplikasi SAP, kecuali sistem Anda secara khusus mendukung akses tersebut.
- Pastikan skema fisik BKPF dan ACDOCA, termasuk kolom klien, kode perusahaan, tahun fiskal, nomor dokumen, jenis dokumen, tanggal posting, tanggal pembuatan, waktu pembuatan, pengguna, jumlah dalam mata uang lokal, serta kolom pembalikan atau kliring. Penerapan SAP S/4HANA dapat berbeda dalam skema dan ketersediaan kolom. Ganti placeholder dalam tanda kurung siku pada kueri dengan kolom yang telah diverifikasi di sistem Anda.
- Tentukan sumber resmi untuk peristiwa alur kerja dan lampiran. BKPF dan ACDOCA menyediakan data dokumen akuntansi dan item baris, tetapi tidak selalu menampilkan semua peristiwa parkir, pengajuan, penolakan, koreksi, persetujuan, atau lampiran secara andal. Ganti placeholder sumber alur kerja dan lampiran dalam tanda kurung siku dengan tampilan atau tabel yang disetujui di sistem Anda. Jika sumber tidak tersedia, jangan membuat-buat peristiwa. Konfigurasikan sumber terkait atau keluarkan aktivitas tersebut dengan persetujuan yang terdokumentasi.
- Atur parameter ekstraksi untuk rentang tanggal, kode perusahaan, jenis dokumen, dan klien yang diperlukan. Untuk validasi awal, disarankan menggunakan rentang tiga hingga enam bulan. Gunakan rentang stempel waktu peristiwa untuk aktivitas operasional dan rentang tanggal posting untuk aktivitas akuntansi, sesuai cakupan proses yang disepakati.
- Jalankan seluruh kueri SQL di klien SQL HANA yang disetujui. Kueri membuat satu baris peristiwa untuk setiap aktivitas yang diekstrak secara eksplisit. Kueri menggunakan BKPF dan ACDOCA untuk peristiwa akuntansi, serta tampilan sumber yang dikonfigurasi untuk peristiwa alur kerja, lampiran, perubahan, kliring, dan pembalikan. Kueri tidak menyimpulkan aktivitas hanya dari keberadaan dokumen.
- Periksa skema hasil. JournalEntryId adalah ID kasus, ActivityName adalah label aktivitas, EventTime adalah stempel waktu peristiwa, dan atribut bisnis yang disarankan akan disertakan jika tersedia. Pastikan EventTime berupa stempel waktu dan setiap baris memiliki JournalEntryId serta ActivityName yang tidak kosong.
- Rekonsiliasi populasi akuntansi dengan membandingkan jumlah JournalEntryId unik dengan populasi BKPF yang diharapkan untuk klien, kode perusahaan, tahun fiskal, dan rentang tanggal yang dipilih. Rekonsiliasi populasi alur kerja dan lampiran secara terpisah karena aturan retensi dan stempel waktunya mungkin berbeda dari data akuntansi.
- Validasi urutan peristiwa dan penanganan duplikat. Beberapa item baris dalam ACDOCA tidak boleh menghasilkan peristiwa akuntansi duplikat, kecuali desain proses memang memerlukan peristiwa pada tingkat baris. Gunakan logika agregasi dalam kueri untuk menghasilkan satu peristiwa akuntansi per entri jurnal dan jenis peristiwa, sambil mempertahankan ID peristiwa sumber yang dikonfigurasi jika tersedia.
- Ekspor hasil sebagai CSV UTF-8 atau format tabular lain yang didukung ProcessMind. Pertahankan nama kolom persis JournalEntryId, ActivityName, dan EventTime. Urutkan file berdasarkan JournalEntryId dan EventTime, lalu pertahankan atribut tambahan sebagai kolom. Unggah file ke ProcessMind dan tetapkan JournalEntryId sebagai ID kasus, ActivityName sebagai aktivitas, dan EventTime sebagai stempel waktu peristiwa.
Konfigurasi
- Rentang tanggal: Mulai dengan tiga hingga enam bulan. Gunakan rentang yang lebih pendek untuk menguji kinerja, lalu perluas setelah jumlah baris dan cakupan peristiwa tervalidasi.
- Cakupan klien dan perusahaan: Atur [Client parameter] dan batasi CompanyCode pada badan hukum yang diperlukan. Jangan hilangkan predikat klien dalam sistem dengan beberapa klien.
- Cakupan akuntansi: Atur [Document type filter] dan, jika sesuai, filter tahun fiskal serta tanggal posting. Sertakan dokumen yang sudah dan belum diposting hanya jika sumber yang dipilih dapat merepresentasikan keduanya secara andal.
- Cakupan alur kerja: Atur [Workflow event source] dan pemetaan jenis peristiwanya untuk aktivitas pengajuan, penolakan, koreksi, dan persetujuan. Pastikan apakah stempel waktu menunjukkan pembuatan, pelaksanaan, atau penyelesaian tindakan alur kerja.
- Cakupan lampiran: Atur [Attachment event source] dan kolom relasi yang menghubungkan lampiran dengan entri jurnal. Pastikan apakah sumber mencatat pembuatan, penggantian, atau penghapusan lampiran.
- Cakupan perubahan: Atur [Change history source] untuk perubahan setelah posting. Pastikan sumber mengidentifikasi entri jurnal dan menyediakan stempel waktu perubahan yang andal.
- Cakupan kliring: Atur [Clearing source] dan relasi antara dokumen akuntansi yang dikliringkan dengan dokumen kliring. Tentukan apakah peristiwa akan dikaitkan dengan entri jurnal asli, dokumen kliring, atau keduanya.
- Cakupan pembalikan: Atur [Reversal source] dan relasi antara dokumen asli dan dokumen pembalik. Jika relasi tersedia, kueri mengaitkan aktivitas pembalikan dengan JournalEntryId asli.
- Klasifikasi posting manual: Atur [Manual posting source] atau kolom asal posting yang telah diverifikasi. Manual Posting Identified adalah peristiwa klasifikasi. Gunakan stempel waktu posting atau stempel waktu lain yang disetujui secara konsisten.
- Jumlah mata uang: ACDOCA menggunakan struktur item baris. Kueri mengagregasikan jumlah dalam mata uang lokal berdasarkan entri jurnal. Pastikan konvensi tanda dan apakah baris statistik, khusus ledger, atau extension ledger perlu disertakan.
- Kinerja: Pilih hanya kolom yang diperlukan, terapkan filter sejak awal, hindari pemindaian ACDOCA tanpa batas, dan jalankan kueri pada waktu pelaporan yang disetujui. Jika didukung, gunakan pemangkasan partisi melalui predikat klien, tahun fiskal, kode perusahaan, dan tanggal posting.
- Penanganan duplikat: Gunakan ID peristiwa sumber jika tersedia. Jika sumber memuat catatan teknis berulang, terapkan aturan deduplikasi yang terdokumentasi tanpa menggabungkan tindakan alur kerja yang memang terpisah.
- Prasyarat: Otorisasi database yang diperlukan, konektivitas SAP HANA yang disetujui, akses ke sumber alur kerja dan lampiran yang dikonfigurasi, konfigurasi SAP Financial Accounting dan alur kerja yang sesuai, serta format ekspor yang didukung ProcessMind.
Contoh kueri sql
WITH
accounting_base AS (
SELECT
b.[Client field] AS ClientId,
b.[Company code field] AS CompanyCode,
b.[Fiscal year field] AS FiscalYear,
b.[Document number field] AS AccountingDocumentNumber,
b.[Document type field] AS JournalEntryType,
b.[Created by field] AS CreatedByUser,
b.[Document date field] AS DocumentDate,
b.[Posting date field] AS PostingDate,
b.[Creation date field] AS CreationDate,
b.[Creation time field] AS CreationTime,
b.[Reversal document field] AS ReversalDocumentNumber,
b.[Reversed document field] AS ReversedDocumentNumber,
b.[Reversal fiscal year field] AS ReversalFiscalYear,
SUM(a.[Local currency amount field]) AS AmountInLocalCurrency,
MAX(a.[Local currency field]) AS LocalCurrency
FROM [Your schema].[BKPF] b
INNER JOIN [Your schema].[ACDOCA] a
ON a.[Client field] = b.[Client field]
AND a.[Company code field] = b.[Company code field]
AND a.[Fiscal year field] = b.[Fiscal year field]
AND a.[Document number field] = b.[Document number field]
WHERE b.[Client field] = '[Client parameter]'
AND b.[Company code field] IN ([Company code filter])
AND b.[Posting date field] BETWEEN '[Start date parameter]' AND '[End date parameter]'
AND b.[Document type field] IN ([Document type filter])
GROUP BY
b.[Client field],
b.[Company code field],
b.[Fiscal year field],
b.[Document number field],
b.[Document type field],
b.[Created by field],
b.[Document date field],
b.[Posting date field],
b.[Creation date field],
b.[Creation time field],
b.[Reversal document field],
b.[Reversed document field],
b.[Reversal fiscal year field]
),
base_cases AS (
SELECT
ClientId,
CompanyCode,
FiscalYear,
AccountingDocumentNumber,
CAST(CompanyCode || '/' || FiscalYear || '/' || AccountingDocumentNumber AS NVARCHAR(100)) AS JournalEntryId,
JournalEntryType,
CreatedByUser,
PostingDate,
AmountInLocalCurrency,
LocalCurrency,
CreationDate,
CreationTime,
ReversalDocumentNumber,
ReversedDocumentNumber,
ReversalFiscalYear
FROM accounting_base
),
created_events AS (
SELECT
JournalEntryId,
'Journal Entry Created' AS ActivityName,
CAST(CreationDate || ' ' || CreationTime AS TIMESTAMP) AS EventTime,
CreatedByUser,
CompanyCode,
JournalEntryType,
PostingDate,
AmountInLocalCurrency,
LocalCurrency
FROM base_cases
),
parked_events AS (
SELECT
CAST(w.[Journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Journal Entry Parked' AS ActivityName,
CAST(w.[Event timestamp field] AS TIMESTAMP) AS EventTime,
w.[User field] AS CreatedByUser,
w.[Company code field] AS CompanyCode,
w.[Journal entry type field] AS JournalEntryType,
w.[Posting date field] AS PostingDate,
w.[Amount in local currency field] AS AmountInLocalCurrency,
w.[Local currency field] AS LocalCurrency
FROM [Your schema].[Workflow event source] w
WHERE w.[Client field] = '[Client parameter]'
AND w.[Event type field] = '[Parked event type]'
AND CAST(w.[Event timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
),
attachment_events AS (
SELECT
CAST(x.[Journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Supporting Documentation Attached' AS ActivityName,
CAST(x.[Event timestamp field] AS TIMESTAMP) AS EventTime,
x.[User field] AS CreatedByUser,
x.[Company code field] AS CompanyCode,
x.[Journal entry type field] AS JournalEntryType,
x.[Posting date field] AS PostingDate,
x.[Amount in local currency field] AS AmountInLocalCurrency,
x.[Local currency field] AS LocalCurrency
FROM [Your schema].[Attachment event source] x
WHERE x.[Client field] = '[Client parameter]'
AND x.[Event type field] = '[Attachment created event type]'
AND CAST(x.[Event timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
),
submitted_events AS (
SELECT
CAST(w.[Journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Journal Submitted For Review' AS ActivityName,
CAST(w.[Event timestamp field] AS TIMESTAMP) AS EventTime,
w.[User field] AS CreatedByUser,
w.[Company code field] AS CompanyCode,
w.[Journal entry type field] AS JournalEntryType,
w.[Posting date field] AS PostingDate,
w.[Amount in local currency field] AS AmountInLocalCurrency,
w.[Local currency field] AS LocalCurrency
FROM [Your schema].[Workflow event source] w
WHERE w.[Client field] = '[Client parameter]'
AND w.[Event type field] = '[Submitted event type]'
AND CAST(w.[Event timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
),
rejected_events AS (
SELECT
CAST(w.[Journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Journal Entry Rejected' AS ActivityName,
CAST(w.[Event timestamp field] AS TIMESTAMP) AS EventTime,
w.[User field] AS CreatedByUser,
w.[Company code field] AS CompanyCode,
w.[Journal entry type field] AS JournalEntryType,
w.[Posting date field] AS PostingDate,
w.[Amount in local currency field] AS AmountInLocalCurrency,
w.[Local currency field] AS LocalCurrency
FROM [Your schema].[Workflow event source] w
WHERE w.[Client field] = '[Client parameter]'
AND w.[Event type field] = '[Rejected event type]'
AND CAST(w.[Event timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
),
corrected_events AS (
SELECT
CAST(w.[Journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Journal Entry Corrected' AS ActivityName,
CAST(w.[Event timestamp field] AS TIMESTAMP) AS EventTime,
w.[User field] AS CreatedByUser,
w.[Company code field] AS CompanyCode,
w.[Journal entry type field] AS JournalEntryType,
w.[Posting date field] AS PostingDate,
w.[Amount in local currency field] AS AmountInLocalCurrency,
w.[Local currency field] AS LocalCurrency
FROM [Your schema].[Workflow event source] w
WHERE w.[Client field] = '[Client parameter]'
AND w.[Event type field] = '[Corrected event type]'
AND CAST(w.[Event timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
),
approved_events AS (
SELECT
CAST(w.[Journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Journal Entry Approved' AS ActivityName,
CAST(w.[Event timestamp field] AS TIMESTAMP) AS EventTime,
w.[User field] AS CreatedByUser,
w.[Company code field] AS CompanyCode,
w.[Journal entry type field] AS JournalEntryType,
w.[Posting date field] AS PostingDate,
w.[Amount in local currency field] AS AmountInLocalCurrency,
w.[Local currency field] AS LocalCurrency
FROM [Your schema].[Workflow event source] w
WHERE w.[Client field] = '[Client parameter]'
AND w.[Event type field] = '[Approved event type]'
AND CAST(w.[Event timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
),
manual_events AS (
SELECT
JournalEntryId,
'Manual Posting Identified' AS ActivityName,
CAST(PostingDate AS TIMESTAMP) AS EventTime,
CreatedByUser,
CompanyCode,
JournalEntryType,
PostingDate,
AmountInLocalCurrency,
LocalCurrency
FROM base_cases
WHERE [Manual posting condition verified for this system]
),
posted_events AS (
SELECT
JournalEntryId,
'Journal Entry Posted' AS ActivityName,
CAST(PostingDate AS TIMESTAMP) AS EventTime,
CreatedByUser,
CompanyCode,
JournalEntryType,
PostingDate,
AmountInLocalCurrency,
LocalCurrency
FROM base_cases
WHERE [Posted document condition verified for this system]
),
changed_events AS (
SELECT
CAST(c.[Journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Journal Entry Changed After Posting' AS ActivityName,
CAST(c.[Change timestamp field] AS TIMESTAMP) AS EventTime,
c.[User field] AS CreatedByUser,
c.[Company code field] AS CompanyCode,
c.[Journal entry type field] AS JournalEntryType,
c.[Posting date field] AS PostingDate,
c.[Amount in local currency field] AS AmountInLocalCurrency,
c.[Local currency field] AS LocalCurrency
FROM [Your schema].[Change history source] c
WHERE c.[Client field] = '[Client parameter]'
AND c.[Post posting change indicator field] = '[Post posting change value]'
AND CAST(c.[Change timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
),
cleared_events AS (
SELECT
CAST(cl.[Journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Journal Entry Cleared' AS ActivityName,
CAST(cl.[Clearing timestamp field] AS TIMESTAMP) AS EventTime,
cl.[User field] AS CreatedByUser,
cl.[Company code field] AS CompanyCode,
cl.[Journal entry type field] AS JournalEntryType,
cl.[Posting date field] AS PostingDate,
cl.[Amount in local currency field] AS AmountInLocalCurrency,
cl.[Local currency field] AS LocalCurrency
FROM [Your schema].[Clearing source] cl
WHERE cl.[Client field] = '[Client parameter]'
AND CAST(cl.[Clearing timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
),
reversal_events AS (
SELECT
CAST(r.[Original journal entry ID field] AS NVARCHAR(100)) AS JournalEntryId,
'Journal Entry Reversal Processed' AS ActivityName,
CAST(r.[Reversal timestamp field] AS TIMESTAMP) AS EventTime,
r.[User field] AS CreatedByUser,
r.[Company code field] AS CompanyCode,
r.[Journal entry type field] AS JournalEntryType,
r.[Posting date field] AS PostingDate,
r.[Amount in local currency field] AS AmountInLocalCurrency,
r.[Local currency field] AS LocalCurrency
FROM [Your schema].[Reversal source] r
WHERE r.[Client field] = '[Client parameter]'
AND CAST(r.[Reversal timestamp field] AS DATE) BETWEEN '[Start date parameter]' AND '[End date parameter]'
)
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM created_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM parked_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM attachment_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM submitted_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM rejected_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM corrected_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM approved_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM manual_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM posted_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM changed_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM cleared_events
UNION ALL
SELECT JournalEntryId, ActivityName, EventTime, CreatedByUser, CompanyCode, JournalEntryType, PostingDate, AmountInLocalCurrency, LocalCurrency FROM reversal_events
ORDER BY JournalEntryId, EventTime, ActivityName; Langkah
- Buat program ABAP: Buka ABAP Editor melalui kode transaksi
SE38. Masukkan nama program baru, misalnyaZ_PM_JE_EXTRACT, lalu klik 'Create'. Isi judul yang sesuai, atur 'Type' ke 'Executable Program', lalu simpan sebagai objek lokal atau dalam sebuah paket. - Tentukan layar seleksi: Dalam program, tentukan parameter dan select-options agar pengguna dapat memfilter data. Sertakan rentang tanggal pembuatan entri jurnal (
P_CPUDT_FR,P_CPUDT_TO), select-option untuk Company Code (SO_BUKRS), dan jalur file keluaran di server aplikasi (P_FPATH). - Tentukan struktur data: Buat struktur tabel internal yang sesuai dengan format log peristiwa yang diperlukan. Struktur ini akan menampung hasil akhir. Tentukan juga tabel internal dan area kerja untuk tabel SAP yang akan digunakan, seperti BKPF, ACDOCA, CDHDR, CDPOS, dan berbagai tabel alur kerja.
- Terapkan logika pemilihan data: Tulis logika inti ABAP untuk mengambil data bagi masing-masing dari 12 aktivitas yang diperlukan. Buat subrutin terpisah (FORM) untuk setiap aktivitas agar kode tetap teratur. Contohnya, buat FORM untuk
get_created_events,get_parked_events,get_workflow_events, dan seterusnya. - Pilih peristiwa 'Created' dan 'Posted': Baca tabel BKPF berdasarkan kriteria pada layar seleksi pengguna. Entri di BKPF menandakan pembuatan. Dokumen dengan status
BSTAT = ' 'dianggap sudah diposting. Gunakan stempel waktu pembuatan (CPUDT,CPUTM) sebagai waktu peristiwa. - Pilih peristiwa 'Parked': Baca tabel VBKPF, yang menyimpan header dokumen yang diparkir. Stempel waktu pembuatan di tabel ini menunjukkan waktu dokumen diparkir.
- Pilih peristiwa 'Workflow' (Submitted, Approved, Rejected): Kueri tabel alur kerja seperti SWW_WI2OBJ untuk menghubungkan objek entri jurnal dengan instans alur kerja, serta SWWLOGHIST atau SWWIHEAD untuk mendapatkan detail dan waktu langkah tertentu. Anda perlu mengetahui ID tugas alur kerja yang digunakan untuk pengajuan, persetujuan, dan penolakan di sistem Anda.
- Pilih peristiwa 'Change' dan 'Correction': Kueri tabel dokumen perubahan CDHDR (header) dan CDPOS (item) untuk
OBJECTCLAS = 'BELEG'. Untuk 'Changed After Posting', filter perubahan yang stempel waktunya lebih baru daripada tanggal posting dokumen. Untuk 'Corrected', filter perubahan pada dokumen yang diparkir atau ditolak. - Pilih peristiwa 'Reversal' dan 'Cleared': Identifikasi pembalikan dengan mencari dokumen yang kolom
STBLG(Reversed Document No.) di BKPF-nya terisi. Waktu peristiwa pembalikan adalah waktu pembuatan dokumen pembalik. Identifikasi peristiwa kliring dengan memilih tanggal kliring terbaru (AUGDT) dari tabel ACDOCA untuk item baris entri jurnal terkait. - Gabungkan dan urutkan data: Saat data setiap aktivitas dipilih, tambahkan hasilnya ke tabel internal utama. Setelah semua data dipilih, urutkan tabel berdasarkan
JournalEntryIddanEventTimeagar setiap kasus tersusun secara kronologis. - Buat file keluaran: Gunakan pernyataan
OPEN DATASET,LOOP AT... TRANSFER, danCLOSE DATASETuntuk menulis isi tabel internal akhir yang telah diurutkan ke jalur file yang ditentukan di server aplikasi SAP. File harus berformat CSV dan memiliki baris header. - Jadwalkan eksekusi: Untuk ekstraksi rutin, gunakan kode transaksi
SM36untuk membuat pekerjaan latar belakang yang menjalankan programZ_PM_JE_EXTRACTsesuai jadwal, misalnya mingguan atau bulanan. Dengan begitu, ekspor data berjalan otomatis.
Konfigurasi
- Rentang tanggal: Layar seleksi harus mewajibkan rentang tanggal pembuatan entri jurnal (
CPUDT). Sebaiknya ekstrak data dalam bagian yang mudah dikelola, misalnya 3 hingga 6 bulan sekaligus, agar kinerja tetap baik. - Company Code (
BUKRS): Filter ini penting untuk membatasi ekstraksi pada badan hukum yang relevan bagi analisis process mining. Sebaiknya jangan mengekstrak semua kode perusahaan sekaligus. - Jenis dokumen (
BLART): Anda dapat menambahkan filter opsional ini untuk memilih jenis entri jurnal tertentu, seperti 'SA' untuk posting akun G/L atau 'KR' untuk faktur pemasok. Filter ini dapat mengurangi volume data dan membuat kumpulan data lebih relevan. - Jalur file: Program memerlukan jalur file logis di server aplikasi SAP untuk menyimpan file keluaran. Pastikan jalurnya valid dan pengguna sistem SAP memiliki otorisasi tulis yang diperlukan untuk direktori tersebut. Gunakan transaksi
AL11untuk mengelola dan melihat direktori server. - ID tugas alur kerja: Logika untuk mengambil peristiwa alur kerja (Submitted, Approved, Rejected) harus dikonfigurasi dengan ID tugas khusus yang digunakan dalam alur kerja persetujuan entri jurnal organisasi Anda. ID ini sering kali dibuat khusus dan perlu diketahui melalui konsultan atau pengembang alur kerja.
- Prasyarat: Pengguna atau akun sistem yang menjalankan program memerlukan otorisasi pengembang untuk membuat dan menjalankan program ABAP (
S_DEVELOP), serta akses baca luas ke tabel keuangan (BKPF, ACDOCA), tabel log perubahan (CDHDR, CDPOS), dan tabel alur kerja (SWW*).
Contoh kueri abap
REPORT Z_PM_JE_EXTRACT.
*&---------------------------------------------------------------------*
*&-- Data Structures for Event Log --*
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
journalentryid TYPE string,
activityname TYPE string,
eventtime TYPE string,
createdbyuser TYPE uname,
companycode TYPE bukrs,
journalentrytype TYPE blart,
postingdate TYPE budat,
amountinlocalcurrency TYPE wrbtr,
END OF ty_event_log.
*&---------------------------------------------------------------------*
*&-- Selection Screen Definition --*
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_erdat_fr TYPE dats OBLIGATORY DEFAULT sy-datum-30,
p_erdat_to TYPE dats OBLIGATORY DEFAULT sy-datum.
SELECT-OPTIONS: so_bukrs FOR bkpf-bukrs OBLIGATORY.
PARAMETERS: p_fpath TYPE string OBLIGATORY DEFAULT '/usr/sap/trans/tmp/je_event_log.csv'.
SELECTION-SCREEN END OF BLOCK b1.
*&---------------------------------------------------------------------*
*&-- Internal Tables --*
*&---------------------------------------------------------------------*
DATA: gt_event_log TYPE TABLE OF ty_event_log.
*&---------------------------------------------------------------------*
*&-- Main Processing Block --*
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM get_created_posted_events.
PERFORM get_parked_events.
PERFORM get_attachment_events.
PERFORM get_workflow_events.
PERFORM get_change_events.
PERFORM get_cleared_events.
PERFORM get_reversal_events.
SORT gt_event_log BY journalentryid eventtime.
PERFORM write_output_file.
*&---------------------------------------------------------------------*
*&-- Subroutines for Extracting Individual Activities --*
*&---------------------------------------------------------------------*
FORM get_created_posted_events.
DATA: lt_bkpf TYPE TABLE OF bkpf,
ls_event_log TYPE ty_event_log,
lv_timestamp TYPE string.
SELECT * FROM bkpf INTO TABLE lt_bkpf
WHERE bukrs IN so_bukrs
AND cpudt BETWEEN p_erdat_fr AND p_erdat_to.
LOOP AT lt_bkpf ASSIGNING FIELD-SYMBOL(<fs_bkpf>).
CLEAR ls_event_log.
CONCATENATE <fs_bkpf>-bukrs <fs_bkpf>-belnr <fs_bkpf>-gjahr INTO ls_event_log-journalentryid.
ls_event_log-companycode = <fs_bkpf>-bukrs.
ls_event_log-journalentrytype = <fs_bkpf>-blart.
ls_event_log-postingdate = <fs_bkpf>-budat.
ls_event_log-createdbyuser = <fs_bkpf>-usnam.
" Timestamp format YYYY-MM-DDTHH:MI:SS
CONCATENATE <fs_bkpf>-cpudt(4) '-' <fs_bkpf>-cpudt+4(2) '-' <fs_bkpf>-cpudt+6(2) 'T' <fs_bkpf>-cputm(2) ':' <fs_bkpf>-cputm+2(2) ':' <fs_bkpf>-cputm+4(2) INTO lv_timestamp.
ls_event_log-eventtime = lv_timestamp.
" Activity: Journal Entry Created
ls_event_log-activityname = 'Journal Entry Created'.
SELECT SUM( hsl ) INTO ls_event_log-amountinlocalcurrency FROM acdoca WHERE belnr = <fs_bkpf>-belnr AND gjahr = <fs_bkpf>-gjahr AND bukrs = <fs_bkpf>-bukrs.
APPEND ls_event_log TO gt_event_log.
" Activity: Journal Entry Posted (if not parked)
IF <fs_bkpf>-bstat = ' '.
ls_event_log-activityname = 'Journal Entry Posted'.
APPEND ls_event_log TO gt_event_log.
" Activity: Manual Posting Identified (based on T-Code)
CASE <fs_bkpf>-tcode.
WHEN 'FB01' OR 'F-02' OR 'FB50' OR 'F-22' OR 'F-43'.
ls_event_log-activityname = 'Manual Posting Identified'.
APPEND ls_event_log TO gt_event_log.
ENDCASE.
ENDIF.
ENDLOOP.
ENDFORM.
FORM get_parked_events.
DATA: ls_event_log TYPE ty_event_log, lv_timestamp TYPE string.
SELECT * FROM vbkpf
WHERE bukrs IN so_bukrs
AND cpudt BETWEEN p_erdat_fr AND p_erdat_to.
CLEAR ls_event_log.
CONCATENATE vbkpf-bukrs vbkpf-belnr vbkpf-gjahr INTO ls_event_log-journalentryid.
CONCATENATE vbkpf-cpudt(4) '-' vbkpf-cpudt+4(2) '-' vbkpf-cpudt+6(2) 'T' vbkpf-cputm(2) ':' vbkpf-cputm+2(2) ':' vbkpf-cputm+4(2) INTO lv_timestamp.
ls_event_log-activityname = 'Journal Entry Parked'.
ls_event_log-eventtime = lv_timestamp.
ls_event_log-createdbyuser = vbkpf-usnam.
ls_event_log-companycode = vbkpf-bukrs.
ls_event_log-journalentrytype = vbkpf-blart.
ls_event_log-postingdate = vbkpf-budat.
APPEND ls_event_log TO gt_event_log.
ENDSELECT.
ENDFORM.
FORM get_attachment_events.
DATA: lt_bdocs TYPE TABLE OF srgbtbrel, ls_event_log TYPE ty_event_log, lv_timestamp TYPE string.
SELECT * FROM srgbtbrel INTO TABLE lt_bdocs
WHERE typeid_a = 'BUS2081' " Object type for Accounting Document
AND catid_a = 'BO'.
LOOP AT lt_bdocs ASSIGNING FIELD-SYMBOL(<fs_bdocs>).
CHECK <fs_bdocs>-instid_a(4) IN so_bukrs.
DATA(lv_bukrs) = <fs_bdocs>-instid_a(4).
DATA(lv_belnr) = <fs_bdocs>-instid_a+4(10).
DATA(lv_gjahr) = <fs_bdocs>-instid_a+14(4).
SELECT SINGLE cpudt, cputm, usnam, blart, budat FROM bkpf
INTO (DATA(lv_cpudt), DATA(lv_cputm), DATA(lv_usnam), DATA(lv_blart), DATA(lv_budat))
WHERE bukrs = lv_bukrs AND belnr = lv_belnr AND gjahr = lv_gjahr.
IF sy-subrc = 0 AND lv_cpudt BETWEEN p_erdat_fr AND p_erdat_to.
CLEAR ls_event_log.
CONCATENATE lv_bukrs lv_belnr lv_gjahr INTO ls_event_log-journalentryid.
" Note: Using document creation time as a proxy for attachment time.
CONCATENATE lv_cpudt(4) '-' lv_cpudt+4(2) '-' lv_cpudt+6(2) 'T' lv_cputm(2) ':' lv_cputm+2(2) ':' lv_cputm+4(2) INTO lv_timestamp.
ls_event_log-activityname = 'Supporting Documentation Attached'.
ls_event_log-eventtime = lv_timestamp.
ls_event_log-createdbyuser = lv_usnam.
ls_event_log-companycode = lv_bukrs.
ls_event_log-journalentrytype = lv_blart.
ls_event_log-postingdate = lv_budat.
APPEND ls_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
ENDFORM.
FORM get_workflow_events.
" This is a simplified example. Real workflow logic can be complex.
" You must identify your specific Task IDs for these events.
DATA: ls_event_log TYPE ty_event_log, lv_timestamp TYPE string.
DATA: BEGIN OF ls_wi, wi_id TYPE sww_wiid, cr_date TYPE sww_cd, cr_time TYPE sww_ct, task TYPE sww_task, instid TYPE swo_typeid, END OF ls_wi.
SELECT h~wi_id h~cr_date h~cr_time h~wi_rh_task o~instid
FROM swwwihead AS h
JOIN sww_wi2obj AS o ON h~wi_id = o~wi_id
INTO @ls_wi
WHERE o~typeid = 'BUS2081' AND o~catid = 'BO'
AND h~cr_date BETWEEN @p_erdat_fr AND @p_erdat_to.
DATA(lv_bukrs) = ls_wi-instid(4).
DATA(lv_belnr) = ls_wi-instid+4(10).
DATA(lv_gjahr) = ls_wi-instid+14(4).
IF lv_bukrs IN so_bukrs.
CLEAR ls_event_log.
CONCATENATE lv_bukrs lv_belnr lv_gjahr INTO ls_event_log-journalentryid.
CONCATENATE ls_wi-cr_date(4) '-' ls_wi-cr_date+4(2) '-' ls_wi-cr_date+6(2) 'T' ls_wi-cr_time(2) ':' ls_wi-cr_time+2(2) ':' ls_wi-cr_time+4(2) INTO lv_timestamp.
ls_event_log-eventtime = lv_timestamp.
ls_event_log-companycode = lv_bukrs.
CASE ls_wi-task.
WHEN '[Your Submit Task ID]'. " e.g., TS20000139
ls_event_log-activityname = 'Journal Submitted For Review'.
APPEND ls_event_log TO gt_event_log.
WHEN '[Your Approve Task ID]'. " e.g., TS20000142
ls_event_log-activityname = 'Journal Entry Approved'.
APPEND ls_event_log TO gt_event_log.
WHEN '[Your Reject Task ID]'. " e.g., TS20000141
ls_event_log-activityname = 'Journal Entry Rejected'.
APPEND ls_event_log TO gt_event_log.
ENDCASE.
ENDIF.
ENDSELECT.
ENDFORM.
FORM get_change_events.
DATA: lt_cdhdr TYPE TABLE OF cdhdr, ls_event_log TYPE ty_event_log, lv_timestamp TYPE string.
SELECT * FROM cdhdr INTO TABLE lt_cdhdr
WHERE objectclas = 'BELEG'
AND udate BETWEEN p_erdat_fr AND p_erdat_to.
LOOP AT lt_cdhdr ASSIGNING FIELD-SYMBOL(<fs_cdhdr>).
DATA(lv_bukrs) = <fs_cdhdr>-objectid(4).
DATA(lv_belnr) = <fs_cdhdr>-objectid+4(10).
DATA(lv_gjahr) = <fs_cdhdr>-objectid+14(4).
IF lv_bukrs IN so_bukrs.
SELECT SINGLE bstat, budat, blart FROM bkpf
INTO (DATA(lv_bstat), DATA(lv_budat), DATA(lv_blart))
WHERE bukrs = lv_bukrs AND belnr = lv_belnr AND gjahr = lv_gjahr.
IF sy-subrc = 0.
CLEAR ls_event_log.
CONCATENATE lv_bukrs lv_belnr lv_gjahr INTO ls_event_log-journalentryid.
CONCATENATE <fs_cdhdr>-udate(4) '-' <fs_cdhdr>-udate+4(2) '-' <fs_cdhdr>-udate+6(2) 'T' <fs_cdhdr>-utime(2) ':' <fs_cdhdr>-utime+2(2) ':' <fs_cdhdr>-utime+4(2) INTO lv_timestamp.
ls_event_log-eventtime = lv_timestamp.
ls_event_log-createdbyuser = <fs_cdhdr>-username.
ls_event_log-companycode = lv_bukrs.
ls_event_log-journalentrytype = lv_blart.
ls_event_log-postingdate = lv_budat.
IF lv_bstat = ' ' AND <fs_cdhdr>-udate > lv_budat.
ls_event_log-activityname = 'Journal Entry Changed After Posting'.
APPEND ls_event_log TO gt_event_log.
ELSEIF lv_bstat <> ' '.
ls_event_log-activityname = 'Journal Entry Corrected'.
APPEND ls_event_log TO gt_event_log.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
FORM get_cleared_events.
DATA: ls_event_log TYPE ty_event_log, lv_timestamp TYPE string.
DATA: BEGIN OF ls_clear, belnr TYPE belnr_d, gjahr TYPE gjahr, bukrs TYPE bukrs, augdt TYPE augdt, END OF ls_clear, lt_clear LIKE TABLE OF ls_clear.
SELECT belnr, gjahr, bukrs, MAX( augdt ) AS augdt FROM acdoca
INTO TABLE @lt_clear
WHERE bukrs IN @so_bukrs
AND augdt NE '00000000'
AND augdt BETWEEN @p_erdat_fr AND @p_erdat_to
GROUP BY belnr, gjahr, bukrs.
LOOP AT lt_clear INTO ls_clear.
SELECT SINGLE usnam, blart, budat FROM bkpf
INTO (DATA(lv_usnam), DATA(lv_blart), DATA(lv_budat))
WHERE bukrs = ls_clear-bukrs AND belnr = ls_clear-belnr AND gjahr = ls_clear-gjahr.
IF sy-subrc = 0.
CLEAR ls_event_log.
CONCATENATE ls_clear-bukrs ls_clear-belnr ls_clear-gjahr INTO ls_event_log-journalentryid.
CONCATENATE ls_clear-augdt(4) '-' ls_clear-augdt+4(2) '-' ls_clear-augdt+6(2) 'T12:00:00' INTO lv_timestamp. " Clearing date has no time, use midday
ls_event_log-activityname = 'Journal Entry Cleared'.
ls_event_log-eventtime = lv_timestamp.
ls_event_log-createdbyuser = lv_usnam.
ls_event_log-companycode = ls_clear-bukrs.
ls_event_log-journalentrytype = lv_blart.
ls_event_log-postingdate = lv_budat.
APPEND ls_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
ENDFORM.
FORM get_reversal_events.
DATA: lt_reversals TYPE TABLE OF bkpf, ls_event_log TYPE ty_event_log, lv_timestamp TYPE string.
SELECT * FROM bkpf INTO TABLE lt_reversals
WHERE bukrs IN so_bukrs
AND cpudt BETWEEN p_erdat_fr AND p_erdat_to
AND stblg IS NOT NULL.
LOOP AT lt_reversals ASSIGNING FIELD-SYMBOL(<fs_rev>).
SELECT SINGLE usnam, blart, budat FROM bkpf
INTO (DATA(lv_usnam), DATA(lv_blart), DATA(lv_budat))
WHERE bukrs = <fs_rev>-bukrs AND belnr = <fs_rev>-stblg AND gjahr = <fs_rev>-gjahr.
IF sy-subrc = 0.
CLEAR ls_event_log.
CONCATENATE <fs_rev>-bukrs <fs_rev>-stblg <fs_rev>-gjahr INTO ls_event_log-journalentryid.
CONCATENATE <fs_rev>-cpudt(4) '-' <fs_rev>-cpudt+4(2) '-' <fs_rev>-cpudt+6(2) 'T' <fs_rev>-cputm(2) ':' <fs_rev>-cputm+2(2) ':' <fs_rev>-cputm+4(2) INTO lv_timestamp.
ls_event_log-activityname = 'Journal Entry Reversal Processed'.
ls_event_log-eventtime = lv_timestamp.
ls_event_log-createdbyuser = lv_usnam.
ls_event_log-companycode = <fs_rev>-bukrs.
ls_event_log-journalentrytype = lv_blart.
ls_event_log-postingdate = lv_budat.
APPEND ls_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
ENDFORM.
FORM write_output_file.
DATA: lv_line TYPE string.
FIELD-SYMBOLS: <fs_event_log> TYPE ty_event_log.
OPEN DATASET p_fpath FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc NE 0.
MESSAGE 'Error opening file.' TYPE 'E'.
RETURN.
ENDIF.
" Write Header
lv_line = 'JournalEntryId,ActivityName,EventTime,CreatedByUser,CompanyCode,JournalEntryType,PostingDate,AmountInLocalCurrency'.
TRANSFER lv_line TO p_fpath.
LOOP AT gt_event_log ASSIGNING <fs_event_log>.
CONCATENATE <fs_event_log>-journalentryid <fs_event_log>-activityname <fs_event_log>-eventtime <fs_event_log>-createdbyuser <fs_event_log>-companycode <fs_event_log>-journalentrytype <fs_event_log>-postingdate <fs_event_log>-amountinlocalcurrency
INTO lv_line SEPARATED BY ','.
TRANSFER lv_line TO p_fpath.
ENDLOOP.
CLOSE DATASET p_fpath.
WRITE: / 'File successfully written to', p_fpath.
ENDFORM. Siap memulai?
Gunakan templat ini untuk menyiapkan data dengan yakin dan mendapatkan wawasan penting tentang proses entri jurnal dari pencatatan hingga pelaporan. Mulai tingkatkan proses Anda hari ini.
Perlancar entri jurnal pencatatan hingga pelaporan agar lebih efisien
Perbaiki proses Anda dan kurangi waktu siklus entri jurnal pencatatan hingga pelaporan sebesar 30%.
Tidak perlu kartu kredit. Penyiapan hanya beberapa menit.