Kayıttan Raporlamaya (Record to Report) - Yevmiye Kaydı Veri Template'iniz
Kayıttan Raporlamaya (Record to Report) - Yevmiye Kaydı Veri Template'iniz
- Kapsamlı analiz için önerilen özellikler
- İzlenecek Temel Muhasebe Kaydı Aktiviteleri
- SAP ECC için pratik veri çıkarma rehberliği
Kayıttan Raporlamaya - Muhasebe Kaydı Nitelikleri
| Ad | Açıklama | ||
|---|---|---|---|
| Faaliyet Adı ActivityName | Muhasebe kaydı sürecinde belirli bir noktada meydana gelen iş aktivitesinin veya event'inin adı. | ||
| Açıklama Aktivite Adı, 'Muhasebe Kaydı Oluşturuldu', 'Muhasebe Kaydı Onaylandı' veya 'Muhasebe Kaydı Gönderildi' gibi muhasebe kaydı yaşam döngüsündeki belirli bir adımı açıklar. Bu öznitelik genellikle SAP'deki işlem kodları (TCODE), değişiklik belgesi log'ları (CDHDR ve CDPOS tabloları) ve belge durumu alanları dahil olmak üzere birden fazla kaynaktan türetilir. Aktiviteleri analiz etmek, Process Mining'in temelidir. Süreç haritalarının görselleştirilmesine, adımlar arasındaki geçiş sürelerinin hesaplanmasına ve yeniden işleme döngülerinin (örn. 'Muhasebe Kaydı Reddedildi'yi takiben 'Muhasebe Kaydı Düzeltildi') belirlenmesine olanak tanır. Bu veri, döngü süreleri, yeniden işleme oranları ve süreç varyantları ile ilgili dashboard'lar için temeldir. Neden önemli Süreç haritasındaki adımları tanımlayarak, muhasebe kaydı workflow'unu görselleştirmeyi, analiz etmeyi ve optimize etmeyi mümkün kılar. Nereden alınır BKPF'deki (TCODE) işlem kodları, belge durumu ve SWW_WI2OBJ gibi tablolardaki workflow logları veya CDHDR ve CDPOS'taki değişiklik belgeleri dahil olmak üzere çeşitli kaynaklardan türetilmiştir. Örnekler Yevmiye Kaydı OluşturulduMuhasebe Kaydı OnaylandıMuhasebe Kaydı ReddedildiMuhasebe Kaydı Gönderildi | |||
| Muhasebe Kaydı Kimliği JournalEntryId | Şirket kodu, belge numarası ve mali yılı birleştiren, finansal muhasebe belgesi için benzersiz tanımlayıcı. | ||
| Açıklama Muhasebe Kaydı ID'si, bir muhasebe kaydının yaşam döngüsünü izlemek için birincil durum tanımlayıcısıdır. Genellikle Şirket Kodu (BUKRS), Belge Numarası (BELNR) ve Mali Yıl (GJAHR) birleştirilerek oluşturulan bileşik bir anahtar olup, tüm SAP sistemi genelinde benzersizliği sağlar. Süreç analizinde bu ID, oluşturma, park etme, gönderme, onaylama, reddetme ve kaydetme gibi tüm ilgili aktiviteleri birbirine bağlar. Bu tanımlayıcıyı izleyerek, her muhasebe kaydının uçtan uca yolculuğunu oluşturabilir, döngü sürelerini ölçebilir ve belirli kayıtlar için süreç sapmalarını veya darboğazları belirleyebiliriz. Neden önemli Bu, bir muhasebe kaydını oluşturulmasından nihai kaydına kadar izlemek için temel anahtardır, uçtan uca süreç analizini ve varyant karşılaştırmasını sağlar. Nereden alınır Bu, genellikle BKPF tablosundaki alanların birleştirilmesiyle elde edilen türetilmiş bir özniteliktir: Şirket Kodu (BUKRS), Belge Numarası (BELNR) ve Mali Yıl (GJAHR). Örnekler 1000-1000000123-20232000-1900000456-20231000-1800000789-2024 | |||
| Olay Zamanı EventTime | Muhasebe kaydı için belirli bir aktivitenin veya event'in ne zaman gerçekleştiğini gösteren zaman damgası. | ||
| Açıklama Olay Zamanı (Event Time), muhasebe kaydı sürecindeki her faaliyet için tam tarih ve saati sağlar. Bu veri, döngü süreleri, işleme süreleri ve adımlar arasındaki gecikmeler gibi tüm zaman tabanlı metrikleri hesaplamak için kritik öneme sahiptir. Bu zaman damgasının kaynağı faaliyete göre değişir; belge oluşturma tarihi/saati (CPUDT/CPUTM) veya loglardan (CDHDR-UDATE/UTIME) değişiklik zaman damgaları olabilir. Analizde, Olay Zamanı olayları kronolojik olarak sıralamak için kullanılır ve süreç haritasının temelini oluşturur. Ortalama Muhasebe Kaydı Döngü Süresi, Ortalama Onay Süresi ve Onaydan Kayda Geçme Süresi gibi zamanla ilgili tüm KPI'ları hesaplamak için gereklidir. Neden önemli Bu Nereden alınır Aktiviteye bağlı olarak çeşitli alanlardan, öncelikli olarak BKPF'deki oluşturma zaman damgasından (CPUDT, CPUTM) veya CDHDR'deki değişiklik belgesi zaman damgalarından (UDATE, UTIME) alınır. Örnekler 2023-10-26T09:00:00Z2023-10-26T14:30:15Z2023-10-27T11:05:00Z | |||
| Kaynak Sistem SourceSystem | Süreç `veri`lerinin çıkarıldığı `sistem`. | ||
| Açıklama Bu öznitelik, bu durumda belirli SAP ECC instance'ı olan verinin kökenini tanımlar. Genellikle veri çıkarma sürecinde eklenen statik bir değerdir. Basit olmasına rağmen, bu öznitelik birden fazla ERP veya veri kaynağına sahip ortamlarda önemlidir. Veri soy ağacının net olmasını sağlar ve analizi kaynak sisteme göre filtrelemeye veya segmentlere ayırmaya olanak tanır. Neden önemli Net veri soy ağacı sağlar ve özellikle birden fazla kaynak sistemin olduğu ortamlarda veri kalitesini izlemek için esastır. Nereden alınır Bu, genellikle veri dönüşüm süreci sırasında eklenen, belirli SAP ECC instance'ını (örn. 'ECC_PROD_100') tanımlayan statik bir değerdir. Örnekler SAP ECC EHP8ECC_FIN_PRODSAP_ERP_60 | |||
| Son Veri Güncellemesi LastDataUpdate | Verinin kaynak sistemden son çekildiği veya yenilendiği zamanı gösteren zaman damgası. | ||
| Açıklama Bu öznitelik, SAP ECC'den en son veri çekiminin tarih ve saatini kaydeder. Analiz edilen verinin güncelliğini ve geçerliliğini anlamak için kritik bir metadata alanıdır. Herhangi bir Process Mining dashboard'unda veya analizinde, son güncelleme zamanını bilmek, kullanıcıların verilere güvenmesi ve bilinçli kararlar alması için çok önemlidir. 'Bu bilgi ne kadar güncel?' sorusuna yanıt vermeye yardımcı olur. Neden önemli Kullanıcılara verinin güncelliği hakkında bilgi verir, böylece analizin zaman çerçevesini anlamalarını ve sonuçlara güvenmelerini sağlar. Nereden alınır Bu, veri yenileme anında veri çıkarma aracı veya ETL süreci tarafından oluşturulan ve depolanan bir metadata alanıdır. Örnekler 2024-05-20T04:00:00Z2024-05-21T04:00:00Z2024-05-22T04:00:00Z | |||
| Belge Türü DocumentType | Muhasebe belgelerinin nasıl işlendiğini ve saklandığını kontrol eden bir sınıflandırma. | ||
| Açıklama Belge Tipi, genel muhasebe kaydı (SA), satıcı faturası (KR) veya varlık kaydı (AA) gibi farklı iş işlemlerini ayırt eder. Sistem yapılandırması sırasında tanımlanır ve her muhasebe kaydına atanır. Bu, işlemin niteliğine göre süreci segmentlere ayırmaya izin verdiği için analiz için kritik bir özniteliktir. 'Türe Göre Muhasebe Kaydı Verimliliği' dashboard'u ve 'Muhasebe Kaydı Türüne Gööre Ortalama Döngü Süresi' KPI'ı doğrudan bu alana bağlıdır. Belirli türdeki kayıtların gecikmelere, yeniden işlemeye veya iptallere daha yatkın olup olmadığını ortaya çıkarmaya yardımcı olur. Neden önemli Analizin işlem türüne göre bölümlere ayrılmasını sağlayarak süreç sorunlarının belirli muhasebe kaydı türlerine özgü olup olmadığını belirlemeye yardımcı olur. Nereden alınır BKPF belge başlık tablosunda, BLART alanında bulunur. Örnekler SAKRREAA | |||
| İşlem Kodu TransactionCode | Muhasebe kaydını oluşturmak veya işlemek için kullanılan SAP işlem kodu. | ||
| Açıklama İşlem Kodu (T-Kodu), SAP'deki belirli bir fonksiyon veya program için benzersiz bir tanımlayıcıdır. Muhasebe kayıtları için, kaydın nasıl oluşturulduğunu gösterir; örneğin, manuel olarak (FB01, F-02), park etme yoluyla (FV50) veya otomatik bir arayüz aracılığıyla. Bu öznitelik, 'Manuel Aktivite Optimizasyonu' dashboard'u için paha biçilmezdir. T-Kodu analiz ederek manuel ve otomatik aktiviteler arasında ayrım yapabilir, hangi manuel süreçlerin en çok zaman aldığını belirleyebilir ve manuel çabayı azaltmak ve verimliliği artırmak için otomasyon fırsatlarını tespit edebiliriz. Neden önemli Manuel ve otomatik süreçleri ayırt etmeye, otomasyon ve süreç standardizasyonu fırsatlarını belirlemeye yardımcı olur. Nereden alınır BKPF belge başlık tablosunda, TCODE alanında bulunur. Örnekler FB01F-02FV50FBD1 | |||
| Kayıt Tarihi PostingDate | İşlemin genel muhasebeye kaydedildiği, finansal dönemi etkileyen tarih. | ||
| Açıklama Kayıt Tarihi, muhasebe kaydının hesaba katıldığı mali dönemi belirler. Muhasebe dönemi kapanış takvimleri ve düzenlemeleriyle uyumlu olması gerektiğinden, finansal ve uyumluluk perspektifinden kritik bir tarih alanıdır. Process mining'de bu tarih, uyumluluğu izlemek için kullanılır. 'Uyumluluk Takibi' dashboard'u ve 'Uyumluluk Uyum Oranı' KPI'ı, kayıtların doğru dönemde kaydedilip kaydedilmediğini kontrol etmek için bu özniteliği kullanır. Ayrıca, zaman içindeki muhasebe kaydı hacimlerindeki eğilimleri analiz etmek için de kullanılabilir. Neden önemli Finansal raporlama ve uyumluluk analizi için kritik öneme sahiptir, kayıtların doğru muhasebe döneminde deftere işlenmesini sağlar. Nereden alınır BKPF belge başlık tablosunda, BUDAT alanında bulunur. Örnekler 2023-10-312023-11-302024-01-15 | |||
| Kullanıcı User | Muhasebe kaydını oluşturan veya değiştiren kişinin SAP kullanıcı ID'si. | ||
| Açıklama Bu öznitelik, bir belgeyi oluşturma, park etme veya kaydetme gibi belirli bir aktiviteden sorumlu SAP kullanıcı adını yakalar. Doğrudan belge başlığından veya değişiklik log tablolarından alınır. Kullanıcı özniteliğini analiz etmek, ekip ve bireysel performansı anlamanın anahtarıdır. Kullanıcı Başına Aktivite hacimlerini ve işlem sürelerini izleyerek Kullanıcı Verimliliği dashboard'unu destekler. Ayrıca, yeniden işleme döngülerine, iptallere veya uyumluluk sapmalarına kimlerin dahil olduğunu belirlemeye yardımcı olarak hedeflenmiş eğitim veya süreç iyileştirmelerine olanak tanır. Neden önemli Her aktiviteden sorumlu kullanıcıyı belirler, kullanıcı performansını, iş yükü dağılımını ve yeniden işleme kalıplarını analiz etmeyi sağlar. Nereden alınır Genellikle BKPF tablosundan (oluşturan için USNAM alanı) veya CDHDR tablosundan (değiştiren için USERNAME alanı). Örnekler ABROWNCJONESDSMITH | |||
| Şirket Kodu CompanyCode | Finansal tabloların hazırlandığı bağımsız bir yasal varlığı temsil eden organizasyonel birim. | ||
| Açıklama Şirket Kodu, SAP Finans'ta temel bir organizasyonel birimdir. Yasal olarak bağımsız bir şirketi temsil eder ve muhasebe kaydı belge başlığında önemli bir alandır. Bu öznitelik, süreç analizini yasal varlığa göre segmentlere ayırmak için esastır. İşletmenin farklı bölümlerindeki süreç performansını, uyumluluk oranlarını ve KPI sonuçlarını karşılaştırmaya olanak tanır. Örneğin, onay gecikmelerinin veya yüksek iptal oranlarının belirli şirket kodlarına özgü olup olmadığını belirlemeye yardımcı olabilir. Neden önemli Kuruluş içindeki farklı tüzel kişilikler veya iş birimleri arasında süreç performansının filtrelenmesine ve karşılaştırılmasına olanak tanır. Nereden alınır BKPF belge başlık tablosunda, BUKRS alanında bulunur. Örnekler 10002000US01DE01 | |||
| Ters Kaydedildi mi? IsReversed | Muhasebe kaydının tersine çevrilip çevrilmediğini gösteren bir boole (doğru/yanlış) bayrağı. | ||
| Açıklama Bu bayrak, daha sonra başka bir muhasebe belgesi tarafından iptal edilen muhasebe kayıtlarını tanımlar. SAP'de, iptal edilen bir belge iptal belgesine bağlanarak net bir denetim izi sağlar. Bu öznitelik, 'Muhasebe Kaydı İptal Analizi' dashboard'u ve 'Muhasebe Kaydı İptal Oranı' KPI'ı için temeldir. İptal edilen kayıtları izole etmeye ve veri girişi hataları veya yanlış muhasebe işlemleri gibi temel nedenleri araştırmaya olanak tanır, bu da iptallerin sıklığını azaltma hedefiyle yapılır. Neden önemli Daha sonra geri alınan kayıtları işaretleyerek tersine çevirme analizini doğrudan destekler, hataların temel nedenlerini belirlemeye ve veri bütünlüğünü iyileştirmeye yardımcı olur. Nereden alınır BKPF tablosundaki Tersine Çevirme Belge numarası (STBLG) alanından türetilmiştir. Eğer STBLG boş değilse, bayrak doğrudur. Örnekler truefalse | |||
| Döngü Süresi CycleTime | İlk muhasebe kaydı aktivitesinin oluşturulmasından son kayıt aktivitesine kadar geçen toplam süre. | ||
| Açıklama Döngü Süresi (Cycle Time), muhasebe kaydı sürecinin uçtan uca süresini ölçen temel bir performans göstergesidir. Tek bir muhasebe kaydı için son deftere gönderme olayının zaman damgası ile ilk oluşturma olayının zaman damgası arasındaki fark alınarak hesaplanır. Bu hesaplanmış metrik, 'Muhasebe Kaydı Uçtan Uca Döngü Süresi' Dashboard'unun ve 'Ortalama Muhasebe Kaydı Döngü Süresi' KPI'ının birincil ölçüsüdür. Genel süreç verimliliğine ilişkin üst düzey bir görünüm sunar ve zaman içindeki iyileştirme girişimlerinin etkisini izlemek için kullanılır. Neden önemli Sürecin genel uçtan uca verimliliğini ölçer, darboğazları belirlemek ve iyileştirmeleri takip etmek için önemli bir metrik sağlar. Nereden alınır Her vaka (JournalEntryId) için ilk olayın zaman damgasının son olayın zaman damgasından çıkarılmasıyla hesaplanır. Örnekler P2DT3H15MPT8H30MP5D | |||
| Maliyet Merkezi CostCenter | Bir kontrol alanındaki maliyetlerin ortaya çıktığı bir konumu temsil eden organizasyonel bir birim. | ||
| Açıklama Maliyet Merkezi, Kontrol (CO) modülünden gelen önemli bir ana veri öğesidir ve genellikle muhasebe kaydı satır kalemi düzeyinde atanır. Belirli bir departman, fonksiyon veya konum için maliyetleri izlemek amacıyla kullanılır. Maliyet Merkezi'ni dahil etmek, muhasebe kaydı sürecinin daha ayrıntılı analizini sağlar. Belirli departmanların daha fazla yeniden işleme üretip üretmediğini, daha uzun döngü sürelerine sahip olup olmadığını veya daha yüksek hacimli manuel girişlerden sorumlu olup olmadığını belirlemeye yardımcı olabilir. Bu, süreç verimliliğinin departmansal bir görünümünü sağlar. Neden önemli Süreç performansının departman veya fonksiyonel alana göre analiz edilmesini sağlayarak yerelleşmiş verimsizliklerin belirlenmesine yardımcı olur. Nereden alınır BSEG belge kalem tablosunda, KOSTL alanında bulunur. Örnekler 4100CC_FINANCE_US10010101 | |||
| Onay Süresi ApprovalTime | Bir muhasebe kaydının onay için gönderildiği an ile onaylanana veya reddedilene kadar geçen süre. | ||
| Açıklama Bu metrik, genellikle genel döngü süresine önemli katkıda bulunan onay alt sürecinin süresini ölçer. 'Yevmiye Kaydı Gönderildi' aktivitesi ile ilgili 'Yevmiye Kaydı Onaylandı' veya 'Yevmiye Kaydı Reddedildi' aktivitesi arasındaki zaman farkı olarak hesaplanır. Onay Süresi, 'Yevmiye Kaydı Onay Performansı' Neden önemli Onay aşamasının süresini nicelendirir, inceleme ve onay workflow'undaki gecikmeleri belirlemeye ve ele almaya yardımcı olur. Nereden alınır 'Muhasebe Kaydı Gönderildi' olayının zaman damgasının, 'Muhasebe Kaydı Onaylandı' veya 'Muhasebe Kaydı Reddedildi' olayının zaman damgasından çıkarılmasıyla hesaplanır. Örnekler P1DT2HPT4H15MP3D | |||
| Para Birimi Anahtarı CurrencyKey | Muhasebe kaydında kaydedilen tutarlar için para birimi kodu. | ||
| Açıklama Bu öznitelik, muhasebe kaydının para birimini (örneğin USD, EUR veya JPY) belirtir. Belgeyle ilişkili herhangi bir finansal tutar için bağlam sağlar. Her zaman birincil bir analiz boyutu olmasa da, parasal değerleri doğru yorumlamak için çok önemlidir. Ayrıca, küresel organizasyonlarda yabancı para birimindeki girişler ile yerel para birimindeki girişler için süreçlerin farklılık gösterip göstermediğini görmek amacıyla analizi segmentlere ayırmak için de kullanılabilir. Neden önemli Tüm parasal değerler için gerekli bağlamı sağlar, doğru finansal analiz ve yorumlama temin eder. Nereden alınır BKPF belge başlık tablosunda, WAERS alanında bulunur. Örnekler USDEURGBPJPY | |||
| Park Edildi IsParked | Muhasebe kaydının deftere gönderilmeden önce bekletilmiş belge olarak kaydedilip kaydedilmediğini gösteren bir boole (doğru/yanlış) bayrağı. | ||
| Açıklama Bir belgeyi park etmek, bir kullanıcının eksik bir muhasebe kaydını finansal bakiyeleri etkilemeden kaydetmesine olanak tanır. Daha sonra başka bir kullanıcı tarafından tamamlanabilir veya kayıt öncesinde incelenebilir. Bu bayrak, park etme adımından geçen kayıtları tanımlar. Bu özniteliği analiz etmek, park etme özelliğinin kullanımını anlamaya yardımcı olur. Park etmenin gayri resmi bir inceleme adımı olarak kullanılıp kullanılmadığını ortaya çıkarabilir ve potansiyel olarak gecikmelere neden olabilir. Doğrudan kaydedilen kayıtlar ile önce park edilen kayıtları ayırt ederek uçtan uca döngü süresi analizini destekler. Neden önemli Park etme özelliğini kullanan kayıtları belirler; bu, gecikmenin bir kaynağı veya resmi olmayan bir inceleme sürecinin göstergesi olabilir. Nereden alınır BKPF tablosundaki belge durum alanı (BSTAT) alanından türetilmiştir. 'V' değeri bekletilmiş bir belgeyi gösterir. Örnekler truefalse | |||
| Ters Kayıt Nedeni ReversalReason | Bir muhasebe kaydının neden tersine çevrildiğini gösteren bir kod. | ||
| Açıklama Bir belge iptal edildiğinde (tersine çevrildiğinde), SAP kullanıcının bir neden kodu belirtmesine olanak tanır. Bu kod, iptalin neden gerekli olduğuna dair yapılandırılmış bilgi sağlar; örneğin, yanlış deftere nakil tarihi veya Bu nitelik, 'Yevmiye Kaydı İptal Analizi' Neden önemli İptallerin neden gerçekleştiğine dair doğrudan içgörü sağlar, gelecekteki hataları azaltmak için hedeflenmiş temel neden analizine olanak tanır. Nereden alınır BKPF belge başlık tablosunda, STGRD alanında bulunur. Örnekler 010205 | |||
| Toplam Belge Tutarı TotalDocumentAmount | Muhasebe kaydının belge para birimindeki toplam değeri. | ||
| Açıklama Bu öznitelik, muhasebe kaydının toplam finansal değerini temsil eder. Genellikle, belgeyle ilişkili tüm borç veya alacak satır kalemlerinin mutlak değerlerinin toplanmasıyla hesaplanır. Süreci finansal değere göre analiz etmek önemli kalıpları ortaya çıkarabilir. Örneğin, yüksek değerli kayıtlar farklı, daha sıkı bir onay yolunu izleyebilir. Bu öznitelik, döngü sürelerinin, reddedilme oranlarının veya onay gecikmelerinin kaydın tutarıyla ilişkili olup olmadığını görmek için analizi filtrelemek veya segmentlere ayırmak için kullanılabilir. Neden önemli İşlem sürelerini veya ret oranlarını muhasebe kayıtlarının parasal değeriyle ilişkilendirme gibi finansal etki analizi yapılmasına olanak tanır. Nereden alınır Bu, belirli bir muhasebe kaydı için BSEG tablosundaki tüm kalemlerden miktar alanı (WRBTR veya DMBTR) toplanarak türetilen hesaplanmış bir alandır. Örnekler 1500.0025000.75125.50 | |||
| Yeniden İşleme mi? IsRework | Bir muhasebe kaydının reddedilip düzeltilmesi gibi bir tekrar işleme döngüsünden geçip geçmediğini gösteren bir boole (doğru/yanlış) bayrağı. | ||
| Açıklama Bu bayrak, 'doğru yoldan' sapmış ve düzeltici eylem gerektiren durumları tanımlar. Genellikle, belirli bir muhasebe kaydı için 'Muhasebe Kaydı Reddedildi' ardından 'Muhasebe Kaydı Düzeltildi' gibi bir aktivite dizisi gözlemlenirse doğru olarak ayarlanır. Bu öznitelik, 'Muhasebe Kaydı Yeniden İşleme Oranı' KPI'ını hesaplamak ve 'Yeniden İşleme ve Reddetme Oranı' dashboard'undaki analiz için esastır. Süreçteki verimsizliğin boyutunu nicelleştirmeye yardımcı olur ve belirsiz gereksinimler veya yetersiz dokümantasyon gibi yeniden işleme temel nedenlerini araştırmak için bir temel sağlar. Neden önemli Düzeltme gerektiren girişleri işaretleyerek, yeniden işleme miktarının belirlenmesini ve ilk seferde doğru oranlarını iyileştirmek için temel nedenlerinin analizini sağlar. Nereden alınır Bu, bir durum için aktivite dizisinin analiz edilmesiyle türetilen hesaplanmış bir özniteliktir. Bir reddetme veya düzeltme aktivitesi meydana gelirse bir yeniden işleme döngüsü tanımlanır. Örnekler truefalse | |||
Kayıttan Raporlamaya - Muhasebe Kaydı Aktiviteleri
| Aktivite | Açıklama | ||
|---|---|---|---|
| Muhasebe Kaydı Gönderildi | Bu aktivite, park edilmiş bir muhasebe kaydının oluşturucusu tarafından tamamlandığını ve artık inceleme ve onay için hazır olduğunu gösterir. Genellikle, park edilmiş belgeyle ilişkili bir SAP Business Workflow görevinin başlatılmasıyla yakalanır. | ||
| Neden önemli Bu, oluşturucudan onaycıya devri işaret eder ve onay döngüsü süresi KPI'ları için sayacı başlatır. Onay workflow'unun verimliliğini ölçmek için önemli bir kilometre taşıdır. Nereden alınır Finansal belge nesnesine bağlı onay workflow örneğinin başlangıç zamanından çıkarım yapılır. Bu, belirli şirket kodu, belge numarası ve mali yıl için başlatılan workflow'u bulmak amacıyla SWW_WI2OBJ gibi workflow log tablolarını analiz etmeyi gerektirir. Yakala Park edilmiş belge nesnesi için workflow başlangıç olayını belirleyin. Event tipi inferred | |||
| Muhasebe Kaydı Gönderildi | Bu, muhasebe kaydının genel muhasebeye resmi olarak kaydedildiği ve finansal tabloları etkilediği merkezi aktivitedir. Bu event, belge durumu 'kaydedildi' olarak ayarlandığında ve bir kayıt tarihi atandığında açıkça yakalanır. | ||
| Neden önemli Bu, bir muhasebe kaydının başarılı bir şekilde işlenmesini gösteren en önemli kilometre taşıdır. Uçtan uca döngü süresi genellikle bu noktaya kadar ölçülür ve finansal kapanış analizi için önemli bir event'tir. Nereden alınır BKPF tablosundaki bir belgenin kayıt tarihine (BKPF-BUDAT) sahip olduğu zaman belirlenir. Park edilmiş belgeler için bu, BKPF-BSTAT durumunun 'V'den boşluğa değiştiği ana karşılık gelir. Kaydın timestamp'i giriş tarihi BKPF-CPUDT'dir. Yakala BKPF-BSTAT'ın 'V'den boşluğa ne zaman değiştiğini veya doğrudan kayıtlar için oluşturma olayını belirleyin. Event tipi explicit | |||
| Muhasebe Kaydı İptal Süreci Tamamlandı | Bu aktivite, daha önce kaydedilmiş bir muhasebe kaydının iptalini işaretler. Bir iptal, orijinal kaydı iptal eden yeni bir muhasebe belgesidir. | ||
| Neden önemli Bu, veri kalitesini ve süreç doğruluğunu ölçmek için kritik bir event'tir. Yüksek iptal oranı, ilk veri girişi veya onay aşamalarındaki sistemik sorunları işaret eder ve her iptal yeniden işleme anlamına gelir. Nereden alınır Bu event, orijinal belgenin başlığında (BKPF tablosu) tanımlanır. Bir belge geri alındığında, SAP iptal belge numarasını (BKPF-STBLG) ve iptal nedenini (BKPF-STGRD) doldurur. Event zaman damgası, yeni iptal belgesinin kayıt tarihidir. Yakala BKPF-STBLG'nin orijinal belgeye ne zaman doldurulduğunu belirleyin; zaman damgası iptal belgesinin kayıt tarihidir. Event tipi explicit | |||
| Muhasebe Kaydı Onaylandı | Bu aktivite, bir workflow içindeki bir muhasebe kaydının nihai onayını işaretleyerek kayda uygun hale getirir. Bu event, son 'serbest bırakma' veya 'onaylama' adımı tamamlandığında workflow log'undan yakalanır. | ||
| Neden önemli Bu, onay sürecini tamamlayan önemli bir kilometre taşıdır. Bu aktiviteye kadar geçen süre, onay verimliliği için kritik bir KPI'dır ve bu event'ten kayda kadar geçen süre, onay sonrası gecikmeyi ölçer. Nereden alınır SAP Business Workflow log'undaki son onay adımının tamamlanma zaman damgasından çıkarım yapılır. Bu, belgenin kaydedilmeden veya kayda hazır hale getirilmeden önceki son onay eylemidir. Yakala Workflow log'larında son 'serbest bırakma' veya 'onaylama' adımının tamamlandığını belirleyin. Event tipi inferred | |||
| Muhasebe Kaydı Park Edildi | Bu aktivite, bir muhasebe kaydının genel muhasebeye resmi olarak kaydedilmeden önce ön durumdaki ilk oluşturulmasını işaretler. Bu, bir kullanıcının park etme işlemi kullanarak bir belgeyi kaydettiğinde, belge durumunu 'park edildi' olarak ayarlayarak SAP'de açıkça yakalanır. | ||
| Neden önemli Bu, inceleme ve onay içeren süreçler için kritik bir başlangıç event'idir. Park etme ve kaydetme arasındaki süreyi analiz etmek, kayıt öncesi ve onay aşamalarındaki gecikmeleri belirlemeye yardımcı olur. Nereden alınır Bu event, BKPF belge başlık tablosundan tanımlanır. Bir belge, BKPF-BSTAT = 'V' durumuyla oluşturulduğunda park edilmiş kabul edilir. Event zaman damgası, oluşturma tarihi ve saati olan BKPF-CPUDT ve BKPF-CPUTM'dir. Yakala BKPF-BSTAT'ın 'V' olduğu BKPF'deki belge oluşturmayı belirleyin. Event tipi explicit | |||
| Belgeleme Eklendi | Bu aktivite, bir kullanıcının faturalar veya e-tablolar gibi destekleyici belgeleri muhasebe kaydına eklemesini temsil eder. Bu event, standart bir muhasebe event'i olarak açıkça log'lanmaz ve genellikle muhasebe belge nesnesine bağlı eklerin oluşturulmasının kontrol edilmesiyle çıkarım yapılır. | ||
| Neden önemli Bu aktivitenin takibi, dokümantasyon gerektiren politikalara uyumluluğu doğrulamaya yardımcı olur. Belgeleri eklemedeki gecikmeler, uzayan onay döngülerinin temel nedeni olabilir. Nereden alınır Bu, zaman damgalı bir event olarak güvenilir bir şekilde yakalanması zordur. Potansiyel olarak, Generic Object Services (GOS) ek tabloları (örn. SOOD) analiz edilerek ve ek oluşturma zaman damgası muhasebe kaydı nesne anahtarına bağlanarak çıkarım yapılabilir. Yakala GOS tablolarındaki (örn. SOOD) bağlantılı nesnelerin oluşturma zaman damgasından çıkarım yapın. Event tipi inferred | |||
| Manuel Giriş Belirlendi | Bu aktivite, bir muhasebe kaydının manuel bir çevrimiçi işlem yoluyla mı yoksa otomatik bir arayüz veya toplu işlem yoluyla mı oluşturulduğunu belirler. Bu bir kullanıcı eylemi değil, sistem verilerinden türetilen, kaydın hesaplanmış bir özniteliğidir. | ||
| Neden önemli Manuel ve otomatik kayıtları ayırt etmek, hedeflenen süreç iyileştirmesi için anahtardır. Manuel süreçler genellikle standardizasyon ve otomasyon girişimlerinin odak noktasıdır. Nereden alınır Bu, belge başlık tablosu BKPF'deki alanlar analiz edilerek hesaplanır. 'FB01', 'FB50' veya 'FV50' gibi işlem kodları (BKPF-TCODE) manuel girişi gösterirken, diğer T-kodları veya belirli toplu giriş adları (BKPF-AWKEY) otomasyonu işaret eder. Yakala BKPF-TCODE'den veya belge başlığındaki diğer kaynak sistem göstergelerinden türetin. Event tipi calculated | |||
| Muhasebe Kaydı Değişiklikleri Talep Edildi | Workflow'da bir onaycının muhasebe kaydını incelediği ve düzeltme için oluşturana geri gönderdiği bir noktayı temsil eder. Bu event, 'reddetme' veya 'geri gönderme' kullanıcı kararını gösteren workflow log'larından yakalanır. | ||
| Neden önemli Bu aktivite, verimsizliğin ve süreç sapmasının ana kaynağı olan yeniden işleme döngülerini belirlemek için esastır. Bu event'in yüksek sıklığı, kayıt kalitesi veya belirsiz gereksinimlerle ilgili sorunları gösterir. Nereden alınır Bu event, SAP Business Workflow log'undaki belirli bir kullanıcı karar adımının zaman damgasından çıkarım yapılır ve bu adım 'reddetme' veya 'düzeltme için gönder' eylemine karşılık gelir. Yakala Workflow log'larında 'reddetme' veya 'yeniden işleme' kararının zaman damgasını belirleyin. Event tipi inferred | |||
| Muhasebe Kaydı Düzeltildi | Bu aktivite, orijinal oluşturucunun değişiklikler için geri gönderildikten sonra park edilmiş bir muhasebe kaydını değiştirdiğini gösterir. Bir 'Değişiklik Talep Edildi' event'inden sonra belgedeki değişikliklerin tespit edilmesiyle çıkarım yapılır. | ||
| Neden önemli Düzeltmelerin takibi, yeniden işleme harcanan çabayı ölçmeye yardımcı olur. Bir değişiklik talebi ile düzeltme arasındaki süre, gönderilen kayıtlardaki sorunların çözülmesindeki gecikmeleri ortaya koyar. Nereden alınır Park edilmiş belge için değişiklik belgesi log'larını (CDHDR ve CDPOS tabloları) analiz ederek çıkarım yapılır. Workflow'da bir reddetme olayından sonra kaydedilen bir değişiklik, bir düzeltmenin yapıldığını gösterir. Zaman damgası CDHDR tablosundadır. Yakala Reddetme olayından sonra CDHDR/CDPOS'taki değişiklik kaydı girişini belirleyin. Event tipi inferred | |||
| Muhasebe Kaydı Reddedildi | Bu aktivite, bir muhasebe kaydının nihai reddedilmesini ifade eder ve bu durumda kayıt yapılmayacaktır. Bu genellikle bir onay workflow'unda terminal bir durum olup, park edilmiş belgenin sonunda silinmesine yol açar. | ||
| Neden önemli Reddetmeleri takip etmek, kalite yönetimi için hayati öneme sahiptir. Reddetmelerin nedenlerini ve sıklığını analiz etmek, yevmiye kayıtlarının ilk seferde doğru oranını iyileştirmeye yardımcı olur. Nereden alınır Bu, süreci sonlandıran nihai bir 'reddetme' kullanıcı kararını temsil eden, SAP Business Workflow log'undan yakalanan bir sonuçtur. Park edilmiş belge daha sonra silinebilir. Yakala Belge için workflow log'undaki son 'reddetme' durumunu belirleyin. Event tipi inferred | |||
| Muhasebe Kaydı Satır Öğesi Kapatıldı | Bu aktivite, bir banka mutabakat hesabı gibi açık kalem yönetilen bir G/L hesap satır kaleminin mutabakatını temsil eder. Bir satır kalemi başka bir kaleme karşı eşleştirildiğinde, kapatılarak gerçekleşir. | ||
| Neden önemli Banka mutabakatı gibi süreçlerde, kalemlerin mahsuplaşma süresi kritik bir KPI'dır. Bu faaliyet, mutabakat ve ay sonu kapanış prosedürlerinin verimliliğini analiz etmeye yardımcı olur. Nereden alınır Bu event, satır kalemi tablosu BSEG'den yakalanır. Bir satır kalemi kapatıldığında, kapatma tarihi (BSEG-AUGDT) ve kapatma belgesi (BSEG-AUGBL) alanları doldurulur. Event'in zaman damgası kapatma tarihidir. Yakala Bir kalem için temizleme tarihinin (BSEG-AUGDT) ne zaman doldurulduğunu belirleyin. Event tipi explicit | |||
| Park Edilen Muhasebe Kaydı Silindi | Hiç kaydedilmemiş park edilmiş bir muhasebe kaydının silinmesini temsil eder. Bu, bir reddedilmeden sonra veya kaydın yanlışlıkla oluşturulması durumunda meydana gelebilir. | ||
| Neden önemli Bu aktivite, sürecin başarısız bir şekilde sona erdiğini işaret eder. Park edilmiş belgelerin neden silindiğini analiz etmek, yinelenen kayıtlar veya süreç yanlış anlamaları gibi sorunları ortaya çıkarabilir. Nereden alınır Bu event, BKPF tablosundaki park edilmiş bir belgenin durumu değiştirildiğinde yakalanır. Durum alanı BKPF-BSTAT, 'Z' (Park edilmiş belge silindi) olarak güncellenir. Değişiklik zaman damgası, belge değişiklik log'larında (CDHDR) bulunabilir. Yakala BKPF-BSTAT'ın 'Z' olarak ne zaman güncellendiğini belirleyin. Event tipi explicit | |||
| Şirketler Arası Kayıt Tespit Edildi | Birden fazla şirket kodunu etkileyen bir muhasebe kaydını işaretleyen hesaplanmış bir aktivitedir. Bu, tek bir finansal belgenin kalemleri analiz edilerek belirlenir. | ||
| Neden önemli Şirketler arası işlemler daha karmaşık işleme ve onay gereksinimlerine sahip olabilir. Bunları tanımlamak, döngü sürelerinin ve süreç yollarının ayrı ayrı analiz edilerek benzersiz darboğazları bulmaya olanak tanır. Nereden alınır Verilen bir belge numarası (BELNR) için BSEG kalem tablosu incelenerek hesaplanır. Eğer kalemler birden fazla farklı şirket kodu (BSEG-BUKRS) içeriyorsa, bu kayıt şirketler arası bir kayıttır. Yakala Tek bir BKPF-BELNR için birden fazla benzersiz BSEG-BUKRS değeri olup olmadığını kontrol edin. Event tipi calculated | |||
| Yevmiye Kaydı Oluşturuldu | Önceki bir park etme adımı olmaksızın doğrudan kaydedilen bir muhasebe kaydının oluşturulmasını temsil eder. Bu, SAP'de doğrudan kayıt işlemi kullanılarak bir belge oluşturulduğunda yakalanır. | ||
| Neden önemli Bu aktivite, onay workflow'u gerektirmeyen daha basit muhasebe kaydı süreçleri için alternatif bir başlangıç noktası olarak hizmet eder. Basit, doğrudan kayıtlar ile daha karmaşık, park edilmiş kayıtlar arasında ayrım yapmaya yardımcı olur. Nereden alınır Bu event, belge durumu BKPF-BSTAT'ın boş (kaydedildi) olduğu BKPF tablosundaki belge oluşturmaya karşılık gelir. Event zaman damgası, oluşturma tarihi BKPF-CPUDT'dir. Bu belgeler için 'Oluşturuldu' ve 'Kaydedildi' event'leri aynı anda gerçekleşir. Yakala BKPF-BSTAT'ın boş olduğu BKPF'deki belge oluşturmayı belirleyin. Event tipi explicit | |||
Veri Çekim Kılavuzları
Adımlar
- ABAP Programını Oluşturun: SAP sisteminde SE38 (ABAP Editor) işlem koduna gidin. Yeni program için bir isim girin (örneğin; Z_PM_JE_EXTRACTION) ve 'Oluştur'a tıklayın. Uygun bir başlık girin ve program türünü 'Yürütülebilir Program' (Executable Program) olarak ayarlayın.
- Seçim Ekranını Tanımlayın: Program kaynak kodunda seçim ekranını (selection screen) tanımlayın. Bu, kullanıcıların veri hacmini sınırlamak için belge oluşturma tarih aralığı, şirket kodları ve belge türleri gibi parametreleri belirlemesine olanak tanır.
- Veri Yapılarını Deklare Edin: Nihai event log verilerini tutacak bir dahili tablo yapısı tanımlayın. Bu yapı; JournalEntryId, ActivityName, EventTime, SourceSystem, LastDataUpdate gibi tüm zorunlu alanları ve Kullanıcı, Şirket Kodu, Kayıt Tarihi gibi önerilen nitelikleri içermelidir.
- Veri Seçme Mantığını Uygulayın: Gereken 14 aktivitenin her biri için verileri çekecek temel ABAP SQL sorgularını yazın. Bu işlem; BKPF (Başlık) ve BSEG (Kalem) gibi ana tablolardan, CDHDR ve CDPOS gibi değişiklik günlüğü tablolarından, SWWLOGHIST gibi workflow tablolarından ve BSAS, BSAK gibi denkleştirme tablolarından veri seçmeyi kapsar.
- Ön Kayıtlı ve Kaydedilmiş Belgeleri Çekin: 'Yevmiye Kaydı Ön Kaydedildi' olayları için BSTAT alanının 'V' olduğu BKPF kayıtlarını seçin. 'Yevmiye Kaydı Oluşturuldu' ve 'Yevmiye Kaydı İşlendi' olayları için ise BSTAT alanının boş olduğu (normal, kaydedilmiş belge) kayıtları seçin.
- Değişiklik ve Silme Olaylarını Çekin: 'BELEG' nesne sınıfı için CDHDR ve CDPOS değişiklik belgesi tablolarını sorgulayın. 'Yevmiye Kaydı Düzeltildi' veya 'Ön Kayıtlı Yevmiye Kaydı Silindi' aktivitelerine karşılık gelen değişiklikleri bulmak için belge anahtarına göre filtreleme yapın.
- Workflow Olaylarını Çekin: 'Yevmiye Kaydı Gönderildi', 'Onaylandı', 'Reddedildi' ve 'Değişiklik İstendi' gibi aktiviteleri yakalamak için workflow tablolarını sorgulayın. Muhasebe belgesini bir workflow örneğine bağlamak için SWW_WI2OBJ tablosunu kullanın, ardından spesifik kullanıcı kararları veya durum değişiklikleri için SWWLOGHIST tablosunu okuyun.
- Hesaplanan Olayları Belirleyin: 'Manuel Giriş Belirlendi' aktivitesi için işlem kodunu (BKPF-TCODE) bilinen manuel giriş kodları listesiyle karşılaştırın. 'Şirketler Arası Kayıt Belirlendi' aktivitesi için, bir belgenin BSEG kalemlerini analiz ederek birden fazla şirket kodu içerip içermediğini kontrol edin.
- Verileri Birleştirin ve Dönüştürün: Her aktivitenin verisi seçildikçe, bunları nihai event log yapısına dönüştürün. JournalEntryId'yi oluşturmak için Şirket Kodu, Belge Numarası ve Mali Yılı birleştirin. SAP tarih ve saatlerini tek bir EventTime zaman damgasına dönüştürün. Her sorgunun sonuçlarını nihai dahili tabloya ekleyin.
- Dosya Dışa Aktarımını Uygulayın: Birleştirilmiş dahili tabloyu SAP uygulama sunucusu dizinine (AL11 ile görüntülenebilir) CSV veya düz metin dosyası olarak yazmak için OPEN DATASET, LOOP AT, TRANSFER ve CLOSE DATASET gibi ABAP dosya işleme komutlarını kullanın.
- Arka Plan İşi Olarak Planlayın: SM36 (Arka Plan İşi Tanımla) işlem koduna gidin. Yeni bir iş oluşturun, ABAP programınızı yürüten bir adım tanımlayın ve veri çekme işlemini otomatikleştirmek için (örneğin; gece veya hafta sonu gibi yoğun olmayan saatlerde) bir takvim belirleyin.
- Dosyayı Alın ve Biçimlendirin: Uygulama sunucusunda oluşturulan dosyayı yerel makinenize indirmek için CG3Y işlem kodunu kullanın veya sistem yöneticinizle iletişime geçin. Dosya kodlamasının ve biçiminin Process Mining aracınıza yüklenmeye uygun olduğundan emin olun.
Konfigürasyon
- Tarih Aralığı: Performansı yönetmek için bir tarih aralığı tanımlamak kritiktir. Birincil filtre olarak belge oluşturma tarihini (BKPF-CPUDT) kullanın. İlk analiz için 3 ila 6 aylık bir dönem önerilir. Test aşamasında ise veri içerdiği bilinen birkaç günlük bir aralık kullanın.
- Şirket Kodu Filtresi: Her zaman şirket koduna (BKPF-BUKRS) göre filtreleme yapın. Tüm şirket kodları için aynı anda veri çekmek aşırı kaynak tüketebilir. Bir veya birkaç ilgili şirket koduyla başlayın.
- Belge Türü Filtresi: Tüm belge türlerini analiz etmeniz gerekmiyorsa, kapsamı genel muhasebe belgeleri için 'SA' gibi belirli yevmiye kaydı türlerine daraltmak için belge türü filtresini (BKPF-BLART) kullanın.
- Workflow Görev Kimlikleri: Workflow olaylarını çekme mantığı, sisteminizde onay, red ve gönderim için kullanılan spesifik görev kimliklerine bağlıdır. Bu kimlikler, şirketinizin workflow tanımlarına göre programın kaynak kodunda yapılandırılmalıdır.
- Performans Değerlendirmeleri: Program, özellikle CDPOS ve workflow geçmiş tabloları gibi birkaç büyük tabloyu birleştirir. Programı yoğun iş saatlerinde çalıştırmak sistem performansını etkileyebilir. İşlemi her zaman yoğun olmayan saatlerde çalışacak bir arka plan işi olarak planlayın. Performans sorunu devam ederse ikincil veritabanı indeksleri oluşturmayı değerlendirin.
- Ön Koşullar: Bu yöntem, ABAP geliştirme yetkilerine (SE38 için) ve arka plan işlerini oluşturup yönetme izinlerine (SM36 için) sahip bir kullanıcı gerektirir. Kullanıcının veya işin ayrıca tüm ilgili finans, workflow ve sistem tablolarına (BKPF, BSEG, CDHDR, CDPOS, SWWLOGHIST vb.) okuma erişimi olmalıdır.
a Örnek Sorgu 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. Adımlar
- Veritabanı Bağlantısı Kurun: SAP ECC veritabanı için salt okunur (read-only) kimlik bilgileri edinin. Veritabanına bağlanmak için DBeaver, SAP HANA Studio veya SQL Server Management Studio gibi standart bir SQL istemcisi kullanın.
- SQL Sorgusunu Hazırlayın: Bu belgenin 'sorgu' (query) bölümünde sağlanan tam SQL sorgusunu SQL istemcinize kopyalayın.
- Veri Çekme Parametrelerini Ayarlayın: Çalıştırmadan önce sorgudaki yer tutucuları yapılandırmanız gerekir.
'[START_DATE]'ve'[END_DATE]'alanlarını 'YYYYMMDD' formatında istediğiniz tarih aralığıyla değiştirin.'[COMPANY_CODE_1]', '[COMPANY_CODE_2]'alanlarını analiz etmek istediğiniz spesifik SAP şirket kodlarıyla değiştirin. - Kaynak Sistemi Tanımlayın: Ana
SELECTifadesinde, veri kaynağını doğru tanımlamak için'[Your SAP System ID]'yer tutucusunu gerçek SAP Sistem Kimliği (SID) ile değiştirin. - Sorguyu Çalıştırın: Yapılandırılmış SQL sorgusunu SAP veritabanında çalıştırın. Yürütme süresi, tarih aralığına ve veritabanı tablolarınızın boyutuna bağlı olarak değişecektir.
- İlk Sonuçları İnceleyin: Sorgu tamamlandığında, verilerin beklendiği gibi dolup dolmadığını kontrol etmek için dönen satırlara kısaca göz atın. Farklı aktivitelerin olup olmadığını ve
JournalEntryIdileEventTimegibi temel alanların boş olmadığını doğrulayın. - Zaman Damgalarını Yönetin: Sorgu, tarih ve saat alanlarını bir
YYYYMMDDHHMMSSdizesi olarak birleştirir. İşleme sisteminizin veya hedef sisteminizin bu formatı ayrıştırabildiğinden emin olun; gerekirse SQLCONCATfonksiyonunu veritabanınızın desteklediği bir ISO 8601 formatına (örneğin;YYYY-MM-DDTHH:MI:SS) göre ayarlayın. - Verileri Dışa Aktarın: SQL istemcinizden tam sonuç kümesini bir CSV dosyasına aktarın. Özel karakterlerle ilgili sorunları önlemek için UTF-8 kodlaması kullandığınızdan emin olun.
- Yükleme İçin Hazırlık Yapın: Process Mining aracına yüklemeden önce sütun başlıklarının gerekli veri şemasıyla eşleştiğini onaylayın.
JournalEntryId,ActivityNameveEventTimealanları kritiktir. Çekimin yapıldığı zaman damgasını içerenLastDataUpdatesütununu ekleyin. - Son Doğrulama: Analizinize başlamadan önce çekilen verilerin eksiksiz ve doğru olduğundan emin olmak için 'validationSteps' (doğrulama adımları) bölümündeki adımları uygulayın.
Konfigürasyon
- Veritabanı Yetkileri: Veritabanı kullanıcısının şu SAP tablolarına okuma erişimi olmalıdır: BKPF, BSEG, CDHDR, CDPOS, T001 ve V_USERNAME. Workflow ile ilgili aktiviteler için SWW_WI2OBJ ve SWWLOGHIST tablolarına erişim de gereklidir. Bu yetki düzeyi genellikle sadece uzman teknik ekiplere tanımlanır.
- Tarih Aralığı Filtreleme: Sorgu performansını korumak için verileri belirli bir tarih aralığına göre filtrelemek hayati önem taşır. Sağlanan sorgu, belge oluşturma tarihine (
BKPF.CPUDT) uygulanan başlangıç ve bitiş tarihleri için yer tutucular kullanır. İlk analiz için 3 ila 6 aylık bir aralık önerilir. - Varlık Filtreleme: Veri hacmini yönetmek ve analize odaklanmak için her zaman Şirket Kodu (
BKPF.BUKRS) üzerinden filtreleme yapın. Ayrıca, sadece ilgili yevmiye kaydı türlerini dahil etmek için Belge Türü (BKPF.BLART) filtresini kullanabilirsiniz (örneğin; genel muhasebe belgeleri için 'SA'). Kapsam dışındaki fatura veya ödeme gibi operasyonel belgeleri hariç tutabilirsiniz. - Performans Değerlendirmeleri: BSEG ve CDPOS gibi temel tablolara yönelik doğrudan sorgular kaynak yoğun olabilir. Son kullanıcıların sistem performansının etkilenmemesi için bu veri çekme işleminin mesai saatleri dışında yapılması şiddetle önerilir. Tek seferde bir yıldan fazla veriyi çekmekten kaçının.
- Workflow Görev Kimlikleri (Task IDs): Sorgu,
'[WF_TASK_ID_SUBMIT]'ve'[WF_TASK_ID_APPROVE]'gibi yer tutucular içerir. Bunlar, sisteminizin spesifik yevmiye kaydı workflow yapılandırmasındaki gerçek görev kimlikleriyle değiştirilmelidir. Bu kimlikler, bir SAP Workflow uzmanıyla çalışarak veya PFTC işlem kodundaki teknik workflow tanımı analiz edilerek belirlenebilir.
a Örnek Sorgu 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' Adımlar
- SAP Bağlantısı Kurun: Üçüncü taraf ETL aracınızda SAP ECC sisteminize yeni bir kaynak bağlantısı yapılandırın. Bu genellikle uygulama sunucusu bilgileri, istemci (client), sistem numarası ve gerekli RFC yetkilerine sahip özel bir SAP kullanıcısı gerektirir.
- Veri Kaynaklarını Tanımlayın: Veri çekme projenize gerekli SAP tablolarını kaynak olarak ekleyin. Ana tablolar şunlardır: BKPF (Muhasebe Belge Başlığı), BSEG (Muhasebe Belge Kalemi), VBSEGK (Ön Kayıtlı Belge Başlığı), CDHDR (Değişiklik Belgesi Başlığı), CDPOS (Değişiklik Belgesi Kalemleri), SWW_WI2OBJ (Workflow Nesne Bağlantıları), SWWLOGHIST (Workflow Günlüğü) ve SRGBTBREL (Ekler için GOS İlişkileri).
- Temel Olayları Çekin (Oluşturuldu ve Ön Kayıtlı): İlk olayları çekmek için birinci veri akışını oluşturun. 'Yevmiye Kaydı Ön Kaydedildi' için VBSEGK tablosunu kaynak kullanın. 'Yevmiye Kaydı Oluşturuldu' için BKPF tablosunu kullanın; ters kayıt olmayan ve başlangıçta ön kaydedilmemiş belgeleri filtrelediğinizden emin olun (bu, VBSEGK ile anti-join yapılarak sağlanabilir).
- Workflow Olaylarını Çekin: Workflow örneği kimliğini bulmak için BKPF'yi nesne anahtarı (şirket kodu + belge numarası + mali yıl) üzerinden SWW_WI2OBJ ile birleştiren bir veri akışı oluşturun. Workflow günlüklerinde kayıtlı görev sonuçlarına ve kullanıcı kararlarına göre 'Gönderildi', 'Onaylandı', 'Reddedildi' ve 'Değişiklik İstendi' gibi olayları çekmek için bu sonucu SWWLOGHIST ile birleştirin.
- Değişiklik ve Silme Olaylarını Çekin: Değişiklikleri belirlemek için CDHDR ve CDPOS tablolarını kullanın. 'Yevmiye Kaydı Düzeltildi' için ön kayıtlı belgelerde (Nesne Sınıfı 'FIPP') yapılan değişiklikleri filtreleyin. 'Ön Kayıtlı Yevmiye Kaydı Silindi' için ön kayıtlı belgelerin değişiklik günlüklerindeki silme işaretlerini arayın.
- Ek (Attachment) Olaylarını Çekin: 'Doküman Eklendi' olayını yakalamak için BKPF'yi nesne türünün 'BKPF' ve ilişkinin '[Sizin ek ilişki türünüz]' olduğu SRGBTBREL ile birleştirin. Bağlantının oluşturulma tarihi olay zamanı (event time) olarak kabul edilir.
- Denkleştirme ve Ters Kayıt Olaylarını Çekin: 'Yevmiye Kaydı Kalemi Denkleştirildi' için BSEG tablosunda denkleştirme belgesi alanının (AUGBL) dolu olduğu kayıtları sorgulayın. Olay zamanı, denkleştirme belgesinin kayıt tarihidir (AUGDT). 'Yevmiye Kaydı Ters Kaydı İşlendi' için BKPF'de ters kayıt alanı (STBLG) dolu olan belgeleri sorgulayın.
- Hesaplanan Olayları Türetin: Hesaplanan olaylar için ayrı mantık blokları oluşturun. 'Manuel Giriş Belirlendi' için BKPF'yi manuel işlem kodları listesine (örneğin; FB01, FB50, F-02) göre filtreleyin. 'Şirketler Arası Kayıt Belirlendi' için BSEG tablosunu belge kimliğine göre gruplayın ve birden fazla farklı şirket kodu içeren belgeleri belirleyin.
- Tüm Olay Akışlarını Birleştirin: Tüm bireysel olay akışlarından (Oluşturuldu, Ön Kaydedildi, Onaylandı vb.) gelen çıktıları tek bir event log tablosunda birleştirmek için ETL aracınızda bir UNION dönüşümü kullanın. Sütun isimlerinin ve veri türlerinin tüm akışlarda tutarlı olduğundan emin olun.
- Nihai Şemaya Eşleyin: Birleştirilmiş verileri gerekli event log yapısına eşleyin;
JournalEntryId,ActivityName,EventTime,Userve diğer zorunlu/önerilen nitelikleri oluşturun.SourceSystemgibi statik sütunları ekleyin veLastDataUpdateiçin ETL işinin çalışma zamanını kullanın. - Artımlı (Incremental) Yüklemeyi Yapılandırın: Sürekli veri çekme işlemleri için artımlı yükleme stratejisi yapılandırın. Sadece son çalışmadan sonraki yeni veya güncellenmiş kayıtları çekmek için son oluşturma veya değişiklik tarihini (örneğin; BKPF.CPUDT, CDHDR.UDATE) bir eşik değer (watermark) olarak kullanın.
- ProcessMind İçin Dışa Aktarın: Veri çekme işini planlayın ve nihai çıktı adımını, event log'u ProcessMind tarafından yüklenebilecek bir CSV veya Parquet dosyası olarak kaydedecek şekilde yapılandırın.
Konfigürasyon
- Ön Koşullar: Özel bir SAP konektörüne sahip, lisanslı bir üçüncü taraf ETL aracı (örneğin; Theobald Xtract Universal, Informatica, Talend). Ayrıca RFC erişimi olan ve finans tablolarını (örneğin; F_00, F_WF tablo grupları için S_TABU_DIS), workflow verilerini ve değişiklik günlüklerini (change logs) okuma yetkisine sahip bir SAP kullanıcı hesabı gereklidir.
- Bağlantı Parametreleri: SAP Uygulama Sunucusu IP veya ana makine adı, Sistem Numarası ve İstemci (Client) Kimliği bilgilerine ihtiyacınız olacak. SAP kullanıcı adı ve şifresi için güvenli kimlik bilgisi yönetimi kullanılmalıdır.
- Ana Filtreler: Veri hacmini sınırlamak için kaynakta her zaman Şirket Kodu (BKPF.BUKRS) ve Mali Yıl (BKPF.GJAHR) filtreleri uygulayın. Belirli bir çekim dönemi tanımlamak için Belge Oluşturma Tarihi (BKPF.CPUDT) üzerinde filtreleme yapılması (örneğin son 6 ay) şiddetle tavsiye edilir.
- Tarih Aralığı Seçimi: İlk yükleme için 3 ila 6 aylık temsilî bir dönem seçin. Sonraki fark (delta) yüklemeleri için, yalnızca yeni kayıtları getirmek üzere
CPUDTgibi bir zaman damgası alanında eşik değer (watermark) kullanın. - Performans Değerlendirmeleri: BSEG, CDPOS ve workflow tablolarındaki birleştirmeler (joins) çok yavaş olabilir. ETL aracınızın filtreleri mümkün olan her yerde SAP kaynağına ittiğinden (push down) emin olun. Özellikle büyük geçmiş verileri yüklerken, araç izin veriyorsa verileri küçük paketler halinde çekin.
- Workflow Özelleştirme: 'Onaylandı' veya 'Reddedildi' gibi workflow aktivitelerini tanımlama mantığı, büyük ölçüde sizin spesifik workflow şablonlarınıza bağlıdır. Filtrelerde kullanmak üzere sisteminizdeki doğru workflow görev kimliklerini ve kullanıcı karar anahtarlarını belirlemeniz gerekecektir.
a Örnek Sorgu config
/*
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