Siparişten Tahsilata - Satış siparişi işleme Veri Templateiniz
Siparişten Tahsilata - Satış siparişi işleme Veri Templateiniz
- Toplanması önerilen öznitelikler
- İzlenecek temel etkinlikler
- SAP ECC için veri çıkarma yönergeleri
Siparişten Tahsilata - Satış siparişi işleme öznitelikleri
| Ad | Açıklama | ||
|---|---|---|---|
| Satış siparişi SalesOrder | Satış siparişi belgesinin benzersiz tanımlayıcısıdır. Siparişten Tahsilata sürecinin tamamını izlemek için ana vaka olarak kullanılır. | ||
| Açıklama Satış siparişi, satış sürecinin merkezindeki belgedir ve müşterinin mal veya hizmet talebini temsil eder. Müşteri talebini baştan sona karşılamak için gereken tüm bilgileri içerir. Process Mining çalışmalarında bu öznitelik, vaka kimliği olarak kullanılır. Her benzersiz satış siparişi numarası, baştan sona tek bir süreç örneğini temsil eder. Süreçleri satış siparişine göre inceleyerek tüm yaşam döngüsünü izleyebilir, çevrim sürelerini ölçebilir ve her müşteri siparişindeki farklılıkları belirleyebilirsiniz. Neden önemli? Müşteri siparişinin baştan sona tüm yolculuğunu analiz edebilmek için ilgili etkinlikleri ve olayları birbirine bağlayan temel anahtardır. Nereden alınır? Satış Belgesi Başlık Verileri tablosunda (VBAK), VBELN alanında bulunur. Örnekler 900001234590000123469000012347 | |||
| Aktivite Activity | Satış siparişi sürecinde gerçekleşen belirli bir iş adımının veya olayın adıdır. | ||
| Açıklama Bu öznitelik, Siparişten Tahsilata sürecindeki tek bir adımı tanımlar. Örneğin, 'Satış siparişi oluşturuldu', 'Teslimat oluşturuldu' veya 'Ödeme alındı' gibi. Bu etkinlikler, her satış siparişinin süreç akışını yeniden oluşturmak için kullanılır. Bu etkinliklerin sırasını ve zamanlamasını incelemek, Process Mining çalışmalarının temelini oluşturur. Süreç haritasını görselleştirmeye, darboğazları belirlemeye, süreç varyantlarını keşfetmeye ve standart bir modele uyumluluğu kontrol etmeye yardımcı olur. Etkinlikler genellikle belge oluşturma olayları, durum değişiklikleri veya sistemde kaydedilen belirli işlem kodları bir araya getirilerek belirlenir. Neden önemli? Etkinlikler süreç haritasının temelini oluşturur; süreç akışını, sapmaları ve darboğazları görselleştirip analiz etmenizi sağlar. Nereden alınır? Bu, türetilmiş bir özniteliktir. Genellikle veri çıkarımı sırasında SAP işlem kodları (T-Code), belge durumu değişiklikleri (ör. VBUK ve VBUP tabloları) veya değişiklik belgesi günlükleri (CDHDR ve CDPOS tabloları) kullanıcıların anlayacağı etkinlik adlarıyla eşleştirilerek oluşturulur. Örnekler Satış siparişi oluşturulduTeslimat oluşturulduMallar sevk edildiFatura oluşturulduÖdeme alındı | |||
| Başlangıç zamanı StartTime | Bir etkinliğin veya olayın ne zaman başladığını gösteren zaman damgası. | ||
| Açıklama Olay zaman damgası olarak da bilinen başlangıç zamanı, belirli bir etkinliğin gerçekleştiği kesin tarih ve saati kaydeder. Örneğin, satış siparişinin oluşturulduğu, malların çıkışının yapıldığı veya faturanın kaydedildiği zamanı gösterir. Bu zaman damgası, Process Mining çalışmalarındaki zamana dayalı tüm analizlerin temelidir. Etkinlikler arasındaki çevrim sürelerini hesaplamak, bir vakanın toplam süresini ölçmek ve gecikmeleri ya da darboğazları belirlemek için kullanılır. Zamanında teslimatı veya sipariş karşılama sürelerini izleyen Dashboardlar gibi performans analizlerinde doğru zaman damgaları büyük önem taşır. Neden önemli? Darboğazları belirlemek için gereken çevrim süreleri ve toplam süreler gibi tüm performans metriklerini hesaplamada önemli bir özniteliktir. Nereden alınır? Bu, genellikle VBAK (Satış Siparişi), LIKP (Teslimat) ve VBRK (Fatura) gibi çeşitli SAP tablolarındaki tarih alanı (ör. ERDAT) ile saat alanının (ör. ERZET) birleştirilmesiyle elde edilen bileşik bir özniteliktir. Örnekler 2023-04-15T09:00:12Z2023-04-16T14:30:00Z2023-04-20T11:22:45Z | |||
| Kaynak sistem SourceSystem | Verinin hangi kaynak sistemden çıkarıldığını belirtir. | ||
| Açıklama Bu öznitelik, verinin geldiği sistemi belirtir. Örneğin, belirli bir SAP ECC örneğinin adını veya istemci numarasını gösterir. Özellikle birden fazla üretim sistemi bulunan ya da eski sistemlerden veri alınan ortamlarda veriye bağlam kazandırır. Analiz sırasında verileri kaynağına göre filtrelemek veya gruplandırmak için kullanılır. Farklı sistemlerdeki süreçleri karşılaştırırken ya da sistem geçişi projelerinde veri bütünlüğünü ve tutarlılığını doğrularken özellikle yarar sağlar. Neden önemli? Özellikle birden fazla sistemin bulunduğu ortamlarda gerekli bağlamı sağlar, süreçleri karşılaştırmaya ve verinin kaynağını izlemeye yardımcı olur. Nereden alınır? Bu değer genellikle veri çıkarımı sırasında eklenir ve çoğunlukla SAP Sistem Kimliğini (SAPSID) veya istemciyi (MANDT) gösteren sabit bir değerdir. Örnekler ECC_PROD_800SAP_ERP_EU1ECC_QAS_300 | |||
| Son veri güncellemesi LastDataUpdate | Bu kaydın verisinin kaynak sistemden en son ne zaman yenilendiğini gösteren zaman damgası. | ||
| Açıklama Bu öznitelik, belirli bir olay veya vaka için en son veri çıkarımının ya da güncellemesinin tarih ve saatini kaydeder. Analiz edilen verinin ne kadar güncel olduğunu gösterir. Dashboardlarda ve raporlarda bu bilgi, kullanıcıların içgörülerin güncelliğini anlaması açısından önemlidir. Analizin operasyonların en güncel durumunu mu yansıttığını, yoksa eski verilere mi dayandığını göstererek kullanıcıların verinin güncelliğine ilişkin beklentilerini yönetmeye yardımcı olur. Neden önemli? Kullanıcıların verinin güncelliğini bilmesini sağlar. Bu, Process Mining analizine dayanarak zamanında ve bilinçli kararlar almak için önemlidir. Nereden alınır? Bu, veri alımı sırasında veri çıkarma aracı veya süreci tarafından doldurulan bir meta veri özniteliğidir. Kaynak SAP tablolarında saklanmaz. Örnekler 2024-06-10T05:00:00Z2024-06-11T05:00:00Z2024-06-12T05:00:00Z | |||
| Kullanıcı User | Belgeyi oluşturan veya en son değiştiren ya da etkinliği gerçekleştiren çalışanın kullanıcı kimliği. | ||
| Açıklama Bu öznitelik, süreçteki belirli bir olaydan sorumlu SAP kullanıcı kimliğini kaydeder. Örneğin, siparişi oluşturan satış temsilcisini veya mal çıkışını kaydeden depo çalışanını gösterir. Süreci kullanıcıya göre incelemek, iş yükü dağılımını anlamaya, eğitim ihtiyaçlarını belirlemeye ve farklı kullanıcıların aynı görevi nasıl gerçekleştirdiğindeki farklılıkları saptamaya yardımcı olur. Kaynak performansına, uyumluluğa ve manuel müdahalelerin belirlenmesine odaklanan Dashboardlar için önemlidir. Neden önemli? Kaynak performansını ve iş yükünü görünür kılar, kullanıcıya özgü süreç sapmalarını belirlemeye yardımcı olur; uyumluluk ve otomasyon analizinde önemli rol oynar. Nereden alınır? VBAK, LIKP ve VBRK gibi birçok SAP başlık tablosunda 'Oluşturan' alanı (ERNAM) veya 'Değiştiren' alanı (AENAM) olarak bulunur. Örnekler CBURKEJSMITHRWILLIAMS | |||
| Malzeme numarası MaterialNumber | Satılan ürün veya hizmetin benzersiz tanımlayıcısı. | ||
| Açıklama Malzeme numarası, satış siparişi kalemindeki belirli ürünü tanımlar. Bir satış siparişinde birden fazla malzeme bulunabileceğinden bu öznitelik genellikle kalem düzeyinde incelenir. Süreci malzeme numarasına göre incelemek, ürüne özgü sorunları ortaya çıkarır. Bazı ürünlerin daha uzun sipariş karşılama süreleriyle, daha sık teslimat blokeleriyle veya daha fazla fatura tutarsızlığıyla ilişkili olup olmadığını gösterebilir. Tedarik zinciri ve ürün yönetimi ekipleri, farklı ürün gruplarındaki süreçleri iyileştirmek için bu bilgiden yararlanabilir. Neden önemli? Ürün bazında süreç analizi yapılmasını sağlar; hangi ürünlerin gecikme, bloke veya yeniden çalışma gibi verimsizliklerle ilişkili olduğunu gösterir. Nereden alınır? Satış Belgesi Kalem Verileri tablosunda (VBAP), MATNR alanında bulunur. Örnekler FG-1001-ARAW-205BSERV-INSTALL | |||
| Müşteri numarası CustomerNumber | Satış siparişini veren müşterinin benzersiz tanımlayıcısı. | ||
| Açıklama Bu öznitelik, satış siparişiyle ilişkili ana müşteri hesabı olan 'Malı teslim alacak tarafı' gösterir. İşlemi ana verilerdeki belirli bir müşteriye bağlar. Müşteri numarasına göre analiz yapmak, müşteri davranışlarını ve performansını anlamak için süreci gruplandırmanızı sağlar. Hangi müşterilerin en uzun çevrim sürelerine, en yüksek yeniden çalışma oranlarına veya en sık sipariş değişikliklerine sahip olduğu gibi soruları yanıtlamaya yardımcı olur. Müşteri ilişkilerini ve hizmet düzeyini iyileştirmek açısından önemlidir. Neden önemli? Müşteri odaklı analiz yapılmasını sağlar; belirli müşterileri etkileyen süreç sorunlarını belirlemeye ve müşteri bazında performansı ölçmeye yardımcı olur. Nereden alınır? Satış Belgesi Başlık Verileri tablosunda (VBAK), KUNNR alanında bulunur. Örnekler 100234100567200112 | |||
| Net tutar NetAmount | Başlık düzeyindeki vergi ve indirimler hariç satış siparişinin toplam değeri. | ||
| Açıklama Net tutar, satış siparişinin parasal değerini gösterir. Her süreç örneğiyle ilişkili önemli bir finansal metriktir. Bu öznitelik, değere dayalı Process Mining için gereklidir. Süreç iyileştirme çalışmalarında yüksek değerli siparişlere öncelik vermenizi sağlar. Analistler gecikme veya yeniden çalışma gibi süreç sorunlarını finansal etkileriyle ilişkilendirerek değişiklik için daha güçlü bir iş gerekçesi oluşturabilir. Örneğin, yüksek değerli siparişlerin düşük değerli siparişlere göre daha verimli işlenip işlenmediğini inceleyebilirsiniz. Neden önemli? Değere dayalı analiz yapılmasını sağlar; şirket üzerinde en büyük finansal etkiye sahip siparişlere yönelik iyileştirme çalışmalarına öncelik vermeye yardımcı olur. Nereden alınır? Satış Belgesi Başlık Verileri tablosunda (VBAK), NETWR alanında bulunur. Örnekler 1500.0012550.75850.50 | |||
| Ret nedeni RejectionReason | Bir satış siparişi kaleminin neden reddedildiğini veya iptal edildiğini belirten kod. | ||
| Açıklama Ret nedeni, satış siparişinin veya belirli bir kalemin neden karşılanmadığını açıklar. Bunun nedeni müşterinin siparişi iptal etmesi, ürünün bulunmaması veya başka iş gerekçeleri olabilir. Bu öznitelik, 'Satış siparişi iptal eğilimleri' Dashboardu için gereklidir. En sık görülen ret nedenlerini inceleyerek satış kayıplarının temel nedenlerini belirleyebilirsiniz. Bu bilgi, sipariş iptal oranını azaltmak için envanter yönetiminde, fiyatlandırma stratejisinde veya müşteri iletişiminde iyileştirmeler yapmaya yardımcı olur. Neden önemli? Sipariş iptallerinin nedenini ortaya koyar; satış kayıplarını azaltmak ve tahmin doğruluğunu artırmak için temel neden analizini destekler. Nereden alınır? Satış Belgesi Kalem Verileri tablosunda (VBAP), ABGRU alanında bulunur. Örnekler 0215Z5 | |||
| Satış organizasyonu SalesOrganization | Ürün veya hizmet satışından sorumlu organizasyon birimi. | ||
| Açıklama Satış organizasyonu, şirketi satış gereksinimlerine göre yapılandıran önemli bir SAP organizasyon birimidir. Satış koşullarını müzakere etmekten ve mal ile hizmetlerin dağıtımından sorumludur. Process Mining çalışmalarında bu öznitelik, analiz için önemli bir boyut oluşturur. Farklı satış birimleri, bölgeler veya bölümler arasındaki süreç performansını, verimliliği ve uyumluluğu karşılaştırmanızı sağlar. Böylece yüksek performans gösteren birimlerdeki iyi uygulamaları belirleyebilir, diğerlerinde ise iyileştirme alanlarını görebilirsiniz. Neden önemli? Organizasyonlar arası kıyaslama yapmanızı, farklı iş birimleri veya bölgelerdeki süreç verimliliğini ve uyumluluğu karşılaştırmanızı sağlar. Nereden alınır? Satış Belgesi Başlık Verileri tablosunda (VBAK), VKORG alanında bulunur. Örnekler 100025003100 | |||
| Teslimat blokesi DeliveryBlock | Satış siparişinin teslimat için bloke edilip edilmediğini ve teslimat belgesi oluşturulmasını engelleyip engellemediğini belirten kod. | ||
| Açıklama Teslimat blokesi, teslimat adımından önce süreci geçici olarak durdurmak için satış siparişine (başlık veya kalem düzeyinde) atanan bir durumdur. Kullanıcılar blokeyi elle koyabilir; kredi limiti aşımı veya eksik veri gibi nedenlerle sistem de otomatik olarak koyabilir. Bu öznitelik, 'Satış siparişi blokesi ve yeniden çalışma analizi' Dashboardu için önemlidir. Teslimat blokelerinin sıklığını, süresini ve nedenlerini incelemek, sipariş karşılama sürecindeki başlıca darboğazları belirlemeye yardımcı olur. Bu blokeleri azaltmak, zamanında teslimatı ve genel çevrim süresini iyileştirmenin önemli bir yoludur. Neden önemli? Sipariş karşılama sürecindeki darboğazları doğrudan gösterir. Akış verimliliğini artırmak için siparişlerin neden ve ne sıklıkta bloke edildiğini incelemek önemlidir. Nereden alınır? Satış Belgesi Başlık Verileri tablosunda (VBAK), LIFSK alanında bulunur. Örnekler 0102Z1 | |||
| Kredi kontrol durumu CreditCheckStatus | Satış belgesinin kredi kontrolü durumunu gösterir. | ||
| Açıklama Bu öznitelik, satış siparişi için yapılan otomatik veya manuel kredi kontrolünün sonucunu gösterir. Yaygın durumlar arasında 'Onaylandı', 'Reddedildi' ve 'Bloke edildi' bulunur. Bu öznitelik, 'Kredi kontrolü işlem süresi analizi' Dashboardu için önemlidir. Kredi kontrolü aşamasındaki gecikmeler veya blokeler, sipariş karşılama çevrim süresini önemli ölçüde etkileyebilir. Bu durumu incelemek, kredi yönetimi sürecinin verimliliğini ve satış hızına etkisini anlamaya yardımcı olur. Neden önemli? Sipariş işleme hızını doğrudan etkiler. Bu durumu incelemek, sipariş karşılamayı geciktiren kredi yönetimi darboğazlarını belirlemeye yardımcı olur. Nereden alınır? Satış Belgesi Başlık Durumu tablosunda (VBUK) veya doğrudan VBAK tablosundaki kredi durumu alanında (ör. CMGST) bulunur. Örnekler ABD | |||
| Onaylanan teslimat tarihi ConfirmedDeliveryDate | Mal veya hizmet teslimatının müşteriye teyit edildiği tarih. | ||
| Açıklama Bu, malzeme bulunabilirliği ve planlamaya göre müşteriye taahhüt edilen teslimat tarihidir. Teslimat performansını ölçmek için temel alınır. Bu öznitelik, 'Zamanında teslimat performansı' Dashboardunun ve zamanında teslimat oranı KPI’ının temelini oluşturur. Onaylanan teslimat tarihi ile gerçek mal çıkış tarihini karşılaştırarak siparişin zamanında, erken veya geç teslim edilip edilmediğini belirleyebilirsiniz. Bu, tedarik zincirinin güvenilirliğini ve müşteri memnuniyetini ölçen başlıca göstergelerden biridir. Neden önemli? Zamanında teslimat performansını ölçmek için referans noktasıdır. Müşteri memnuniyeti ve tedarik zinciri verimliliği açısından önemli bir KPI’dır. Nereden alınır? Satış Belgesi Teslimat Planı Kalemi tablosunda (VBEP), EDATU alanında bulunur. Örnekler 2023-05-102023-06-202023-07-01 | |||
| Sevkiyat koşulları ShippingConditions | Malların müşteriye teslimi için genel sevkiyat yöntemini tanımlar. | ||
| Açıklama Sevkiyat koşulları, siparişin nasıl gönderileceğini belirler. Örneğin, 'Standart', 'Ekspres' veya 'Teslim alma' seçenekleri kullanılabilir. Koşullar müşteriyle kararlaştırılır ve lojistik planlamasını etkiler. Bu öznitelik, 'Sevkiyat yöntemi verimliliği ve maliyeti' analizinde kullanılır. Süreci sevkiyat koşullarına göre gruplandırarak belirli yöntemlerin gecikmelere daha açık olup olmadığını veya daha uzun çevrim sürelerine yol açıp açmadığını inceleyebilirsiniz. Bu veriler, lojistiği iyileştirmeye ve müşterilerin teslimat sürelerine ilişkin beklentilerini yönetmeye yardımcı olur. Neden önemli? Lojistik performansını analiz etmeyi ve belirli sevkiyat yöntemlerinin gecikmelerle mi yoksa daha yüksek verimlilikle mi ilişkili olduğunu belirlemeyi sağlar. Nereden alınır? Satış Belgesi Başlık Verileri tablosunda (VBAK), VSBED alanında bulunur. Örnekler 011020 | |||
| Yeniden çalışma var mı IsRework | Satış siparişinin ilk oluşturulmasından sonra önemli bir değişiklik veya yeniden çalışma geçirip geçirmediğini belirten mantıksal değer. | ||
| Açıklama Bu hesaplanmış öznitelik, bir veya daha fazla 'Satış siparişi değiştirildi' etkinliği gibi yeniden çalışma yaşanan süreç örneklerini belirler. Fiyat, miktar veya teslimat tarihinde yapılan değişikliklerin yeniden çalışma sayılıp sayılmayacağı proje kurulumu sırasında tanımlanır. Bu öznitelik, 'Satış siparişinde yeniden çalışma ve değişiklik sıklığı' Dashboardu ve satış siparişi yeniden çalışma oranı KPI’ı için önemlidir. Manuel değişiklik gerektiren siparişleri, doğrudan tamamlanan siparişlerden kolayca filtreleyip karşılaştırmanızı sağlar. Böylece yeniden çalışmanın çevrim süreleri ve maliyetler üzerindeki etkisini ölçebilirsiniz. Neden önemli? Yeniden çalışma sıklığını doğrudan ölçer; nedenlerini ve genel süreç verimliliği ile çevrim süresi üzerindeki etkisini incelemeyi sağlar. Nereden alınır? Bu, olay günlüğünden türetilen hesaplanmış bir özniteliktir. Mantık, 'Satış siparişi değiştirildi' etkinliklerinin veya CDHDR/CDPOS tablolarındaki belirli değişiklik olaylarının bulunup bulunmadığını kontrol eder. Örnekler truefalse | |||
| Zamanında teslimat yapıldı mı IsOnTimeDelivery | Malların onaylanan teslimat tarihinde veya bu tarihten önce sevk edilip edilmediğini belirten mantıksal değer. | ||
| Açıklama Bu hesaplanmış öznitelik, gerçek mal çıkış tarihini satış siparişinin 'ConfirmedDeliveryDate' değeriyle karşılaştırır. Mal çıkış tarihi onaylanan tarihte veya daha önceyse değer doğru, aksi hâlde yanlış olarak işaretlenir. Bu öznitelik, 'Zamanında teslimat performansı' Dashboardunun oluşturulmasını ve zamanında teslimat oranı KPI’ının hesaplanmasını kolaylaştırır. Her analiz veya grafikte tarihleri yeniden karşılaştırmaya gerek kalmadan performansı toplu olarak inceleyip görselleştirebilirsiniz. Böylece teslimat güvenilirliğini tek bakışta değerlendirebilirsiniz. Neden önemli? Teslimat performansını açık ve kolay anlaşılır biçimde ölçer, genel zamanında teslimat oranı KPI’ının hesaplanmasını kolaylaştırır. Nereden alınır? Bu, hesaplanmış bir özniteliktir. Mantık, 'Mallar sevk edildi' etkinliğinin zaman damgasını 'ConfirmedDeliveryDate' özniteliğindeki değerle karşılaştırır. Örnekler truefalse | |||
Siparişten Tahsilata - Satış siparişi işleme etkinlikleri
| Aktivite | Açıklama | ||
|---|---|---|---|
| Fatura oluşturuldu | Müşteri faturasının veya faturalama belgesinin oluşturulduğunu belirtir. Bu açık bir olaydır; sistemde yeni bir belge oluşturur ve sürecin ödeme aşamasını başlatır. | ||
| Neden önemli? Bu önemli aşama, fatura ile ödeme arasındaki çevrim süresinin ölçümünü başlatır. Faturalamadaki gecikmeler nakit akışını doğrudan etkiler. Nereden alınır? VBRK tablosuna (Faturalama Belgesi: Başlık Verileri), oluşturulma tarihine (ERDAT) göre kaydedilir. Satış siparişi veya teslimatla bağlantısı VBFA tablosunda bulunur. Kaydedin VBRK tablosundaki oluşturulma zaman damgasına (ERDAT) dayalı olay. Olay türü explicit | |||
| Mallar sevk edildi | Malların mülkiyetinin devredildiği ve resmî olarak depodan çıktığı önemli bir olaydır. Malzeme belgesi oluşturan ve envanteri güncelleyen açık bir finansal kayıttır. | ||
| Neden önemli? Bu, 'sevkiyat' olayıdır ve zamanında teslimatla sipariş karşılama teslim sürelerini ölçmek için önemli bir aşamadır. Finansal güncellemeleri başlatır ve fiziksel sipariş karşılama sürecinde geri dönüşü olmayan bir noktadır. Nereden alınır? Teslimat belgesine bağlı, mal çıkışı hareket türüne (ör. 601) sahip bir malzeme belgesi (MKPF/MSEG) oluşturulur. Kaydedin Teslimata bağlı, mal çıkışı hareket türüne sahip bir malzeme belgesi (MKPF/MSEG) oluşturulur. Olay türü explicit | |||
| Ödeme alındı | Bu olay, müşterinin ödemesinin alınıp faturaya işlendiğini ve açık alacak kaleminin kapatıldığını gösterir. Bu bir muhasebe olayıdır ve finansal belgenin kapatılmasından çıkarımla belirlenir. | ||
| Neden önemli? Satıştan nakit elde etmenin son adımıdır. Fatura ile ödeme arasındaki çevrim süresini ve genel sipariş karşılama çevrim süresini ölçmek için bitiş noktası olarak kullanılır. Nereden alınır? Müşteri kalemi için BSEG tablosundaki kapatma belgesi bilgilerinden çıkarımla belirlenir. BSEG-AUGBL (Kapatma Belgesi) ve BSEG-AUGDT (Kapatma Tarihi) alanları doluysa ödeme alınmış demektir. Kaydedin Alacak kalemi için BSEG tablosundaki kapatma tarihi (AUGDT) alanının doldurulmasından çıkarımla belirlenir. Olay türü inferred | |||
| Satış siparişi oluşturuldu | Yeni bir satış siparişi belgesinin oluşturulduğunu gösterir. Kullanıcı yeni bir siparişi, genellikle SAP’de VA01 işlemi üzerinden kaydettiğinde bu açık olay kaydedilir. | ||
| Neden önemli? Bu, Siparişten Tahsilata sürecinin temel başlangıç olayıdır. Zamanlamasını analiz etmek, toplam çevrim süresini ve sipariş giriş oranlarını ölçmek için önemlidir. Nereden alınır? VBAK tablosunda (Satış Belgesi Başlık Verileri) oluşturulma tarihi (ERDAT) ve saati (ERZET) kullanılarak kaydedilir. İşlem kodu VBAK-TCODE alanında tutulur. Kaydedin VBAK tablosundaki oluşturulma zaman damgasına (ERDAT, ERZET) dayalı olay. Olay türü explicit | |||
| Sipariş kalemi kapatıldı | Bu etkinlik, satış siparişi kaleminin tamamen teslim edilip faturalandığını ve tamamlandığını göstererek son kapanışı kaydeder. Bu durum, kalemin genel durumundan çıkarımla belirlenir. | ||
| Neden önemli? Sürecin başarıyla tamamlandığını gösteren son olaydır. Kalemlerin ne zaman kapandığını incelemek, sürecin baştan sona ne kadar sürdüğünü anlamaya ve gereksiz yere açık kalan siparişleri belirlemeye yardımcı olur. Nereden alınır? Kalem için VBUP tablosundaki (Satış Belgesi: Kalem Durumu) genel durum alanından çıkarımla belirlenir. VBUP-GBSTA 'C' (Tamamen işlendi) olduğunda kalem kapatılmış sayılır. Kaydedin Kalem durumu (VBUP-GBSTA) 'C' (Tamamen işlendi) olarak değiştiğinde çıkarımla belirlenir. Olay türü inferred | |||
| Sipariş onaylandı | Bu etkinlik, satış siparişinin ilk kontrollerin tümünü geçtiğini ve karşılanmak üzere onaylandığını gösterir. Sipariş artık bloke olmadığında ve çizelge satırlarında onaylanmış miktarlar bulunduğunda genellikle bu durumdan anlaşılır. | ||
| Neden önemli? Bu önemli aşama, sipariş girişini sipariş karşılamadan ayırır. Sipariş karşılama teslim sürelerini ve zamanında teslimat performansını ölçmek için başlangıç noktasıdır. Nereden alınır? VBEP’deki çizelge satırlarında onaylanmış miktar (BMENG > 0) bulunduğunda ve sipariş teslimat için bloke olmadığında (ör. VBUK-LIFSK boşsa) bu durumdan anlaşılabilir. Kaydedin Çizelge satırı onayından (VBEP-BMENG > 0) ve başlık düzeyindeki blokajların kaldırılmasından anlaşılır. Olay türü inferred | |||
| Fatura iptal edildi | Daha önce oluşturulmuş bir faturalama belgesinin ters kaydını ifade eder. Bu açık işlem, ilk belgeyi dengelemek için yeni bir iptal belgesi oluşturur. | ||
| Neden önemli? Fatura iptallerini izlemek; fiyatlandırma sorunlarını, sevkiyat tutarsızlıklarını veya veri hatalarını belirlemeye yardımcı olur. Bu analiz, fatura tutarsızlık oranı KPI’ını destekler. Nereden alınır? İptal faturalama belgesinin oluşturulmasıyla kaydedilen açık bir olaydır (VBRK-VBTYP = 'N' veya 'O'). İlk faturaya VBRK-SFAKN alanında referans verilir. Kaydedin İlk faturaya referans veren iptal belgesinin VBRK tablosunda oluşturulması. Olay türü explicit | |||
| Kredi kontrolü yapıldı | Satış siparişindeki müşteri için otomatik veya manuel kredi kontrolünün tamamlandığını gösterir. Bu durum genellikle belgenin genel kredi durumundaki değişiklikten anlaşılır. | ||
| Neden önemli? Kredi kontrolü çoğu zaman önemli bir darboğazdır. Bu adımın süresini ölçmek, 'Kredi Kontrolü İşlem Süresi Analizi' ve sipariş işlemlerini hızlandırmak için gereklidir. Nereden alınır? VBUK tablosundaki kredi durumu alanlarından (Satış Belgesi: Başlık Durumu) anlaşılır. VBUK-CMGST alanının bloke durumundan serbest durumuna geçmesi bu etkinliği gösterir. Kaydedin Genel kredi durumu alanındaki (VBUK-CMGST) değişikliklerden anlaşılır. Olay türü inferred | |||
| Satış siparişi değiştirildi | İlk oluşturulmasından sonra mevcut bir satış siparişinde yapılan değişikliği ifade eder. Miktar, fiyat veya tarihler gibi alanlar değiştirildiğinde bu değişiklikler özel değişiklik günlüğü tablolarına (CDHDR, CDPOS) kaydedilir. | ||
| Neden önemli? Değişiklikleri izlemek, yeniden çalışmayı, süreç istikrarsızlığını ve veri kalitesi sorunlarını belirlemeye yardımcı olur. Sık değişiklik yapılması, ilk sipariş girişinde sorunlar olduğunu ve bunun gecikmelere yol açtığını gösterebilir. Nereden alınır? OBJECTCLAS = 'VERKBELEG' için değişiklik belgesi tabloları CDHDR (başlık) ve CDPOS’tan (kalem) alınır. Zaman damgası ve değiştirilen alan belirlenebilir. Kaydedin Satış belgesi nesnelerine ait değişiklik belgesi tablolarından (CDHDR, CDPOS) alınan olay. Olay türü explicit | |||
| Sipariş iptal edildi | Satış siparişinin, sipariş karşılanmadan önce iptal edildiğini gösterir. Bu durum genellikle siparişin ilgili tüm kalemlerine bir ret nedeni atanarak kaydedilir. | ||
| Neden önemli? Bu, sipariş iptal oranı KPI’ını doğrudan destekleyen önemli bir başarısızlık bitiş noktasıdır. Siparişlerin ne zaman ve neden iptal edildiğini anlamak, satış sürecindeki sorunları ortaya çıkarır. Nereden alınır? Satış siparişindeki tüm etkin kalemler için VBAP-ABGRU (Ret Nedeni) alanının doldurulmasından çıkarımla belirlenir. Değişiklik tarihi CDHDR/CDPOS tablolarında bulunabilir. Kaydedin Tüm kalemlerdeki Ret Nedeni alanının (VBAP-ABGRU) doldurulmasından çıkarımla belirlenir. Olay türü inferred | |||
| Teslimat blokajı kondu | Satış siparişine teslimat blokajı konarak teslimat belgesi oluşturulmasının engellendiği işlemi ifade eder. Bu durum değişiklik günlüklerinden açıkça alınabilir veya durum tablolarından anlaşılabilir. | ||
| Neden önemli? Bu etkinlik, 'Satış Siparişi Blokaj Oranı' KPI’ıyla doğrudan ilişkilidir. Blokajların neden ve ne sıklıkta konduğunu belirlemek, sipariş karşılamadaki gecikmelerin nedenlerini ortaya çıkarmaya yardımcı olur. Nereden alınır? VBAK-LIFSK alanına ait değişiklik günlüklerinde (CDHDR/CDPOS) bulunabilir. Alternatif olarak VBAK-LIFSK alanının doldurulduğu zaman gözlemlenerek anlaşılır. Kaydedin VBAK-LIFSK veya VBAP-LIFSP alanına ait değişiklik belgelerinden alınan olay. Olay türü explicit | |||
| Teslimat kanıtı onaylandı | Bu etkinlik, müşterinin malları teslim aldığının teyidini ifade eder. Teslimat kanıtı sisteme kaydedildiğinde, genellikle teslimat belgesinin durumu güncellenerek kayda alınır. | ||
| Neden önemli? Bu olay, gerçek teslimat tarihini gösterir. Bu tarih, zamanında teslimat oranını taahhüt edilen tarihe göre doğru biçimde ölçmek için gereklidir. Nereden alınır? Teslimat kanıtı durumu (VBUK-PODAT) 'C' (Onaylandı) olarak ayarlandığında bu olay çıkarımla belirlenir. Onay tarihi VLPOD-PODAT alanında saklanır. Bu uygulama her sistemde bulunmayabilir. Kaydedin Teslimattaki POD durumu güncellemesinden (VBUK-PODAT) veya VLPOD tablosundaki kayıttan çıkarımla belirlenir. Olay türü inferred | |||
| Teslimat oluşturuldu | Bu olay, depoya ürün toplama ve sevkiyat işlemlerini başlatma talimatı olan giden teslimat belgesinin oluşturulduğunu gösterir. Belge akışından açıkça kaydedilir. | ||
| Neden önemli? Fiziksel sipariş karşılama sürecinin ilk adımıdır. Siparişin onaylanmasıyla teslimatın oluşturulması arasındaki süre, lojistik sürecinin ne kadar hızlı başlatıldığını gösterir. Nereden alınır? LIKP tablosunda (SD Belgesi: Teslimat Başlık Verileri) bir kayıt oluşturulur. Satış siparişiyle bağlantı, VBFA belge akışı tablosunda tutulur. Kaydedin LIKP tablosundaki oluşturulma zaman damgasına dayalı ve VBFA tablosu üzerinden bağlantı kurulan olay. Olay türü explicit | |||
| Ürün toplama tamamlandı | Teslimattaki tüm ürünlerin depodan fiziksel olarak toplandığını gösterir. Depo Yönetimi (WM) kullanılıyorsa bu durum Transfer Order durumundan anlaşılabilir. | ||
| Neden önemli? Ürün toplama süresini analiz etmek depo operasyonlarını iyileştirmeye yardımcı olur. Bu aşamadaki gecikmeler sevkiyat takvimini ve sipariş karşılama süresini doğrudan etkiler. Nereden alınır? LIPS-KOSTA tablosundaki teslimat kalemi ürün toplama durumunun 'C' (tamamı toplandı) olarak değişmesinden anlaşılır. WM etkinse Transfer Order onayından (LTAK/LTAP tabloları) anlaşılabilir. Kaydedin Ürün toplama durumundaki değişiklikten (LIPS-KOSTA) veya WM Transfer Order onayından anlaşılır. Olay türü inferred | |||
Veri çıkarma rehberleri
Adımlar
- Program geliştirme: SE38 veya SE80 işlemini kullanarak çalıştırılabilir yeni bir ABAP programı oluşturun. Tüm veri çıkarma mantığı bu programda yer alır.
- Seçim ekranını tanımlayın: Programınızda verileri filtrelemek için bir seçim ekranı oluşturun. Satış belgesi oluşturma tarihi (VBAK-ERDAT), Satış organizasyonu (VBAK-VKORG) ve Satış belgesi türü (VBAK-AUART) için parametreler ekleyin. Böylece veri çıkarma işlemini yeniden kullanabilir ve yönetebilirsiniz.
- Veri bildirimleri: Çeşitli SAP tablolarındaki (ör. VBAK, VBAP, VBFA, CDHDR, CDPOS, VBRK, BSAD) verileri tutmak için gereken dahili tabloları ve yapıları tanımlayın. Ayrıca Event Log için gerekli özniteliklerle eşleşen son çıktı yapısını da tanımlayın.
- Temel satış siparişlerini seçin: Kullanıcının seçim ekranında girdiği bilgilere göre satış siparişi başlıklarını (VBAK) ve kalemlerini (VBAP) almak için ilk SELECT ifadesini yazın. Bu veriler, analiz edilecek vakaların temel Veri Setini oluşturur.
- 'Oluşturuldu' etkinliğini çıkarın: Seçilen VBAK kayıtları üzerinde döngü kurun. Her kayıt için Event Log yapısına 'Satış siparişi oluşturuldu' etkinliğini ekleyin; StartTime değerinde VBAK-ERDAT ve VBAK-ERZET alanlarını kullanın.
- Değişiklik kaydı etkinliklerini çıkarın: Seçilen satış siparişleri için OBJECTCLAS değeri 'VERKBELEG' olan CDHDR ve CDPOS kayıtlarını seçin. Sonuçlarda döngü kurarak belirli alanlardaki değişiklikleri bulun. Örneğin VBAK-LIFSK alanındaki değişiklik 'Teslimat blokajı kondu', VBUK-CMGST alanındaki değişiklik ise 'Kredi kontrolü yapıldı' anlamına gelir. Diğer ilgili değişiklikleri 'Satış siparişi değiştirildi' olarak kaydedebilirsiniz.
- Belge akışı verilerini çıkarın: Seçilen satış siparişleri için belge akışı tablosunu (VBFA) sorgulayın. Bu tablo, satış siparişlerini teslimatlar, mal hareketleri ve faturalar gibi sonraki belgelere bağlar. İleri işlemler için ilgili tüm belgeleri seçin.
- Teslimat ve sipariş karşılama etkinliklerini çıkarın: VBFA’dan alınan teslimat belge numaralarını kullanarak LIKP ve LIPS tablolarında 'Teslimat oluşturuldu' etkinliklerini sorgulayın. 'Mal çıkışı yapıldı' etkinliğini kaydetmek için mal çıkışı belgelerini (hareket türü '601') MKPF ve MSEG tablolarında sorgulayın. Depo Yönetimi etkinse, son transfer siparişi kaleminin onay zamanını bulmak ve 'Toplama tamamlandı' etkinliğini belirlemek için LTAK ve LTAP tablolarını sorgulayın. 'Teslimat kanıtı onaylandı' etkinliği için teslimat başlık durumu VBUK-PODAT alanını kontrol edin.
- Faturalama ve ödeme etkinliklerini çıkarın: Fatura belge numaralarını VBFA’dan alarak VBRK ve VBRP tablolarında 'Fatura oluşturuldu' ve 'Fatura iptal edildi' (VBRK-FKSTO = 'X' olduğunda) etkinliklerini bulun. 'Ödeme alındı' etkinliğini bulmak için VBRK’daki faturayı BKPF’deki muhasebe belgesine bağlayın, ardından BSAD’de kapatma belgesini ve kapatma tarihini bulun.
- Duruma dayalı etkinlikleri çıkarın: İş etkinliklerini belirlemek için VBUP (Kalem durumu) ve VBUK (Başlık durumu) tablolarını kullanın. Örneğin VBUP-GBSTA değeri 'C' olduğunda kalem 'Sipariş kalemi kapatıldı' sayılır. İlgili tüm kalemler için 'Ret nedeni' (VBAP-ABGRU) girildiğinde sipariş 'Sipariş iptal edildi' olarak değerlendirilir.
- Verileri birleştirip biçimlendirin: Kaydedilen tüm etkinlikleri tek bir son dahili tabloda birleştirin. Her etkinlik kaydında SalesOrder, Activity, StartTime, User gibi tüm özniteliklerin doğru doldurulduğundan emin olun. SourceSystem ve LastDataUpdate zaman damgalarını ekleyin.
- Çıktı dosyasını oluşturun: Son dahili tabloyu kullanıcının yerel makinesine CSV dosyası olarak aktarmak için GUI_DOWNLOAD işlev modülünü veya cl_gui_frontend_services=>gui_download yöntemini kullanın. Dosyayı UTF-8 kodlamasıyla kaydedin.
Yapılandırma
- Ön koşullar: ABAP geliştirici yetkileri (ör. SE38 işlemine erişim) ve VBAK, VBAP, CDHDR, CDPOS, VBFA, LIKP, LIPS, VBRK, VBRP, MKPF, MSEG ve BSAD dahil gerekli tüm SAP tabloları için okuma izinleri.
- Seçim parametreleri: Programda filtreleme parametrelerinin bulunduğu bir seçim ekranı olmalıdır. Temel parametreler şunlardır:
- Tarih aralığı: Satış siparişi oluşturma tarihi (VBAK-ERDAT) için zorunlu bir tarih aralığı belirleyin. Veri Setini yönetilebilir tutmak için son 3-6 aylık dönemle başlayın.
- Satış organizasyonu: Analizi belirli iş birimlerine odaklamak için VBAK-VKORG alanına göre filtreleyin.
- Satış belgesi türü: Yalnızca ilgili sipariş türlerini (ör. standart siparişler) dahil etmek ve teklif ya da iadeler gibi diğer türleri hariç tutmak için VBAK-AUART alanına göre filtreleyin.
- Performansla ilgili noktalar: Değişiklik kayıtları (CDHDR, CDPOS) ve belge akışı (VBFA) tablolarından büyük hacimli veri çıkarmak çok yavaş olabilir. Programı, WHERE koşullarında dizin alanlarını kullanacak şekilde optimize edin. Çok büyük veri çıkarma işlemlerinde programı, yoğun olmayan saatlerde SM36 işlemiyle arka plan işi olarak çalışacak şekilde planlayın.
- Değişiklik kaydı etkinleştirme: Bu yöntem SAP’nin değişiklik belgesi işlevine dayanır. Temel veri öğeleri (ör. LIFSK, CMGST, ABGRU) için değişiklik kaydının etkin olduğunu doğrulayın. Bunu VERKBELEG nesnesi için SCDO işleminden kontrol edebilirsiniz.
Örnek sorgu abap
REPORT Z_O2C_PM_EXTRACTOR.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
TABLES: vbak.
TYPES: BEGIN OF ty_event_log,
salesorder TYPE vbeln_va,
activity TYPE string,
starttime TYPE string,
sourcesystem TYPE logsys,
lastdataupdate TYPE string,
user TYPE ernam,
customernumber TYPE kunnr,
salesorganization TYPE vkorg,
netamount TYPE netwr,
materialnumber TYPE matnr,
deliveryblock TYPE lifsk,
rejectionreason TYPE abgru,
salesordercycletime TYPE string, " Placeholder for calculation
END OF ty_event_log.
DATA: gt_event_log TYPE TABLE OF ty_event_log.
DATA: gs_event_log TYPE ty_event_log.
DATA: gv_sysid TYPE logsys.
DATA: gv_last_update TYPE string.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_erdat FOR vbak-erdat OBLIGATORY,
s_vkorg FOR vbak-vkorg,
s_auart FOR vbak-auart.
PARAMETERS: p_file TYPE rlgrap-filename OBLIGATORY DEFAULT 'C:\temp\o2c_event_log.csv'.
*&---------------------------------------------------------------------*
*& Main Processing Block
*&---------------------------------------------------------------------*
START-OF-SELECTION.
CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
IMPORTING
own_logical_system = gv_sysid.
CONCATENATE sy-datum sy-uzeit INTO gv_last_update.
PERFORM get_base_data.
PERFORM write_output_file.
*&---------------------------------------------------------------------*
*& Form get_base_data
*&---------------------------------------------------------------------*
FORM get_base_data.
TYPES: BEGIN OF ty_order_item,
vbeln TYPE vbeln_va,
posnr TYPE posnr_va,
erdat TYPE erdat,
erzet TYPE erzet,
ernam TYPE ernam,
kunnr TYPE kunnr,
vkorg TYPE vkorg,
netwr TYPE netwr_ak,
matnr TYPE matnr,
lifsk TYPE lifsk,
abgru TYPE abgru,
END OF ty_order_item.
DATA: lt_order_items TYPE TABLE OF ty_order_item.
SELECT h~vbeln i~posnr h~erdat h~erzet h~ernam h~kunnr h~vkorg h~netwr i~matnr h~lifsk i~abgru
INTO TABLE lt_order_items
FROM vbak AS h
INNER JOIN vbap AS i ON h~vbeln = i~vbeln
WHERE h~erdat IN s_erdat
AND h~vkorg IN s_vkorg
AND h~auart IN s_auart.
CHECK sy-subrc = 0.
DATA(lt_vbeln_range) = VALUE rsdsselopt_t(
FOR <fs_item> IN lt_order_items WHERE ( vbeln = <fs_item>-vbeln )
( sign = 'I' option = 'EQ' low = <fs_item>-vbeln ) ).
SORT lt_vbeln_range BY low.
DELETE ADJACENT DUPLICATES FROM lt_vbeln_range COMPARING low.
PERFORM extract_order_created USING lt_order_items.
PERFORM extract_changes USING lt_vbeln_range lt_order_items.
PERFORM extract_doc_flow_events USING lt_vbeln_range lt_order_items.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form extract_order_created
*&---------------------------------------------------------------------*
FORM extract_order_created USING it_order_items TYPE ANY TABLE.
FIELD-SYMBOLS: <fs_item> TYPE any.
DATA: lt_unique_orders TYPE HASHED TABLE OF vbeln_va WITH UNIQUE KEY table_line.
lt_unique_orders = VALUE #( FOR <order> IN it_order_items ( CONV vbeln_va( <order>-vbeln ) ) ).
LOOP AT it_order_items ASSIGNING <fs_item> WHERE table_line IN lt_unique_orders.
CLEAR gs_event_log.
gs_event_log-salesorder = <fs_item>-vbeln.
gs_event_log-activity = 'Sales Order Created'.
CONCATENATE <fs_item>-erdat <fs_item>-erzet INTO gs_event_log-starttime.
gs_event_log-user = <fs_item>-ernam.
gs_event_log-customernumber = <fs_item>-kunnr.
gs_event_log-salesorganization = <fs_item>-vkorg.
gs_event_log-netamount = <fs_item>-netwr.
APPEND gs_event_log TO gt_event_log.
DELETE lt_unique_orders WHERE table_line = <fs_item>-vbeln.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form extract_changes
*&---------------------------------------------------------------------*
FORM extract_changes USING it_vbeln_range TYPE rsdsselopt_t it_order_items TYPE ANY TABLE.
DATA: lt_cdhdr TYPE TABLE OF cdhdr,
lt_cdpos TYPE TABLE OF cdpos.
SELECT * INTO TABLE lt_cdhdr FROM cdhdr
WHERE objectclas = 'VERKBELEG'
AND objectid IN it_vbeln_range
AND tcode = 'VA02'.
IF sy-subrc = 0.
SELECT * INTO TABLE lt_cdpos FROM cdpos
FOR ALL ENTRIES IN lt_cdhdr
WHERE objectclas = lt_cdhdr-objectclas
AND objectid = lt_cdhdr-objectid
AND changenr = lt_cdhdr-changenr.
ENDIF.
LOOP AT lt_cdhdr ASSIGNING FIELD-SYMBOL(<fs_cdhdr>).
DATA(lv_order_info) = REF #( it_order_items[ vbeln = <fs_cdhdr>-objectid ] ).
IF lv_order_info IS NOT BOUND. CONTINUE. ENDIF.
CLEAR gs_event_log.
gs_event_log-salesorder = <fs_cdhdr>-objectid.
gs_event_log-user = <fs_cdhdr>-username.
CONCATENATE <fs_cdhdr>-udate <fs_cdhdr>-utime INTO gs_event_log-starttime.
gs_event_log-customernumber = lv_order_info->kunnr.
gs_event_log-salesorganization = lv_order_info->vkorg.
gs_event_log-netamount = lv_order_info->netwr.
" Generic Change Event
gs_event_log-activity = 'Sales Order Changed'.
APPEND gs_event_log TO gt_event_log.
LOOP AT lt_cdpos ASSIGNING FIELD-SYMBOL(<fs_cdpos>)
WHERE objectclas = <fs_cdhdr>-objectclas
AND objectid = <fs_cdhdr>-objectid
AND changenr = <fs_cdhdr>-changenr.
CASE <fs_cdpos>-fname.
WHEN 'LIFSK'. " Delivery Block
gs_event_log-activity = 'Delivery Block Set'.
gs_event_log-deliveryblock = <fs_cdpos>-value_new.
APPEND gs_event_log TO gt_event_log.
WHEN 'CMGST'. " Credit Status
IF <fs_cdpos>-value_new = 'B'. " B = Credit Check OK
gs_event_log-activity = 'Credit Check Performed'.
APPEND gs_event_log TO gt_event_log.
ENDIF.
WHEN 'ABGRU'. " Rejection Reason
IF <fs_cdpos>-value_new IS NOT INITIAL.
gs_event_log-activity = 'Order Cancelled'.
gs_event_log-rejectionreason = <fs_cdpos>-value_new.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDCASE.
ENDLOOP.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form extract_doc_flow_events
*&---------------------------------------------------------------------*
FORM extract_doc_flow_events USING it_vbeln_range TYPE rsdsselopt_t it_order_items TYPE ANY TABLE.
DATA: lt_vbfa TYPE TABLE OF vbfa,
lt_vbrk TYPE TABLE OF vbrk,
lt_likp TYPE TABLE OF likp,
lt_mseg TYPE TABLE OF mseg,
lt_bsad TYPE TABLE OF bsad,
lt_vbup TYPE TABLE OF vbup.
SELECT * INTO TABLE lt_vbfa FROM vbfa
WHERE vbelv IN it_vbeln_range
AND ( vbtyp_n = 'J' " Delivery
OR vbtyp_n = 'M' " Invoice
OR vbtyp_n = 'N' " Invoice Cancellation
OR vbtyp_n = 'R' ). " Goods Movement
IF lt_vbfa IS INITIAL. RETURN. ENDIF.
SELECT vbeln, erdat, erzet, ernam, fksto, belnr FROM vbrk INTO TABLE lt_vbrk
FOR ALL ENTRIES IN lt_vbfa
WHERE vbeln = lt_vbfa-vbeln
AND ( lt_vbfa-vbtyp_n = 'M' OR lt_vbfa-vbtyp_n = 'N' ).
SELECT vbeln, erdat, erzet, ernam, podat FROM likp INTO TABLE lt_likp
FOR ALL ENTRIES IN lt_vbfa
WHERE vbeln = lt_vbfa-vbeln AND lt_vbfa-vbtyp_n = 'J'.
SELECT mblnr, mjahr, zeile, bwart, budat, cpuzt, usnam FROM mseg INTO TABLE lt_mseg
FOR ALL ENTRIES IN lt_vbfa
WHERE mblnr = lt_vbfa-vbeln AND mjahr = lt_vbfa-mjahr AND zeile = lt_vbfa-posnn AND lt_vbfa-vbtyp_n = 'R' AND bwart = '601'.
SELECT augdt, belnr, gjahr, kunnr FROM bsad INTO TABLE lt_bsad
FOR ALL ENTRIES IN lt_vbrk
WHERE belnr = lt_vbrk-belnr AND gjahr = SUBSTRING( val = lt_vbrk-erdat len = 4 ).
SELECT vbeln, posnr, gbsta FROM vbup INTO TABLE lt_vbup
FOR ALL ENTRIES IN lt_vbfa
WHERE vbeln = lt_vbfa-vbelv AND posnr = lt_vbfa-posnv.
LOOP AT lt_vbfa ASSIGNING FIELD-SYMBOL(<fs_vbfa>).
DATA(lv_order_info) = REF #( it_order_items[ vbeln = <fs_vbfa>-vbelv ] ).
IF lv_order_info IS NOT BOUND. CONTINUE. ENDIF.
CLEAR gs_event_log.
gs_event_log-salesorder = <fs_vbfa>-vbelv.
gs_event_log-customernumber = lv_order_info->kunnr.
gs_event_log-salesorganization = lv_order_info->vkorg.
gs_event_log-netamount = lv_order_info->netwr.
gs_event_log-materialnumber = lv_order_info->matnr.
CASE <fs_vbfa>-vbtyp_n.
WHEN 'J'. " Delivery
READ TABLE lt_likp ASSIGNING FIELD-SYMBOL(<fs_likp>) WITH KEY vbeln = <fs_vbfa>-vbeln.
IF sy-subrc = 0.
gs_event_log-activity = 'Delivery Created'.
CONCATENATE <fs_likp>-erdat <fs_likp>-erzet INTO gs_event_log-starttime.
gs_event_log-user = <fs_likp>-ernam.
APPEND gs_event_log TO gt_event_log.
" Picking Completed - simplified logic, check status
gs_event_log-activity = 'Picking Completed'. APPEND gs_event_log TO gt_event_log.
" POD Confirmed
IF <fs_likp>-podat IS NOT INITIAL.
gs_event_log-activity = 'Proof Of Delivery Confirmed'.
gs_event_log-starttime = <fs_likp>-podat.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
WHEN 'R'. " Goods Issue
READ TABLE lt_mseg ASSIGNING FIELD-SYMBOL(<fs_mseg>) WITH KEY mblnr = <fs_vbfa>-vbeln mjahr = <fs_vbfa>-mjahr zeile = <fs_vbfa>-posnn.
IF sy-subrc = 0.
gs_event_log-activity = 'Goods Issued'.
CONCATENATE <fs_mseg>-budat <fs_mseg>-cpuzt INTO gs_event_log-starttime.
gs_event_log-user = <fs_mseg>-usnam.
APPEND gs_event_log TO gt_event_log.
ENDIF.
WHEN 'M'. " Invoice
READ TABLE lt_vbrk ASSIGNING FIELD-SYMBOL(<fs_vbrk>) WITH KEY vbeln = <fs_vbfa>-vbeln.
IF sy-subrc = 0.
gs_event_log-activity = 'Invoice Created'.
CONCATENATE <fs_vbrk>-erdat <fs_vbrk>-erzet INTO gs_event_log-starttime.
gs_event_log-user = <fs_vbrk>-ernam.
APPEND gs_event_log TO gt_event_log.
" Payment Received
READ TABLE lt_bsad ASSIGNING FIELD-SYMBOL(<fs_bsad>) WITH KEY belnr = <fs_vbrk>-belnr.
IF sy-subrc = 0 AND <fs_bsad>-augdt IS NOT INITIAL.
gs_event_log-activity = 'Payment Received'.
gs_event_log-starttime = <fs_bsad>-augdt.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
WHEN 'N'. " Invoice Cancellation
READ TABLE lt_vbrk ASSIGNING <fs_vbrk> WITH KEY vbeln = <fs_vbfa>-vbeln.
IF sy-subrc = 0 AND <fs_vbrk>-fksto = 'X'.
gs_event_log-activity = 'Invoice Cancelled'.
CONCATENATE <fs_vbrk>-erdat <fs_vbrk>-erzet INTO gs_event_log-starttime.
gs_event_log-user = <fs_vbrk>-ernam.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDCASE.
ENDLOOP.
" Infer other events from status
LOOP AT lt_vbup ASSIGNING FIELD-SYMBOL(<fs_vbup>).
IF <fs_vbup>-gbsta = 'C'.
DATA(lv_order_info_stat) = REF #( it_order_items[ vbeln = <fs_vbup>-vbeln ] ).
IF lv_order_info_stat IS NOT BOUND. CONTINUE. ENDIF.
gs_event_log-salesorder = <fs_vbup>-vbeln.
gs_event_log-activity = 'Order Item Closed'.
" Timestamp for closed is harder, using current time as placeholder
CONCATENATE sy-datum sy-uzeit INTO gs_event_log-starttime.
gs_event_log-user = sy-uname.
gs_event_log-customernumber = lv_order_info_stat->kunnr.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
" Order Confirmed (Simplified - assumes if not blocked it's confirmed)
LOOP AT it_order_items ASSIGNING FIELD-SYMBOL(<fs_item>).
IF <fs_item>-lifsk IS INITIAL.
gs_event_log-salesorder = <fs_item>-vbeln.
gs_event_log-activity = 'Order Confirmed'.
CONCATENATE <fs_item>-erdat <fs_item>-erzet INTO gs_event_log-starttime.
gs_event_log-user = <fs_item>-ernam.
gs_event_log-customernumber = <fs_item>-kunnr.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form write_output_file
*&---------------------------------------------------------------------*
FORM write_output_file.
DATA: lt_final_output TYPE TABLE OF ty_event_log.
" Add common fields
LOOP AT gt_event_log ASSIGNING FIELD-SYMBOL(<fs_event>).
<fs_event>-sourcesystem = gv_sysid.
<fs_event>-lastdataupdate = gv_last_update.
ENDLOOP.
SORT gt_event_log BY salesorder starttime.
DELETE ADJACENT DUPLICATES FROM gt_event_log COMPARING ALL FIELDS.
lt_final_output = gt_event_log.
DATA: lt_fieldnames TYPE TABLE OF string.
APPEND 'SalesOrder' TO lt_fieldnames.
APPEND 'Activity' TO lt_fieldnames.
APPEND 'StartTime' TO lt_fieldnames.
APPEND 'SourceSystem' TO lt_fieldnames.
APPEND 'LastDataUpdate' TO lt_fieldnames.
APPEND 'User' TO lt_fieldnames.
APPEND 'CustomerNumber' TO lt_fieldnames.
APPEND 'SalesOrganization' TO lt_fieldnames.
APPEND 'NetAmount' TO lt_fieldnames.
APPEND 'MaterialNumber' TO lt_fieldnames.
APPEND 'DeliveryBlock' TO lt_fieldnames.
APPEND 'RejectionReason' TO lt_fieldnames.
APPEND 'SalesOrderCycleTime' TO lt_fieldnames.
DATA(lv_header) = REDUCE string(
INIT s = ''
FOR field IN lt_fieldnames
NEXT s = s && COND #( WHEN s = '' THEN field ELSE |,{ field }| ) ).
DATA: lt_file_content TYPE TABLE OF string.
APPEND lv_header TO lt_file_content.
LOOP AT lt_final_output INTO DATA(ls_output).
DATA(lv_line) = |"{ ls_output-salesorder }","{ ls_output-activity }","{ ls_output-starttime }","{ ls_output-sourcesystem }","{ ls_output-lastdataupdate }","{ ls_output-user }","{ ls_output-customernumber }","{ ls_output-salesorganization }",{ ls_output-netamount },"{ ls_output-materialnumber }","{ ls_output-deliveryblock }","{ ls_output-rejectionreason }","{ ls_output-salesordercycletime }"|.
APPEND lv_line TO lt_file_content.
ENDLOOP.
cl_gui_frontend_services=>gui_download(
EXPORTING
filename = p_file
filetype = 'ASC'
CHANGING
data_tab = lt_file_content ).
ENDFORM. Adımlar
- Ön koşullar: Temel SAP ECC veritabanına doğrudan, salt okunur erişiminiz olduğundan emin olun. Bağlanıp sorgu çalıştırmak için DBeaver, SQL Server Management Studio veya Oracle SQL Developer gibi bir veritabanı istemcisine ihtiyacınız vardır.
- SQL betiğini alın: Bu belgenin 'sorgu' bölümünde verilen SQL sorgusunun tamamını kopyalayın.
- Veritabanına bağlanın: Veritabanı istemcinizi açıp SAP ECC veritabanı örneğine bağlanın. Sunucu adresi, bağlantı noktası, veritabanı adı ve uygun oturum açma bilgileri gerekir.
- Sorguyu yapılandırın: SQL betiğini yeni bir sorgu düzenleyicisi penceresine yapıştırın. SalesOrders adlı ana Ortak Tablo İfadesi (CTE) içindeki yapılandırma bölümünü bulun. Başlangıç tarihi ('{StartDate}'), bitiş tarihi ('{EndDate}'), satış organizasyonları ('{SalesOrgs}') ve belge türleri ('{DocTypes}') için yer tutucu değerleri analizinizde kullanacağınız gerçek değerlerle değiştirin.
- Sorguyu çalıştırın: Yapılandırdığınız SQL betiğini çalıştırın. Tarih aralığına ve SAP veritabanınızın boyutuna bağlı olarak sorgunun tamamlanması birkaç dakika sürebilir.
- Sonuçları inceleyin: Sorgu tamamlandığında sonuç kümesi görüntülenir. Beklenen sütunların (SalesOrder, Activity, StartTime vb.) bulunduğunu ve çeşitli etkinlikler için satırların döndürüldüğünü kısaca kontrol edin.
- Verileri dışa aktarın: Sonuç kümesini CSV dosyası olarak kaydetmek için veritabanı istemcinizin dışa aktarma işlevini kullanın. Dosyaya SAP_O2C_Event_Log.csv gibi açıklayıcı bir ad verin.
- ProcessMind için biçimlendirin: CSV dosyasını bir elektronik tablo düzenleyicisinde açın. Sütun başlıklarının gerekli özniteliklerle (ör. SalesOrder, Activity, StartTime) tam olarak eşleştiğini doğrulayın. StartTime ve LastDataUpdate için tarih ve saat biçiminin tutarlı ve ProcessMind tarafından desteklenen YYYY-MM-DD HH:MI:SS gibi bir biçimde olduğundan emin olun.
- ProcessMind’e yükleyin: Son biçimlendirilmiş CSV dosyasını analiz için ProcessMind projenize yükleyin.
Yapılandırma
- Tarih aralığı: Sorgu, satış siparişlerini oluşturulma tarihine (VBAK.ERDAT) göre filtrelemek için ('{StartDate}' ve '{EndDate}') yer tutucularını kullanır. Veritabanına aşırı yük bindirmeden temsil gücü olan bir örneklem elde etmek için genellikle 3-6 aylık veri analiz edilir.
- Satış organizasyonu filtresi: Veri çıkarmayı belirli satış organizasyonlarıyla (ör. '1000', '2000') sınırlamak için '{SalesOrgs}' yer tutucusunu kullanın. Bu, analizi belirli bir kapsama odaklamak ve sorgu performansını artırmak açısından önemlidir.
- Belge türü filtresi: Belirli satış siparişi türlerini (ör. Standart Sipariş için 'OR') seçmek üzere '{DocTypes}' yer tutucusunu kullanın. Böylece ücretsiz teslimatlar veya iadeler gibi ilgisiz belgeleri ana süreç akışının dışında tutabilirsiniz.
- Kaynak sistem tanımlayıcısı: Her kayda kaynak sistemini eklemek için '{SourceSystemName}' sabit yer tutucusu kullanılır. Bunu SAP ECC örneğiniz için SAP_ECC_PRD gibi anlamlı bir adla değiştirin.
- Veritabanı uyumluluğu: Tarih ve saat alanlarını birleştirmek için kullanılan [Veritabanınıza özgü zaman damgası işlevi] bir yer tutucudur. Bunu kullandığınız veritabanına uygun işlevle değiştirin (ör. SAP HANA için TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UZEIT), 'YYYYMMDDHH24MISS') veya SQL Server için CAST(CDHDR.UDATE AS DATETIME) + CAST(CDHDR.UZEIT AS DATETIME)).
- Ön koşullar: Bu yöntem için doğrudan, salt okunur veritabanı kimlik bilgileri gerekir. Veritabanı kullanıcısının sorguda başvurulan VBAK, VBAP, VBFA, CDHDR, CDPOS, LIKP, VBRK ve BSAD tablolarına erişim yetkisi olmalıdır.
Örnek sorgu sql
WITH SalesOrders AS (
SELECT VBELN
FROM VBAK
WHERE ERDAT BETWEEN '{StartDate}' AND '{EndDate}' -- Filter by creation date
AND VKORG IN ('{SalesOrgs}') -- Filter by Sales Organization(s)
AND AUART IN ('{DocTypes}') -- Filter by Sales Document Type(s)
)
-- 1. Sales Order Created
SELECT
vbak.VBELN AS "SalesOrder",
'Sales Order Created' AS "Activity",
[Your DB-specific timestamp function](vbak.ERDAT, vbak.ERZET) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
vbak.ERNAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
vbak.LIFSK AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBAK vbak
JOIN SalesOrders so ON vbak.VBELN = so.VBELN
UNION ALL
-- 2. Sales Order Changed
SELECT
cdhdr.OBJECTID AS "SalesOrder",
'Sales Order Changed' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
vbak.LIFSK AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM CDHDR cdhdr
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG' AND cdhdr.TCODE IN ('VA02')
UNION ALL
-- 3. Credit Check Performed (Release)
SELECT
cdhdr.OBJECTID AS "SalesOrder",
'Credit Check Performed' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
vbak.LIFSK AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM CDHDR cdhdr
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG'
AND cdpos.TABNAME = 'VBUK'
AND cdpos.FNAME = 'CMGST'
AND cdpos.VALUE_NEW = 'B' -- Credit status 'Released'
UNION ALL
-- 4. Order Confirmed (Overall status not blocked)
SELECT
cdhdr.OBJECTID AS "SalesOrder",
'Order Confirmed' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM CDHDR cdhdr
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG'
AND cdpos.TABNAME = 'VBUK'
AND cdpos.FNAME = 'GBSTK'
AND cdpos.VALUE_OLD <> 'A' AND cdpos.VALUE_NEW = 'A' -- Status changes to 'Not yet processed'
UNION ALL
-- 5. Delivery Block Set
SELECT
cdhdr.OBJECTID AS "SalesOrder",
'Delivery Block Set' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
cdpos.VALUE_NEW AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM CDHDR cdhdr
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG'
AND cdpos.TABNAME = 'VBAK'
AND cdpos.FNAME = 'LIFSK'
AND cdpos.VALUE_NEW IS NOT NULL AND cdpos.VALUE_NEW <> ''
UNION ALL
-- 6. Delivery Created
SELECT
vbfa.VBELV AS "SalesOrder",
'Delivery Created' AS "Activity",
[Your DB-specific timestamp function](likp.ERDAT, likp.ERZET) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
likp.ERNAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
vbak.LIFSK AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN LIKP likp ON vbfa.VBELN = likp.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'C' AND vbfa.VBTYP_N = 'J'
UNION ALL
-- 7. Picking Completed
SELECT
vbfa.VBELV AS "SalesOrder",
'Picking Completed' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN CDHDR cdhdr ON vbfa.VBELN = cdhdr.OBJECTID
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'C' AND vbfa.VBTYP_N = 'J'
AND cdhdr.OBJECTCLASS = 'LIEFERUNG'
AND cdpos.TABNAME = 'VBUK'
AND cdpos.FNAME = 'PKSTK'
AND cdpos.VALUE_NEW = 'C'
UNION ALL
-- 8. Goods Issued
SELECT
vbfa_gi.VBELV AS "SalesOrder",
'Goods Issued' AS "Activity",
[Your DB-specific timestamp function](mkpf.BUDAT, mkpf.CPUTM) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
mkpf.USNAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa_gi
JOIN SalesOrders so ON vbfa_gi.VBELV = so.VBELN
JOIN MKPF mkpf ON vbfa_gi.VBELN = mkpf.XBLNR -- XBLNR is Reference Document Number
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa_gi.VBTYP_V = 'J' AND vbfa_gi.VBTYP_N = 'R'
UNION ALL
-- 9. Proof Of Delivery Confirmed
SELECT
vbfa.VBELV AS "SalesOrder",
'Proof Of Delivery Confirmed' AS "Activity",
[Your DB-specific timestamp function](likp.PODAT, '000000') AS "StartTime", -- PODAT is only a date
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
likp.AENAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN LIKP likp ON vbfa.VBELN = likp.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'C' AND vbfa.VBTYP_N = 'J' AND likp.PODAT IS NOT NULL AND likp.PODAT <> '00000000'
UNION ALL
-- 10. Invoice Created
SELECT
vbfa.VBELV AS "SalesOrder",
'Invoice Created' AS "Activity",
[Your DB-specific timestamp function](vbrk.ERDAT, vbrk.ERZET) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
vbrk.ERNAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN VBRK vbrk ON vbfa.VBELN = vbrk.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'C' AND vbfa.VBTYP_N = 'M'
UNION ALL
-- 11. Invoice Cancelled
SELECT
vbfa.VBELV AS "SalesOrder",
'Invoice Cancelled' AS "Activity",
[Your DB-specific timestamp function](vbrk.ERDAT, vbrk.ERZET) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
vbrk.ERNAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN VBRK vbrk ON vbfa.VBELN = vbrk.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'M' AND vbfa.VBTYP_N = 'N'
UNION ALL
-- 12. Payment Received
SELECT
vbfa.VBELV AS "SalesOrder",
'Payment Received' AS "Activity",
[Your DB-specific timestamp function](bsad.AUGDT, '000000') AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
NULL AS "User", -- Clearing user not readily available here
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN VBRK vbrk ON vbfa.VBELN = vbrk.VBELN
JOIN BSAD bsad ON vbrk.VBELN = bsad.VBLNR
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'C' AND vbfa.VBTYP_N = 'M'
AND bsad.AUGDT IS NOT NULL AND bsad.AUGDT <> '00000000'
UNION ALL
-- 13. Order Item Closed
SELECT DISTINCT
cdhdr.OBJECTID AS "SalesOrder",
'Order Item Closed' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
vbap.MATNR AS "MaterialNumber",
NULL AS "DeliveryBlock",
vbap.ABGRU AS "RejectionReason"
FROM CDHDR cdhdr
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN VBAP vbap ON cdhdr.OBJECTID = vbap.VBELN AND SUBSTRING(cdpos.TABKEY, 4, 6) = vbap.POSNR
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG'
AND cdpos.TABNAME = 'VBUP'
AND cdpos.FNAME = 'GBSTA'
AND cdpos.VALUE_NEW = 'C' -- Item is completely processed
UNION ALL
-- 14. Order Cancelled
SELECT DISTINCT
cdhdr.OBJECTID AS "SalesOrder",
'Order Cancelled' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
vbap.MATNR AS "MaterialNumber",
NULL AS "DeliveryBlock",
cdpos.VALUE_NEW AS "RejectionReason"
FROM CDHDR cdhdr
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN VBAP vbap ON cdhdr.OBJECTID = vbap.VBELN AND SUBSTRING(cdpos.TABKEY, 4, 6) = vbap.POSNR
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG'
AND cdpos.TABNAME = 'VBAP'
AND cdpos.FNAME = 'ABGRU'
AND cdpos.VALUE_NEW IS NOT NULL AND cdpos.VALUE_NEW <> ''; Başlamaya hazır mısınız?
Bu Veri Templateinden yararlanarak Siparişten Tahsilata - Satış siparişi işleme sürecinizin potansiyelini keşfedin. Verimliliği artırmak ve nakit akışını hızlandırmak için bugün ilk adımı atın.
Siparişten Tahsilata satış sürecinizi bugün iyileştirin
Darboğazları ortadan kaldırın, çevrim süresini %30 azaltın ve nakit akışını hızla artırın.
Kredi kartı gerekmez. Kurulumu birkaç dakikada tamamlayın.