Siparişten Tahsilata - Satış Siparişi İşleme Veri Şablonunuz
Siparişten Tahsilata - Satış Siparişi İşleme Veri Şablonunuz
- Toplanması önerilen öznitelikler
- İzlenmesi gereken temel aktiviteler
- SAP ECC için veri çıkarma bilgileri
Siparişten Tahsilata - Satış Siparişi İşleme Öznitelikleri
| Ad | Açıklama | ||
|---|---|---|---|
| Satış siparişi SalesOrder | Tüm Siparişten Tahsilata sürecini izlemek için birincil vaka olarak kullanılan satış siparişi belgesinin benzersiz tanımlayıcısı. | ||
| Açıklama Satış Siparişi, satış sürecindeki merkezi belgedir ve müşterinin mal veya hizmet talebini temsil eder. Müşteri talebini baştan sona işlemek için gereken tüm bilgileri içerir. Process Mining kapsamında bu öznitelik Case ID olarak kullanılır. Her benzersiz Satış Siparişi numarası, uçtan uca tek bir süreç örneğini temsil eder. Süreçleri Satış Siparişi bazında analiz etmek, her müşteri siparişinin tüm yaşam döngüsünü izlemeyi, çevrim sürelerini ölçmeyi ve farklılıkları belirlemeyi sağlar. Neden önemli? Müşteri siparişi yolculuğundaki tüm ilgili faaliyetleri ve olayları birbirine bağlayan temel anahtardır. Böylece her sipariş uçtan uca analiz edilebilir. Nereden alınır? Satış Belgesi Başlık Verileri tablosunda (VBAK), VBELN alanında bulunur. Örnekler 900001234590000123469000012347 | |||
| Başlangıç Zamanı StartTime | Bir faaliyetin 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 faaliyetin gerçekleştiği kesin tarih ve saati kaydeder. Örneğin satış siparişinin ne zaman oluşturulduğunu, malların ne zaman çıkış yapıldığını veya faturanın ne zaman kaydedildiğini gösterir. Bu zaman damgası, Process Mining kapsamındaki tüm zaman bazlı analizlerin temelidir. Faaliyetler arasındaki çevrim sürelerini hesaplamak, bir vakanın toplam süresini ölçmek ve gecikmeleri veya darboğazları belirlemek için kullanılır. Doğru zaman damgaları, zamanında teslimat veya sipariş karşılama sürelerini izleyen Dashboard gibi performans analizleri için büyük önem taşır. Neden önemli? Çevrim süreleri ve toplam süreler gibi tüm performans metriklerini hesaplamak için gerekli temel özniteliklerden biridir. Bu metrikler, darboğazları belirlemede önemlidir. Nereden alınır? Bu, genellikle VBAK (Satış Siparişi), LIKP (Teslimat) ve VBRK (Fatura) gibi çeşitli SAP tablolarındaki bir tarih alanı (ör. ERDAT) ile bir 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 | |||
| Faaliyet Activity | Satış siparişi sürecinde gerçekleşen belirli bir iş adımının veya olayın adı. | ||
| Açıklama Bu öznitelik, Satın Almadan Ödemeye sürecindeki tek bir adımı açıklar. Örneğin Satış Siparişi Oluşturuldu, Teslimat Oluşturuldu veya Ödeme Alındı faaliyetlerini temsil eder. Bu faaliyetler, her satış siparişi için süreç akışını yeniden oluşturmak üzere kullanılan temel yapı taşlarıdır. Bu faaliyetlerin sırasını ve zamanlamasını analiz etmek, 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. Faaliyetler genellikle belge oluşturma olayları, durum değişiklikleri veya sistemde kaydedilen belirli işlem kodlarının bir arada değerlendirilmesiyle elde edilir. Neden önemli? Faaliyetler, 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, genellikle veri çıkarma sırasında SAP işlem kodlarının (T-Code), belge durumu değişikliklerinin (ör. VBUK, VBUP tablolarından) veya değişiklik belgesi günlüklerinin (CDHDR, CDPOS tabloları) kullanıcı dostu faaliyet adlarıyla eşleştirilmesiyle oluşturulan türetilmiş bir özniteliktir. Örnekler Satış siparişi oluşturulduTeslimat oluşturulduMal çıkışı yapıldıFatura oluşturulduÖdeme alındı | |||
| Kaynak Sistem SourceSystem | Verilerin hangi kaynak sistemden çıkarıldığını gösterir. | ||
| Açıklama Bu öznitelik, verinin geldiği sistemi belirtir. Örneğin belirli bir SAP ECC örneğinin adını veya istemci numarasını içerebilir. Özellikle birden fazla üretim sisteminin ya da eski sistemlerden gelen verilerin bulunduğu ortamlarda veriye bağlam kazandırır. Analiz sırasında verileri kaynağına göre filtrelemek veya segmentlere ayı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 faydalıdır. Neden önemli? Özellikle birden fazla sistemin bulunduğu ortamlarda gerekli bağlamı sağlar, süreçleri karşılaştırmanıza ve veri soyunun net kalmasına yardımcı olur. Nereden alınır? Bu değer genellikle veri çıkarma sırasında eklenir ve SAP Sistem Kimliğini (SAPSID) veya istemciyi (MANDT) temsil eden sabit bir değerdir. Örnekler ECC_PROD_800SAP_ERP_EU1ECC_QAS_300 | |||
| Son Veri Güncellemesi LastDataUpdate | Bu kayda ait verilerin 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 çıkarma ya da güncelleme işleminin tarih ve saatini kaydeder. Analiz edilen verilerin güncelliği hakkında şeffaflık sağlar. Dashboard ve raporlarda bu bilgi, içgörülerin ne kadar güncel olduğunu anlamanız için önemlidir. Analizin operasyonların mevcut durumunu yansıtıp yansıtmadığını veya eski verilere dayanıp dayanmadığını doğrulamanıza yardımcı olur. Böylece verilerin güncelliği konusunda beklentileri doğru yönetebilirsiniz. Neden önemli? Kullanıcıların verilerin güncelliğinden haberdar olmasını sağlar. Bu, Process Mining analizine dayanarak zamanında ve bilinçli kararlar almak için önemlidir. Nereden alınır? Bu, veri alma aracı veya süreci tarafından veri sisteme alındığı sırada 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 son değiştiren ya da faaliyeti 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ış görevlisini veya mal çıkışını kaydeden depo çalışanını gösterir. Süreci kullanıcı bazında analiz etmek, 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ı tespit etmeye yardımcı olur. Kaynak performansına, uyumluluğa ve manuel müdahalelerin belirlenmesine odaklanan Dashboard için gereklidir. Neden önemli? Kaynak performansı ve iş yükü hakkında görünürlük sağlar, kullanıcıya özgü süreç sapmalarını belirlemeye yardımcı olur ve uyumluluk ile otomasyon analizleri için temel oluşturur. 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. Tek bir satış siparişi birden fazla malzeme içerebildiği için bu öznitelik genellikle kalem düzeyinde analiz edilir. Süreci Malzeme Numarasına göre analiz etmek, ürüne özgü sorunları ortaya çıkarmaya yardımcı olur. Belirli ürünlerin daha uzun sipariş karşılama süreleri, daha yüksek teslimat blokesi oranları veya daha sık fatura uyuşmazlıklarıyla ilişkili olup olmadığını gösterebilir. Bu, farklı ürün gruplarına yönelik süreci optimize etmek için tedarik zinciri ve ürün yönetimi açısından önemlidir. Neden önemli? Ürün bazlı süreç analizi yapılmasını sağlar; gecikme, bloke veya yeniden işleme gibi verimsizliklerle ilişkili ürünleri ortaya çıkarır. 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 Satılan Tarafı temsil eder. İş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 segmentlere ayırmanızı sağlar. Hangi müşterilerin en uzun çevrim sürelerine veya en yüksek yeniden işleme oranlarına sahip olduğu ve siparişlerini en sık hangilerinin değiştirdiği gibi soruları yanıtlamaya yardımcı olur. Bu, müşteri ilişkileri yönetimini ve hizmet seviyelerini iyileştirmek için önemlidir. Neden önemli? Müşteri odaklı analiz yapılmasını sağlar; belirli müşterileri etkileyen süreç sorunlarını belirlemeye ve müşteriye özel 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 vergiler ve indirimler hariç satış siparişinin toplam değeri. | ||
| Açıklama Net Tutar, satış siparişinin parasal değerini temsil eder. Her süreç örneğiyle ilişkili temel finansal metriktir. Bu öznitelik, değer bazlı Process Mining için gereklidir. Yüksek değerli siparişlere odaklanarak süreç iyileştirme çalışmalarına öncelik vermenizi sağlar. Analistler gecikme veya yeniden işleme gibi süreç sorunlarını finansal etkiyle ilişkilendirebilir ve değişim 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ği analiz edilebilir. Neden önemli? Değer bazlı analiz yapılmasını sağlar ve şirket üzerinde en büyük finansal etkiye sahip siparişlerdeki 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 | |||
| Red Nedeni RejectionReason | Bir satış siparişi kaleminin neden reddedildiğini veya iptal edildiğini gösteren kod. | ||
| Açıklama Red Nedeni, bir satış siparişinin veya belirli bir kalemin neden karşılanmadığına ilişkin bağlam sağlar. Bunun nedeni müşterinin iptali, ürünün bulunmaması veya başka bir ticari gerekçe olabilir. Bu öznitelik, Satış Siparişi İptal Eğilimleri Dashboard için gereklidir. En yaygın red nedenlerini analiz ederek kaybedilen satışların temel nedenlerini belirleyebilirsiniz. Bu içgörü, sipariş iptal oranını azaltmak için stok yönetiminde, fiyatlandırma stratejisinde veya müşteri iletişiminde iyileştirmeler yapılmasını sağlayabilir. Neden önemli? Sipariş iptallerinin nedenini ortaya koyar; kaybedilen satışları azaltmak ve tahmin doğruluğunu iyileştirmek için kök neden analizi yapılmasını sağlar. 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, SAP'de şirketi satış gereksinimlerine göre yapılandıran temel organizasyon birimidir. Satış koşullarını müzakere etmekten ve mal ve hizmetlerin dağıtımından sorumludur. Process Mining kapsamında bu öznitelik, analiz için önemli bir boyuttur. 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 organizasyonlardaki iyi uygulamaları ve diğerlerindeki iyileştirme alanlarını belirleyebilirsiniz. Neden önemli? Organizasyonlar arası kıyaslama yapmanızı sağlar; farklı iş birimleri veya bölgelerdeki süreç verimliliğini ve uyumluluğu karşılaştırmaya yardımcı olur. Nereden alınır? Satış Belgesi Başlık Verileri tablosunda (VBAK), VKORG alanında bulunur. Örnekler 100025003100 | |||
| Teslimat Blokesi DeliveryBlock | Bir satış siparişinin teslimat için bloke edilip edilmediğini ve teslimat belgesi oluşturulmasını engelleyip engellemediğini gösteren 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 durumdur. Blokeler bir kullanıcı tarafından manuel olarak veya kredi limiti kontrolünün başarısız olması ya da eksik veri gibi nedenlerle sistem tarafından otomatik olarak atanabilir. Bu öznitelik, Satış Siparişi Blokajı ve Yeniden İşleme Analizi Dashboard için temel verilerden biridir. Teslimat blokelerinin sıklığını, süresini ve nedenlerini analiz etmek, 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ştirmek için önemlidir. Neden önemli? Sipariş karşılama sürecindeki darboğazları doğrudan gösterir. Siparişlerin neden ve ne sıklıkta bloke edildiğini analiz etmek, akış verimliliğini iyileştirmek için önemlidir. Nereden alınır? Satış Belgesi Başlık Verileri tablosunda (VBAK), LIFSK alanında bulunur. Örnekler 0102Z1 | |||
| Kredi Kontrolü Durumu CreditCheckStatus | Satış belgesine ilişkin kredi kontrolünün durumunu gösterir. | ||
| Açıklama Bu öznitelik, satış siparişi üzerinde gerçekleştirilen otomatik veya manuel kredi kontrolünün sonucunu gösterir. Yaygın durumlar Onaylandı, Reddedildi veya Bloke edildi şeklindedir. Bu, Kredi Kontrolü İşleme Süresi Analizi Dashboard için temel özniteliklerden biridir. Kredi kontrolü aşamasındaki gecikmeler veya blokeler, genel sipariş karşılama çevrim süresini önemli ölçüde etkileyebilir. Bu durumu analiz etmek, 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 analiz etmek, 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 içinde kredi durumu alanı olarak, örneğin CMGST alanında bulunur. Örnekler ABD | |||
| Onaylanan Teslimat Tarihi ConfirmedDeliveryDate | Mal veya hizmet teslimatının müşteriye yapılmasının onaylandığı 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ı Dashboard ve Zamanında Teslimat Oranı KPI'ının temelini oluşturur. Onaylanan Teslimat Tarihini gerçek Mal Çıkışı tarihiyle karşılaştırarak siparişin zamanında, erken veya geç teslim edilip edilmediği belirlenebilir. Bu, tedarik zinciri güvenilirliğinin ve müşteri memnuniyetinin temel göstergelerinden biridir. Neden önemli? Zamanında teslimat performansını ölçmek için kullanılan kıyaslama değeridir. Müşteri memnuniyeti ve tedarik zinciri verimliliği açısından önemli bir KPI'dır. Nereden alınır? Satış Belgesi Plan Satırı 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 stratejisini tanımlar. | ||
| Açıklama Sevkiyat Koşulları, siparişin nasıl gönderileceğini belirler. Örneğin Standart, Ekspres veya Elden Teslim seçeneklerini içerebilir. Bu koşullar müşteriyle kararlaştırılır ve lojistik planlamayı etkiler. Bu öznitelik, Sevkiyat Yöntemi Verimliliği ve Maliyeti analizinde kullanılır. Süreci sevkiyat koşullarına göre segmentlere ayırarak belirli yöntemlerin gecikmelere daha yatkın olup olmadığını veya daha uzun çevrim sürelerine sahip bulunup bulunmadığını analiz edebilirsiniz. Bu veri, lojistiği optimize etmeye ve teslimat süreleriyle ilgili müşteri beklentilerini yönetmeye yardımcı olur. Neden önemli? Lojistik performansını analiz etmenizi sağlar ve belirli sevkiyat yöntemlerinin gecikmelerle veya daha yüksek verimlilikle ilişkili olup olmadığını belirlemeye yardımcı olur. Nereden alınır? Satış Belgesi Başlık Verileri tablosunda (VBAK), VSBED alanında bulunur. Örnekler 011020 | |||
| Yeniden İşleme Var mı IsRework | Bir satış siparişinin oluşturulduktan sonra önemli bir değişiklik veya yeniden işleme faaliyeti geçirip geçirmediğini gösteren boolean işareti. | ||
| Açıklama Bu hesaplanan öznitelik, bir veya daha fazla Satış Siparişi Değiştirildi faaliyeti gibi yeniden işleme yaşanan süreç örneklerini belirler. Örneğin fiyat, miktar veya teslimat tarihindeki değişikliğin yeniden işleme sayılması gibi özel kurallar proje kurulumu sırasında tanımlanır. Bu öznitelik, Satış Siparişi Yeniden İşleme ve Değişiklik Sıklığı Dashboard ile Satış Siparişi Yeniden İşleme Oranı KPI'ı için önemlidir. Doğrudan filtreleme yaparak düz bir akış izleyen siparişlerle manuel değişiklik gerektiren siparişleri karşılaştırmanızı sağlar. Böylece yeniden işlemenin çevrim süreleri ve maliyetler üzerindeki etkisini ölçebilirsiniz. Neden önemli? Yeniden işlemenin sıklığını doğrudan ölçer; nedenlerini ve genel süreç verimliliği ile çevrim süresi üzerindeki etkisini analiz etmenizi sağlar. Nereden alınır? Bu, olay günlüğünden elde edilen hesaplanmış bir özniteliktir. Mantık, Satış Siparişi Değiştirildi faaliyetlerinin veya CDHDR/CDPOS tablolarındaki belirli değişiklik olaylarının bulunup bulunmadığını kontrol eder. Örnekler truefalse | |||
| Zamanında Teslimat Var mı IsOnTimeDelivery | Malların onaylanan teslimat tarihinde veya bu tarihten önce sevk edilip edilmediğini gösteren boolean işareti. | ||
| Açıklama Bu hesaplanan öznitelik, gerçek mal çıkışı tarihini bir satış siparişi için ConfirmedDeliveryDate ile karşılaştırır. Mal çıkışı tarihi onaylanan tarihte veya daha önceyse değer true, aksi durumda false olur. Bu öznitelik, Zamanında Teslimat Performansı Dashboard oluşturmayı ve Zamanında Teslimat Oranı KPI'ını hesaplamayı kolaylaştırır. Her analiz veya grafik içinde tarih karşılaştırması yapmadan performansı toplamanıza ve görselleştirmenize olanak tanır. Böylece teslimat güvenilirliğini bir bakışta gösteren net bir ölçüm sunar. Neden önemli? Teslimat performansını açık ve basit biçimde ölçer; genel Zamanında Teslimat Oranı KPI'ının kolayca hesaplanmasını sağlar. Nereden alınır? Bu, hesaplanan bir özniteliktir. Mantık, Mal Çıkışı faaliyetinin zaman damgasını ConfirmedDeliveryDate özniteliğindeki değerle karşılaştırır. Örnekler truefalse | |||
Siparişten Tahsilata - Satış Siparişi İşleme Faaliyetleri
| Aktivite | Açıklama | ||
|---|---|---|---|
| Fatura oluşturuldu | Müşteri faturasının veya faturalandırma belgesinin oluşturulmasını belirtir. Bu, sistemde yeni bir belge oluşturan ve sürecin ödeme aşamasını başlatan açık bir olaydır. | ||
| Neden önemli? Faturadan Ödemeye Çevrim Süresi için sürenin başladığı önemli bir kilometre taşıdır. Faturalandırmadaki gecikmeler nakit akışını doğrudan etkiler. Nereden alınır? VBRK tablosuna oluşturma tarihine (ERDAT) göre kaydedilir (Faturalandırma Belgesi: Başlık Verileri). Satış siparişi veya teslimatla bağlantı VBFA tablosunda bulunur. Yakalayın VBRK tablosundaki oluşturma zaman damgasına (ERDAT) dayalı olay. Olay türü explicit | |||
| Mal çıkışı yapıldı | Malların mülkiyetinin devredildiği ve malların resmî olarak depodan çıktığı önemli bir olaydır. Malzeme belgesi oluşturan ve stokları güncelleyen açık bir finansal kayıttır. | ||
| Neden önemli? Bu, sevkiyat olayıdır ve zamanında teslimatı ve sipariş karşılama çevrim sürelerini ölçmek için önemli bir kilometre taşıdır. Finansal güncellemeleri tetikler ve fiziksel sipariş karşılama sürecinde geri dönüşü olmayan bir noktayı belirtir. Nereden alınır? Teslimat belgesiyle ilişkilendirilmiş, mal çıkışı hareket türüne (örneğin 601) sahip bir malzeme belgesinin (MKPF/MSEG) oluşturulmasıdır. Yakalayın Teslimatla ilişkilendirilmiş, mal çıkışı hareket türüne sahip bir malzeme belgesinin (MKPF/MSEG) oluşturulmasıdır. Olay türü explicit | |||
| Ödeme alındı | Müşteri ödemesinin alınıp faturaya işlendiğini ve açık alacak kaleminin kapatıldığını gösterir. Bu, bir finansal belgenin kapatılmasından çıkarılan bir muhasebe olayıdır. | ||
| Neden önemli? Satıştan nakdin gerçekleşmesindeki son adımdır. Faturadan Ödemeye Çevrim Süresini ve genel Satış Siparişi Karşılama Çevrim Süresini ölçmenin bitiş noktasıdır. Nereden alınır? Müşteri kalemi için BSEG tablosundaki kapatma belgesi bilgilerinden çıkarılır. BSEG-AUGBL (Kapatma Belgesi) ve BSEG-AUGDT (Kapatma Tarihi) alanları doldurulduğunda ödeme alınmış olur. Yakalayın Alacak kalemi için BSEG tablosundaki kapatma tarihinin (AUGDT) doldurulmasından çıkarılır. Olay türü inferred | |||
| Satış siparişi oluşturuldu | Yeni bir satış siparişi belgesinin oluşturulmasını belirtir. Bu, kullanıcının genellikle SAP'deki VA01 işlemi üzerinden yeni bir siparişi kaydettiğinde yakalanan açık bir olaydır. | ||
| Neden önemli? Bu, Siparişten Tahsilata sürecinin birincil başlangıç olayıdır. Zamanlamasını analiz etmek, genel çevrim süresini ve sipariş giriş oranlarını ölçmek için önemlidir. Nereden alınır? VBAK tablosuna, oluşturma tarihi (ERDAT) ve saati (ERZET) kullanılarak kaydedilir. İşlem kodu VBAK-TCODE alanında tutulur. Yakalayın VBAK tablosundaki oluşturma zaman damgasına (ERDAT, ERZET) dayalı olay. Olay türü explicit | |||
| Sipariş kalemi kapatıldı | Satış siparişi kaleminin tamamen teslim edildiğini, faturalandırıldığını ve tamamlanmış kabul edildiğini gösteren son kapatma faaliyetidir. Kalemin genel durumundan çıkarılır. | ||
| Neden önemli? Sürecin başarılı bitiş olayıdır. Kalemlerin ne zaman kapandığını analiz etmek, uçtan uca süreç süresini anlamaya ve gereksiz yere açık kalan siparişleri belirlemeye yardımcı olur. Nereden alınır? Kalem için VBUP tablosundaki genel durum alanından (Satış Belgesi: Kalem Durumu) çıkarılır. VBUP-GBSTA 'C' (Tamamen işlendi) olduğunda kalem kapanır. Yakalayın Kalem durumunun (VBUP-GBSTA) 'C' (Tamamen işlendi) değerine değişmesinden çıkarılır. Olay türü inferred | |||
| Sipariş onaylandı | Bu faaliyet, satış siparişinin tüm ilk kontrollerden geçtiğini ve sipariş karşılamaya hazır olduğunu gösterir. Genellikle sipariş artık bloke olmadığında ve plan satırlarında onaylanmış miktarlar bulunduğunda çıkarılır. | ||
| Neden önemli? Bu, sipariş girişiyle sipariş karşılamayı birbirinden ayıran önemli bir kilometre taşıdır. Sipariş karşılama çevrim sürelerini ve zamanında teslimat performansını ölçmenin başlangıç noktasıdır. Nereden alınır? VBEP içindeki plan satırlarında onaylanmış miktar (BMENG > 0) bulunduğunda ve sipariş teslimat için bloke olmadığında, örneğin VBUK-LIFSK boş olduğunda, çıkarılabilir. Yakalayın Plan satırı onayından (VBEP-BMENG > 0) ve başlık düzeyindeki blokelerin kaldırılmasından çıkarılır. Olay türü inferred | |||
| Fatura iptal edildi | Daha önce oluşturulmuş bir faturalandırma belgesinin ters kaydını ifade eder. Orijinali dengelemek üzere yeni bir iptal belgesi oluşturan açık bir işlemdir. | ||
| Neden önemli? Fatura iptallerini izlemek, fiyatlandırma, sevkiyat uyuşmazlıkları veya veri hatalarıyla ilgili sorunları belirlemeye yardımcı olur. Bu, Fatura Uyuşmazlık Oranı KPI'ını destekler. Nereden alınır? İptal faturalandırma belgesinin (VBRK-VBTYP = 'N' veya 'O') oluşturulmasıyla yakalanan açık bir olaydır. Orijinal faturaya VBRK-SFAKN alanında referans verilir. Yakalayın Orijinal faturaya referans veren bir iptal belgesinin VBRK'da oluşturulmasıdır. Olay türü explicit | |||
| Kredi kontrolü gerçekleştirildi | 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 çıkarılır. | ||
| Neden önemli? Kredi kontrolü çoğu zaman önemli bir darboğazdır. Bu adım için gereken süreyi ölçmek, Kredi Kontrolü İşleme Süresi Analizi ve sipariş işlemlerini hızlandırmak açısından gereklidir. Nereden alınır? VBUK tablosundaki kredi durumu alanlarından (Satış Belgesi: Başlık Durumu) çıkarılır. VBUK-CMGST alanının blokeli durumdan serbest duruma geçmesi bu faaliyeti belirtir. Yakalayın Genel kredi durumu alanındaki (VBUK-CMGST) değişikliklerden çıkarı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ında (CDHDR, CDPOS) yakalanır. | ||
| Neden önemli? Değişiklikleri izlemek, yeniden işlemeyi, süreç istikrarsızlığını ve veri kalitesi sorunlarını belirlemeye yardımcı olur. Değişikliklerin sık olması, ilk sipariş girişi sürecindeki sorunlara ve gecikmelere işaret edebilir. 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. Yakalayın Satış belgesi nesnelerine ilişkin değişiklik belgesi tablolarından (CDHDR, CDPOS) alınan olay. Olay türü explicit | |||
| Sipariş iptal edildi | Bir satış siparişinin sipariş karşılanmadan önce iptal edildiğini gösterir. Genellikle siparişteki ilgili tüm kalemlere ret nedeni uygulanmasıyla yakalanır. | ||
| Neden önemli? Sipariş İptal 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 hakkında içgörü sağlar. Nereden alınır? Bir satış siparişindeki tüm etkin kalemler için VBAP-ABGRU (Ret nedeni) alanının doldurulmasından çıkarılır. Değişiklik tarihi CDHDR/CDPOS tablolarında bulunabilir. Yakalayın Tüm kalemlerdeki Ret Nedeni alanının (VBAP-ABGRU) doldurulmasından çıkarılır. Olay türü inferred | |||
| Teslimat blokesi konuldu | Satış siparişine teslimat blokesi uygulanarak teslimat belgesinin oluşturulmasının engellendiği bir işlemi ifade eder. Bu durum değişiklik günlüklerinden açıkça alınabilir veya durum tablolarından çıkarılabilir. | ||
| Neden önemli? Bu faaliyet, Satış Siparişi Blokaj Oranı KPI'ıyla doğrudan ilişkilidir. Blokelerin neden ve ne sıklıkta konulduğunu belirlemek, sipariş karşılama gecikmelerinin nedenlerini ortaya çıkarmaya yardımcı olur. Nereden alınır? VBAK-LIFSK alanına ilişkin değişiklik günlüklerinde (CDHDR/CDPOS) bulunabilir. Alternatif olarak VBAK-LIFSK alanının ne zaman doldurulduğu gözlemlenerek çıkarılır. Yakalayın VBAK-LIFSK veya VBAP-LIFSP alanına ilişkin değişiklik belgelerinden alınan olay. Olay türü explicit | |||
| Teslimat kanıtı onaylandı | Müşterinin malları teslim aldığının onaylanmasını ifade eder. Teslimat kanıtı sisteme kaydedildiğinde, çoğu zaman teslimat belgesinin durumu güncellenerek yakalanır. | ||
| Neden önemli? Bu olay, taahhüt edilen tarihe göre Zamanında Teslimat Oranını doğru biçimde ölçmek için gerekli olan gerçek teslimat tarihini sağlar. Nereden alınır? Teslimat kanıtı durumunun (VBUK-PODAT) 'C' (Onaylandı) olarak ayarlanmasından çıkarılır. Onay tarihi VLPOD-PODAT alanında tutulur. Bu özellik her sistemde uygulanmamış olabilir. Yakalayın Teslimattaki POD durum güncellemesinden (VBUK-PODAT) veya VLPOD tablosundaki kayıttan çıkarılır. Olay türü inferred | |||
| Teslimat oluşturuldu | Depoya toplama ve sevkiyat faaliyetlerini başlatma talimatı olan çıkış teslimatı belgesinin oluşturulmasını belirtir. Bu, belge akışından açıkça alınan bir olaydır. | ||
| Neden önemli? Fiziksel sipariş karşılama sürecinin ilk adımıdır. Sipariş onayı ile teslimat oluşturma arasındaki süre, lojistik sürecin ne kadar hızlı başlatıldığını gösterir. Nereden alınır? LIKP tablosunda bir kaydın oluşturulmasıdır (SD Belgesi: Teslimat Başlık Verileri). Satış siparişiyle bağlantı, VBFA belge akışı tablosunda tutulur. Yakalayın VBFA tablosu üzerinden ilişkilendirilen LIKP tablosundaki oluşturma zaman damgasına dayalı olay. Olay türü explicit | |||
| Toplama tamamlandı | Teslimattaki tüm kalemlerin depodan fiziksel olarak toplandığını gösterir. Warehouse Management (WM) kullanılıyorsa bu durum Transfer Order durumundan çıkarılabilir. | ||
| Neden önemli? Toplama süresini analiz etmek depo operasyonlarını optimize etmeye yardımcı olur. Bu aşamadaki gecikmeler, genel sevkiyat zaman çizelgesini ve sipariş karşılama çevrimini doğrudan etkiler. Nereden alınır? LIPS-KOSTA tablosundaki teslimat kalemi toplama durumunun 'C' (tam toplandı) değerine değişmesinden çıkarılır. WM etkinse Transfer Order onayından (LTAK/LTAP tabloları) çıkarılabilir. Yakalayın Toplama durumundaki değişiklikten (LIPS-KOSTA) veya WM Transfer Order onayından çıkarılır. Olay türü inferred | |||
Çıkarma rehberleri
Adımlar
- Program geliştirme: SE38 veya SE80 işlem kodunu kullanarak yeni bir çalıştırılabilir ABAP programı oluşturun. Bu program, tüm veri çıkarma mantığını içerecektir.
- Seçim ekranını tanımlayın: Verileri filtrelemek için programınızda 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 kolayca 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 gerekli özniteliklerle eşleşen olay günlüğü için nihai çıktı yapısını tanımlayın.
- Temel satış siparişlerini seçin: Kullanıcının seçim ekranındaki girdilerine 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şturma' olayını çıkarın: Seçilen VBAK kayıtları arasında döngü kurun. Her kayıt için olay günlüğü yapısını 'Satış Siparişi Oluşturuldu' etkinliğiyle doldurun ve StartTime değerinde VBAK-ERDAT ile VBAK-ERZET alanlarını kullanın.
- Değişiklik günlüğü olaylarını çıkarın: Seçilen satış siparişleri için OBJECTCLAS değeri 'VERKBELEG' olan CDHDR ve CDPOS kayıtlarını seçin. Belirli alan değişikliklerini tespit etmek için sonuçlar arasında döngü kurun. Örneğin, VBAK-LIFSK alanındaki değişiklik 'Teslimat Bloku Ayarlandı', 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 günlüğe 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 olaylarını çıkarın: VBFA'daki teslimat belge numaralarını kullanarak 'Teslimat Oluşturuldu' olayları için LIKP ve LIPS tablolarını sorgulayın. Mal çıkışı belgelerinde (hareket türü '601') 'Mal Çıkışı Yapıldı' olayını yakalamak için MKPF ve MSEG tablolarını sorgulayın. Warehouse Management etkinse, son transfer order kaleminin onay zamanını bulmak ve 'Toplama Tamamlandı' olayını belirlemek için LTAK ve LTAP tablolarını sorgulayın. 'Teslimat Kanıtı Onaylandı' olayı için teslimat başlığındaki VBUK-PODAT durumunu kontrol edin.
- Faturalama ve ödeme olaylarını çıkarın: Faturalama belge numaralarını kullanarak 'Fatura Oluşturuldu' ve 'Fatura İptal Edildi' (VBRK-FKSTO = 'X' olduğunda) olaylarını yakalamak için VBRK ve VBRP tablolarını sorgulayın. 'Ödeme Alındı' olayını bulmak için VBRK'daki faturayı BKPF'deki muhasebe belgesine bağlayın, ardından BSAD'deki mahsup belgesini ve mahsup tarihini bulun.
- Duruma dayalı olayları çıkarın: İş olaylarını belirlemek için durum tabloları VBUP (Kalem Durumu) ve VBUK'ı (Başlık Durumu) kullanın. Örneğin, VBUP-GBSTA değeri 'C' olduğunda kalem 'Sipariş Kalemi Kapatıldı' olarak kabul edilir. İlgili tüm kalemler için 'Red Nedeni' (VBAP-ABGRU) ayarlandığında sipariş 'Sipariş İptal Edildi' olarak değerlendirilir.
- Birleştirin ve biçimlendirin: Yakalanan tüm olayları tek bir nihai dahili tabloda birleştirin. Her olay kaydında tüm özniteliklerin (SalesOrder, Activity, StartTime, User vb.) doğru şekilde doldurulduğundan emin olun. SourceSystem ve LastDataUpdate zaman damgalarını ekleyin.
- Çıktı dosyasını oluşturun: Nihai dahili tabloyu kullanıcının yerel bilgisayarındaki bir CSV dosyasına aktarmak için GUI_DOWNLOAD işlev modülünü veya cl_gui_frontend_services=>gui_download yöntemini kullanın. Dosyanın UTF-8 kodlamasıyla kaydedildiğinden emin olun.
Yapılandırma
- Ön koşullar: ABAP geliştirici yetkilendirmeleri (ör. SE38 işlem koduna 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 parametrelerini içeren bir seçim ekranı bulunmalıdır. Temel parametreler şunlardır:
- Tarih aralığı: Satış siparişinin oluşturulması için zorunlu bir tarih aralığı (VBAK-ERDAT). Veri setini yönetilebilir tutmak için 3-6 aylık yakın bir 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 diğerlerini (ör. teklifler, iadeler) hariç tutmak için VBAK-AUART alanına göre filtreleyin.
- Performans değerlendirmeleri: Büyük veri hacimlerinde değişiklik günlüğü tablolarından (CDHDR, CDPOS) ve belge akışından (VBFA) veri çıkarmak çok yavaş olabilir. Program, WHERE koşullarında dizin alanlarını kullanacak şekilde optimize edilmelidir. Çok büyük veri çıkarma işlemlerinde programı, SM36 işlem kodunu kullanarak yoğun olmayan saatlerde arka plan işi olarak çalışacak şekilde planlayın.
- Değişiklik günlüğünün etkinleştirilmesi: 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 günlüğünün etkin olduğunu doğrulayın. Bu kontrol, VERKBELEG nesnesi için SCDO işlem kodu üzerinden yapılabilir.
a Ö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ğlanmak ve sorguları çalıştırmak için DBeaver, SQL Server Management Studio veya Oracle SQL Developer gibi bir veritabanı istemci aracına ihtiyacınız olacaktır.
- SQL betiğini edinin: Bu belgenin 'query' bölümünde verilen SQL sorgusunun tamamını kopyalayın.
- Veritabanına bağlanın: Veritabanı istemcinizi açın ve SAP ECC veritabanı örneğine bağlantı kurun. Sunucu adresine, bağlantı noktasına, veritabanı adına ve uygun giriş bilgilerine ihtiyacınız olacaktır.
- Sorguyu yapılandırın: SQL betiğini yeni bir sorgu düzenleyicisi penceresine yapıştırın. SalesOrders adlı ana Common Table Expression (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ırılmış 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 bir sonuç kümesi görüntülenir. Beklenen sütunların (SalesOrder, Activity, StartTime vb.) bulunduğundan ve çeşitli etkinlikler için satır döndürüldüğünden emin olmak amacıyla verileri kısaca tarayın.
- Verileri dışa aktarın: Sonuç kümesini CSV dosyası olarak kaydetmek için veritabanı istemcinizin dışa aktarma işlevini kullanın. SAP_O2C_Event_Log.csv gibi açıklayıcı bir dosya 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 tam olarak eşleştiğini (ör. SalesOrder, Activity, StartTime) doğrulayın. StartTime ve LastDataUpdate için tarih ve saat biçiminin YYYY-MM-DD HH:MI:SS gibi tutarlı ve ProcessMind tarafından desteklenen bir biçimde olduğundan emin olun.
- ProcessMind'e yükleyin: Son ve 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. Temsili bir örneklem elde etmek ve veritabanı yükünü gereksiz yere artırmamak için genellikle 3 ila 6 aylık veri analiz edilir.
- Satış Organizasyonu Filtresi: Çıkarma işlemini belirli satış organizasyonlarıyla sınırlamak için '{SalesOrgs}' yer tutucusunu kullanın, örneğin '1000' veya '2000'. Bu, analizi belirli bir kapsama odaklamak ve sorgu performansını iyileştirmek için önemlidir.
- Belge Türü Filtresi: Belirli satış siparişi türlerini seçmek için '{DocTypes}' yer tutucusunu kullanın, örneğin Standart Sipariş için 'OR'. Böylece ücretsiz teslimatlar veya iadeler gibi ilgili olmayan belgeleri ana süreç akışının dışında bırakabilirsiniz.
- Kaynak Sistem Tanımlayıcısı: Her kaydı kaynak sistemiyle etiketlemek için sabit bir '{SourceSystemName}' yer tutucusu kullanılır. Bu değer, SAP ECC örneğiniz için SAP_ECC_PRD gibi anlamlı bir adla ayarlanmalıdır.
- Veritabanı Uyumluluğu: Tarih ve saat alanlarını birleştirmek için kullanılan [Your DB-specific timestamp function] işlevi bir yer tutucudur. Bunu kullandığınız veritabanına uygun işlevle değiştirmeniz gerekir. Örneğin SAP HANA için TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UZEIT), 'YYYYMMDDHH24MISS'), SQL Server için CAST(CDHDR.UDATE AS DATETIME) + CAST(CDHDR.UZEIT AS DATETIME) kullanılabilir.
- Ön koşullar: Bu yöntem, doğrudan ve salt okunur veritabanı kimlik bilgileri gerektirir. Veritabanı kullanıcısının VBAK, VBAP, VBFA, CDHDR, CDPOS, LIKP, VBRK ve BSAD dahil olmak üzere sorguda başvurulan tüm tablolara erişim yetkisi olmalıdır.
a Ö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 şablonundan yararlanarak Siparişten Tahsilata - Satış Siparişi İşleme sürecinizin tüm potansiyelini ortaya çıkarın. Daha yüksek verimlilik ve hızlanan nakit akışı için bugün ilerlemeye başlayın.
Siparişten Tahsilata Satış İşleme sürecinizi bugün optimize edin
Darboğazları ortadan kaldırın, çevrim süresini %30 azaltın ve nakit akışını hızla artırın.
Kredi kartı gerekmez. Kurulum birkaç dakika içinde tamamlanır.