Siparişten Tahsilata faturalama süreciniz için Veri Templatei
Siparişten Tahsilata faturalama süreciniz için Veri Templatei
- Ayrıntılı analiz için önerilen öznitelikler
- İzlenecek temel süreç adımları ve kilometre taşları
- SAP ECC için pratik veri çıkarma önerileri
Siparişten Tahsilata faturalama öznitelikleri
| Ad | Açıklama | ||
|---|---|---|---|
| Aktivite ActivityName | Fatura yaşam döngüsünde gerçekleşen iş olayının veya adımın adı. | ||
| Açıklama Bu öznitelik, faturalama sürecindeki belirli bir eylemi veya durum değişikliğini açıklar. Örneğin, “Fatura oluşturuldu”, “Fatura kaydedildi” veya “Müşteri ödemesi alındı”. Bu etkinlikler; çeşitli sistem olaylarından, belge durumlarındaki değişikliklerden veya kullanıcıların çalıştırdığı belirli işlem kodlarından türetilir. Etkinliklerin sıralanması süreç akışını oluşturur ve Process Mining analizinin temelini oluşturur. Kuruluşlar etkinlikleri inceleyerek hangi adımların hangi sırayla ve ne sıklıkta gerçekleştiğini anlayabilir, tasarlanan süreçle fiilî uygulamayı karşılaştırabilir. Neden önemli? Süreç haritasındaki adımları tanımlar; süreç akışlarını, sapmaları ve darboğazları görselleştirip analiz etmenizi sağlar. Nereden alınır? Bu, işlem kodları (CDHDR-TCODE), belge durumu değişiklikleri (VBUK-FKSTK) ve muhasebe belgesi kayıtları gibi birden fazla kaynaktan türetilen kavramsal bir özniteliktir. Örnekler Fatura oluşturulduFatura kaydedildiÖdeme hatırlatması gönderildiFatura kapatıldı | |||
| Başlangıç zamanı EventTime | Belirli bir etkinliğin veya olayın gerçekleştiği zamanı gösteren zaman damgası. | ||
| Açıklama Olay zamanı, fatura yaşam döngüsündeki her etkinliğin kesin tarih ve saatini kaydeder. Bu zaman damgası, Process Mining analizinde çevrim sürelerini hesaplamak, darboğazları belirlemek ve süreç performansını hizmet seviyesi anlaşmalarına göre izlemek için temel oluşturur. Bu öznitelik genellikle değişiklikleri veya belge oluşturmayı kaydeden çeşitli SAP tablolarındaki Kayıt tarihi (BUDAT) gibi bir tarih alanı ile bir saat alanının (UZEIT) birleştirilmesiyle oluşturulur. Güvenilir bir olay günlüğü oluşturmak ve performans analizinin geçerliliğini sağlamak için zaman damgalarının doğru olması gerekir. Neden önemli? Tüm performans analizlerinin temelini oluşturur; süreç adımları arasındaki çevrim sürelerini, süreleri ve bekleme zamanlarını hesaplamanızı sağlar. Nereden alınır? BKPF (BUDAT, CPUTM), VBRK (ERDAT, ERZET) ve CDHDR (UDATE, UTIME) gibi değişiklik günlüğü tabloları dâhil olmak üzere çeşitli tablolardaki tarih ve saat alanlarından oluşturulur. Örnekler 2023-04-15T10:30:00Z2023-04-16T11:00:00Z2023-05-20T09:00:00Z | |||
| Fatura numarası InvoiceNumber | Faturalama belgesinin benzersiz tanımlayıcısıdır ve faturalama sürecinin temel vaka kimliği olarak kullanılır. | ||
| Açıklama SAP’te Faturalama Belgesi Numarası olarak bilinen Fatura Numarası, her faturayı benzersiz biçimde tanımlar. Process Mining analizinde CaseId olarak kullanılır ve oluşturma, kaydetme, gönderme, ödeme ve kapatma gibi ilgili tüm etkinlikleri tek bir uçtan uca süreç örneğinde bir araya getirir. Süreçleri Fatura Numarasına göre incelemek, her faturalama işleminin başlangıcından son tahsilatına kadar tüm yaşam döngüsünü görmenizi sağlar. Bu, Satışların Tahsilat Süresi (DSO) ve toplam fatura çevrim süresi gibi temel performans göstergelerini hesaplamak için önemlidir; performansı ölçmek ve iyileştirmek için açık bir temel sunar. Neden önemli? Her faturalama işleminin tüm yolculuğunu izlemek için gereken temel anahtardır. Her işlem için çevrim sürelerini, darboğazları ve farklılıkları analiz etmenizi sağlar. Nereden alınır? SAP ECC tablosu: VBRK, alan: VBELN Örnekler 90001234900012359000123690001237 | |||
| Faturalama belgesi türü BillingDocumentType | Fatura, alacak dekontu veya borç dekontu gibi faturalama belgesi türlerini sınıflandıran kod. | ||
| Açıklama Faturalama Belgesi Türü, işlemleri iş amaçlarına göre farklı kategorilere ayırır. Örneğin “F2” standart müşteri faturasını, “G2” ise alacak dekontunu belirtir. SAP’te bu sınıflandırma, farklı faturalama belgelerinin nasıl işleneceğini belirleyecek şekilde yapılandırılır. Process Mining analizinde bu öznitelik, farklı faturalama senaryolarını filtrelemek ve karşılaştırmak için önemlidir. Analistler standart faturalarla alacak dekontlarının süreçlerini ayrı ayrı inceleyerek kendilerine özgü akışları, çevrim sürelerini ve zorlukları anlayabilir; böylece iyileştirme çalışmalarını hedefleyebilir. Neden önemli? Standart faturalarla alacak dekontları gibi farklı faturalama süreçlerini ayrı ayrı incelemenizi sağlar. Bu süreçlerin akışları çoğu zaman birbirinden oldukça farklıdır. Nereden alınır? SAP ECC tablosu: VBRK, alan: FKART Örnekler F2G2L2IV | |||
| Kullanıcı adı UserName | Etkinliği gerçekleştiren veya belgeyi oluşturan kullanıcının kimliği. | ||
| Açıklama Bu öznitelik, fatura oluşturma veya ödeme kaydetme gibi belirli bir olaydan sorumlu SAP kullanıcı kimliğini kaydeder. Sürecin insan unsurunu analiz etmek için gereklidir. Bu verilerle kullanıcılar veya ekipler arasındaki performans farklılıklarını inceleyebilir, eğitim ihtiyaçlarını belirleyebilir ve olası uyumluluk sorunlarını tespit edebilirsiniz. Ayrıca insan kullanıcıların gerçekleştirdiği manuel etkinliklerle sistem veya toplu işlem kullanıcılarının yürüttüğü otomatik adımları ayırt etmek için kullanılır. Bu ayrım, otomasyon oranlarını hesaplamada önemlidir. Neden önemli? Kullanıcı performansını ve iş yükü dağılımını analiz etmenizi, manuel etkinliklerle otomatik etkinlikleri ayırt etmenizi sağlar; otomasyon ve verimlilik çalışmalarını destekler. Nereden alınır? SAP ECC tablosu: VBRK, alan: ERNAM (Oluşturan) veya BKPF, alan: USNAM (Kullanıcı adı) ya da CDHDR, alan: USERNAME (Kullanıcı). Örnekler JSMITHBW_BATCHLROSSIMKUMAR | |||
| Müşteri numarası CustomerNumber | Faturanın düzenlendiği müşteriyi tanımlayan benzersiz numara. | ||
| Açıklama Müşteri Numarası, faturayı belirli bir müşteriye veya iş ortağına bağlar. Bu öznitelik, faturalama sürecini müşteri özelliklerine göre gruplandırıp analiz etmek için önemlidir. Analistler bu alanı kullanarak farklı müşterilerin Satışların Tahsilat Süresini (DSO) karşılaştırabilir, hangi müşterilerin ödemelerini sık sık geciktirdiğini belirleyebilir veya ödeme koşullarına uyumu inceleyebilir. Bu örüntüleri anlamak, müşteri ilişkilerini yönetmek ve farklı müşteri gruplarına uygun tahsilat stratejileri geliştirmek açısından önemlidir. Neden önemli? Müşteri odaklı analiz yapmanızı sağlar; ödeme davranışlarını belirlemeye, müşteri bazında DSO’yu değerlendirmeye ve tahsilat stratejilerini uyarlamaya yardımcı olur. Nereden alınır? SAP ECC tablosu: VBRK, alan: KUNRG (Ödeyen) veya KUNAG (Sipariş veren taraf). Örnekler 100023200541CUST-A487910345 | |||
| Şirket kodu CompanyCode | Faturayı düzenleyen tüzel kişiliğin tanımlayıcısı. | ||
| Açıklama Şirket Kodu, SAP’te bağımsız bir tüzel kişiliği ve muhasebe birimini temsil eder. Faturalar dâhil tüm finansal işlemler belirli bir şirket koduna kaydedilir. Bu, temel bir organizasyonel veri öğesidir. Process Mining analizinde Şirket Kodu, bir şirket içindeki farklı tüzel kişiliklerin faturalama süreçlerini karşılaştırmak için kullanılır. Böylece bir birimdeki iyi uygulamalar belirlenip diğerlerine aktarılabilir ve analiz şirketin organizasyon yapısına uygun biçimde yürütülebilir. Neden önemli? Farklı tüzel kişiliklerin süreçlerini filtreleyip karşılaştırmanızı sağlar; finansal analiz ve kuruluş içi kıyaslama için temel oluşturur. Nereden alınır? SAP ECC tablosu: VBRK, alan: BUKRS Örnekler 10002000US01DE01 | |||
| Toplam fatura tutarı TotalInvoiceAmount | Faturalama belgesinin toplam net değeri. | ||
| Açıklama Bu öznitelik, vergiler hariç faturanın toplam net tutarını gösterir. Fatura tutarı, faturalama süreciyle ilişkili önemli bir finansal veridir. Faturaları yüksek ve düşük tutarlı olarak gruplandırıp süreç akışlarının farklılaşıp farklılaşmadığını incelemek gibi çeşitli analizlerde kullanılır. Ayrıca tahsilat çalışmalarına öncelik vermek veya yüksek tutarlı faturaların neden daha geç onaylandığını ya da ödendiğini araştırmak için de kullanılabilir. Bu finansal bağlam, süreç analizini derinleştirir. Neden önemli? Fatura değerine göre analiz yapmanız için gerekli finansal bağlamı sağlar. Örneğin, yüksek tutarlı faturaların farklı bir süreç izleyip izlemediğini veya kapatılmasının daha uzun sürüp sürmediğini belirleyebilirsiniz. Nereden alınır? SAP ECC tablosu: VBRK, alan: NETWR Örnekler 1500.7525000.00500.0012345.67 | |||
| Belge tarihi DocumentDate | Satıcı veya belgeyi oluşturan kişi tarafından sağlanan, asıl belgenin üzerindeki tarih. | ||
| Açıklama Belge Tarihi, asıl belgenin düzenlendiği tarihtir. Faturalama sürecinde genellikle faturanın oluşturulduğu tarihi gösterir ve ödeme vadesinin hesaplanmasında temel alınır. Bu tarih, finansal raporlama ve Satışların Tahsilat Süresi (DSO) gibi temel metriklerin hesaplanması için önemlidir. Müşteri açısından tahsilat döneminin başlangıcını gösterir. Belge tarihiyle kayıt tarihi arasındaki farkları incelemek, gelen faturaların işlenmesindeki iç gecikmeleri ortaya çıkarabilir. Neden önemli? Faturanın yaşını ve DSO’yu hesaplamak için temel alınır; finansal analiz ve ödeme koşullarının değerlendirilmesi için önemli bir referans noktasıdır. Nereden alınır? SAP ECC tablosu: VBRK, alan: FKDAT (Faturalama tarihi) Örnekler 2023-04-152023-04-162023-05-20 | |||
| Fatura vade tarihi InvoiceDueDate | Müşterinin ödemeyi yapmasının beklendiği son tarih. | ||
| Açıklama Fatura Vade Tarihi, ödeme koşullarında belirtilen son ödeme tarihidir. Alacak hesaplarını yönetmek ve tahsilat çalışmalarını başlatmak için temel oluşturur. Bu öznitelik, gerçek ödeme tarihiyle karşılaştırılarak zamanında ödeme oranı KPI’ını hesaplamak için kullanılır. Faturaları vade tarihine göre incelemek, nakit akışını tahmin etmeye ve yaklaşan ya da vadesi geçmiş ödemeler için tahsilat çalışmalarına öncelik vermeye yardımcı olur. Genellikle başlangıç tarihi ve ödeme koşullarından hesaplanır. Neden önemli? Zamanında ödeme performansını ölçmek için referans noktasıdır; alacak hesaplarının yönetimi ve nakit akışı tahmini için gereklidir. Nereden alınır? Başlangıç tarihine (BSEG-ZFBDT) ve ödeme koşullarına (BSEG-ZTERM) göre hesaplanır. Her zaman doğrudan bir alanda saklanmaz. Örnekler 2023-05-152023-05-302023-06-20 | |||
| İşlem kodu TransactionCode | Bir etkinliği gerçekleştirmek için kullanılan SAP işlem kodu. | ||
| Açıklama İşlem kodu veya T-Code, SAP’te belirli bir işlevi ya da programı tanımlayan benzersiz koddur. Örneğin “VF01”, faturalama belgesi oluşturmak için kullanılır. Her olayın T-Code bilgisini kaydetmek, sürecin sistemde nasıl yürütüldüğünü teknik düzeyde görmenizi sağlar. Bu bilgi, temel neden analizinde büyük fayda sağlar. Örneğin, hatalar sık görülüyorsa analistler standart dışı bir işlem kodunun kullanılıp kullanılmadığını kontrol edebilir. Ayrıca etkinlik adını belirlemeye ve süreçte hangi sistem işlevlerinin kullanıldığını anlamaya yardımcı olur. Neden önemli? Bir etkinliğin nasıl gerçekleştirildiği hakkında teknik bağlam sunar; süreç sapmalarının temel nedenlerini incelemenizi ve standart dışı kullanıcı işlemlerini belirlemenizi sağlar. Nereden alınır? SAP ECC tablosu: CDHDR, alan: TCODE Örnekler VF01VF02FB01F-28 | |||
| Kapatma tarihi ClearingDate | Ödemenin alındığı ve faturanın alacak hesaplarından kapatıldığı tarih. | ||
| Açıklama Kapatma Tarihi, fatura gibi açık bir kalemin finansal sistemde ödendi veya “kapatıldı” olarak işaretlendiği tarihtir. Bu tarih, nakdin tahsil edilip mutabık hâle getirildiği zamanı gösterir. Siparişten Tahsilata sürecindeki en önemli tarihlerden biridir. Satışların Tahsilat Süresini (DSO) ve fatura ile tahsilat arasındaki toplam çevrim süresini hesaplamak için bitiş noktası olarak kullanılır. Kapatma tarihini incelemek, tahsilat sürecinin etkinliğini ölçmeye yardımcı olur. Neden önemli? Fatura yaşam döngüsünün son adımını gösterir; DSO ve toplam çevrim süresi hesaplamalarında bitiş tarihi olarak kullanılır ve tahsilat verimliliğini yansıtır. Nereden alınır? SAP ECC tablosu: BSAD, alan: AUGDT Örnekler 2023-05-142023-06-012023-06-25 | |||
| Kayıt tarihi PostingDate | Belgenin finansal muhasebe defterlerine kaydedildiği tarih. | ||
| Açıklama Kayıt Tarihi, işlemin büyük deftere hangi mali dönemde kaydedileceğini belirler. Muhasebe ve finansal raporlama açısından önemli bir tarihtir. Belgenin oluşturulmasıyla kaydedilmesi arasındaki gecikmeler, faturalama belgelerinin kurum içinde işlenmesindeki verimsizliklere işaret edebilir. Process Mining analizinde kayıt tarihi, fatura yaşam döngüsündeki önemli bir kilometre taşını gösterir. Faturanın oluşturulmasıyla kaydedilmesi arasındaki süre, faturalama ekibinin verimliliğini ölçen temel performans göstergelerinden biri olabilir. Neden önemli? Finansal süreçte önemli bir kilometre taşını gösterir ve muhasebe açısından gereklidir. Faturanın oluşturulmasıyla kaydedilmesi arasındaki süre, iç işleme verimliliğinin temel ölçütlerinden biridir. Nereden alınır? SAP ECC tablosu: BKPF, alan: BUDAT Örnekler 2023-04-152023-04-172023-05-21 | |||
| Kaynak sistem SourceSystem | Verinin hangi kaynak sistemden çıkarıldığını belirtir. | ||
| Açıklama Bu öznitelik, verinin geldiği kayıt sistemini belirtir. Birden fazla ERP örneğinin veya entegre sistemin bulunduğu kurumsal ortamlarda, farklı kaynaklardan gelen verileri ayırt etmeye yardımcı olur. Process Mining için veri doğrulamada ve farklı sistemler ya da kuruluş birimleri arasındaki süreçleri karşılaştıran analizlerde önemlidir. Veri setini etiketlemek amacıyla genellikle veri çıkarma sırasında sabit bir değer olarak eklenir. Neden önemli? Verinin kaynağı hakkında bağlam sağlar. Birden fazla sistemin bulunduğu ortamlarda veri bütünlüğünü korumak ve sisteme özel analizler yapmak için önemlidir. Nereden alınır? Genellikle veri çıkarma, dönüştürme ve yükleme (ETL) işlemi sırasında eklenen sabit bir değerdir ve belirli SAP ECC örneğini (ör. “ECC_PROD_NA”) tanımlar. Örnekler SAP_ECC_PRODECC_EU_100SAP_US_FIN | |||
| Ödeme koşulları PaymentTerms | Ödeme takvimi dâhil, satıcının satışı hangi koşullarda tamamlayacağını belirleyen şartlar. | ||
| Açıklama Ödeme Koşulları, “30 gün net” veya “60 gün net” gibi ödemenin ne zaman yapılacağını belirleyen kurallardır. Müşteriyle üzerinde anlaşmaya varılan bu koşullar, nakit akışını doğrudan etkiler. Süreci ödeme koşullarına göre incelemek, belirli koşulların daha uzun ödeme süreleriyle veya daha yüksek gecikme oranlarıyla ilişkili olup olmadığını ortaya çıkarabilir. Bu bulgular, işletmenin müşterilerle daha uygun koşullar üzerinde anlaşmasına veya finansal planlamasını düzenlemesine yardımcı olabilir. Ödeme koşulları, fatura vade tarihinin hesaplanmasında da kullanılır. Neden önemli? Üzerinde anlaşılan koşullara göre müşteri ödeme davranışlarını ve nakit akışına etkisini analiz etmenizi sağlar; ticari anlaşmaları iyileştirmek için bilgi sunar. Nereden alınır? SAP ECC tablosu: VBRK, alan: ZTERM Örnekler Z030Z060Z001 | |||
| Otomatik mi IsAutomated | Bir etkinliğin sistem kullanıcısı tarafından veya otomasyon yoluyla gerçekleştirilip gerçekleştirilmediğini gösteren işaret. | ||
| Açıklama Bu hesaplanan öznitelik, manuel ve otomatik etkinlikleri ayırt eden bir doğru/yanlış işaretidir. Genellikle Kullanıcı Adı özniteliği “BATCHUSER” veya “SAPSYSTEM” gibi bilinen sistem ya da toplu işlem kullanıcı kimlikleriyle karşılaştırılarak belirlenir. Bu işaret, faturalama sürecindeki otomasyon düzeyini ölçmek için gereklidir. Verimliliği artırmak ve maliyetleri düşürmek isteyen birçok kuruluş için bu önemli bir hedeftir. Otomatik Faturalama Oranı KPI’ı doğrudan bu öznitelikten hesaplanır ve otomasyon çalışmalarındaki ilerlemenin izlenmesine yardımcı olur. Neden önemli? Otomatik faturalama oranının hesaplanmasını doğrudan destekler; süreç verimliliğini ölçmeye ve otomasyon projelerinin etkisini izlemeye yardımcı olur. Nereden alınır? Kullanıcı Adı özniteliğinden türetilir. Mantık şu şekilde olabilir: IF UserName IN ('BATCH', 'SYSTEM', 'RFCUSER') THEN true ELSE false. Örnekler truefalse | |||
| Para birimi Currency | Faturada belirtilen tutarların para birimi kodu. | ||
| Açıklama Bu öznitelik, işlemin USD, EUR veya JPY gibi para birimini belirtir. Toplam Fatura Tutarı gibi tüm parasal değerleri doğru yorumlamak için gerekli bağlamı sağlar. Çok uluslu bir kuruluşun verilerini analiz ederken finansal tutarları doğru yorumlamak ve dönüştürmek için para birimi alanı gereklidir. Tutarlı raporlama yapılmasını sağlar ve doğru para birimi dönüşümü olmadan tutarların bir araya getirilmesini önler; aksi durumda finansal analiz hatalı sonuçlar verebilir. Neden önemli? Tüm parasal değerler için gerekli bağlamı sağlar ve özellikle birden fazla para biriminin kullanıldığı ortamlarda finansal analizin doğruluğunu destekler. Nereden alınır? SAP ECC tablosu: VBRK, alan: WAERK Örnekler USDEURGBPJPY | |||
| Satış belgesi numarası SalesDocumentNumber | Faturaya yol açan asıl satış siparişinin tanımlayıcısı. | ||
| Açıklama Bu öznitelik, faturayı işlemi başlatan satış siparişine doğrudan bağlar. Bu izlenebilirlik, uçtan uca Siparişten Tahsilata analizinin tamamlanması için önemlidir. Faturalama sürecini önceki satış siparişi süreciyle ilişkilendiren kuruluşlar, müşteri siparişinden tahsilata kadar geçen toplam çevrim süresini analiz edebilir. Faturalamadaki gecikmelerin satış, sipariş karşılama veya doğrudan faturalama bölümündeki sorunlardan kaynaklanıp kaynaklanmadığını belirlemeye yardımcı olarak sürecin bütününü görmenizi sağlar. Neden önemli? Faturalama sürecini satış siparişine bağlayarak uçtan uca Siparişten Tahsilata analizi yapmanızı ve bölümler arası gecikmeleri belirlemenizi sağlar. Nereden alınır? SAP ECC tablosu: VBRP, alan: VGBEL Örnekler 100000451000004610000047 | |||
| Satış organizasyonu SalesOrganization | Ürün veya hizmet satışından sorumlu organizasyon birimi. | ||
| Açıklama Satış Organizasyonu, SAP’te mal ve hizmetlerin dağıtımından ve satış koşullarının belirlenmesinden sorumlu organizasyon birimidir. Satış ve dağıtım faaliyetlerinin yapılandırılmasında önemli bir alandır. Process Mining analizinde bu öznitelik, faturalama sürecini satış yapısı açısından incelemenizi sağlar. Farklı satış organizasyonlarının performansını karşılaştırarak hangi bölgelerin veya iş kollarının faturalama süreçlerinde daha verimli olduğunu belirleyebilir ve iyi uygulamaların standartlaştırılmasına yönelik çalışmaları destekleyebilirsiniz. Neden önemli? Farklı satış birimlerinin veya bölgelerin performansını karşılaştırmanızı sağlar; iyi uygulamaları ve iyileştirme alanlarını belirlemeye yardımcı olur. Nereden alınır? SAP ECC tablosu: VBRK, alan: VKORG Örnekler 1000NA01EU01AP01 | |||
| Son veri güncellemesi LastDataUpdate | Kaynak sistemden yapılan en son veri yenileme veya çıkarma işleminin zaman damgası. | ||
| Açıklama Bu öznitelik, veri setinin kaynak sistemden en son ne zaman güncellendiğini gösterir. Kullanıcıların görüntüledikleri verinin ne kadar güncel olduğunu anlamalarına yardımcı olarak analiz için önemli bir bağlam sağlar. Dashboardlarda ve raporlarda bu zaman damgası, paydaşlara verinin güncelliği hakkında bilgi verir ve çok yeni işlemlerin ne zaman görünür olacağına ilişkin beklentileri yönetmeye yardımcı olur. Genellikle veri çıkarma işleminin sonunda oluşturulur. Neden önemli? Analize dayalı operasyonel kararların güncel verilerle alınabilmesi için kullanıcılara verinin ne kadar güncel olduğunu bildirir. Nereden alınır? Veri çıkarma, dönüştürme ve yükleme (ETL) işlemi sırasında oluşturulur ve saklanır. Örnekler 2023-10-27T02:00:00Z2023-10-28T02:00:00Z | |||
| Yeniden çalışma mı IsRework | Bir etkinliğin yeniden çalışma veya düzeltme adımı olup olmadığını gösteren işaret. | ||
| Açıklama Bu hesaplanan öznitelik, “Fatura düzeltildi” veya belge ters kayıtları gibi yeniden çalışmayı temsil eden etkinlikleri belirler. Genellikle etkinlik adından ya da faturalama belgesini iptal etmek için kullanılan “VF11” gibi düzeltme ve iptal işlem kodlarından türetilen bir doğru/yanlış işaretidir. Process Mining analizinde bu işaret, faturalama sürecindeki yeniden çalışma miktarını ölçmenizi sağlar. Fatura Düzeltme Oranı gibi KPI’ları doğrudan destekler ve süreç haritasındaki yeniden çalışma döngülerini görünür kılar. Böylece operasyon maliyetlerini artıran ve ödemeleri geciktiren verimsizlikleri ve kalite sorunlarını belirleyebilirsiniz. Neden önemli? Hataları düzeltmek için harcanan çabayı göstererek süreç verimsizliklerini ve kalite sorunlarını ölçmenize yardımcı olur; yeniden çalışma KPI’larını doğrudan destekler. Nereden alınır? Etkinlik Adı veya İşlem Kodundan türetilir. Örneğin: IF ActivityName = 'Invoice Corrected' OR TransactionCode = 'VF11' THEN true ELSE false. Örnekler truefalse | |||
Siparişten Tahsilata faturalama etkinlikleri
| Aktivite | Açıklama | ||
|---|---|---|---|
| Fatura kapatıldı | Başarıyla ödenmiş bir faturanın son durumudur. Açık kalemin karşılık gelen bir ödeme veya alacak dekontuyla kapatıldığını gösterir. Fatura tamamen ödenmiş sayılır. | ||
| Neden önemli? Bir fatura için Siparişten Tahsilata döngüsünün başarıyla tamamlandığını belirtir. Ortalama fatura çevrim süresini ölçmek için kullanılan temel son olaydır. Nereden alınır? BSEG tablosundaki fatura kalemi için kapatma belgesi (AUGBL) ve kapatma tarihi (AUGDT) alanları doldurulduğunda gerçekleşir. Kaydedin Olay, BSEG tablosunda fatura kalemi için kaydedilen kapatma tarihinde (AUGDT) gerçekleşir. Olay türü explicit | |||
| Fatura kaydedildi | Fatura, Alacak Hesapları yardımcı defterine ve büyük deftere resmî olarak kaydedilir. Bu olay faturayı yasal olarak bağlayıcı hâle getirir ve müşterinin borcunu gösterir. | ||
| Neden önemli? Bu önemli aşama, tahsilat süresinin resmen başlamasını sağlar. Faturanın oluşturulmasıyla kaydedilmesi arasındaki süre, nakit akışını etkileyen kurum içi işlem gecikmelerini gösterebilir. Nereden alınır? BKPF tablosunda kaydedilir. Belge numarası (BELNR) için kayıt tarihi (BUDAT) bu olayı belirtir. Beklemeye alınan belgelerde bu tarih, belgenin kesin kayda dönüştürüldüğü tarihtir. Kaydedin Fatura belgesinin BKPF tablosundaki kayıt tarihinden (BUDAT). Olay türü explicit | |||
| Fatura müşteriye gönderildi | Faturanın baskı, e-posta veya EDI gibi tanımlı bir çıktı kanalı üzerinden müşteriye gönderildiğini belirtir. Bu bilgi genellikle çıktı yönetimi sistemi günlüklerinden alınır. | ||
| Neden önemli? Bu olay, müşterinin ödeme süresini başlatan önemli bir aşamadır. Buradaki gecikmeler, ödemenin ne zaman alınabileceğini doğrudan etkiler ve ödeme tahsilatının verimliliğini düşürür. Nereden alınır? Faturaya karşılık gelen çıktı türü için mesaj durumu tablosundaki (NAST) işlem tarihi ve saatinden anlaşılabilir. Kaydedin NAST tablosunda işlem durumu '1' (başarıyla işlendi) olan kayıttan anlaşılır. Olay türü inferred | |||
| Fatura oluşturuldu | Faturalama belgesinin sistemde oluşturulduğunu gösterir. Bu olay, faturalara özgü bir belge türüyle muhasebe belgesi başlık tablosunda (BKPF) yeni bir kayıt oluşturulduğunda yakalanır. | ||
| Neden önemli? Bu olay, tüm fatura düzenleme sürecinin başlangıç noktasıdır. Bu olaydan itibaren geçen süreyi analiz ederek fatura oluşturma çevrim süresini ölçebilir ve Satışların Tahsilat Süresini (DSO) hesaplayabilirsiniz. Nereden alınır? BKPF tablosunda kaydedilir. Belirli bir belge numarası (BELNR) için oluşturulma tarihi (CPUDT) ve saati (CPUTM) bu olayı belirtir. Belge türü (BLART), belgenin fatura olduğunu gösterir. Kaydedin Fatura belgesinin BKPF tablosundaki oluşturulma zaman damgasından (CPUDT). Olay türü explicit | |||
| Müşteri ödemesi alındı | Müşteriden ödeme alınmış ve nakit tahsilatı veya banka yatırması olarak sisteme kaydedilmiştir. Bu işlem, henüz belirli bir faturaya tahsis edilmemiş ayrı bir ödeme belgesi oluşturur. | ||
| Neden önemli? Bu, nakde dönüşüm döngüsündeki önemli bir aşamadır. Faturanın gönderilmesiyle ödemenin alınması arasındaki süre, Satışların Tahsilat Süresinin (DSO) başlıca bileşenlerinden biridir. Nereden alınır? BKPF ve BSEG tablolarında yeni bir belge olarak kaydedilir. Belge türü genellikle müşteri ödemesini belirtir; örneğin 'DZ'. Kayıt tarihi (BUDAT) olayın tarihidir. Kaydedin BKPF tablosundaki müşteri ödeme belgesinin kayıt tarihinden. Olay türü explicit | |||
| Fatura beklemeye alındı | Fatura belgesi, büyük deftere kaydedilmeden geçici durumda kaydedilmiştir. Bu yöntem genellikle bilgiler eksik olduğunda veya kesin kayıt öncesinde inceleme gerektiğinde kullanılır. | ||
| Neden önemli? Kesin kayıt öncesindeki adımları ve olası gecikmeleri izler. Belgenin beklemede uzun süre kalması, veri kalitesi sorunlarına veya ön onay sürecindeki darboğazlara işaret edebilir. Nereden alınır? Beklemeye alınan belgeler VBKPF tablosunda saklanır. Burada oluşturulan ve daha sonra kesin kaydı yapılan belge bu etkinliği belirtir. Kaydedin FV70 gibi bir işlem kullanılarak beklemeye alınan belge kaydedildiğinde günlüğe eklenir. Olay türü explicit | |||
| Fatura düzeltildi | İlk faturanın hatalı bulunup sonradan iptal edildiği bir yeniden çalışma etkinliğini belirtir. İlk faturayla bağlantılı iptal belgeleri belirlenerek kaydedilir. | ||
| Neden önemli? Süreçteki verimsizlikleri ve kalite sorunlarını gösterir. Düzeltmelerin sık yapılması, önceki satış veya faturalama verilerindeki sorunlara işaret eder ve Fatura Yeniden Çalışma ve Hata Oranları Dashboardunu destekler. Nereden alınır? BKPF-STBLG alanı ilk belgeyi gösteren bir iptal belgesi bulunarak belirlenir. Bu iptal belgesinin oluşturulması olay olarak kaydedilir. Kaydedin Bir iptal belgesi oluşturulduğunda günlüğe eklenir (ör. FB08 üzerinden). Olay türü explicit | |||
| Fatura onaylandı | Faturanın kaydedilmesine veya müşteriye gönderilmesine izin veren resmî onayı belirtir. Bu durum, beklemeye alınan bir belgenin kesin kayda dönüştürülmesinden anlaşılabilir. | ||
| Neden önemli? Darboğazların sık görüldüğü kurum içi onay iş akışını izler. Bu etkinliği analiz ederek yavaş onay veren kişileri belirleyebilir ve Fatura Onay Akışı Analizi Dashboardunu destekleyebilirsiniz. Nereden alınır? Belgenin VBKPF’deki beklemede durumundan BKPF’deki kesin kayıt durumuna geçişinden anlaşılabilir. Alternatif olarak, bir iş akışı sistemi kullanılıyorsa bu olay iş akışı günlüklerinde açıkça yer alabilir. Kaydedin Beklemeye alınan belgenin oluşturulma tarihini (VBKPF), son belgenin kayıt tarihiyle (BKPF) karşılaştırın. Olay türü inferred | |||
| Fatura zarar yazıldı | Faturanın tahsil edilemeyeceğine karar verildiği alternatif bir son durumdur. Ödenmemiş tutar şüpheli alacak hesabına aktarılır. Böylece fatura, müşteri ödemesi alınmadan kapatılır. | ||
| Neden önemli? Olumsuz bir süreç sonucunu ve gelir kaybını gösterir. Bu olayları izlemek, tahsil edilemeyen alacakların nedenlerini analiz etmeye ve kredi yönetimi politikalarını iyileştirmeye yardımcı olur. Nereden alınır? Faturaya ait kapatma işlemi incelenerek belirlenir. Kapatma belgesi belirli bir şüpheli alacak gideri G/L hesabına kaydedilmişse fatura zarar yazılmış kabul edilir. Kaydedin Kapatma işlemi, belirlenmiş bir şüpheli alacak G/L hesabına kayıt içerdiğinde belirlenir. Olay türü inferred | |||
| Faturanın vadesi geldi | Ödeme koşullarına göre fatura ödemesinin vadesinin geldiği günü belirten hesaplanmış bir olaydır. Bir kullanıcı veya sistem tarafından gerçekleştirilen etkinlik değil, belirli bir zaman noktasıdır. | ||
| Neden önemli? Ödeme davranışını ve uyumluluğu analiz etmek için gereklidir. Zamanında ve gecikmiş ödemeleri belirlemenin ve Zamanında Ödeme Oranı temel performans göstergesini (KPI) hesaplamanın temelini oluşturur. Nereden alınır? Geçerli tarih, net vade tarihiyle karşılaştırılarak hesaplanır. Vade tarihi BSEG-ZFBDT alanında bulunur veya başlangıç tarihi ve ödeme koşullarından hesaplanır. Kaydedin Sistem tarihini fatura kalemindeki net vade tarihi alanıyla (BSEG) karşılaştırın. Olay türü calculated | |||
| İtiraz kaydı oluşturuldu | Genellikle müşteri şikâyeti nedeniyle faturaya resmî bir itiraz kaydedilmiştir. Bu kayıt, SAP İtiraz Yönetimi sisteminde tutulur. | ||
| Neden önemli? Ödeme gecikmesi riski taşıyan faturaları belirler ve müşteri memnuniyetsizliğine yol açan sorunları gösterir. Önemli bir istisna yönetimi sürecinin başlangıcını belirtir. Nereden alınır? Faturanın muhasebe belgesiyle bağlantılı itiraz kaydı tablosunda (UDM_CASE) bir kayıt oluşturulduğunda yakalanır. Kaydedin Bir kullanıcı UDM_DISPUTE işlemi üzerinden itiraz kaydı oluşturduğunda günlüğe eklenir. Olay türü explicit | |||
| Ödeme faturaya tahsis edildi | Alınan müşteri ödemesi, belirli bir açık faturayla eşleştirilip faturaya tahsis edilmiştir; böylece kalem kapatılmak üzere işaretlenir. Bu mutabakat adımı, ödemeyi borçla ilişkilendirir. | ||
| Neden önemli? Bu etkinlik, nakit tahsis çevrim süresini ölçmek için önemlidir. Nakit tahsisindeki gecikmeler, alacak hesaplarının gerçek durumunu yanlış gösterebilir ve kullanılabilir nakdi görünmez kılabilir. Nereden alınır? F-32 gibi bir kapatma işleminden anlaşılır. Bu işlem, fatura kalemindeki kapatma alanlarını doldurur. Olayın zaman damgası kapatma tarihidir. Kaydedin Fatura kalemi tablosundaki (BSEG) kapatma tarihi (AUGDT) alanının doldurulmasından anlaşılır. Olay türü inferred | |||
| Ödeme hatırlatması gönderildi | Sistem, vadesi geçmiş bir fatura için müşteriye ihtar veya ödeme hatırlatması oluşturup göndermiştir. Bu bilgi, ihtar geçmişi günlüklerinden alınır. | ||
| Neden önemli? Tahsilat stratejisinin ne kadar etkili olduğunu değerlendirmeye yardımcı olur. Hatırlatmadan ödemenin alınmasına kadar geçen süreyi analiz etmek, Ödeme Hatırlatması Etkinliği temel performans göstergesi (KPI) için önemlidir. Nereden alınır? İhtar çalıştırıldığında oluşturulan ihtar verisi tablolarında, özellikle MHNK (ihtar verisi başlığı) ve MHND (ihtar verisi kalemleri) tablolarında kaydedilir (İşlem F150). Kaydedin Vadesi geçmiş kalem için ihtar çalıştırıldığında (F150) günlüğe eklenir. Olay türü explicit | |||
Veri çıkarma rehberleri
Adımlar
- ABAP düzenleyicisine erişin: SAP ECC sisteminize giriş yapın.
SE38işlem kodunu kullanarak ABAP düzenleyicisini açın. - Program oluşturun: Program alanına yeni programınız için bir ad girin, örneğin
Z_PM_O2C_INVOICE_EXTRACT, ardından Oluştur düğmesine tıklayın. Açıklayıcı bir başlık girin ve program türünü 'Yürütülebilir Program' olarak ayarlayın. - Seçim ekranını tanımlayın: Program kaynak kodunda seçim ekranı parametrelerini tanımlayın. Bu parametreler, kullanıcıların çıkarılacak verileri filtrelemesini sağlar. Temel parametreler arasında belge oluşturma tarihi aralığı (
S_ERDAT), şirket kodu (S_BUKRS) ve faturalama belge türü (S_VBTYP) bulunur. - Veri yapılarını tanımlayın: Son Event Log verilerini tutacak bir dahili tablo yapısı tanımlayın. Bu yapıda
InvoiceNumber,ActivityName,EventTimealanları ileUserName,BillingDocumentType,CustomerNumber,CompanyCodeveTotalInvoiceAmountgibi önerilen öznitelikler bulunmalıdır. - Veri seçme mantığını uygulayın: Verileri seçmek için temel ABAP mantığını yazın. Önce, kullanıcının seçim ekranında girdiği değerlere göre
VBRKveBKPFtablolarından ana faturalama belgelerini seçin. Bunları geçici bir dahili tabloda saklayın. - Etkinlikleri çıkarın: İlk faturalama belgesi listesini döngüyle işleyin. Her belge için gerekli 13 etkinliği belirlemek üzere ilgili tablolardan ek seçimler yapın. Örneğin, 'Müşteriye fatura gönderildi' etkinlikleri için
NAST, mahsup bilgileri ('Fatura mahsup edildi', 'Ödeme uygulandı') içinBSEG, ödeme hatırlatma verileri ('Ödeme hatırlatması gönderildi') içinMHNKtablosunu sorgulayın. - Event Log tablosunu oluşturun: Önceki adımda bulunan her etkinlik için son Event Log dahili tablonuza yeni bir kayıt ekleyin.
InvoiceNumber,ActivityName,EventTimeve diğer özniteliklerin kaynak tablolardan doğru şekilde eşlendiğinden emin olun. - Uygulama sunucusuna yazın: Döngü tamamlanıp son Event Log tablosu doldurulduğunda, dahili tablonun içeriğini SAP uygulama sunucusundaki düz bir dosyaya yazmak için
OPEN DATASET,LOOP AT... TRANSFERveCLOSE DATASETifadelerini kullanın. Erişilebilir bir mantıksal dosya yolu belirtin. - Dosyayı alın: Uygulama sunucusu dizinlerine gidip oluşturulan dosyayı bulmak için
AL11işlem kodunu kullanın. Dosyayı sunucudan yerel bilgisayarınıza veya paylaşılan bir ağ konumuna indirmek için SAP Basis ekibinizle koordinasyon sağlayın. - Son biçimlendirmeyi yapın: İndirdiğiniz dosyayı açıp başlık satırı bulunan, virgülle ayrılmış bir değerler (CSV) dosyası olduğunu doğrulayın. ProcessMind’e yüklenebilmesi için dosyanın UTF-8 kodlamasıyla kaydedildiğinden emin olun.
Yapılandırma
- Ön koşullar: ABAP programları oluşturma ve çalıştırma erişimi (
SE38işlem kodu).VBRK,VBRP,BKPF,BSEG,NAST,MHNKve Uyuşmazlık Yönetimi içinUDM_CASE_ATTR00dahil FI ve SD tablolarını okuma yetkisi. - Tarih aralığı seçimi: Programda, genellikle belge oluşturma tarihine (
VBRK/BKPFiçindekiERDAT) dayalı zorunlu bir tarih aralığı parametresi bulunmalıdır. İlk veri çıkarma işleminde Veri Seti’nin yönetilebilir boyutta kalması için 3-6 aylık bir aralık önerilir. - Temel filtreler: Veri çıkarma kapsamını sınırlamak için her zaman
CompanyCode(BUKRS) alanına göre filtre uygulayın. Yalnızca ilgili fatura türlerini dahil etmek için faturalama belge türüne (VBRKiçindekiVBTYP) veya muhasebe belge türüne (BKPFiçindekiBLART) göre filtre uygulamanız da önemle önerilir. Örneğin, standart muhasebe faturaları için 'RV' türünü dahil edin, alacak dekontlarını ve diğer belgeleri hariç tutun. - Performansla ilgili noktalar: Birkaç aydan uzun dönemi kapsayan büyük Veri Setleri için oturum zaman aşımını önlemek üzere programı arka plan işi olarak çalıştırın. ABAP mantığını, dizinli tablo okumalarından yararlanacak ve veritabanı seçimlerini iç içe döngülerde çalıştırmayacak şekilde iyileştirin. Önce verileri dahili tablolara seçip ardından işlemek tercih edilen yaklaşımdır.
- Çıktı dosyası yapılandırması: ABAP kodunda uygulama sunucusundaki çıktı dosyasının yolu ve CSV dosyasının ayıracı, genellikle virgül veya noktalı virgül, belirtilmelidir. Yolun genel olarak yapılandırılmış ve erişilebilir bir dizin olduğundan emin olun.
Örnek sorgu abap
REPORT Z_PM_O2C_INVOICE_EXTRACT.
*&---------------------------------------------------------------------*
*& Tables
*&---------------------------------------------------------------------*
TABLES: VBRK, BKPF.
*&---------------------------------------------------------------------*
*& Type Definitions for Event Log Output
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
invoicenumber TYPE vbrk-vbeln,
activityname TYPE string,
eventtime TYPE timestamp,
username TYPE xubname,
billingdocumenttype TYPE vbrk-vbtyp,
customernumber TYPE vbrk-kunnr,
companycode TYPE vbrk-bukrs,
totalinvoiceamount TYPE vbrk-netwr,
END OF ty_event_log.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
DATA: gt_event_log TYPE TABLE OF ty_event_log,
gs_event_log TYPE ty_event_log.
DATA: BEGIN OF gs_invoice,
vbeln TYPE vbrk-vbeln, " SD Doc (Invoice)
awkey TYPE bkpf-awkey, " Accounting Doc Reference Key
bukrs TYPE vbrk-bukrs, " Company Code
kunnr TYPE vbrk-kunnr, " Customer
vbtyp TYPE vbrk-vbtyp, " SD Doc Type
netwr TYPE vbrk-netwr, " Net Value
waerk TYPE vbrk-waerk, " Currency
fkdat TYPE vbrk-fkdat, " Billing Date
erdat TYPE vbrk-erdat, " Creation Date
erzet TYPE vbrk-erzet, " Creation Time
ernam TYPE vbrk-ernam, " Creator
belnr TYPE bkpf-belnr, " Acct Doc
gjahr TYPE bkpf-gjahr, " Fiscal Year
cpudt TYPE bkpf-cpudt, " Acct Doc Entry Date
cputm TYPE bkpf-cputm, " Acct Doc Entry Time
usnam TYPE bkpf-usnam, " Acct Doc User
stblg TYPE bkpf-stblg, " Reversal Doc
END OF gs_invoice.
DATA: gt_invoices LIKE TABLE OF gs_invoice.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_erdat FOR vbrk-erdat OBLIGATORY,
s_bukrs FOR vbrk-bukrs OBLIGATORY,
s_vbtyp FOR vbrk-vbtyp.
PARAMETERS: p_path TYPE string DEFAULT '/usr/sap/trans/tmp/invoice_extract.csv' OBLIGATORY.
*&---------------------------------------------------------------------*
*& Main Processing Block
*&---------------------------------------------------------------------*
START-OF-SELECTION.
" 1. Select base set of invoices
SELECT vbrk~vbeln, vbrk~bukrs, vbrk~kunnr, vbrk~vbtyp, vbrk~netwr, vbrk~waerk,
vbrk~fkdat, vbrk~erdat, vbrk~erzet, vbrk~ernam,
bkpf~belnr, bkpf~gjahr, bkpf~cpudt, bkpf~cputm, bkpf~usnam, bkpf~stblg, bkpf~awkey
INTO CORRESPONDING FIELDS OF TABLE gt_invoices
FROM vbrk
INNER JOIN bkpf ON bkpf~awkey = vbrk~vbeln AND bkpf~awtyp = 'VBRK'
WHERE vbrk~erdat IN s_erdat
AND vbrk~bukrs IN s_bukrs
AND vbrk~vbtyp IN s_vbtyp.
IF gt_invoices IS INITIAL.
MESSAGE 'No invoices found for the selected criteria.' TYPE 'I'.
RETURN.
ENDIF.
LOOP AT gt_invoices INTO gs_invoice.
CLEAR gs_event_log.
gs_event_log-invoicenumber = gs_invoice-vbeln.
gs_event_log-billingdocumenttype = gs_invoice-vbtyp.
gs_event_log-customernumber = gs_invoice-kunnr.
gs_event_log-companycode = gs_invoice-bukrs.
gs_event_log-totalinvoiceamount = gs_invoice-netwr.
" Activity: Invoice Generated (using accounting doc creation)
gs_event_log-activityname = 'Invoice Generated'.
gs_event_log-username = gs_invoice-usnam.
CONCATENATE gs_invoice-cpudt gs_invoice-cputm INTO DATA(lv_ts_gen).
CONVERT DATE gs_invoice-cpudt TIME gs_invoice-cputm INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Posted (same as generated for non-parked docs)
gs_event_log-activityname = 'Invoice Posted'.
gs_event_log-username = gs_invoice-usnam.
CONVERT DATE gs_invoice-cpudt TIME gs_invoice-cputm INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Approved (inferred by posting)
gs_event_log-activityname = 'Invoice Approved'.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Sent To Customer
SELECT SINGLE addat, aduhr FROM nast
INTO (DATA(lv_nast_date), DATA(lv_nast_time))
WHERE kappl = 'V3' AND objky = gs_invoice-vbeln AND vszst > '0'.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Sent To Customer'.
gs_event_log-username = sy-uname.
CONVERT DATE lv_nast_date TIME lv_nast_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Corrected / Reversed
IF gs_invoice-stblg IS NOT INITIAL.
SELECT SINGLE cpudt, cputm, usnam FROM bkpf
INTO (DATA(lv_rev_date), DATA(lv_rev_time), DATA(lv_rev_user))
WHERE belnr = gs_invoice-stblg AND gjahr = gs_invoice-gjahr.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Corrected'.
gs_event_log-username = lv_rev_user.
CONVERT DATE lv_rev_date TIME lv_rev_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
" Activity: Payment Applied, Cleared, Due Date, Written Off (from BSEG)
SELECT SINGLE augdt, augbl, zfBDT, hkont FROM bseg
INTO (DATA(lv_augdt), DATA(lv_augbl), DATA(lv_zfbdt), DATA(lv_hkont))
WHERE bukrs = gs_invoice-bukrs
AND belnr = gs_invoice-belnr
AND gjahr = gs_invoice-gjahr
AND koart = 'D'. " Customer line
IF sy-subrc = 0.
" Due Date Reached (Calculated event)
IF lv_zfbdt IS NOT INITIAL.
gs_event_log-activityname = 'Invoice Due Date Reached'.
gs_event_log-username = 'System'.
CONVERT DATE lv_zfbdt INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Cleared, Applied, Write-Off
IF lv_augdt IS NOT INITIAL.
SELECT SINGLE usnam, cpudt, cputm, blart FROM bkpf
INTO (DATA(lv_clear_user), DATA(lv_clear_date), DATA(lv_clear_time), DATA(lv_clear_type))
WHERE belnr = lv_augbl AND bukrs = gs_invoice-bukrs.
IF sy-subrc = 0.
gs_event_log-username = lv_clear_user.
CONVERT DATE lv_clear_date TIME lv_clear_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
IF lv_clear_type = 'DZ'. " Standard Customer Payment
gs_event_log-activityname = 'Customer Payment Received'. APPEND gs_event_log TO gt_event_log.
gs_event_log-activityname = 'Payment Applied To Invoice'. APPEND gs_event_log TO gt_event_log.
gs_event_log-activityname = 'Invoice Cleared'. APPEND gs_event_log TO gt_event_log.
ELSE. " Assuming other clearing doc types could be write-offs
gs_event_log-activityname = 'Invoice Written Off'.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
" Activity: Payment Reminder Issued (Dunning)
SELECT COUNT(*) FROM mhnk WHERE kunnr = gs_invoice-kunnr AND bukrs = gs_invoice-bukrs AND lafdn > gs_invoice-cpudt.
IF sy-subrc = 0 AND sy-dbcnt > 0.
SELECT SINGLE lafdn FROM mhnk
INTO DATA(lv_dunning_date)
WHERE kunnr = gs_invoice-kunnr AND bukrs = gs_invoice-bukrs AND lafdn > gs_invoice-cpudt.
gs_event_log-activityname = 'Payment Reminder Issued'.
gs_event_log-username = 'System'.
CONVERT DATE lv_dunning_date INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Parked (Example from VBKPF, may require system specific logic)
SELECT SINGLE cpudt, cputm, usnam FROM vbkpf
INTO (DATA(lv_park_date), DATA(lv_park_time), DATA(lv_park_user))
WHERE awkey = gs_invoice-vbeln AND awsys = 'LOG' AND bstat = 'V'.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Parked'.
gs_event_log-username = lv_park_user.
CONVERT DATE lv_park_date TIME lv_park_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Dispute Case Created (Requires Dispute Management module)
SELECT SINGLE create_date, create_time, create_user FROM udm_case_attr00
INTO (DATA(lv_disp_date), DATA(lv_disp_time), DATA(lv_disp_user))
WHERE [Your logic to link invoice to dispute case, e.g., via a custom field or object link].
IF sy-subrc = 0.
gs_event_log-activityname = 'Dispute Case Created'.
gs_event_log-username = lv_disp_user.
CONVERT DATE lv_disp_date TIME lv_disp_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Write data to file
*&---------------------------------------------------------------------*
OPEN DATASET p_path FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'Error opening file.' TYPE 'E'.
ENDIF.
" Header
DATA(lv_header) = 'InvoiceNumber,ActivityName,EventTime,UserName,BillingDocumentType,CustomerNumber,CompanyCode,TotalInvoiceAmount'.
TRANSFER lv_header TO p_path.
LOOP AT gt_event_log INTO gs_event_log.
DATA(lv_line) = |
{ gs_event_log-invoicenumber }|
,{ gs_event_log-activityname }|
,{ gs_event_log-eventtime }|
,{ gs_event_log-username }|
,{ gs_event_log-billingdocumenttype }|
,{ gs_event_log-customernumber }|
,{ gs_event_log-companycode }|
,{ gs_event_log-totalinvoiceamount }|.
TRANSFER lv_line TO p_path.
ENDLOOP.
CLOSE DATASET p_path.
WRITE: 'Extraction complete. File created at:', p_path. Adımlar
- Ön koşullar ve erişim: Sorguda belirtilen
VBRK,BKPF,BSAD,NAST,CDHDR,CDPOS,SCASEve diğer gerekli SAP ECC tablolarına salt okunur erişimi olan bir veritabanı kullanıcınız olduğundan emin olun. Bu erişim genellikle yalnızca sistem yöneticilerine veya belirli veri analitiği ekiplerine verilir. - Veritabanına bağlanın: SAP ECC veritabanına bağlanmak için DBeaver, Oracle SQL Developer veya Microsoft SQL Server Management Studio gibi standart bir SQL istemcisi kullanın.
- SQL sorgusunu hazırlayın: 'query' bölümünde verilen SQL sorgusunun tamamını kopyalayıp SQL istemcinizin düzenleyicisine yapıştırın.
- Yer tutucuları özelleştirin: Sorguda, ortamınıza uygun değerlerle değiştirmeniz gereken birkaç yer tutucu bulunur. Bunlar:
'YYYYMMDD': İstenen analiz döneminin başlangıç ve bitiş tarihleriyle tüm örnekleri değiştirin. Verileri yönetilebilir bir zaman aralığıyla sınırlamanız önemlidir.'XXXX': Analiz etmek istediğiniz şirket kodlarını girin.[Your Invoice Output Type]: Müşterilere fatura göndermek için kullanılan çıktı türü kodunu belirtin, örneğin 'RD00'.[Your Bad Debt G/L Account]: Tahsil edilemeyen faturaları silmek için kullanılan büyük defter hesap numarasını girin.[Your Dispute Case Invoice Attribute]: Uyuşmazlık Yönetimi yapılandırmanızda fatura numarasını saklayan öznitelik adını belirtin, örneğin 'INVOICE_ID'.
- Zaman damgası işlevlerini gözden geçirin: Sorguda genel
CAST(CONCAT(date_field, time_field) AS TIMESTAMP)sözdizimi kullanılır. Bunu veritabanı sisteminize uyarlamanız gerekebilir. Örneğin, Oracle içinTO_TIMESTAMP, SQL Server içinDATETIMEFROMPARTSkullanabilirsiniz. - Sorguyu çalıştırın: Düzenlediğiniz sorguyu çalıştırın. SAP tablolarınızın boyutuna ve seçilen tarih aralığına bağlı olarak sorgunun tamamlanması uzun sürebilir.
- Sonuçları inceleyin: Sorgu tamamlandığında, çıktıda beklenen sütunların bulunduğunu doğrulayın:
InvoiceNumber,ActivityName,EventTimeve önerilen öznitelikler. Hata veya boş sonuç olup olmadığını kontrol edin. - CSV’ye aktarın: Sonuç kümesinin tamamını SQL istemcinizden bir CSV dosyasına aktarın. Özel karakterlerle ilgili sorunları önlemek için dosyanın UTF-8 kodlaması kullandığından emin olun.
- Yüklemeye hazırlanın: Bir Process Mining aracına yüklemeden önce CSV sütun başlıklarının gerekli öznitelik adlarıyla tam olarak eşleştiğini doğrulayın. Örneğin,
InvoiceNumber,ActivityName,EventTime,UserName.
Yapılandırma
- Veritabanı bağlantısı: Temel SAP ECC veritabanına doğrudan, salt okunur SQL bağlantısı gerekir. Bu yöntem SAP uygulama katmanını tamamen devre dışı bırakır.
- Yetkilendirme: Veritabanı kullanıcısının, FI, SD ve muhtemelen FSCM modüllerindeki sorguda kullanılan tüm tablolarda
SELECTizni olmalıdır. - Tarih aralığı: Performansın ve veri hacminin makul düzeyde kalması için sorguyu belirli bir tarih aralığıyla sınırlamak önemlidir. Başlangıç için 3-6 aylık bir dönem önerilir.
'YYYYMMDD'tarih filtreleri sorgunun birden fazla bölümünde ayarlanmalıdır. - Şirket kodu filtresi: Sorgu, şirket koduna (
BUKRS) göre filtrelenecek şekilde tasarlanmıştır. Her seferinde bir veya birkaç şirket kodunu analiz etmek standart uygulamadır. - Belge türü yapılandırması: Fatura düzeltmeleri, silme kayıtları veya gönderilen belgeler gibi etkinlikleri belirleme mantığı standart SAP yapılandırmalarına bağlıdır. Kuruluşunuz bu süreçlerde özel belge türleri (
BLART), çıktı türleri (KSCHL) veya büyük defter hesapları kullanıyorsa sorguyu uyarlamanız gerekebilir. - Performansla ilgili noktalar: Bu sorguyu canlı bir SAP üretim sisteminde çalıştırmak önemli miktarda kaynak tüketebilir ve operasyonel performansı etkileyebilir. Büyük veri çıkarma işlemlerini yoğun olmayan saatlerde veya veritabanının özel bir raporlama kopyasında çalıştırmanız önemle önerilir.
Örnek sorgu sql
WITH InvoiceBase AS (
SELECT
VBRK.VBELN AS InvoiceNumber,
VBRK.FKART AS BillingDocumentType,
VBRK.KUNRG AS CustomerNumber,
VBRK.BUKRS AS CompanyCode,
VBRK.NETWR AS TotalInvoiceAmount,
VBRK.ERNAM AS CreatorName,
VBRK.ERDAT AS CreationDate,
VBRK.ERZET AS CreationTime
FROM VBRK
WHERE VBRK.ERDAT BETWEEN '20230101' AND '20231231' -- Filter by Invoice Creation Date
AND VBRK.BUKRS IN ('1000') -- Filter by Company Code
AND VBRK.FKART NOT IN ('S1', 'S2') -- Exclude cancelled invoices
)
-- 1. Invoice Generated
SELECT
ib.InvoiceNumber,
'Invoice Generated' AS ActivityName,
CAST(CONCAT(ib.CreationDate, ib.CreationTime) AS TIMESTAMP) AS EventTime,
ib.CreatorName AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM InvoiceBase ib
UNION ALL
-- 2. Invoice Parked
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Parked' AS ActivityName,
CAST(CONCAT(b.CPUDT, b.CPUTM) AS TIMESTAMP) AS EventTime,
b.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF b
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND b.BSTAT = 'V' AND b.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 3. Invoice Posted
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Posted' AS ActivityName,
CAST(CONCAT(b.CPUDT, b.CPUTM) AS TIMESTAMP) AS EventTime,
b.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF b
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND b.BSTAT = '' AND b.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 4. Invoice Approved (from Parked to Posted)
SELECT
SUBSTRING(h.OBJECTID, 4, 10) AS InvoiceNumber,
'Invoice Approved' as ActivityName,
CAST(CONCAT(h.UDATE, h.UTIME) AS TIMESTAMP) AS EventTime,
h.USERNAME AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM CDHDR h
JOIN CDPOS p ON h.MANDANT = p.MANDANT AND h.OBJECTCLAS = p.OBJECTCLAS AND h.OBJECTID = p.OBJECTID AND h.CHANGENR = p.CHANGENR
JOIN InvoiceBase ib ON SUBSTRING(h.OBJECTID, 4, 10) = ib.InvoiceNumber
WHERE h.OBJECTCLAS = 'BELEGV'
AND p.TABNAME = 'BKPF'
AND p.FNAME = 'BSTAT'
AND p.VALUE_OLD = 'V'
AND p.VALUE_NEW = ' '
AND h.UDATE BETWEEN '20230101' AND '20231231'
UNION ALL
-- 5. Invoice Sent To Customer
SELECT
n.OBJKY AS InvoiceNumber,
'Invoice Sent To Customer' AS ActivityName,
CAST(CONCAT(n.DATVR, n.UHRVR) AS TIMESTAMP) AS EventTime,
n.VSTAT AS UserName, -- User who processed is not directly available, using processing status as a proxy
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM NAST n
JOIN InvoiceBase ib ON n.OBJKY = ib.InvoiceNumber
WHERE n.KSCHL = '[Your Invoice Output Type]' -- E.g., 'RD00'
AND n.VSTAT = '1' -- Processed successfully
AND n.DATVR BETWEEN '20230101' AND '20231231'
UNION ALL
-- 6. Invoice Corrected (Reversed)
SELECT
SUBSTRING(orig_doc.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Corrected' AS ActivityName,
CAST(CONCAT(rev_doc.CPUDT, rev_doc.CPUTM) AS TIMESTAMP) AS EventTime,
rev_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
rev_doc.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF orig_doc
JOIN BKPF rev_doc ON orig_doc.STBLG = rev_doc.BELNR AND orig_doc.BUKRS = rev_doc.BUKRS AND orig_doc.GJAHR = rev_doc.STJAH
JOIN InvoiceBase ib ON SUBSTRING(orig_doc.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE orig_doc.AWTYP = 'VBRK' AND orig_doc.STBLG IS NOT NULL AND rev_doc.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 7. Invoice Due Date Reached
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Due Date Reached' AS ActivityName,
CAST(CONCAT(bs.ZFBDT, '000000') AS TIMESTAMP) AS EventTime,
'System' AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSEG bs
JOIN BKPF b ON bs.MANDT = b.MANDT AND bs.BUKRS = b.BUKRS AND bs.BELNR = b.BELNR AND bs.GJAHR = b.GJAHR
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND bs.KOART = 'D' AND bs.ZFBDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 8. Payment Reminder Issued
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Payment Reminder Issued' AS ActivityName,
CAST(CONCAT(h.LAUFD, '000000') AS TIMESTAMP) AS EventTime,
h.LAUFI AS UserName, -- Dunning Run ID
ib.BillingDocumentType,
ib.CustomerNumber,
d.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM MHND d
JOIN MHNK h ON d.MANDT = h.MANDT AND d.LAUFD = h.LAUFD AND d.LAUFI = h.LAUFI
JOIN BKPF b ON d.MANDT = b.MANDT AND d.BUKRS = b.BUKRS AND d.BELNR = b.BELNR AND d.GJAHR = b.GJAHR
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE h.LAUFD BETWEEN '20230101' AND '20231231'
UNION ALL
-- 9. Dispute Case Created
SELECT
attr.ATTR_VALUE AS InvoiceNumber,
'Dispute Case Created' AS ActivityName,
sc.CREATE_TIME AS EventTime,
sc.CREATED_BY AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM SCMG_T_CASE_ATTR attr
JOIN SCASE sc ON attr.CASE_GUID = sc.CASE_GUID
JOIN InvoiceBase ib ON attr.ATTR_VALUE = ib.InvoiceNumber
WHERE attr.ATTR_NAME = '[Your Dispute Case Invoice Attribute]' -- e.g., 'INVOICE_ID'
AND CAST(sc.CREATE_TIME AS DATE) BETWEEN '20230101' AND '20231231'
UNION ALL
-- 10, 11, 12. Clearing Events (Payment, Clearing, Write-Off)
SELECT
InvoiceNumber,
ActivityName,
EventTime,
UserName,
BillingDocumentType,
CustomerNumber,
CompanyCode,
TotalInvoiceAmount
FROM (
SELECT
bsad.XBLNR AS InvoiceNumber,
CASE
WHEN clearing_item.HKONT = '[Your Bad Debt G/L Account]' THEN 'Invoice Written Off'
ELSE 'Customer Payment Received'
END AS ActivityName,
CAST(CONCAT(clearing_doc.CPUDT, clearing_doc.CPUTM) AS TIMESTAMP) AS EventTime,
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
LEFT JOIN BSEG clearing_item ON clearing_doc.MANDT = clearing_item.MANDT AND clearing_doc.BUKRS = clearing_item.BUKRS AND clearing_doc.BELNR = clearing_item.BELNR AND clearing_doc.GJAHR = clearing_item.GJAHR AND clearing_item.HKONT = '[Your Bad Debt G/L Account]' -- e.g. '148000'
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
UNION ALL
SELECT
bsad.XBLNR AS InvoiceNumber,
'Payment Applied To Invoice' AS ActivityName,
CAST(CONCAT(bsad.AUGDT, '000000') AS TIMESTAMP) AS EventTime,
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
UNION ALL
SELECT
bsad.XBLNR AS InvoiceNumber,
'Invoice Cleared' AS ActivityName,
CAST(CONCAT(bsad.AUGDT, '235959') AS TIMESTAMP) AS EventTime, -- Add time to separate from 'Payment Applied'
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
) AS ClearingEvents Adımlar
- Ön koşullar: SAP Connector sertifikasına sahip lisanslı bir ETL aracı kullandığınızdan emin olun (ör. SAP Connector içeren Informatica PowerCenter veya SAP Connector içeren Talend). Gerekli finans, satış ve sistem tablolarını (BKPF, BSEG, VBRK, NAST, MHNK, UDM_CASE_ATTR00, CDHDR, CDPOS) okuma yetkileri olan SAP kullanıcı bilgilerinizin bulunduğunu doğrulayın.
- SAP bağlantısını kurun: ETL aracınızda SAP ECC sisteminize yeni bir bağlantı oluşturun. Uygulama sunucusu, sistem numarası, istemci, kullanıcı ve parola dahil bağlantı bilgilerini yapılandırın. Bağlantının başarılı olduğunu doğrulamak için test edin.
- Veri kaynaklarını tanımlayın: Çıkarılacak her etkinlik için ilgili SAP tablolarını ETL işinizde veri kaynağı olarak tanımlayın. Örneğin, fatura oluşturma için VBRK, kayıt etkinlikleri için BKPF ve müşteri iletişimi için NAST ekleyin.
- Her etkinlik için veri çıkarma mantığını oluşturun: Gerekli 13 etkinliğin her biri için ayrı bir veri akışı veya dönüşüm oluşturun. Her akışta ilgili kayıtları seçmek için filtreler uygulayın. Örneğin, şirket koduna (BUKRS), belge türüne (BLART) ve belirli bir tarih aralığına (ör. oluşturma tarihi ERDAT) göre filtreleyin.
- Alanları eşleyin ve verileri dönüştürün: Her veri akışında kaynak SAP tablo alanlarını hedef Event Log yapısındaki
InvoiceNumber,ActivityName,EventTime,UserNameve önerilen diğer özniteliklerle eşleyin. Her akış içinActivityNamedeğerini sabit olarak belirlemek ve tarihleri, zaman damgalarını doğru biçimlendirmek üzere dönüşüm mantığı kullanın. - Karmaşık etkinlikleri işleyin: 'Fatura vade tarihine ulaşıldı' gibi hesaplanan etkinliklerde, vade tarihini hesaplamak için temel ödeme tarihini (ZFBDT) ve ödeme koşullarını kullanın veya BSEG tablosundan net vade tarihini (NETDT) alın. 'Fatura onaylandı' gibi değişiklik günlüklerinden elde edilen etkinlikler için belge numarası ve tarihe göre BKPF ile CDHDR/CDPOS gibi tabloları birleştirmeniz gerekebilir.
- Etkinlik verilerini birleştirin: 13 ayrı veri akışının çıktılarını tek bir Veri Setinde birleştirmek için ETL aracınızda 'Union' veya 'Merge' dönüşümünü kullanın. Birleştirmeden önce tüm akışlardaki sütun adlarının ve veri türlerinin tutarlı olduğundan emin olun.
- Hedef konumu yapılandırın: Event Log için son çıktı konumunu tanımlayın. Bu konum düz bir dosya (CSV), veritabanı tablosu veya hazırlama alanına doğrudan bağlantı olabilir.
- Veri çıkarma zamanlamasını ayarlayın: Veri çıkarma için tarih aralığı parametrelerini yapılandırın. İlk yüklemede 6-12 aylık veri çıkarabilirsiniz. Sonraki artımlı yüklemelerde işi, son çalıştırma tarihinden itibaren veri çıkaracak şekilde ayarlayın.
- Çalıştırın ve dışa aktarın: ETL işini çalıştırın. Tamamlandığında, çıktı dosyasının gerekli biçime uygun olduğunu kontrol edin. Sonuç, her satırın benzersiz bir olayı temsil ettiği ve ProcessMind’e yüklenmeye hazır tek bir CSV dosyası olmalıdır.
Yapılandırma
- SAP bağlantısı: Hedef SAP ECC sistemine uygulama sunucusu üzerinden bağlantı gerekir. SAP kullanıcısında RFC erişimi ve VBRK, BKPF, BSEG, NAST gibi sorguda belirtilen tablolara erişim yetkisi bulunmalıdır.
- ETL aracı lisansı: Ticari ETL aracı ve ilgili SAP Connector için geçerli bir lisans zorunludur.
- Tarih aralığı: Sisteme aşırı yük bindirmeden analiz için temsil gücü olan bir örnek elde etmek amacıyla 3-6 aylık veri çıkarılması önerilir. Başlangıç ve bitiş tarihleri için yapılandırılabilir bir parametre kullanın.
- Temel filtreler: Veri çıkarma kapsamını sınırlamak için her zaman şirket koduna (BUKRS) göre filtre uygulayın. Yalnızca standart faturaları dahil edip alacak dekontları veya dahili belgeler gibi diğer belge türlerini hariç tutmak için ilgili faturalama belge türlerine (VBRK-FKART) ve muhasebe belge türlerine (BKPF-BLART) göre filtre uygulamak da önemlidir.
- Performans: BSEG gibi büyük tablolardan veri çıkarmak yavaş olabilir. SAP kaynak sistemindeki performans etkisini en aza indirmek için seçici filtreler kullanın, gereksiz alanları çıkarmayın ve veri çıkarma işlemini yoğun olmayan saatlere planlayın.
Örnek sorgu config
// ETL Data Extraction Logic for SAP Order-to-Cash Invoicing
// This represents the configuration logic within a graphical ETL tool.
// == Global Parameters ==
// $StartDate: '[Start Date]' (e.g., '2023-01-01')
// $EndDate: '[End Date]' (e.g., '2023-06-30')
// $CompanyCodes: '[Company Code(s)]' (e.g., '1000', '2000')
// $BillingDocTypes: '[Billing Document Type(s)]' (e.g., 'F1', 'F2')
// == Source 1: Invoice Generated ==
// Tables: VBRK
DATA_SOURCE generated_invoices FROM VBRK WHERE
ERDAT >= $StartDate AND ERDAT <= $EndDate
AND BUKRS IN ($CompanyCodes)
AND FKART IN ($BillingDocTypes)
MAP {
InvoiceNumber: VBELN,
ActivityName: 'Invoice Generated',
EventTime: ERDAT + ERZET, // Combine date and time
UserName: ERNAM,
BillingDocumentType: FKART,
CustomerNumber: KUNAG,
CompanyCode: BUKRS,
TotalInvoiceAmount: NETWR
}
// == Source 2: Invoice Posted ==
// Tables: BKPF joined with VBRK
DATA_SOURCE posted_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.BUDAT >= $StartDate AND A.BUDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = ' '
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Posted',
EventTime: A.BUDAT + A.CPUTM, // Posting date and entry time
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 3: Invoice Parked ==
// Tables: BKPF joined with VBRK
DATA_SOURCE parked_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.CPUDT >= $StartDate AND A.CPUDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = 'V'
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Parked',
EventTime: A.CPUDT + A.CPUTM,
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 4: Invoice Approved (Transition from Parked to Posted) ==
// Tables: BKPF joined with VBRK
DATA_SOURCE approved_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.BUDAT >= $StartDate AND A.BUDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = ' '
AND EXISTS (SELECT 1 FROM VBELEGV C WHERE C.BELNR = A.BELNR) // Check if it was ever parked
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Approved',
EventTime: A.BUDAT + A.CPUTM, // Use posting date as approval date
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 5: Invoice Sent To Customer ==
// Tables: NAST joined with VBRK
DATA_SOURCE sent_invoices FROM NAST as A
INNER JOIN VBRK as B ON (A.OBJKY = B.VBELN)
WHERE A.ERDAT >= $StartDate AND A.ERDAT <= $EndDate
AND B.BUKRS IN ($CompanyCodes)
AND A.VSTAT = '1' // Successfully processed
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Sent To Customer',
EventTime: A.ERDAT + A.ERUHR,
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: B.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 6: Invoice Corrected (Reversed) ==
// Tables: VBRK (for the reversal document)
DATA_SOURCE corrected_invoices FROM VBRK as A
WHERE A.ERDAT >= $StartDate AND A.ERDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.SFAKN <> '' // SFAKN is the original cancelled invoice
MAP {
InvoiceNumber: A.SFAKN, // Case ID is the original invoice
ActivityName: 'Invoice Corrected',
EventTime: A.ERDAT + A.ERZET,
UserName: A.ERNAM,
BillingDocumentType: A.FKART,
CustomerNumber: A.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: NULL // Amount belongs to the reversal doc, not original
}
// == Source 7: Invoice Due Date Reached ==
// Tables: BSEG joined with VBRK
DATA_SOURCE due_invoices FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
WHERE A.NETDT >= $StartDate AND A.NETDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.KOART = 'D' // Customer line item
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Due Date Reached',
EventTime: A.NETDT, // Net due date
UserName: 'System',
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 8: Payment Reminder Issued ==
// Tables: MHNK, MHND, VBRK
DATA_SOURCE reminders FROM MHNK as A
INNER JOIN MHND as D ON (A.LAUFD = D.LAUFD AND A.LAUFI = D.LAUFI)
INNER JOIN VBRK as B ON (SUBSTRING(D.XBLNR, 1, 10) = B.VBELN) // XBLNR may need parsing
WHERE A.LAUFD >= $StartDate AND A.LAUFD <= $EndDate
AND D.BUKRS IN ($CompanyCodes)
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Payment Reminder Issued',
EventTime: A.LAUFD, // Dunning date
UserName: A.IDAPS,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: D.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 9: Dispute Case Created ==
// Tables: UDM_CASE_ATTR00
DATA_SOURCE disputes FROM UDM_CASE_ATTR00 as A
WHERE A.CREATE_TIMESTAMP >= $StartDate // Timestamp format may vary
AND A.FIN_COMP_CODE IN ($CompanyCodes)
AND A.PROCESS = 'FIN_FSCM_DIS'
MAP {
InvoiceNumber: A.BILL_DOC_ID,
ActivityName: 'Dispute Case Created',
EventTime: A.CREATE_TIMESTAMP,
UserName: A.CREATE_USER,
BillingDocumentType: NULL,
CustomerNumber: A.BP_NUMBER,
CompanyCode: A.FIN_COMP_CODE,
TotalInvoiceAmount: A.DISPUTED_AMOUNT
}
// == Source 10: Customer Payment Received ==
// Tables: BKPF
DATA_SOURCE payments FROM BKPF
WHERE BUDAT >= $StartDate AND BUDAT <= $EndDate
AND BUKRS IN ($CompanyCodes)
AND BLART = 'DZ' // Example for Customer Payment
MAP {
InvoiceNumber: NULL, // Invoice not yet known
ActivityName: 'Customer Payment Received',
EventTime: BUDAT + CPUTM,
UserName: USNAM,
BillingDocumentType: NULL,
CustomerNumber: NULL, // Requires join to BSEG to get customer
CompanyCode: BUKRS,
TotalInvoiceAmount: NULL
}
// == Source 11 & 12: Payment Applied To Invoice & Invoice Cleared ==
// Tables: BSEG joined with VBRK
DATA_SOURCE cleared_items FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
WHERE A.AUGDT >= $StartDate AND A.AUGDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.AUGBL <> ''
// Generate two records from this source
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Payment Applied To Invoice',
EventTime: A.AUGDT, // Clearing Date
UserName: H.USNAM, // User from header of original invoice doc
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
UNION WITH {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Cleared',
EventTime: A.AUGDT, // Clearing Date
UserName: H.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 13: Invoice Written Off ==
// Tables: BSEG (for the invoice line) and BKPF (for clearing doc type)
DATA_SOURCE written_off FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
INNER JOIN BKPF as C ON (A.AUGBL = C.BELNR AND A.BUKRS = C.BUKRS AND A.AUGGJ = C.GJAHR)
WHERE A.AUGDT >= $StartDate AND A.AUGDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND C.BLART = '[Your Write-Off Document Type]' // e.g., 'AB'
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Written Off',
EventTime: A.AUGDT,
UserName: C.USNAM, // User who posted the write-off
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Final Union of all sources ==
OUTPUT generated_invoices
UNION ALL posted_invoices
UNION ALL parked_invoices
UNION ALL approved_invoices
UNION ALL sent_invoices
UNION ALL corrected_invoices
UNION ALL due_invoices
UNION ALL reminders
UNION ALL disputes
UNION ALL payments
UNION ALL cleared_items
UNION ALL written_off Başlamaya hazır mısınız?
Veri hazırlığını kolaylaştırmak ve faturalama süreciniz hakkında değerli içgörüler elde etmek için bu Templateten yararlanın. Nakit akışınızı hızlandırmak için bugün ilk adımı atın.
Nakit akışınızı hızlandırın: Faturalama sürecinizi bugün iyileştirin!
Verimsizlikleri giderin, çevrim süresini %30 kısaltın ve nakit akışınızı artırın.
Kredi kartı gerekmez. Dakikalar içinde iyileştirmeye başlayın.