Veri Template: Satın Almadan Ödemeye - Satınalma Siparişi
Satın Alma'dan Ödeme'ye - Satın Alma Siparişi Veri Template'iniz
- Toplanması Önerilen Nitelikler
- Takip Edilmesi Gereken Temel Aktiviteler
- SAP ECC için Veri Çıkarım Rehberliği
Satın Alma'dan Ödemeye - Satın Alma Siparişi Nitelikleri
| Ad | Açıklama | ||
|---|---|---|---|
Aktivite Activity | Satınalma siparişi yaşam döngüsü içinde gerçekleşen belirli iş olayının veya adımının adı. | ||
Açıklama Bu öznitelik, 'Satın Alma Siparişi Oluşturuldu', 'Satın Alma Siparişi Onaylandı' veya 'Mal Kabulü Kaydedildi' gibi süreçteki tek bir adımı açıklar. Bu activity'lerin sırası, her bir satın alma siparişi için process flow'unu oluşturur. Activity'ler arasındaki sırayı, sıklığı ve süreyi analiz etmek, Process Mining'in çekirdeğidir. Bottleneck'leri (darboğazları), yeniden işleme döngülerini ve standart süreçten sapmaları belirlemeye yardımcı olarak hedeflenmiş iyileştirmeler ve standardizasyon çabaları sağlar. Neden önemli Aktiviteler sürecin adımlarını tanımlar. Sıralarını ve zamanlamalarını analiz etmek, gerçek süreç akışını, darboğazları ve sapmaları ortaya çıkarır. Nereden alınır Değişiklikler için CDHDR/CDPOS, GR/IR için EKBE ve talepler için EBAN gibi çeşitli SAP tablolarından ve işlem loglarından türetilmiştir. Genellikle özel bir mantık veya çıkarma programı gerektirir. Örnekler Satın Alma Siparişi OluşturulduSatın Alma Siparişi OnaylandıMal Kabulü Kaydedildi | |||
Olay Zamanı EventTime | Aktivitenin meydana geldiği kesin tarih ve saat. | ||
Açıklama Bu zaman damgası, bir Satın Alma Siparişi'nin onaylandığı veya bir mal kabulünün kaydedildiği an gibi, bir olayın tam olarak ne zaman gerçekleştiğini işaretler. Bir vaka içindeki tüm aktiviteler için kronolojik sırayı sağlar. Zaman damgaları, tüm zaman tabanlı analizleri mümkün kıldığı için Process Mining için temeldir. Bu, aktiviteler arasındaki cycle time'ları hesaplamayı, gecikmeleri belirlemeyi, süreç verimini analiz etmeyi ve Hizmet Seviyesi Anlaşmaları (SLA)'na karşı performansı ölçmeyi içerir. Neden önemli Bu zaman damgası, cycle time ve bottleneck gibi süre tabanlı tüm metrikleri hesaplamak ve olayları kronolojik olarak sıralamak için kritik öneme sahiptir. Nereden alınır SAP tablolarındaki çeşitli tarih ve saat alanlarından türetilmiştir; örneğin EKKO-AEDAT (Değişiklik Tarihi), CDHDR-UDATE/UTIME (Değişiklik Günlüğü Timestamp) veya EKBE-BUDAT (Kayıt Tarihi). Örnekler 2023-04-15T10:05:31Z2023-04-16T14:22:00Z2023-05-01T09:00:15Z | |||
Satın Alma Siparişi PurchaseOrder | Satın Alma Siparişi (SS) belgesi için benzersiz tanımlayıcı olup, tedarik sürecini izlemek için birincil case olarak hizmet eder. | ||
Açıklama Satın Alma Siparişi numarası, oluşturulmasından nihai mal kabulüne ve tamamlanmasına kadar tüm activity'leri birbirine bağlayan merkezi bir tanımlayıcıdır. Her benzersiz Satın Alma Siparişi numarası, tedarik sürecinin tek bir örneğini temsil eder. Process Mining'de bu öznitelik, her bir satın almanın uçtan uca yolculuğunu yeniden yapılandırmak için esastır. Her bir sipariş için cycle time'ları, süreç varyasyonları ve uyumluluk kontrollerinin detaylı analizini sağlayarak tüm süreç modelinin temelini oluşturur. Neden önemli Bu, tüm ilgili eventleri birbirine bağlayan ve her bir Satın Alma Siparişinin eksiksiz yaşam döngüsünü analiz etmeyi mümkün kılan çekirdek tanımlayıcıdır. Nereden alınır Tablo: EKKO, Alan: EBELN Örnekler 450001762345000176244500017625 | |||
Belge Türü DocumentType | Farklı türdeki satınalma siparişlerini sınıflandıran bir kod. | ||
Açıklama Belge Türü, bir satın alma siparişi için numara aralığını, alan seçimini ve genel process flow'unu kontrol eden bir SAP yapılandırmasıdır. Örneğin, standart satın alma siparişleri, hizmet satın alma siparişleri veya stok nakil siparişleri için farklı türler bulunabilir. Bu öznitelik analiz için güçlü bir boyut sunar, çünkü farklı belge türleri genellikle bilerek farklı süreçlere tabi olur. Belge türüne göre filtreleme yapmak, cycle time'ları ve process flow'ları arasında daha doğru ve adil bir karşılaştırma yapmaya olanak tanır. Neden önemli Genellikle farklı yollara ve performans beklentilerine sahip olan farklı satın alma süreçleri (örn. standart, hizmet, iade) arasında ayrım yapar. Nereden alınır Tablo: EKKO, Alan: BSART Örnekler NBFOUB | |||
Kullanıcı Adı UserName | Activity'yi gerçekleştiren kişinin kullanıcı kimliği. | ||
Açıklama Bu öznitelik, bir belgeyi oluşturan, değiştiren veya onaylayan çalışanın SAP kullanıcı adını yakalar. Otomatik adımlar için bir sistem veya toplu iş kullanıcı kimliği gösterebilir. Kullanıcıya göre analiz, eğitim ihtiyaçlarını, yüksek performanslı bireyleri veya potansiyel uyumluluk sorunlarını belirlemeye yardımcı olur. İş yükü dağılımı, onay matrisi uyumluluğu ve farklı ekiplerin veya bireylerin performansını anlamaya yönelik Dashboard'lar oluşturmak için anahtar niteliğindedir. Neden önemli Kullanıcı eylemlerini belirli kişilere atfeder; bu da kullanıcı performansının, iş yükünün ve uyumluluk protokollerine bağlılığın analiz edilmesini sağlar. Nereden alınır Tablo: EKKO, Alan: ERNAM (Oluşturan); Tablo: CDHDR, Alan: USERNAME (Değiştiren). Örnekler JSMITHMBROWNBATCH_USER | |||
Malzeme Grubu MaterialGroup | Malzemeleri veya hizmetleri benzer özelliklerine göre gruplandırmak için kullanılan bir sınıflandırma. | ||
Açıklama Malzeme Grubu veya satın alma kategorisi, tedarik edilen mal veya hizmet türünü sınıflandırmak için kullanılır. Örnek olarak 'BT Donanımı', 'Ofis Malzemeleri' veya 'Profesyonel Hizmetler' verilebilir. Bu öznitelik harcama analizi ve tedarik kalıplarını anlamak için kritik öneme sahiptir. Sürecin filtrelenmesiyle, farklı kategorilerin nasıl ele alındığı, kimlerin onayladığı ve hangi satıcıların tedarik ettiği analiz edilebilir. Bu, 'Satın Alma Siparişi Değer Analizi' Dashboard'unda temel bir boyuttur. Neden önemli Sürecin ürün veya hizmet kategorisine göre segmentlere ayrılmasını sağlayarak, farklı harcama türleri için farklı davranışları, döngü sürelerini veya tedarikçileri ortaya çıkarır. Nereden alınır Tablo: EKPO, Alan: MATKL Örnekler 00101IT_HWCONSULT | |||
Sipariş Tutarı OrderAmount | Satın alma siparişi kaleminin toplam parasal değeri. | ||
Açıklama Bu öznitelik, satın alma siparişindeki belirli bir kalem öğesinin miktar ile net fiyatın çarpılmasıyla hesaplanan toplam değerini temsil eder. Tam bir satın alma siparişi değeri için kalem tutarlarının toplanması gerekir. Süreci sipariş tutarına göre analiz etmek, daha sıkı kontroller veya farklı onay yolları gerektirebilecek yüksek değerli işlemleri belirlemek için kritik öneme sahiptir. 'Satın Alma Siparişi Değer Analizi' Dashboard'unu destekler ve mali açıdan en önemli siparişlerdeki süreç iyileştirme çabalarına öncelik verilmesine yardımcı olur. Neden önemli Her satın almanın finansal etkisini ölçerek, yüksek değerli siparişlere öncelik vermek veya maliyet tasarrufu fırsatlarını belirlemek için değere dayalı analiz yapmayı sağlar. Nereden alınır Tablo: EKPO, Alan: NETWR (Net Sipariş Değeri). Örnekler 1500.00250.7512345.50 | |||
Şirket Kodu CompanyCode | Satın almayı başlatan tüzel kişilik veya şirket için tanımlayıcı. | ||
Açıklama Şirket Kodu, SAP'de bağımsız bir yasal varlığı temsil eder. Tüm işlemler şirket kodu düzeyinde kaydedilir ve bu onu temel bir organizasyonel birim yapar. Süreci Şirket Koduna göre analiz etmek, farklı iş birimleri veya ülkeler arasında tedarik verimliliği ve uyumluluk karşılaştırmasına olanak tanır. Bir varlıkta başka yerlerde de tekrarlanabilecek en iyi uygulamaları belirlemeye veya süreçle ilgili zorluk yaşayan belirli birimleri tespit etmeye yardımcı olur. Neden önemli Yasal bir varlığı temsil eder ve kuruluşun farklı bölümleri arasında süreç performansı karşılaştırması ve uyumluluk kontrolleri yapılmasına olanak tanır. Nereden alınır Tablo: EKKO, Alan: BUKRS Örnekler 10002100US01 | |||
Tedarikçi Numarası VendorNumber | Satıcı veya tedarikçi için benzersiz tanımlayıcı. | ||
Açıklama Bu, mal veya hizmetlerin tedarik edildiği tedarikçiyi benzersiz şekilde tanımlayan koddur. Tedarik sürecindeki ana datanın kritik bir parçasıdır. Bu öznitelik, tedarikçi merkezli analiz için çok önemlidir. Tedarikçi teslimat performansının değerlendirilmesine, farklı tedarikçiler arasındaki tedarik sürelerinin karşılaştırılmasına ve harcama alışkanlıklarının analizine olanak tanır. 'Tedarikçi Teslimat Performansı' Dashboard'u için birincil boyuttur. Neden önemli Tedarikçi performans analizini mümkün kılarak, güvenilir tedarikçileri ve gecikmelere veya kalite sorunlarına neden olanları belirlemeye yardımcı olur. Nereden alınır Tablo: EKKO, Alan: LIFNR Örnekler 100345V-20598700112 | |||
Kaynak Sistem SourceSystem | Verilerin çekildiği sistem. | ||
Açıklama Bu öznitelik, datanın kaynağını tanımlar ve genellikle bir SAP ECC örnek tanımlayıcısıdır (örn. 'ECC_PROD_100'). Birden fazla sistemin kullanıldığı ortamlarda, data kaynaklarını ayırt etmeye yardımcı olur. Yönetişim ve data kökeni için, kaynak sistemi bilmek çok önemlidir. Bu, data bütünlüğünü sağlar ve özellikle data farklı ERP sistemlerinden veya modüllerinden birleştirildiğinde, data çıkarma veya kalite sorunlarının giderilmesine yardımcı olur. Neden önemli Verinin kaynağını belirler; bu da veri yönetişimi, doğrulama ve birden çok sistemdeki analizleri yönetmek için kritik öneme sahiptir. Nereden alınır Bu, genellikle veri çıkarma sürecinde veri setini kaynak sistemiyle etiketlemek için eklenen statik bir değerdir. Örnekler SAP_ECC_PRODECC_EU_100S4H_FIN | |||
Onay Sonrası Değişiklik IsPostApprovalChange | İlk onaydan sonra bir satın alma siparişi (PO) değişikliği olup olmadığını gösteren bir işaret. | ||
Açıklama Bu boolean özniteliği, aynı Satın Alma Siparişi için 'Satın Alma Siparişi Onaylandı' aktivitesinden sonra bir 'Satın Alma Siparişi Değiştirildi' aktivitesinin tespit edilmesi durumunda doğrudur. Sürecin geç aşamalarında meydana gelen sorunlu değişiklikleri izole etmeye yardımcı olur. Bu hesaplanan alan, 'Onay Sonrası PO Değişim Oranı' KPI'ını ve 'Satın Alma Siparişi Yeniden İşleme ve Değişiklikler' Dashboard'unu doğrudan destekler. Gecikmelere neden olabilecek ve yeniden onay gerektirebilecek kesintili değişiklikleri nicelendirerek öne çıkarmaya yardımcı olur; bu da ilk spesifikasyon veya kapsam belirleme sürecindeki sorunlara işaret eder. Neden önemli Onay sonrası yeniden işi doğrudan ölçer; bu, süreç istikrarı ve verimliliği için kritik bir KPI'dır. Yüksek oranlar, üst akış gereksinim tanımlarında sorunlar olduğunu gösterir. Nereden alınır Bu, Event Log'daki Activity dizisinden türetilen hesaplanmış bir niteliktir. Örnekler truefalse | |||
Para Birimi Currency | Satın alma siparişi tutarı için para birimi kodu. | ||
Açıklama Bu öznitelik, satın alma siparişi değerinin para birimini (örn. USD, EUR veya GBP) belirtir. Tüm parasal değerler için temel bir bağlam sağlar. Küresel kuruluşlar için para birimi, doğru finansal analiz için hayati önem taşır. Sipariş değerlerinin doğru şekilde toplanmasını ve karşılaştırılmasını sağlar; tüm parasal KPIlar kendi para birimi bağlamında yorumlanmalıdır. Neden önemli Tüm parasal değerler için gerekli bağlamı sağlayarak, özellikle çok uluslu kuruluşlarda doğru finansal analiz yapılmasını güvence altına alır. Nereden alınır Tablo: EKKO, Alan: WAERS Örnekler USDEURJPY | |||
Ret Nedeni RejectionReason | Bir satın alma talebinin veya siparişinin neden reddedildiğini açıklayan neden kodu veya metin. | ||
Açıklama Bu öznitelik, onay workflow'u sırasında bir satın alma siparişinin reddedilmesi durumunda belirtilen belirli nedeni yakalar. Bu bilgi, yeniden işleme ve gecikmelerin temel nedenlerini anlamak için kritik öneme sahiptir. Reddetme nedenlerini analiz etmek, yanlış fiyatlandırma, bütçe aşımları veya uyumlu olmayan satıcı seçimi gibi yaygın sorunları belirlemeye yardımcı olur. Bu içgörü, işletmenin temel nedenleri ele almasını, ilk Satın Alma Siparişi oluşturma kalitesini iyileştirmesini ve onay sürecini kolaylaştırmasını sağlar. Neden önemli Onayların neden başarısız olduğuna dair doğrudan içgörü sunarak, yeniden işlemeyi azaltmak ve onay cycle time'larını kısaltmak için hedefe yönelik iyileştirmeleri mümkün kılar. Nereden alınır Bu bilginin bulunması zor olabilir. Uzun metin alanlarında saklanabilir veya özel workflow yapılandırmasına bağlı olabilir. Genellikle özel uygulama bilgisi gerektirir. Örnekler Yanlış fiyatBütçe aşıldıYinelenen talep | |||
Satın Alma Grubu PurchasingGroup | Tedarik activity'sinden sorumlu belirli satın almacı veya satın almacı grubu. | ||
Açıklama Satın Alma Grubu, belirli bir satın alma activity'sinden sorumlu bireyi veya satın almacı ekibini temsil eder. Satıcılar için ana iletişim noktasıdırlar. Bu öznitelik, Satın Alma Organizasyonu'na göre daha ayrıntılı bir analiz düzeyi sağlar. Satın almacılar arasındaki iş yükü dağılımını anlamaya ve satın almacı düzeyindeki performans farklılıklarını belirlemeye yardımcı olarak, kaynak tahsisi ve eğitim girişimlerine yön verebilir. Neden önemli Bir satınalmadan kimin sorumlu olduğuna dair ayrıntılı bir görünüm sunarak, alıcı veya ekip düzeyinde detaylı iş yükü ve performans analizi yapılmasını sağlar. Nereden alınır Tablo: EKKO, Alan: EKGRP Örnekler 001002N01 | |||
Satın Alma Organizasyonu PurchasingOrganization | Fiyat müzakerelerinden ve malzeme veya hizmet tedarikinden sorumlu organizasyon birimi. | ||
Açıklama Satın Alma Organizasyonu, SAP'de tedarik activity'lerinden sorumlu önemli bir organizasyon birimidir. Tüm şirket için merkezi olabilir veya tesis ya da bölgeye göre merkezi olmayan bir yapıda düzenlenebilir. Satın Alma Organizasyonu'na göre süreç performansını analiz etmek, hangi tedarik ekiplerinin en verimli olduğunu belirlemeye yardımcı olur. Cycle time, yeniden işleme oranları ve maliyetler gibi metrikleri farklı organizasyon birimleri arasında karşılaştırma imkanı sunarak, en iyi uygulamaları ve desteklenmesi gereken alanları ortaya çıkarır. Neden önemli Sorumlu tedarik ekibini belirler; bu da farklı organizasyonel birimler arasında performans karşılaştırmaları ve analiz yapılmasına olanak tanır. Nereden alınır Tablo: EKKO, Alan: EKORG Örnekler 1000US01DE01 | |||
Satın Alma Talebi PurchaseRequisition | Satınalma siparişinden önce gelen satınalma talebinin tanımlayıcısı. | ||
Açıklama Bu öznitelik, satın alma siparişini başlangıçtaki satın alma talebine bağlar. Tüm satın alma siparişlerinin önceden bir talebi olmayabilir. Bu bağlantı, 'Talep-Sipariş Dönüşümü' Dashboard'unu ve 'PR'dan PO'ya Dönüşüm Oranı' KPI'ını analiz etmek için hayati önem taşır. Bu sayede, ilk talepten resmi bir siparişin oluşturulmasına kadar olan tedarik sürecinin verimliliği ölçülebilir; ayrıca, bir talep olmaksızın oluşturulan uyumsuz satın alma siparişleri de tespit edilebilir. Neden önemli PO'yu kaynak talebine bağlar; bu da PR'dan PO'ya dönüşüm sürecinin analiz edilmesini ve önceki bir talebe dayanmadan oluşturulan PO'ların belirlenmesini sağlar. Nereden alınır Tablo: EKPO, Alan: BANFN Örnekler 1001589010015891 | |||
Son Veri Güncellemesi LastDataUpdate | verinin kaynak sistemden en son ne zaman yenilendiğini gösteren zaman damgası. | ||
Açıklama Bu öznitelik, en son data çekiminin veya güncellemesinin tarih ve saatini kaydeder. Analiz edilen datanın güncelliği hakkında bağlam sağlar. Bu bilgiyi Dashboard'larda göstermek, kullanıcıların elde edilen içgörülerin neredeyse gerçek zamanlı dataya mı yoksa geçmiş bir anlık görüntüye mi dayandığını anlaması için hayati önem taşır. Kullanıcı beklentilerini yönetir ve kararların, datanın güncelliği bilinerek verilmesini sağlar. Neden önemli Kullanıcıları verilerin zamanlılığı hakkında bilgilendirerek, analizin operasyonların en güncel durumunu yansıtıp yansıtmadığını anlamalarını sağlar. Nereden alınır Bu zaman damgası, veri çıkarma veya ETL süreci tarafından yürütme sırasında oluşturulur ve eklenir. Örnekler 2023-10-27T02:00:00Z2023-10-28T02:00:00Z | |||
Talep Edilen Teslimat Tarihi RequestedDeliveryDate | İşletmenin satıcıdan mal veya hizmetleri teslim etmesini talep ettiği tarih. | ||
Açıklama Bu, Satın Alma Siparişinde belirtilen hedef teslim tarihidir. Gerçek teslimat performansının ölçüldüğü temel olarak hizmet eder. Bu tarih, 'Zamanında Mal Kabul Oranı' KPI'ını hesaplamak için hayati öneme sahiptir. Gerçek mal kabul tarihini bu talep edilen tarihle karşılaştırarak, kuruluşlar tedarikçi güvenilirliğini ve dahili kabul verimliliğini nicel olarak ölçebilir; bu da 'Tedarikçi Teslimat Performansı' Dashboard'unu doğrudan destekler. Neden önemli Bu, teslimat için hedef tarihtir; zamanında performans KPIlarını hesaplamak ve tedarikçi güvenilirliğini değerlendirmek için hayati öneme sahiptir. Nereden alınır Tablo: EKPO, Alan: EINDT Örnekler 2023-06-102023-07-222023-08-01 | |||
Tedarikçi Adı VendorName | Satıcı veya tedarikçinin tüzel adı. | ||
Açıklama Satıcı numarasından daha kullanıcı dostu olan, satıcının açıklayıcı adıdır. Bu bilgi genellikle satıcı ana verilerinden alınır. Satıcı Numarası birleştirme işlemleri ve benzersiz tanımlama için kullanılırken, Satıcı Adı kullanıcı odaklı Dashboard'lar ve raporlar için büyük önem taşır. Böylece, satıcı kodlarına aşina olmayan iş kullanıcıları için analizler daha sezgisel ve erişilebilir hale gelir. Neden önemli Tedarikçi için insan tarafından okunabilir bir isim sağlayarak, dashboard'ları ve raporları iş kullanıcıları için çok daha kolay anlaşılır hale getirir. Nereden alınır Tablo: LFA1, Alan: NAME1. Bu, EKKO-LIFNR'den LFA1-LIFNR'ye bir birleştirme (join) gerektirir. Örnekler Staples Inc.Global Tech SolutionsOfis Malzemeleri A.Ş. | |||
Tesis Plant | Malların teslim edileceği fiziksel konum veya tesis. | ||
Açıklama Tesis, bir üretim tesisini, depoyu veya mal veya hizmetlerin alındığı başka bir konumu temsil eden bir organizasyon birimidir. Tesise göre analiz yapmak, tedarik sürecindeki coğrafi farklılıkları anlamaya yardımcı olur. Bu analiz, belirli konumlara yapılan satıcı teslimat sürelerindeki farklılıkları ortaya çıkarabilir veya verimsiz kabul süreçleri olan belirli tesisleri belirginleştirerek mal kabul zamanlaması analizini destekleyebilir. Neden önemli Teslimat konumunu belirtir, bu da bölgesel süreç farklılıklarını ve lojistik performansını analiz etmek için faydalıdır. Nereden alınır Tablo: EKPO, Alan: WERKS Örnekler 100011002000 | |||
Uçtan Uca Döngü Süresi EndToEndCycleTime | Bir satın alma siparişi için ilk activity'den son activity'ye kadar geçen toplam süre. | ||
Açıklama Bu metrik, tüm satın alma siparişi sürecinin (örneğin, 'Satın Alma Talebi Oluşturuldu' gibi en erken kaydedilen olaydan 'Satın Alma Siparişi Tamamlandı' gibi son olaya kadar) toplam süresini ölçer. Genel süreç verimliliğini ölçmek için kritik öneme sahip bir KPI'dır. Performansa üst düzey bir bakış sunar ve analizi, en uzun süren vakaları ve genel bottleneck'leri belirlemeye yardımcı olur. Doğrudan 'Uçtan Uca Satın Alma Siparişi Süre Analizi' Dashboard'unu ve 'Ortalama Uçtan Uca Satın Alma Siparişi Süresi' KPI'ını destekler. Neden önemli Tüm tedarik sürecinin genel hızını ve verimliliğini ölçerek, önemli bir performans göstergesi sunar. Nereden alınır Bu, her bir case için ilk eventin timestamp'inin son eventin timestamp'inden çıkarılmasıyla belirlenen hesaplanmış bir özniteliktir. Örnekler 10 gün 4 saat22 gün 1 saat5 gün 8 saat | |||
Zamanında Teslimat mı IsOnTimeDelivery | Malların talep edilen teslim tarihinde veya öncesinde teslim alınıp alınmadığını gösteren bir işaret. | ||
Açıklama Bu boolean özniteliği, 'Mal Kabul İşlendi' aktivitesinin timestamp'i 'Talep Edilen Teslim Tarihi'ne eşit veya önceyse doğrudur. Her Satın Alma Siparişi kalem öğesi için teslimat performansına dair net, ikili bir sonuç sağlar. Bu öznitelik, 'Zamanında Mal Kabul Oranı' KPI`'ının temelini oluşturur. Zamanında ve geç teslimatların kolayca toplanmasına ve filtrelenmesine olanak tanıyarak, tedarikçi performansı ve dahili kabul verimliliği analizini basitleştirir. Neden önemli Teslimat zamanlaması için açık bir başarı veya başarısızlık ölçütü sağlayarak, tedarikçi performansı KPI'larını ve dashboard'larını doğrudan destekler. Nereden alınır Bu, mal kabul kayıt tarihi (EKBE-BUDAT) ile talep edilen teslim tarihi (EKPO-EINDT) karşılaştırılarak türetilen hesaplanmış bir özniteliktir. Örnekler truefalse | |||
Satın Alma'dan Ödemeye - Satın Alma Siparişi Aktiviteleri
| Aktivite | Açıklama | ||
|---|---|---|---|
Mal Kabulü Kaydedildi | Bu activity, bir satıcıdan belirli bir satın alma siparişine karşı malların fiziksel olarak kabul edildiğini gösterir. Mal kabulünü kaydetme, bir malzeme belgesi oluşturan ve envanteri güncelleyen açık bir eylemdir (örn. MIGO işlemi aracılığıyla). | ||
Neden önemli Bu, tedarikçi teslimat performansını izlemek ve fatura doğrulama sürecinin başlangıcı için kritik bir dönüm noktasıdır. Zamanında teslimat oranlarını ve mal kabul sürelerinin uygunluğunu hesaplamak için kullanılır. Nereden alınır Bir malzeme belgesinin oluşturulması üzerine kaydedilir. Olay zaman damgası, malzeme belgesi başlık tablosundan (MKPF) kayıt tarihi (MKPF-BUDAT) veya oluşturma tarihi (MKPF-CPUDT) olup, PO'ya kalem tablosu (MSEG) aracılığıyla bağlanır. Yakala Satın Alma Siparişine referans veren malzeme belgeleri için MKPF tablosundan gönderme/oluşturma zaman damgasını kullanın. Event tipi explicit | |||
Satın Alma Siparişi Oluşturuldu | Bu activity, bir satıcıyla bağlayıcı bir sözleşme olan resmi bir satın alma siparişi belgesinin oluşturulduğunu işaret eder. Bu, bir kullanıcı bir Satın Alma Siparişi oluşturup kaydettiğinde (örn. ME21N işlemi aracılığıyla) günlüğe kaydedilen açık bir event olup, EKKO ve EKPO tablolarında girişler oluşturur. | ||
Neden önemli Bu, satınalma siparişi yaşam döngüsünün resmi başlangıcını işaret eder. Hem Satınalma Talebi'nden Satınalma Siparişi'ne dönüşüm süresini hem de uçtan uca sipariş karşılama süresini ölçmek için önemli bir dönüm noktasıdır. Nereden alınır İlgili PO numarası (EKKO-EBELN) için Satın Alma Siparişi üstbilgi tablosundaki (EKKO) oluşturma tarihinden (EKKO-AEDAT) yakalanır. Yakala Her yeni Satın Alma Siparişi için EKKO tablosundan oluşturma zaman damgasını kullanın. Event tipi explicit | |||
Satın Alma Siparişi Onaylandı | Satın alma siparişinin nihai onayını temsil eder ve satıcıya gönderilmesi için yetkilendirir. Bu anahtar kilometre taşı, genellikle PO'nun serbest bırakma durumunun 'tamamen serbest bırakıldı' veya 'onaylandı' durumuna değişmesinden çıkarılır. | ||
Neden önemli Bu activity, Satın Alma Siparişi Onay Cycle Time KPI'ını hesaplamak ve onay workflow'undaki bottleneck'leri (darboğazları) belirlemek için kritik öneme sahiptir. Siparişi satıcıya göndermek gibi çoğu sonraki activity için bir ön koşuldur. Nereden alınır Satın Alma Siparişi başlık tablosu (EKKO) için değişiklik loglarını (CDHDR/CDPOS) izleyerek, nihai serbest bırakma kodunun ne zaman uygulandığını veya genel serbest bırakma durumu göstergesinin (EKKO-FRGKE) 'serbest bırakıldı' olarak ayarlandığını bularak çıkarılır. Yakala PO'nun genel serbest bırakma durumu (EKKO-FRGKE) nihai onaylanmış duruma değiştiğinde timestamp'i belirleyin. Event tipi inferred | |||
Satın Alma Talebi Oluşturuldu | Bu activity, mal veya hizmetler için resmi bir talebin oluşturulduğunu işaretler. Bir kullanıcı yeni bir satın alma talebi belgesini kaydettiğinde (ME51N gibi işlemler kullanarak) yakalanan açık bir event olup, EBAN tablosunda benzersiz bir kayıt oluşturur. | ||
Neden önemli Bu, tedarik sürecinin birincil başlangıç noktasıdır. Bu eventten Satın Alma Siparişi oluşturulmasına kadar geçen süreyi analiz etmek, dahili talebi eyleme geçirilebilir siparişlere dönüştürme verimliliğini ölçmeye yardımcı olur. Nereden alınır Satın Alma Talebi başlık tablosunda (EBAN) bir girişin oluşturulması üzerine kaydedilir. Oluşturma tarihi (EBAN-BADAT) ve saat, bu olay için zaman damgası olarak işlev görür. Yakala EBAN tablosundaki yeni girdileri oluşturulma tarihine göre belirleyin. Event tipi explicit | |||
Satınalma Siparişi Tamamlandı | Bir satın alma siparişi kaleminin tamamen teslim edildiği anlamına gelir. Bu, genellikle satın alma siparişi kaleminde 'Teslimat Tamamlandı' göstergesinin otomatik veya manuel olarak ayarlanmasından türetilen bir event'tir. | ||
Neden önemli Bu activity, sürecin sipariş karşılama kısmı için mantıksal bir bitiş noktası görevi görür. Oluşturulmasından tamamlanmasına kadar olan uçtan uca Satın Alma Siparişi cycle time'ını hesaplamak için esastır. Nereden alınır Bir PO kalemi için 'Teslimat Tamamlandı' göstergesinin (EKPO-ELIKZ) 'X' olarak ayarlandığını kaydeden değişiklik belgelerinden (CDHDR/CDPOS) çıkarılır. Son kalemin tamamlandı olarak işaretlenmesi, tüm PO'nun tamamlandığını gösterebilir. Yakala EKPO-ELIKZ bayrağı ayarlandığında değişiklik belgelerinden timestamp'i belirleyin. Event tipi inferred | |||
Tedarikçiye Satın Alma Siparişi Gönderildi | Bu activity, onaylanmış satın alma siparişinin resmi olarak satıcıya, örneğin EDI, e-posta veya yazıcı aracılığıyla iletildiği noktayı işaretler. Bir çıktı mesajı başarıyla işlendiğinde mesaj kontrol tablolarında yakalanan açık bir event'tir. | ||
Neden önemli Bu, tedarikçi bekleme süresini başlatan kritik bir dönüm noktasıdır. Bu eventten mal kabulüne kadar geçen süreyi analiz etmek, tedarikçi performansını ve teslimat sürelerinin uygunluğunu değerlendirmek için anahtardır. Nereden alınır Mesaj durum tablosuna (NAST) kaydedilir. Zaman damgası, ilgili PO çıktı tipi için işleme durumu (NAST-VSTAT) '1' (başarılı bir şekilde işlendi) olduğunda NAST-DATVR ve NAST-UHRVR'den alınabilir. Yakala Satın Alma Siparişinin çıktı mesajı için NAST tablosundan işleme zaman damgasını kullanın. Event tipi explicit | |||
Hizmet Onayı Girildi | Hizmet tabanlı satın alma siparişleri için bu aktivite, hizmetlerin yerine getirildiğinin onayını temsil eder. Bir Hizmet Giriş Fişi (Service Entry Sheet) oluşturularak (örneğin, ML81N işlemi aracılığıyla) yakalanan açık bir event'tir. | ||
Neden önemli Bu, hizmetler için mal kabulün karşılığıdır ve hizmet siparişlerinin yerine getirilmesini takip etmek için gereklidir. Hizmet ödemesi için finansal süreci tetikler. Nereden alınır Hizmet Giriş Föyü üstbilgi tablosundaki (ESSR) oluşturma tarihinden (ESSR-ERDAT) yakalanır. Satın alma siparişi bağlantısı ESLL tablosundadır. Yakala Satın Alma Siparişine bağlı hizmet giriş sayfaları için ESSR tablosundan oluşturma zaman damgasını kullanın. Event tipi explicit | |||
Kalite İncelemesi Yapıldı | Alınan malların kalite kontrolünden geçtiğini belirtir. Bu aktivite genellikle, mal kabulü sırasında oluşturulan bir denetim partisi için Kalite Yönetimi modülünde bir kullanım kararı verildiğinde çıkarılır. | ||
Neden önemli Kalitenin kritik olduğu sektörler için bu aktivite, denetim sürecinin süresini ve sonuçlarını analiz etmeye yardımcı olur. Buradaki gecikmeler, mal kabulü ile kullanıma hazır olma arasında bottleneck'ler oluşturabilir. Nereden alınır Kalite Yönetimi modülünden çıkarılır. Mal kabulünde bir denetim partisi (QALS tablosu) oluşturulur ve aktivite, bir timestamp içeren kullanım kararının (QAVE tablosu) oluşturulmasıyla işaretlenir. Yakala Malzeme belgesine bağlı denetim partisi için QAVE tablosundaki kullanım kararının timestamp'ini belirleyin. Event tipi inferred | |||
Mallar İade Edildi | Daha önce teslim alınan malların satıcıya iadesini temsil eder; bu durum genellikle kalite sorunları veya yanlış sevkiyatlar nedeniyle gerçekleşir. Bu, iadeye özgü bir hareket türüyle bir malzeme belgesi gönderilerek yakalanan açık bir olaydır. | ||
Neden önemli Bu activity, satıcı kalitesi veya sipariş doğruluğundaki sorunları vurgular ve süreç yeniden işleme için temel bir göstergedir. Mal Kabul Sapma Oranı KPI'ını hesaplamak için kritik öneme sahiptir. Nereden alınır İade hareket türü (ör. Satıcıya İade Teslimatı için '122') kullanıldığında malzeme belgesi tablolarına (MKPF/MSEG) kaydedilir. Kayıt tarihi (MKPF-BUDAT), zaman damgası olarak işlev görür. Yakala Orijinal PO'ya referans veren, iade hareket türüne sahip (örneğin, 122) malzeme belgelerini belirleyin. Event tipi explicit | |||
Satın Alma Siparişi Değiştirildi | Bir satın alma siparişine ilk oluşturulmasından sonra yapılan miktar, fiyat veya teslimat tarihlerindeki değişiklikler gibi herhangi bir düzenlemeyi temsil eder. Bu değişiklikler, SAP'nin değişiklik belgesi sisteminde açıkça kaydedilir. | ||
Neden önemli Özellikle onay sonrası sıkça yapılan değişiklikler, süreç verimsizliklerini, kötü başlangıç planlamasını veya scope creep'i gösterir. Bu aktivite, PO Rework and Changes dashboard'u ve ilgili KPI'lar için esastır. Nereden alınır Satın Alma Siparişi nesnesi (EINKBELEG) için değişiklik belgesi başlığı (CDHDR) ve kalem (CDPOS) tablolarında açıkça loglanır. Her değişiklik, bir timestamp ile yeni bir giriş oluşturur. Yakala Satın Alma Siparişi numarasına bağlı CDHDR ve CDPOS tablolarından değişiklik event'lerini ve timestamp'leri ayıklayın. Event tipi explicit | |||
Satın Alma Siparişi Reddedildi | Bu activity, bir onaylayıcının onay workflow'u sırasında bir satın alma siparişini reddetmesiyle gerçekleşir. Satın Alma Siparişinin serbest bırakma stratejisi verilerinde bir durum değişikliğinden türetilen, bir reddetmenin meydana geldiğini gösteren çıkarımsal bir event'tir. | ||
Neden önemli Reddedilmeleri takip etmek, Satın Alma Siparişi veri kalitesi sorunlarını, politika uyumsuzluklarını veya onay matrisi içindeki problemleri belirlemeye yardımcı olur. Genellikle yeniden çalışmaya yol açar ve genel cycle time'ı artırır. Nereden alınır Satın alma siparişi serbest bırakma durumu için değişiklik belgelerinden (CDHDR/CDPOS) çıkarılır. Bir reddetme genellikle, bir serbest bırakma kodu iptal edildiğinde veya belirli bir reddetme durumu ayarlandığında kaydedilir. Yakala Bir onay kodunun iptali veya reddi gösteren bir durum değişikliği için değişiklik loglarını izleyin. Event tipi inferred | |||
Satın Alma Talebi Onaylandı | Bir satın alma talebinin resmi onayını temsil eder ve bir satın alma siparişine dönüştürülmesine yetki verir. Bu olay, satın alma talebi verileri içindeki serbest bırakma durumu alanlarındaki değişikliklerden, SAP'nin serbest bırakma stratejisi iş akışı tarafından izlendiği şekilde çıkarılır. | ||
Neden önemli Onayları takip etmek, ön sipariş aşamasındaki bottleneck'leri belirlemek ve onay politikalarına uyumluluğu sağlamak için kritik öneme sahiptir. Buradaki gecikmeler, genel tedarik cycle time'ını doğrudan etkiler. Nereden alınır Satın Alma Talebi tablosu (EBAN) değişiklik loglarından, özellikle serbest bırakma durumu alanlarındaki (örneğin, EBAN-FRGZU) değişiklikleri izleyerek veya EBAN obje için CDHDR/CDPOS'taki değişiklik belgelerini analiz ederek çıkarılır. Yakala Nihai onayın timestamp'ini belirlemek için EBAN onay durumu alanlarındaki değişiklik belgelerini izleyin. Event tipi inferred | |||
Satınalma Siparişi Onayı Talep Edildi | Oluşturulan veya değiştirilen bir satın alma siparişinin, yapılandırılmış serbest bırakma stratejisine göre onaya gönderildiğini belirtir. Bu event, serbest bırakma stratejisi tetiklendiğinde ve PO bekleyen onay durumuna girdiğinde çıkarılır. | ||
Neden önemli Satın Alma Siparişi oluşturma ile onay sürecinin başlangıcını ayırt etmek, onay döngü süresi KPI'sını doğru bir şekilde ölçmeye yardımcı olur. Onay iş akışı başlamadan önceki herhangi bir gecikmeyi vurgular. Nereden alınır Satın Alma Siparişi (obje EINKBELEG) için değişiklik belgelerinden (CDHDR/CDPOS), bir serbest bırakma durumunun ilk ayarını gösteren veya genel serbest bırakma durumu (EKKO-FRGKE) ilk kez bir onay sürecinin aktif olduğunu gösteren bir değere ayarlandığında çıkarılır. Yakala PO için serbest bırakma stratejisini tetikleyen ilk değişiklik belgesi girdisini belirleyin. Event tipi inferred | |||
Satınalma Siparişi Silindi | Bir satın alma siparişi kaleminin iptalini veya mantıksal olarak silinmesini temsil eder; bu durum, mal kabulü veya faturalama gibi sonraki işlemlerin önüne geçer. Bu, PO kaleminde silme göstergesi ayarlandığında yakalanan çıkarım yoluyla belirlenen bir olaydır. | ||
Neden önemli Bu, bir siparişin iptal edildiğini gösteren bir sonlandırma aktivitesidir. Siparişlerin neden ve ne zaman silindiğini analiz etmek, talep planlama veya tedarikçi seçimindeki sorunları ortaya çıkarabilir. Nereden alınır Bir satın alma siparişi kalemi için silme göstergesinin (EKPO-LOEKZ) 'L' olarak ayarlandığını gösteren değişiklik belgelerinden (CDHDR/CDPOS) çıkarılır. Yakala EKPO-LOEKZ bayrağı ayarlandığında değişiklik belgelerinden timestamp'i belirleyin. Event tipi inferred | |||
Veri Çekim Kılavuzları
Adımlar
- ABAP Programı Oluşturun: ABAP Düzenleyici'yi SE38 işlem kodunu kullanarak açın. Yeni programınız için Z_PM_PO_EXTRACT gibi bir ad girin ve 'Oluştur'a tıklayın. Başlık olarak 'Process Mining Satınalma Siparişi Veri Çıkarma' girin ve türünü 'Çalıştırılabilir Program' olarak ayarlayın.
- Seçim Ekranını Tanımlayın: Programda seçim ekranı parametrelerini tanımlayın. Bu, kullanıcıların çıkarmak istedikleri verileri filtrelemesine olanak tanır. Başlıca parametreler Satınalma Siparişinin oluşturulma tarih aralığı, Şirket Kodu (BUKRS) ve Satınalma Belge Türü (BSART)'dir.
- Veri Yapılarını Tanımlayın: Son event log formatına uyan dahili bir tablo yapısı tanımlayın. Bu yapı, gerekli ve önerilen tüm nitelikleri içermelidir: PurchaseOrder, Activity, EventTime, UserName, VendorNumber, OrderAmount, MaterialGroup, CompanyCode ve DocumentType.
- Veri Seçim Mantığını Uygulayın: Gerekli 14 aktivitenin her biri için veri seçmek üzere temel ABAP mantığını yazın. Bu, EKKO, EKPO, EKBE, EBAN, CDHDR, CDPOS ve NAST gibi birden fazla SAP tablosunu sorgulamayı içerir. Kodu düzenli tutmak için her aktivite için ayrı bir alt program (PERFORM) kullanın.
- Satınalma Talebi Verilerini Seçin: 'Satınalma Talebi Oluşturuldu' olayları için EBAN tablosunu sorgulayın ve bunları EKPO tablosu aracılığıyla Satınalma Siparişlerine bağlayın. Onay durumu alanlarındaki değişiklikleri izleyerek 'Satınalma Talebi Onaylandı' olaylarını belirlemek için değişiklik günlük tablolarını (CDHDR, CDPOS) kullanın.
- Satınalma Siparişi Temel Olaylarını Seçin: 'Satınalma Siparişi Oluşturuldu' olayı için EKKO ve EKPO tablolarını sorgulayın. Onay göstergeleri ve silme işaretleri gibi belirli alanlardaki değişikliklere dayanarak 'Satınalma Siparişi Değiştirildi', 'Satınalma Siparişi Onaylandı', 'Satınalma Siparişi Reddedildi', 'Satınalma Siparişi Tamamlandı' ve 'Satınalma Siparişi Silindi' olaylarını çıkarmak için EINKBELEG nesnesindeki değişiklik günlük tablolarını (CDHDR, CDPOS) kullanın.
- Satınalma Siparişi İletişim Olaylarını Seçin: Satınalma Siparişi'nin başarıyla iletildiği kayıtları bulmak için NAST tablosunu sorgulayarak 'Satınalma Siparişi Tedarikçiye Gönderildi' aktivitesini yakalayın.
- Mal ve Hizmet Olaylarını Seçin: Hareket türü kategorisine göre 'Mal Girişi Yapıldı' ve 'İade Edilen Mallar' aktivitelerini belirlemek için EKBE tablosundaki malzeme belgesi kayıtlarını sorgulayın. 'Hizmet Onayı Girildi' bilgisini almak için hizmet giriş sayfaları olan ESSR ve ESLL tablolarını sorgulayın.
- Kalite Yönetimi Olaylarını Seçin: Kalite Yönetimi modülü kullanılıyorsa, bir Satınalma Siparişi ile bağlantılı bir muayene partisi için kullanım kararı verildiği zamanı tespit etmek üzere QALS ve QAVE tablolarını sorgulayarak 'Kalite Kontrolü Gerçekleştirildi' aktivitesini belirleyin.
- Verileri Birleştirin ve Biçimlendirin: Tüm bireysel seçimlerden gelen verileri tek bir son dahili tabloda birleştirin. EventTime alanının tutarlı bir şekilde biçimlendirildiğinden emin olun (örneğin, YYYY-MM-DDTHH:MI:SS).
- Dosya İndirme Uygulayın: Son dahili tabloyu dosya olarak indirme özelliği ekleyin. Önerilen format, GUI_DOWNLOAD fonksiyon modülü kullanılarak elde edilebilen, sekmeyle ayrılmış veya CSV dosyasıdır.
- Çalıştırın ve Kaydedin: Programı SE38 veya SA38 işlem kodunu kullanarak çalıştırın. Seçim kriterlerini doldurun ve raporu çalıştırın. İstendiğinde, çıktı dosyasını yerel makinenize .csv uzantısıyla kaydederek yüklemeye hazır hale getirin.
Konfigürasyon
- Tarih Aralığı: Veri çekimi için belirli bir tarih aralığı tanımlamak kritik öneme sahiptir. Bu aralık genellikle Satın Alma Siparişi oluşturma tarihi (EKKO-AEDAT) baz alınarak belirlenir. Veri hacmi ve süreç içgörüsü arasında denge kurmak adına 3-6 aylık bir aralık iyi bir başlangıç noktasıdır.
- Şirket Kodu (BUKRS): Veri çekimini ilgili tüzel kişiliklerle sınırlamak için bir veya daha fazla şirket koduna göre filtreleme yapılmalıdır. Bu, performans ve alaka düzeyi açısından önemli bir parametredir.
- Satın Alma Belge Türü (BSART): Analizi standart süreçlere odaklamak ve gerekirse özel tedarik türlerini hariç tutmak için belirli belge türlerine (örn. Standart Satın Alma Siparişi için 'NB') göre filtreleme yapılmalıdır.
- Veri Detayı: Veri çekimi, satın alma siparişi kalem düzeyinde tasarlanmıştır. Vaka Kimliği, Satın Alma Siparişi numarası (EBELN)'dir. Mal girişleri gibi kalem düzeyindeki tüm olaylar, bu ana vaka kimliğine geri bağlanır.
- Performans Hususları: Büyük veri kümeleri için, zaman aşımı hatalarını önlemek amacıyla programın bir arka plan işi (SM36) olarak çalıştırılması planlanmalıdır. Özellikle CDHDR ve CDPOS gibi tablolarda WHERE koşullarında kullanılan ana alanlarda veritabanı indekslerinin bulunduğundan emin olunmalıdır.
- Ön Koşullar: Raporu çalıştıran kullanıcının, programın geliştirilmesi ve yürütülmesi için ABAP workbench (SE38) erişim ve yürütme yetkisine sahip olması gerekir. Ayrıca EKKO, EKPO, EKBE, CDHDR, CDPOS, EBAN, NAST, ESSR ve QM tabloları dahil olmak üzere tüm temel tablolara okuma erişimi de gereklidir.
a Örnek Sorgu abap
REPORT Z_PM_PO_EXTRACT.
TABLES: ekko, ekpo, eban.
*&---------------------------------------------------------------------*
*& Data Structures for Event Log
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
purchaseorder TYPE ebeln,
activity TYPE string,
eventtime TYPE timestamp,
username TYPE ernam,
vendornumber TYPE lifnr,
orderamount TYPE netwr_ak,
materialgroup TYPE matkl,
companycode TYPE bukrs,
documenttype TYPE bsart,
END OF ty_event_log.
DATA: gt_event_log TYPE TABLE OF ty_event_log.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_aedat FOR ekko-aedat OBLIGATORY, " PO Creation Date
s_bukrs FOR ekko-bukrs, " Company Code
s_bsart FOR ekko-bsart, " PO Document Type
s_ebeln FOR ekko-ebeln. " PO Number
*&---------------------------------------------------------------------*
*& Main Processing Block
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM get_po_headers.
IF gt_event_log IS NOT INITIAL.
PERFORM get_pr_created.
PERFORM get_pr_approved.
PERFORM get_po_created.
PERFORM get_po_release_events. " Approved, Rejected, Approval Requested
PERFORM get_po_sent_to_vendor.
PERFORM get_po_changed.
PERFORM get_goods_receipt_posted.
PERFORM get_services_confirmed.
PERFORM get_quality_inspection.
PERFORM get_goods_returned.
PERFORM get_po_completed.
PERFORM get_po_deleted.
PERFORM download_to_csv.
ELSE.
MESSAGE 'No Purchase Orders found for the given criteria.' TYPE 'I'.
ENDIF.
*&---------------------------------------------------------------------*
*& Form GET_PO_HEADERS (Base data)
*&---------------------------------------------------------------------*
FORM get_po_headers.
SELECT h~ebeln, h~lifnr, h~bukrs, h~bsart, p~netwr, p~matkl
FROM ekko AS h
INNER JOIN ekpo AS p ON h~ebeln = p~ebeln
INTO TABLE @DATA(lt_po_base)
WHERE h~aedat IN @s_aedat
AND h~bukrs IN @s_bukrs
AND h~bsart IN @s_bsart
AND h~ebeln IN @s_ebeln.
SORT lt_po_base BY ebeln.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_PR_CREATED
*&---------------------------------------------------------------------*
FORM get_pr_created.
DATA: lt_pr_events TYPE TABLE OF ty_event_log.
SELECT p~ebeln AS purchaseorder,
'Purchase Requisition Created' AS activity,
b~erdat AS event_date,
'000000' AS event_time,
b~ernam AS username,
h~lifnr AS vendornumber,
p~netwr AS orderamount,
p~matkl AS materialgroup,
h~bukrs AS companycode,
h~bsart AS documenttype
FROM ekpo AS p
JOIN eban AS b ON p~banfn = b~banfn AND p~bnfpo = b~bnfpo
JOIN ekko AS h ON p~ebeln = h~ebeln
WHERE p~ebeln IN @s_ebeln
AND p~banfn IS NOT NULL AND p~banfn <> ''
AND h~aedat IN @s_aedat
AND h~bukrs IN @s_bukrs
AND h~bsart IN @s_bsart
INTO TABLE @DATA(lt_pr_created).
LOOP AT lt_pr_created ASSIGNING FIELD-SYMBOL(<fs_pr>).
DATA(ls_event) = CORRESPONDING ty_event_log(<fs_pr>).
CONCATENATE <fs_pr>-event_date <fs_pr>-event_time INTO DATA(lv_ts).
CONVERT DATE <fs_pr>-event_date TIME '000000' INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
APPEND ls_event TO gt_event_log.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_PR_APPROVED
*&---------------------------------------------------------------------*
FORM get_pr_approved.
DATA: lt_pr_list TYPE TABLE OF eban-banfn.
SELECT DISTINCT p~banfn FROM ekpo AS p
JOIN ekko AS h ON p~ebeln = h~ebeln
WHERE h~aedat IN @s_aedat
AND h~bukrs IN @s_bukrs
AND p~banfn IS NOT NULL AND p~banfn <> ''
INTO TABLE @lt_pr_list.
IF lt_pr_list IS INITIAL. RETURN. ENDIF.
SELECT h~objectid, h~username, h~udate, h~utime, p~fname, p~value_new
FROM cdhdr AS h
JOIN cdpos AS p ON h~objectid = p~objectid AND h~changenr = p~changenr
FOR ALL ENTRIES IN @lt_pr_list
WHERE h~objectclas = 'BANF'
AND h~objectid = @lt_pr_list-table_line
AND p~tabname = 'EBAN'
AND p~fname = 'FRGZU'
INTO TABLE @DATA(lt_cd_pr).
LOOP AT lt_cd_pr ASSIGNING FIELD-SYMBOL(<fs_cd>) WHERE <fs_cd>-value_new = 'X'.
SELECT SINGLE p~ebeln, p~netwr, p~matkl, h~lifnr, h~bukrs, h~bsart
FROM ekpo AS p
JOIN ekko AS h ON p~ebeln = h~ebeln
WHERE p~banfn = @<fs_cd>-objectid(10)
INTO @DATA(ls_po_info).
IF sy-subrc = 0.
DATA(ls_event) = VALUE ty_event_log(
purchaseorder = ls_po_info-ebeln
activity = 'Purchase Requisition Approved'
username = <fs_cd>-username
vendornumber = ls_po_info-lifnr
orderamount = ls_po_info-netwr
materialgroup = ls_po_info-matkl
companycode = ls_po_info-bukrs
documenttype = ls_po_info-bsart
).
CONVERT DATE <fs_cd>-udate TIME <fs_cd>-utime INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
APPEND ls_event TO gt_event_log.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_PO_CREATED
*&---------------------------------------------------------------------*
FORM get_po_created.
LOOP AT lt_po_base ASSIGNING FIELD-SYMBOL(<fs_po>).
SELECT SINGLE aedat, ernam FROM ekko INTO @DATA(ls_ekko)
WHERE ebeln = @<fs_po>-ebeln.
IF sy-subrc = 0.
DATA(ls_event) = VALUE ty_event_log(
purchaseorder = <fs_po>-ebeln
activity = 'Purchase Order Created'
username = ls_ekko-ernam
vendornumber = <fs_po>-lifnr
orderamount = <fs_po>-netwr
materialgroup = <fs_po>-matkl
companycode = <fs_po>-bukrs
documenttype = <fs_po>-bsart
).
CONVERT DATE ls_ekko-aedat TIME '000000' INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
APPEND ls_event TO gt_event_log.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_PO_RELEASE_EVENTS
*&---------------------------------------------------------------------*
FORM get_po_release_events.
DATA: lt_ebeln TYPE RANGE OF ebeln, ls_ebeln LIKE LINE OF lt_ebeln.
LOOP AT lt_po_base INTO DATA(ls_po_base).
ls_ebeln-sign = 'I'. ls_ebeln-option = 'EQ'. ls_ebeln-low = ls_po_base-ebeln.
APPEND ls_ebeln TO lt_ebeln.
ENDLOOP.
IF lt_ebeln IS INITIAL. RETURN. ENDIF.
SELECT h~objectid, h~username, h~udate, h~utime, p~value_new
FROM cdhdr AS h
JOIN cdpos AS p ON h~objectid = p~objectid AND h~changenr = p~changenr
WHERE h~objectclas = 'EINKBELEG'
AND h~objectid IN lt_ebeln
AND p~tabname = 'EKKO'
AND p~fname = 'FRGKE'
INTO TABLE @DATA(lt_cd_po).
LOOP AT lt_cd_po ASSIGNING FIELD-SYMBOL(<fs_cd>).
READ TABLE lt_po_base ASSIGNING FIELD-SYMBOL(<fs_po>) WITH KEY ebeln = <fs_cd>-objectid.
IF sy-subrc <> 0. CONTINUE. ENDIF.
DATA(ls_event) = VALUE ty_event_log(
purchaseorder = <fs_po>-ebeln
username = <fs_cd>-username
vendornumber = <fs_po>-lifnr
orderamount = <fs_po>-netwr
materialgroup = <fs_po>-matkl
companycode = <fs_po>-bukrs
documenttype = <fs_po>-bsart
).
CONVERT DATE <fs_cd>-udate TIME <fs_cd>-utime INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
CASE <fs_cd>-value_new.
WHEN '2' OR 'R'. " Final Release
ls_event-activity = 'Purchase Order Approved'.
WHEN '1'. " Blocked
ls_event-activity = 'Purchase Order Rejected'.
WHEN OTHERS. " Any other change implies a pending state
ls_event-activity = 'Purchase Order Approval Requested'.
ENDCASE.
APPEND ls_event TO gt_event_log.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_PO_SENT_TO_VENDOR
*&---------------------------------------------------------------------*
FORM get_po_sent_to_vendor.
DATA: lt_ebeln TYPE RANGE OF ebeln, ls_ebeln LIKE LINE OF lt_ebeln.
LOOP AT lt_po_base INTO DATA(ls_po_base).
ls_ebeln-sign = 'I'. ls_ebeln-option = 'EQ'. ls_ebeln-low = ls_po_base-ebeln.
APPEND ls_ebeln TO lt_ebeln.
ENDLOOP.
IF lt_ebeln IS INITIAL. RETURN. ENDIF.
SELECT objky, erdat, eruhr, ernam
FROM nast
WHERE kapol = 'EF' AND objky IN lt_ebeln AND vstat = '1'
INTO TABLE @DATA(lt_nast).
LOOP AT lt_nast ASSIGNING FIELD-SYMBOL(<fs_nast>).
READ TABLE lt_po_base ASSIGNING FIELD-SYMBOL(<fs_po>) WITH KEY ebeln = <fs_nast>-objky.
IF sy-subrc <> 0. CONTINUE. ENDIF.
DATA(ls_event) = VALUE ty_event_log(
purchaseorder = <fs_po>-ebeln
activity = 'Purchase Order Sent to Vendor'
username = <fs_nast>-ernam
vendornumber = <fs_po>-lifnr
orderamount = <fs_po>-netwr
materialgroup = <fs_po>-matkl
companycode = <fs_po>-bukrs
documenttype = <fs_po>-bsart
).
CONVERT DATE <fs_nast>-erdat TIME <fs_nast>-eruhr INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
APPEND ls_event TO gt_event_log.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_PO_CHANGED
*&---------------------------------------------------------------------*
FORM get_po_changed.
DATA: lt_ebeln TYPE RANGE OF ebeln, ls_ebeln LIKE LINE OF lt_ebeln.
LOOP AT lt_po_base INTO DATA(ls_po_base).
ls_ebeln-sign = 'I'. ls_ebeln-option = 'EQ'. ls_ebeln-low = ls_po_base-ebeln.
APPEND ls_ebeln TO lt_ebeln.
ENDLOOP.
IF lt_ebeln IS INITIAL. RETURN. ENDIF.
SELECT DISTINCT objectid, username, udate, utime
FROM cdhdr
WHERE objectclas = 'EINKBELEG' AND objectid IN lt_ebeln AND tcode <> 'ME21N' AND tcode <> 'ME22'
INTO TABLE @DATA(lt_cdhdr_chg).
LOOP AT lt_cdhdr_chg ASSIGNING FIELD-SYMBOL(<fs_cd>).
READ TABLE lt_po_base ASSIGNING FIELD-SYMBOL(<fs_po>) WITH KEY ebeln = <fs_cd>-objectid.
IF sy-subrc <> 0. CONTINUE. ENDIF.
DATA(ls_event) = VALUE ty_event_log(
purchaseorder = <fs_po>-ebeln
activity = 'Purchase Order Changed'
username = <fs_cd>-username
vendornumber = <fs_po>-lifnr
orderamount = <fs_po>-netwr
materialgroup = <fs_po>-matkl
companycode = <fs_po>-bukrs
documenttype = <fs_po>-bsart
).
CONVERT DATE <fs_cd>-udate TIME <fs_cd>-utime INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
APPEND ls_event TO gt_event_log.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_GOODS_RECEIPT_POSTED
*&---------------------------------------------------------------------*
FORM get_goods_receipt_posted.
DATA: lt_ebeln TYPE RANGE OF ebeln, ls_ebeln LIKE LINE OF lt_ebeln.
LOOP AT lt_po_base INTO DATA(ls_po_base).
ls_ebeln-sign = 'I'. ls_ebeln-option = 'EQ'. ls_ebeln-low = ls_po_base-ebeln.
APPEND ls_ebeln TO lt_ebeln.
ENDLOOP.
IF lt_ebeln IS INITIAL. RETURN. ENDIF.
SELECT k~ebeln, m~cpudt, m~cputm, m~usnam, k~bewtp
FROM ekbe AS k JOIN mkpf AS m ON k~belnr = m~mblnr AND k~gjahr = m~mjahr
WHERE k~ebeln IN lt_ebeln AND k~bewtp = 'E' AND k~shkzg = 'S'
INTO TABLE @DATA(lt_gr).
LOOP AT lt_gr ASSIGNING FIELD-SYMBOL(<fs_gr>).
READ TABLE lt_po_base ASSIGNING FIELD-SYMBOL(<fs_po>) WITH KEY ebeln = <fs_gr>-ebeln.
IF sy-subrc <> 0. CONTINUE. ENDIF.
DATA(ls_event) = VALUE ty_event_log(
purchaseorder = <fs_po>-ebeln
activity = 'Goods Receipt Posted'
username = <fs_gr>-usnam
vendornumber = <fs_po>-lifnr
orderamount = <fs_po>-netwr
materialgroup = <fs_po>-matkl
companycode = <fs_po>-bukrs
documenttype = <fs_po>-bsart
).
CONVERT DATE <fs_gr>-cpudt TIME <fs_gr>-cputm INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
APPEND ls_event TO gt_event_log.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_SERVICES_CONFIRMED
*&---------------------------------------------------------------------*
FORM get_services_confirmed.
DATA: lt_ebeln TYPE RANGE OF ebeln, ls_ebeln LIKE LINE OF lt_ebeln.
LOOP AT lt_po_base INTO DATA(ls_po_base).
ls_ebeln-sign = 'I'. ls_ebeln-option = 'EQ'. ls_ebeln-low = ls_po_base-ebeln.
APPEND ls_ebeln TO lt_ebeln.
ENDLOOP.
IF lt_ebeln IS INITIAL. RETURN. ENDIF.
SELECT l~ebeln, h~erdat, h~eruhr, h~ernam
FROM essr AS h JOIN esll AS l ON h~lblni = l~lblni
WHERE l~ebeln IN lt_ebeln
INTO TABLE @DATA(lt_ses).
LOOP AT lt_ses ASSIGNING FIELD-SYMBOL(<fs_ses>).
READ TABLE lt_po_base ASSIGNING FIELD-SYMBOL(<fs_po>) WITH KEY ebeln = <fs_ses>-ebeln.
IF sy-subrc <> 0. CONTINUE. ENDIF.
DATA(ls_event) = VALUE ty_event_log(
purchaseorder = <fs_po>-ebeln
activity = 'Services Confirmation Entered'
username = <fs_ses>-ernam
vendornumber = <fs_po>-lifnr
orderamount = <fs_po>-netwr
materialgroup = <fs_po>-matkl
companycode = <fs_po>-bukrs
documenttype = <fs_po>-bsart
).
CONVERT DATE <fs_ses>-erdat TIME <fs_ses>-eruhr INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
APPEND ls_event TO gt_event_log.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_QUALITY_INSPECTION
*&---------------------------------------------------------------------*
FORM get_quality_inspection.
DATA: lt_ebeln TYPE RANGE OF ebeln, ls_ebeln LIKE LINE OF lt_ebeln.
LOOP AT lt_po_base INTO DATA(ls_po_base).
ls_ebeln-sign = 'I'. ls_ebeln-option = 'EQ'. ls_ebeln-low = ls_po_base-ebeln.
APPEND ls_ebeln TO lt_ebeln.
ENDLOOP.
IF lt_ebeln IS INITIAL. RETURN. ENDIF.
SELECT q~ebeln, v~vdatum, v~vzeit, v~vname
FROM qals AS q JOIN qave AS v ON q~prueflos = v~prueflos
WHERE q~ebeln IN lt_ebeln
INTO TABLE @DATA(lt_qm).
LOOP AT lt_qm ASSIGNING FIELD-SYMBOL(<fs_qm>).
READ TABLE lt_po_base ASSIGNING FIELD-SYMBOL(<fs_po>) WITH KEY ebeln = <fs_qm>-ebeln.
IF sy-subrc <> 0. CONTINUE. ENDIF.
DATA(ls_event) = VALUE ty_event_log(
purchaseorder = <fs_po>-ebeln
activity = 'Quality Inspection Performed'
username = <fs_qm>-vname
vendornumber = <fs_po>-lifnr
orderamount = <fs_po>-netwr
materialgroup = <fs_po>-matkl
companycode = <fs_po>-bukrs
documenttype = <fs_po>-bsart
).
CONVERT DATE <fs_qm>-vdatum TIME <fs_qm>-vzeit INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
APPEND ls_event TO gt_event_log.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_GOODS_RETURNED
*&---------------------------------------------------------------------*
FORM get_goods_returned.
DATA: lt_ebeln TYPE RANGE OF ebeln, ls_ebeln LIKE LINE OF lt_ebeln.
LOOP AT lt_po_base INTO DATA(ls_po_base).
ls_ebeln-sign = 'I'. ls_ebeln-option = 'EQ'. ls_ebeln-low = ls_po_base-ebeln.
APPEND ls_ebeln TO lt_ebeln.
ENDLOOP.
IF lt_ebeln IS INITIAL. RETURN. ENDIF.
SELECT k~ebeln, m~cpudt, m~cputm, m~usnam
FROM ekbe AS k JOIN mkpf AS m ON k~belnr = m~mblnr AND k~gjahr = m~mjahr
WHERE k~ebeln IN lt_ebeln AND k~bwart = '122'
INTO TABLE @DATA(lt_ret).
LOOP AT lt_ret ASSIGNING FIELD-SYMBOL(<fs_ret>).
READ TABLE lt_po_base ASSIGNING FIELD-SYMBOL(<fs_po>) WITH KEY ebeln = <fs_ret>-ebeln.
IF sy-subrc <> 0. CONTINUE. ENDIF.
DATA(ls_event) = VALUE ty_event_log(
purchaseorder = <fs_po>-ebeln
activity = 'Goods Returned'
username = <fs_ret>-usnam
vendornumber = <fs_po>-lifnr
orderamount = <fs_po>-netwr
materialgroup = <fs_po>-matkl
companycode = <fs_po>-bukrs
documenttype = <fs_po>-bsart
).
CONVERT DATE <fs_ret>-cpudt TIME <fs_ret>-cputm INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
APPEND ls_event TO gt_event_log.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_PO_COMPLETED
*&---------------------------------------------------------------------*
FORM get_po_completed.
DATA: lt_ebeln TYPE RANGE OF ebeln, ls_ebeln LIKE LINE OF lt_ebeln.
LOOP AT lt_po_base INTO DATA(ls_po_base).
ls_ebeln-sign = 'I'. ls_ebeln-option = 'EQ'. ls_ebeln-low = ls_po_base-ebeln.
APPEND ls_ebeln TO lt_ebeln.
ENDLOOP.
IF lt_ebeln IS INITIAL. RETURN. ENDIF.
SELECT h~objectid, h~username, h~udate, h~utime
FROM cdhdr AS h JOIN cdpos AS p ON h~changenr = p~changenr AND h~objectid = p~objectid
WHERE h~objectclas = 'EINKBELEG' AND h~objectid IN lt_ebeln AND p~tabname = 'EKPO' AND p~fname = 'ELIKZ' AND p~value_new = 'X'
INTO TABLE @DATA(lt_cd_comp).
LOOP AT lt_cd_comp ASSIGNING FIELD-SYMBOL(<fs_cd>).
READ TABLE lt_po_base ASSIGNING FIELD-SYMBOL(<fs_po>) WITH KEY ebeln = <fs_cd>-objectid.
IF sy-subrc <> 0. CONTINUE. ENDIF.
DATA(ls_event) = VALUE ty_event_log(
purchaseorder = <fs_po>-ebeln
activity = 'Purchase Order Completed'
username = <fs_cd>-username
vendornumber = <fs_po>-lifnr
orderamount = <fs_po>-netwr
materialgroup = <fs_po>-matkl
companycode = <fs_po>-bukrs
documenttype = <fs_po>-bsart
).
CONVERT DATE <fs_cd>-udate TIME <fs_cd>-utime INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
APPEND ls_event TO gt_event_log.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_PO_DELETED
*&---------------------------------------------------------------------*
FORM get_po_deleted.
DATA: lt_ebeln TYPE RANGE OF ebeln, ls_ebeln LIKE LINE OF lt_ebeln.
LOOP AT lt_po_base INTO DATA(ls_po_base).
ls_ebeln-sign = 'I'. ls_ebeln-option = 'EQ'. ls_ebeln-low = ls_po_base-ebeln.
APPEND ls_ebeln TO lt_ebeln.
ENDLOOP.
IF lt_ebeln IS INITIAL. RETURN. ENDIF.
SELECT h~objectid, h~username, h~udate, h~utime
FROM cdhdr AS h JOIN cdpos AS p ON h~changenr = p~changenr AND h~objectid = p~objectid
WHERE h~objectclas = 'EINKBELEG' AND h~objectid IN lt_ebeln AND p~tabname = 'EKPO' AND p~fname = 'LOEKZ' AND p~value_new = 'L'
INTO TABLE @DATA(lt_cd_del).
LOOP AT lt_cd_del ASSIGNING FIELD-SYMBOL(<fs_cd>).
READ TABLE lt_po_base ASSIGNING FIELD-SYMBOL(<fs_po>) WITH KEY ebeln = <fs_cd>-objectid.
IF sy-subrc <> 0. CONTINUE. ENDIF.
DATA(ls_event) = VALUE ty_event_log(
purchaseorder = <fs_po>-ebeln
activity = 'Purchase Order Deleted'
username = <fs_cd>-username
vendornumber = <fs_po>-lifnr
orderamount = <fs_po>-netwr
materialgroup = <fs_po>-matkl
companycode = <fs_po>-bukrs
documenttype = <fs_po>-bsart
).
CONVERT DATE <fs_cd>-udate TIME <fs_cd>-utime INTO TIME STAMP ls_event-eventtime TIME ZONE sy-zonlo.
APPEND ls_event TO gt_event_log.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_TO_CSV
*&---------------------------------------------------------------------*
FORM download_to_csv.
DATA: lv_filename TYPE string.
DATA: lt_fieldnames TYPE TABLE OF string.
APPEND 'PurchaseOrder' TO lt_fieldnames.
APPEND 'Activity' TO lt_fieldnames.
APPEND 'EventTime' TO lt_fieldnames.
APPEND 'UserName' TO lt_fieldnames.
APPEND 'VendorNumber' TO lt_fieldnames.
APPEND 'OrderAmount' TO lt_fieldnames.
APPEND 'MaterialGroup' TO lt_fieldnames.
APPEND 'CompanyCode' TO lt_fieldnames.
APPEND 'DocumentType' TO lt_fieldnames.
DATA(lv_header) = REDUCE string( INIT h = '' FOR f IN lt_fieldnames NEXT h = h && f && cl_abap_char_utilities=>horizontal_tab ).
REPLACE LAST OCCURRENCE OF cl_abap_char_utilities=>horizontal_tab IN lv_header WITH cl_abap_char_utilities=>cr_lf.
DATA(lv_file_content) = lv_header.
LOOP AT gt_event_log ASSIGNING FIELD-SYMBOL(<fs_log>).
DATA lv_line TYPE string.
DATA lv_eventtime_str TYPE string.
lv_eventtime_str = |{ <fs_log>-eventtime TIMESTAMP = ISO }|.
lv_line = <fs_log>-purchaseorder && cl_abap_char_utilities=>horizontal_tab &&
<fs_log>-activity && cl_abap_char_utilities=>horizontal_tab &&
lv_eventtime_str && cl_abap_char_utilities=>horizontal_tab &&
<fs_log>-username && cl_abap_char_utilities=>horizontal_tab &&
<fs_log>-vendornumber && cl_abap_char_utilities=>horizontal_tab &&
<fs_log>-orderamount && cl_abap_char_utilities=>horizontal_tab &&
<fs_log>-materialgroup && cl_abap_char_utilities=>horizontal_tab &&
<fs_log>-companycode && cl_abap_char_utilities=>horizontal_tab &&
<fs_log>-documenttype && cl_abap_char_utilities=>cr_lf.
CONCATENATE lv_file_content lv_line INTO lv_file_content.
ENDLOOP.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = 'C:\temp\po_event_log.csv'
filetype = 'ASC'
CHANGING
data_tab = lv_file_content.Adımlar
- Veritabanı Bağlantısı Kurun: Temel alınan SAP ECC veritabanı için salt okunur kimlik bilgilerini ve bağlantı detaylarını (ana bilgisayar adı, bağlantı noktası, veritabanı adı) edinin. DBeaver, SQL Developer veya SSMS gibi gerekli istemci araçlarının kurulu olduğundan emin olun.
- SAP Şemasını Belirleyin: Veritabanına bağlanın ve tabloların bulunduğu birincil SAP şemasını belirleyin. Bu genellikle SAPSR3, SAPHANADB veya benzeri sisteme özel bir isimdir. Sorgudaki tüm tablo adlarını, kullanıcınız için varsayılan değilse, bu şemayla ön eklemeniz gerekecektir.
- SQL Sorgusunu İnceleyin: Sağlanan SQL betiğini istemci aracınızda açın. Bu kapsamlı sorgu, birden fazla SAP tablosunu birleştirerek Satın Alma-Ödeme Süreci'nden 14 farklı aktiviteyi çıkarmak için tasarlanmıştır.
- Sorgu Parametrelerini Özelleştirin: Betiğin başında bulunan PO_BASE Ortak Tablo İfadesi'ni (CTE) bulun. Çıkarma kapsamınızı tanımlamak için yer tutucu değerleri değiştirin:
- [START_DATE] ve [END_DATE]: Analiz için tarih aralığını ayarlayın (örneğin, '20230101' ve '20230630'). AEDAT (Değiştirme Tarihi) alanı üzerinden filtreleme yapılması önerilir.
- [COMPANY_CODE_1], [COMPANY_CODE_2]: Dahil edilecek SAP Şirket Kodlarını belirtin.
- [DOC_TYPE_1], [DOC_TYPE_2]: Dahil edilecek Satınalma Siparişi Belge Türlerini belirtin.
- [Your SAP Schema]: Bu yer tutucuyu, betik boyunca gerçek SAP şema adınızla değiştirin.
- Sorguyu Çalıştırın: Özelleştirilmiş SQL betiğini SAP veritabanına karşı çalıştırın. Yürütme süresi, tarih aralığına, veri hacmine ve veritabanı performansına bağlı olarak değişecektir.
- Sonuçları İnceleyin: Sorgu tamamlandıktan sonra, çıktıyı hızlıca gözden geçirin. Makul sayıda satır olup olmadığını kontrol edin ve PurchaseOrder, Activity, EventTime gibi temel sütunların beklendiği gibi doldurulduğundan emin olun.
- Verileri CSV'ye Aktarın: Tüm sonuç kümesini SQL istemcinizden bir CSV dosyasına aktarın. Karakter sorunlarını önlemek için UTF-8 kodlaması kullanın.
- Yüklemeye Hazırlanın: CSV dosyanızdaki sütun başlıklarının gerekli nitelik adlarıyla tam olarak eşleştiğinden emin olun: PurchaseOrder, Activity, EventTime, UserName, VendorNumber, OrderAmount, MaterialGroup, CompanyCode, DocumentType.
- Process Mining Aracına Yükleyin: Nihai CSV dosyasını analiz ve görselleştirme için Process Mining uygulamanıza yükleyin.
Konfigürasyon
- Ön Koşullar: Temel SAP ECC veritabanına doğrudan, salt okunur erişim gereklidir. Kullanıcıların EKKO, EKPO, EKBE, EBAN, CDHDR, CDPOS ve NAST gibi tabloları sorgulamak için yeterli yetkiye sahip olması gerekir.
- Tarih Aralığı Filtrelemesi: Veri hacmini sınırlamak için bir tarih aralığı filtresi uygulamak kritik öneme sahiptir. 3-6 aylık bir süre için EKKO.AEDAT (Satın Alma Siparişi Değişiklik Tarihi) üzerinden filtreleme yaygın bir başlangıç noktasıdır. Geniş tarih aralıkları, sorgu yürütme sürelerinin aşırı uzun olmasına neden olabilir.
- Ana Veri Filtreleri: Odaklanmış bir analiz sağlamak için her zaman EKKO.BUKRS (Şirket Kodu) ve EKKO.BSART (Belge Türü) üzerinden filtreleme yapılmalıdır. Bu, kapsamı ilgili tüzel kişilikler ve iş süreçleriyle daraltır.
- Performans Hususları: Sorgu, değişiklik geçmişi tabloları (CDHDR, CDPOS) dahil olmak üzere birçok büyük tabloyu birleştirir. Bu, kaynak yoğun bir işlem olabilir. Sistem performansını etkilememek için bu çekimin mesai dışı saatlerde veya replike edilmiş, üretim dışı bir veritabanı üzerinde çalıştırılması şiddetle tavsiye edilir.
- Değişiklik Belgesi Kaydı: 'Onaylandı', 'Reddedildi', 'Tamamlandı' ve 'Değiştirildi' gibi aktivitelerin doğruluğu, ilgili alanlar için SAP'de değişiklik belgesi kaydının aktif olmasına bağlıdır. Bu kaydın etkin olduğunu SAP yöneticinizle (SCDO işlemi aracılığıyla) doğrulayın.
a Örnek Sorgu sql
WITH PO_BASE AS (
SELECT
H.EBELN, -- Purchase Order Number
I.EBELP, -- Purchase Order Item
H.LIFNR, -- Vendor Number
H.BUKRS, -- Company Code
H.BSART, -- Document Type
I.NETWR, -- Order Amount (Item Level)
I.MATKL, -- Material Group
I.BANFN, -- Purchase Requisition Number
I.BNFPO -- Purchase Requisition Item
FROM [Your SAP Schema].EKKO AS H
JOIN [Your SAP Schema].EKPO AS I ON H.EBELN = I.EBELN
WHERE H.AEDAT BETWEEN '[START_DATE]' AND '[END_DATE]' -- Filter on PO Change Date, e.g., '20230101' and '20231231'
AND H.BUKRS IN ('[COMPANY_CODE_1]', '[COMPANY_CODE_2]') -- Specify Company Codes
AND H.BSART IN ('[DOC_TYPE_1]', '[DOC_TYPE_2]') -- Specify PO Document Types
)
-- 1. Purchase Requisition Created
SELECT
po.EBELN AS "PurchaseOrder",
'Purchase Requisition Created' AS "Activity",
TO_TIMESTAMP(CONCAT(pr.ERDAT, '000000'), 'YYYYMMDDHH24MISS') AS "EventTime", -- Time is not available in EBAN
pr.ERNAM AS "UserName",
po.LIFNR AS "VendorNumber",
po.NETWR AS "OrderAmount",
po.MATKL AS "MaterialGroup",
po.BUKRS AS "CompanyCode",
po.BSART AS "DocumentType"
FROM PO_BASE po
JOIN [Your SAP Schema].EBAN pr ON po.BANFN = pr.BANFN AND po.BNFPO = pr.BNFPO
WHERE po.BANFN IS NOT NULL AND po.BANFN <> ''
UNION ALL
-- 2. Purchase Requisition Approved
SELECT
po.EBELN AS "PurchaseOrder",
'Purchase Requisition Approved' AS "Activity",
TO_TIMESTAMP(CONCAT(ch.UDATE, ' ', ch.UTIME), 'YYYYMMDD HH24MISS') AS "EventTime",
ch.USERNAME AS "UserName",
po.LIFNR AS "VendorNumber",
po.NETWR AS "OrderAmount",
po.MATKL AS "MaterialGroup",
po.BUKRS AS "CompanyCode",
po.BSART AS "DocumentType"
FROM PO_BASE po
JOIN [Your SAP Schema].CDHDR ch ON ch.OBJECTCLASS = 'BANF' AND ch.OBJECTID = po.BANFN
JOIN [Your SAP Schema].CDPOS cp ON ch.OBJECTCLASS = cp.OBJECTCLASS AND ch.OBJECTID = cp.OBJECTID AND ch.CHANGENR = cp.CHANGENR
WHERE cp.TABNAME = 'EBAN' AND cp.FNAME = 'FRGZU' AND cp.VALUE_NEW = 'X' -- Release indicator set to 'released'
UNION ALL
-- 3. Purchase Order Created
SELECT
po.EBELN AS "PurchaseOrder",
'Purchase Order Created' AS "Activity",
TO_TIMESTAMP(CONCAT(ekko.ERDAT, ' ', ekko.ERZET), 'YYYYMMDD HH24MISS') AS "EventTime",
ekko.ERNAM AS "UserName",
po.LIFNR AS "VendorNumber",
po.NETWR AS "OrderAmount",
po.MATKL AS "MaterialGroup",
po.BUKRS AS "CompanyCode",
po.BSART AS "DocumentType"
FROM PO_BASE po
JOIN [Your SAP Schema].EKKO ekko ON po.EBELN = ekko.EBELN
UNION ALL
-- 4. Purchase Order Approval Requested / 5. Approved / 6. Rejected (from Change Docs)
SELECT
po.EBELN AS "PurchaseOrder",
CASE
WHEN cp.VALUE_NEW > cp.VALUE_OLD THEN 'Purchase Order Approval Requested'
WHEN cp.VALUE_NEW = ekko.FRGKE AND ekko.FRGKE = 'R' THEN 'Purchase Order Approved'
ELSE 'Purchase Order Rejected' -- Simplified logic, may need adjustment
END AS "Activity",
TO_TIMESTAMP(CONCAT(ch.UDATE, ' ', ch.UTIME), 'YYYYMMDD HH24MISS') AS "EventTime",
ch.USERNAME AS "UserName",
po.LIFNR AS "VendorNumber",
po.NETWR AS "OrderAmount",
po.MATKL AS "MaterialGroup",
po.BUKRS AS "CompanyCode",
po.BSART AS "DocumentType"
FROM PO_BASE po
JOIN [Your SAP Schema].EKKO ekko ON po.EBELN = ekko.EBELN
JOIN [Your SAP Schema].CDHDR ch ON ch.OBJECTCLASS = 'EINKBELEG' AND ch.OBJECTID = po.EBELN
JOIN [Your SAP Schema].CDPOS cp ON ch.OBJECTCLASS = cp.OBJECTCLASS AND ch.OBJECTID = cp.OBJECTID AND ch.CHANGENR = cp.CHANGENR
WHERE cp.TABNAME = 'EKKO' AND cp.FNAME = 'FRGZU' -- Release status
UNION ALL
-- 7. Purchase Order Sent to Vendor
SELECT
po.EBELN AS "PurchaseOrder",
'Purchase Order Sent to Vendor' AS "Activity",
TO_TIMESTAMP(CONCAT(na.ERDAT, ' ', na.ERUHR), 'YYYYMMDD HH24MISS') AS "EventTime",
na.USNAM AS "UserName",
po.LIFNR AS "VendorNumber",
po.NETWR AS "OrderAmount",
po.MATKL AS "MaterialGroup",
po.BUKRS AS "CompanyCode",
po.BSART AS "DocumentType"
FROM PO_BASE po
JOIN [Your SAP Schema].NAST na ON na.OBJKY = po.EBELN AND na.KSCHL = '[Your PO Output Type]' -- e.g., 'NEU'
WHERE na.VSTAT = '1' -- Successfully processed
UNION ALL
-- 8. Purchase Order Changed
SELECT
po.EBELN AS "PurchaseOrder",
'Purchase Order Changed' AS "Activity",
TO_TIMESTAMP(CONCAT(ch.UDATE, ' ', ch.UTIME), 'YYYYMMDD HH24MISS') AS "EventTime",
ch.USERNAME AS "UserName",
po.LIFNR AS "VendorNumber",
po.NETWR AS "OrderAmount",
po.MATKL AS "MaterialGroup",
po.BUKRS AS "CompanyCode",
po.BSART AS "DocumentType"
FROM PO_BASE po
JOIN [Your SAP Schema].CDHDR ch ON ch.OBJECTCLASS = 'EINKBELEG' AND ch.OBJECTID = po.EBELN
WHERE ch.TCODE IN ('ME22', 'ME22N') -- Filter for change transactions
UNION ALL
-- 9. Goods Receipt Posted
SELECT
ekbe.EBELN AS "PurchaseOrder",
'Goods Receipt Posted' AS "Activity",
TO_TIMESTAMP(CONCAT(mkpf.CPUDT, ' ', mkpf.CPUTM), 'YYYYMMDD HH24MISS') AS "EventTime",
mkpf.USNAM AS "UserName",
po.LIFNR AS "VendorNumber",
po.NETWR AS "OrderAmount",
po.MATKL AS "MaterialGroup",
po.BUKRS AS "CompanyCode",
po.BSART AS "DocumentType"
FROM [Your SAP Schema].EKBE AS ekbe
JOIN [Your SAP Schema].MKPF AS mkpf ON ekbe.BELNR = mkpf.MBLNR AND ekbe.GJAHR = mkpf.MJAHR
JOIN PO_BASE AS po ON ekbe.EBELN = po.EBELN AND ekbe.EBELP = po.EBELP
WHERE ekbe.BEWTP = 'E' -- Goods Receipt
AND ekbe.SHKZG = 'S' -- Debit/Credit Indicator: Goods Receipt
UNION ALL
-- 10. Services Confirmation Entered
SELECT
po.EBELN AS "PurchaseOrder",
'Services Confirmation Entered' AS "Activity",
TO_TIMESTAMP(CONCAT(essr.ERDAT, ' ', essr.ERZET), 'YYYYMMDD HH24MISS') AS "EventTime",
essr.ERNAM AS "UserName",
po.LIFNR AS "VendorNumber",
po.NETWR AS "OrderAmount",
po.MATKL AS "MaterialGroup",
po.BUKRS AS "CompanyCode",
po.BSART AS "DocumentType"
FROM PO_BASE po
JOIN [Your SAP Schema].EKBE ekbe ON po.EBELN = ekbe.EBELN AND po.EBELP = ekbe.EBELP
JOIN [Your SAP Schema].ESSR essr ON ekbe.LBLNI = essr.LBLNI
WHERE ekbe.BEWTP = 'L' -- Service Entry Sheet
UNION ALL
-- 11. Quality Inspection Performed
SELECT
po.EBELN AS "PurchaseOrder",
'Quality Inspection Performed' AS "Activity",
TO_TIMESTAMP(CONCAT(qave.VDATUM, ' ', qave.VZEIT), 'YYYYMMDD HH24MISS') AS "EventTime",
qave.VNAME AS "UserName",
po.LIFNR AS "VendorNumber",
po.NETWR AS "OrderAmount",
po.MATKL AS "MaterialGroup",
po.BUKRS AS "CompanyCode",
po.BSART AS "DocumentType"
FROM PO_BASE po
JOIN [Your SAP Schema].EKBE ekbe ON po.EBELN = ekbe.EBELN AND po.EBELP = ekbe.EBELP
JOIN [Your SAP Schema].QALS qals ON qals.MBLNR = ekbe.BELNR AND qals.MJAHR = ekbe.GJAHR
JOIN [Your SAP Schema].QAVE qave ON qals.PRUEFLOS = qave.PRUEFLOS
WHERE ekbe.BEWTP = 'E' -- Linked to a Goods Receipt
UNION ALL
-- 12. Goods Returned
SELECT
ekbe.EBELN AS "PurchaseOrder",
'Goods Returned' AS "Activity",
TO_TIMESTAMP(CONCAT(mkpf.CPUDT, ' ', mkpf.CPUTM), 'YYYYMMDD HH24MISS') AS "EventTime",
mkpf.USNAM AS "UserName",
po.LIFNR AS "VendorNumber",
po.NETWR AS "OrderAmount",
po.MATKL AS "MaterialGroup",
po.BUKRS AS "CompanyCode",
po.BSART AS "DocumentType"
FROM [Your SAP Schema].EKBE AS ekbe
JOIN [Your SAP Schema].MKPF AS mkpf ON ekbe.BELNR = mkpf.MBLNR AND ekbe.GJAHR = mkpf.MJAHR
JOIN PO_BASE AS po ON ekbe.EBELN = po.EBELN AND ekbe.EBELP = po.EBELP
WHERE ekbe.BEWTP = 'E' -- Goods Movement
AND ekbe.SHKZG = 'H' -- Debit/Credit Indicator: Return
AND ekbe.BWART = '122' -- Movement type for return to vendor
UNION ALL
-- 13. Purchase Order Completed
SELECT
po.EBELN AS "PurchaseOrder",
'Purchase Order Completed' AS "Activity",
TO_TIMESTAMP(CONCAT(ch.UDATE, ' ', ch.UTIME), 'YYYYMMDD HH24MISS') AS "EventTime",
ch.USERNAME AS "UserName",
po.LIFNR AS "VendorNumber",
po.NETWR AS "OrderAmount",
po.MATKL AS "MaterialGroup",
po.BUKRS AS "CompanyCode",
po.BSART AS "DocumentType"
FROM PO_BASE po
JOIN [Your SAP Schema].CDHDR ch ON ch.OBJECTCLASS = 'EINKBELEG' AND ch.OBJECTID LIKE CONCAT(po.EBELN, po.EBELP, '%')
JOIN [Your SAP Schema].CDPOS cp ON ch.OBJECTCLASS = cp.OBJECTCLASS AND ch.OBJECTID = cp.OBJECTID AND ch.CHANGENR = cp.CHANGENR
WHERE cp.TABNAME = 'EKPO' AND cp.FNAME = 'ELIKZ' AND cp.VALUE_NEW = 'X' -- Delivery completed indicator
UNION ALL
-- 14. Purchase Order Deleted
SELECT
po.EBELN AS "PurchaseOrder",
'Purchase Order Deleted' AS "Activity",
TO_TIMESTAMP(CONCAT(ch.UDATE, ' ', ch.UTIME), 'YYYYMMDD HH24MISS') AS "EventTime",
ch.USERNAME AS "UserName",
po.LIFNR AS "VendorNumber",
po.NETWR AS "OrderAmount",
po.MATKL AS "MaterialGroup",
po.BUKRS AS "CompanyCode",
po.BSART AS "DocumentType"
FROM PO_BASE po
JOIN [Your SAP Schema].CDHDR ch ON ch.OBJECTCLASS = 'EINKBELEG' AND ch.OBJECTID LIKE CONCAT(po.EBELN, po.EBELP, '%')
JOIN [Your SAP Schema].CDPOS cp ON ch.OBJECTCLASS = cp.OBJECTCLASS AND ch.OBJECTID = cp.OBJECTID AND ch.CHANGENR = cp.CHANGENR
WHERE cp.TABNAME = 'EKPO' AND cp.FNAME = 'LOEKZ' AND cp.VALUE_NEW = 'L'; -- Deletion indicatorAdımlar
- Ön Koşullar ve Bağlantı: Üçüncü taraf ETL aracınızın SAP Sertifikalı Konektörünü yüklediğinden ve lisansladığından emin olun. ETL aracınızın yönetim konsolunda, SAP ECC sisteminize yeni bir bağlantı yapılandırın. Uygulama sunucusu ana bilgisayarı, sistem numarası, istemci kimliği ve uygun RFC ve tablo okuma yetkilerine sahip özel bir SAP kullanıcısına ihtiyacınız olacaktır.
- Kaynak Tabloları Belirleme: ETL işinizde veya veri akışınızda, gerekli SAP tablolarını veri kaynakları olarak tanımlayın. Birincil tablolar arasında EKKO (Satınalma Siparişi Başlığı), EKPO (Satınalma Siparişi Kalemi), EBAN (Satınalma Talebi), CDHDR (Değişiklik Belgesi Başlığı), CDPOS (Değişiklik Belgesi Kalemi), MSEG (Belge Segmenti: Malzeme), MKPF (Malzeme Belgesi Başlığı), NAST (Mesaj Durumu), ESSR (Hizmet Giriş Sayfası Başlığı) ve QALS (Muayene Lotu) bulunmaktadır.
- 'Satınalma Siparişi Oluşturuldu' Verilerini Çekme: EKKO tablosundan kaynak alan bir veri akışı oluşturun. Kayıtları istediğiniz tarih aralığına (örn. AEDAT kullanarak) ve organizasyonel kapsama (örn. Şirket Kodu için BUKRS, Belge Türü için BSART) göre filtreleyin. EKKO.EBELN'i SatınalmaSiparişi'ne, 'Satınalma Siparişi Oluşturuldu'yu Aktivite'ye eşleyin ve OlayZamanı için AEDAT ile ERZET'i birleştirin. Diğer gerekli öznitelikleri eşleyin.
- 'Mal Girişi Kaydedildi' Verilerini Çekme: MSEG'den kaynak alan ve MBLNR ile MJAHR üzerinde MKPF ile birleşen ayrı bir veri akışı oluşturun. '101' gibi ilgili hareket türlerini filtreleyin. MSEG.EBELN'i SatınalmaSiparişi'ne, 'Mal Girişi Kaydedildi'yi Aktivite'ye eşleyin ve OlayZamanı için MKPF.CPUDT ile MKPF.CPUTM'yi kullanın.
- Değişikliğe Dayalı Olayları Çekme (Onaylar, Değişiklikler, Silmeler): CDHDR ve CDPOS'tan kaynak alan, CHANGENR üzerinde birleştirilmiş bir veri akışı oluşturun. Bu tek kaynak, birden fazla aktivite türetmek için kullanılabilir.
- OBJECTCLAS = 'EINKBELEG' ve TABNAME = 'EKPO' filtrelemesi yapın.
- 'Satınalma Siparişi Onaylandı' için, serbest bırakma durumu alanındaki değişiklikleri (örn. FNAME = 'FRGZU') yeni değerin (VALUE_NEW) nihai onayı belirttiği şekilde filtreleyin.
- 'Satınalma Siparişi Silindi' için, silme göstergesindeki (FNAME = 'LOEKZ') değişiklikleri yeni değerin 'L' olduğu şekilde filtreleyin.
- 'Satınalma Siparişi Değiştirildi' için, diğer aktiviteler için kullanılan belirli durum alanları hariç, diğer ilgili alan değişikliklerini filtreleyin.
- Tüm bu olaylar için OlayZamanı olarak CDHDR.UDATE ve CDHDR.UTIME'ı kullanın.
- 'Satınalma Talebi' Olaylarını Çekme: EBAN'dan 'Satınalma Talebi Oluşturuldu' için bir veri akışı oluşturun. Bunu bir SatınalmaSiparişi vakasına bağlamak için, talep numarası (BANFN) ve kalemi (BNFPO) kullanarak EBAN'ı EKPO ile birleştirin. 'Satınalma Talebi Onaylandı' için CDHDR/CDPOS'u OBJECTCLAS = 'BANF' ile kullanın. Bu, olayın nihai Satınalma Siparişi ile ilişkilendirildiğinden emin olmak için dikkatli eşleme gerektirir.
- 'Satınalma Siparişi Tedarikçiye Gönderildi' Verilerini Çekme: NAST tablosundan kaynak alan bir veri akışı oluşturun. OBJECTKEY (Satınalma Siparişi numarasını içerir), ilgili çıktı türü (KSCHL) ve başarılı bir işleme durumu (VSTAT = '1') üzerinde filtreleme yapın. OlayZamanı için ERDAT ve UHR'yi kullanın.
- Aktivite Akışlarını Birleştirme: Önceki adımlarda oluşturulan tüm bireysel veri akışlarının çıktılarını birleştirmek için ETL aracınızda bir 'Union' veya 'Merge' dönüşümü kullanın. Tüm akışlarda sütun adlarının ve veri türlerinin tutarlı olduğundan (SatınalmaSiparişi, Aktivite, OlayZamanı vb.) emin olun.
- Veri Türü ve Format Dönüşümü: OlayZamanı sütununun tutarlı bir zaman damgası formatına (örn. YYYY-MM-DD HH:MM:SS) dönüştürüldüğünden emin olun. SiparişTutarını standart bir ondalık formata dönüştürün.
- Hedef Konumu Tanımlama: Birleşik veri akışınız için bir hedef veya 'çıkış noktası' yapılandırın. Bu genellikle CSV veya Parquet dosyası gibi düz bir dosyadır. Ayırıcıyı, metin niteleyicilerini ve başlık seçeneklerini yapılandırın.
- Yürüt ve Doğrula: Tüm ETL işini çalıştırın. Tüm 14 aktivitenin mevcut olduğundan, satır sayılarının makul olduğundan ve ana özniteliklerin doğru şekilde doldurulduğundan emin olmak için çıktı dosyası üzerinde doğrulama kontrolleri yapın.
- Planla ve Dışa Aktar: Doğrulandıktan sonra, veriyi güncel tutmak için ETL işini periyodik yürütme (örn. gecelik) için planlayın. Oluşturulan dosya artık Process Mining aracınıza yüklenmeye hazırdır.
Konfigürasyon
- Ön Koşullar: İlgili SAP ECC Sertifikalı Bağlayıcısı olan ticari bir ETL aracı (örn. Informatica PowerCenter, Talend, SAP Data Services) gereklidir. Ayrıca, gerekli tablolar için S_RFC ve S_TABU_DIS yetkilerine sahip bir SAP diyalog veya sistem kullanıcısı da bulunmalıdır.
- SAP Bağlantısı: Bağlayıcı, SAP uygulama sunucusu, sistem numarası, istemci, kullanıcı ve parola ile yapılandırılmalıdır. Güvenli Ağ İletişimi (SNC) kullanılması önerilir.
- Tarih Aralığı Filtresi: Veri hacmini sınırlamak için bir tarih aralığı filtresi uygulamak kritik öneme sahiptir. Yaygın bir uygulama, son 3 ila 12 ay için EKKO.AEDAT (Satın Alma Siparişi Oluşturma Tarihi) üzerinden filtreleme yapmaktır. Bu filtre, SAP'den aşırı veri çekilmesini önlemek için kaynakta uygulanmalıdır.
- Organizasyonel Kapsam Filtreleri: Analizi belirli bir iş birimine daraltmak için her zaman EKKO.BUKRS (Şirket Kodu) üzerinden filtreleme yapılmalı ve EKPO.WERKS (Tesis) veya EKKO.EKORG (Satın Alma Organizasyonu) üzerinden filtreleme yapılması da düşünülebilir.
- Belge Türü Filtresi: Sadece ilgili satın alma siparişi türlerini dahil etmek ve standart P2P sürecinin parçası olmayan stok transferlerini veya diğer dahili belgeleri hariç tutmak için EKKO.BSART kullanılmalıdır.
- Performans Ayarlamaları: Değişiklik belgesi tablolarından (CDHDR, CDPOS) veri çekimi yavaş olabilir. OBJECTCLAS, OBJECTID ve UDATE üzerinde filtrelerin uygulandığından emin olun. Veri aktarım hızlarını optimize etmek için SAP bağlayıcısındaki 'Paket Boyutu' ayarı optimize edilmelidir. Çok büyük sistemler için, ilk geçmiş yüklemesi ve ardından zamanlanmış delta yüklemeleri düşünülmelidir.
a Örnek Sorgu config
/*
This is a logical representation of the transformations performed within the ETL tool.
The tool's graphical interface will be used to configure these separate data flows, which are then combined with a UNION transformation.
Placeholders like [Your ETL Tool Functions] and [Filter Values] must be configured in the tool.
*/
-- 1. Purchase Requisition Created
SELECT
ekpo.EBELN AS PurchaseOrder,
'Purchase Requisition Created' AS Activity,
[Your ETL Tool Functions].DateTime(eban.ERDAT, eban.ERZET) AS EventTime,
eban.ERNAM AS UserName,
ekko.LIFNR AS VendorNumber,
ekpo.NETWR AS OrderAmount,
ekpo.MATKL AS MaterialGroup,
ekko.BUKRS AS CompanyCode,
ekko.BSART AS DocumentType
FROM EBAN AS eban
INNER JOIN EKPO AS ekpo ON eban.BANFN = ekpo.BANFN AND eban.BNFPO = ekpo.BNFPO
INNER JOIN EKKO AS ekko ON ekpo.EBELN = ekko.EBELN
WHERE ekko.AEDAT BETWEEN '[START_DATE]' AND '[END_DATE]' AND ekko.BUKRS IN ([YOUR_COMPANY_CODES]);
UNION ALL
-- 2. Purchase Requisition Approved (inferred from change documents)
SELECT
ekpo.EBELN AS PurchaseOrder,
'Purchase Requisition Approved' AS Activity,
[Your ETL Tool Functions].DateTime(cdhdr.UDATE, cdhdr.UTIME) AS EventTime,
cdhdr.USERNAME AS UserName,
ekko.LIFNR AS VendorNumber,
ekpo.NETWR AS OrderAmount,
ekpo.MATKL AS MaterialGroup,
ekko.BUKRS AS CompanyCode,
ekko.BSART AS DocumentType
FROM CDHDR AS cdhdr
INNER JOIN CDPOS AS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
INNER JOIN EBAN AS eban ON cdhdr.OBJECTID = eban.BANFN
INNER JOIN EKPO AS ekpo ON eban.BANFN = ekpo.BANFN AND eban.BNFPO = ekpo.BNFPO
INNER JOIN EKKO AS ekko ON ekpo.EBELN = ekko.EBELN
WHERE cdhdr.OBJECTCLAS = 'BANF' AND cdpos.TABNAME = 'EBAN' AND cdpos.FNAME = 'FRGZU' AND cdpos.VALUE_NEW = '[Final Release Indicator for PR]'
AND ekko.AEDAT BETWEEN '[START_DATE]' AND '[END_DATE]' AND ekko.BUKRS IN ([YOUR_COMPANY_CODES]);
UNION ALL
-- 3. Purchase Order Created
SELECT
EBELN AS PurchaseOrder,
'Purchase Order Created' AS Activity,
[Your ETL Tool Functions].DateTime(AEDAT, ERZET) AS EventTime,
ERNAM AS UserName,
LIFNR AS VendorNumber,
NULL AS OrderAmount, -- Amount is at item level
NULL AS MaterialGroup, -- Attribute is at item level
BUKRS AS CompanyCode,
BSART AS DocumentType
FROM EKKO
WHERE AEDAT BETWEEN '[START_DATE]' AND '[END_DATE]' AND BUKRS IN ([YOUR_COMPANY_CODES]);
UNION ALL
-- 4. Purchase Order Approval Requested / 5. Approved / 6. Rejected (inferred from change documents)
SELECT
ekpo.EBELN AS PurchaseOrder,
CASE
WHEN cdpos.VALUE_NEW = '[Final Release Code]' THEN 'Purchase Order Approved'
WHEN cdpos.VALUE_NEW = '[Rejection Release Code]' THEN 'Purchase Order Rejected'
ELSE 'Purchase Order Approval Requested'
END AS Activity,
[Your ETL Tool Functions].DateTime(cdhdr.UDATE, cdhdr.UTIME) AS EventTime,
cdhdr.USERNAME AS UserName,
ekko.LIFNR AS VendorNumber,
ekpo.NETWR AS OrderAmount,
ekpo.MATKL AS MaterialGroup,
ekko.BUKRS AS CompanyCode,
ekko.BSART AS DocumentType
FROM CDHDR AS cdhdr
INNER JOIN CDPOS AS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
INNER JOIN EKKO AS ekko ON SUBSTRING(cdhdr.OBJECTID, 1, 10) = ekko.EBELN
INNER JOIN EKPO AS ekpo ON ekko.EBELN = ekpo.EBELN
WHERE cdhdr.OBJECTCLAS = 'EINKBELEG' AND cdpos.TABNAME = 'EKKO' AND cdpos.FNAME = 'FRGKE'
AND ekko.AEDAT BETWEEN '[START_DATE]' AND '[END_DATE]' AND ekko.BUKRS IN ([YOUR_COMPANY_CODES]);
UNION ALL
-- 7. Purchase Order Sent to Vendor
SELECT
ekko.EBELN AS PurchaseOrder,
'Purchase Order Sent to Vendor' AS Activity,
[Your ETL Tool Functions].DateTime(nast.ERDAT, nast.UHR) AS EventTime,
nast.USNAM AS UserName,
ekko.LIFNR AS VendorNumber,
ekpo.NETWR AS OrderAmount,
ekpo.MATKL AS MaterialGroup,
ekko.BUKRS AS CompanyCode,
ekko.BSART AS DocumentType
FROM NAST AS nast
INNER JOIN EKKO AS ekko ON nast.OBJKY = ekko.EBELN
INNER JOIN EKPO AS ekpo ON ekko.EBELN = ekpo.EBELN
WHERE nast.KAPPL = 'EF' AND nast.VSTAT = '1' AND nast.KSCHL IN ([Your PO Output Types])
AND ekko.AEDAT BETWEEN '[START_DATE]' AND '[END_DATE]' AND ekko.BUKRS IN ([YOUR_COMPANY_CODES]);
UNION ALL
-- 8. Purchase Order Changed (inferred from change documents, simplified example)
SELECT DISTINCT
ekko.EBELN AS PurchaseOrder,
'Purchase Order Changed' AS Activity,
[Your ETL Tool Functions].DateTime(cdhdr.UDATE, cdhdr.UTIME) AS EventTime,
cdhdr.USERNAME AS UserName,
ekko.LIFNR AS VendorNumber,
ekpo.NETWR AS OrderAmount,
ekpo.MATKL AS MaterialGroup,
ekko.BUKRS AS CompanyCode,
ekko.BSART AS DocumentType
FROM CDHDR AS cdhdr
INNER JOIN CDPOS AS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
INNER JOIN EKKO AS ekko ON SUBSTRING(cdhdr.OBJECTID, 1, 10) = ekko.EBELN
INNER JOIN EKPO AS ekpo ON ekko.EBELN = ekpo.EBELN
WHERE cdhdr.OBJECTCLAS = 'EINKBELEG' AND cdpos.FNAME NOT IN ('FRGKE', 'FRGZU', 'LOEKZ', 'ELIKZ')
AND ekko.AEDAT BETWEEN '[START_DATE]' AND '[END_DATE]' AND ekko.BUKRS IN ([YOUR_COMPANY_CODES]);
UNION ALL
-- 9. Goods Receipt Posted
SELECT
mseg.EBELN AS PurchaseOrder,
'Goods Receipt Posted' AS Activity,
[Your ETL Tool Functions].DateTime(mkpf.CPUDT, mkpf.CPUTM) AS EventTime,
mkpf.USNAM AS UserName,
ekko.LIFNR AS VendorNumber,
ekpo.NETWR AS OrderAmount,
ekpo.MATKL AS MaterialGroup,
ekko.BUKRS AS CompanyCode,
ekko.BSART AS DocumentType
FROM MSEG AS mseg
INNER JOIN MKPF AS mkpf ON mseg.MBLNR = mkpf.MBLNR AND mseg.MJAHR = mkpf.MJAHR
INNER JOIN EKPO AS ekpo ON mseg.EBELN = ekpo.EBELN AND mseg.EBELP = ekpo.EBELP
INNER JOIN EKKO AS ekko ON ekpo.EBELN = ekko.EBELN
WHERE mseg.BWART = '101' AND ekko.AEDAT BETWEEN '[START_DATE]' AND '[END_DATE]' AND ekko.BUKRS IN ([YOUR_COMPANY_CODES]);
UNION ALL
-- 10. Services Confirmation Entered
SELECT
essr.EBELN AS PurchaseOrder,
'Services Confirmation Entered' AS Activity,
[Your ETL Tool Functions].DateTime(essr.ERDAT, essr.ERZET) AS EventTime,
essr.ERNAM AS UserName,
ekko.LIFNR AS VendorNumber,
ekpo.NETWR AS OrderAmount,
ekpo.MATKL AS MaterialGroup,
ekko.BUKRS AS CompanyCode,
ekko.BSART AS DocumentType
FROM ESSR AS essr
INNER JOIN EKKO AS ekko ON essr.EBELN = ekko.EBELN
INNER JOIN EKPO AS ekpo ON essr.EBELN = ekpo.EBELN AND essr.EBELP = ekpo.EBELP
WHERE ekko.AEDAT BETWEEN '[START_DATE]' AND '[END_DATE]' AND ekko.BUKRS IN ([YOUR_COMPANY_CODES]);
UNION ALL
-- 11. Quality Inspection Performed
SELECT
qals.EBELN AS PurchaseOrder,
'Quality Inspection Performed' AS Activity,
[Your ETL Tool Functions].DateTime(qals.PASTRTERM, '000000') AS EventTime, -- Time is often not available
qals.PRUEFER AS UserName,
ekko.LIFNR AS VendorNumber,
ekpo.NETWR AS OrderAmount,
ekpo.MATKL AS MaterialGroup,
ekko.BUKRS AS CompanyCode,
ekko.BSART AS DocumentType
FROM QALS AS qals
INNER JOIN EKKO AS ekko ON qals.EBELN = ekko.EBELN
INNER JOIN EKPO AS ekpo ON qals.EBELN = ekpo.EBELN AND qals.EBELP = ekpo.EBELP
WHERE qals.VCODE <> '' -- A usage decision code exists
AND ekko.AEDAT BETWEEN '[START_DATE]' AND '[END_DATE]' AND ekko.BUKRS IN ([YOUR_COMPANY_CODES]);
UNION ALL
-- 12. Goods Returned
SELECT
mseg.EBELN AS PurchaseOrder,
'Goods Returned' AS Activity,
[Your ETL Tool Functions].DateTime(mkpf.CPUDT, mkpf.CPUTM) AS EventTime,
mkpf.USNAM AS UserName,
ekko.LIFNR AS VendorNumber,
ekpo.NETWR AS OrderAmount,
ekpo.MATKL AS MaterialGroup,
ekko.BUKRS AS CompanyCode,
ekko.BSART AS DocumentType
FROM MSEG AS mseg
INNER JOIN MKPF AS mkpf ON mseg.MBLNR = mkpf.MBLNR AND mseg.MJAHR = mkpf.MJAHR
INNER JOIN EKPO AS ekpo ON mseg.EBELN = ekpo.EBELN AND mseg.EBELP = ekpo.EBELP
INNER JOIN EKKO AS ekko ON ekpo.EBELN = ekko.EBELN
WHERE mseg.BWART = '122' AND ekko.AEDAT BETWEEN '[START_DATE]' AND '[END_DATE]' AND ekko.BUKRS IN ([YOUR_COMPANY_CODES]);
UNION ALL
-- 13. Purchase Order Completed (inferred from change documents)
SELECT
ekpo.EBELN AS PurchaseOrder,
'Purchase Order Completed' AS Activity,
[Your ETL Tool Functions].DateTime(cdhdr.UDATE, cdhdr.UTIME) AS EventTime,
cdhdr.USERNAME AS UserName,
ekko.LIFNR AS VendorNumber,
ekpo.NETWR AS OrderAmount,
ekpo.MATKL AS MaterialGroup,
ekko.BUKRS AS CompanyCode,
ekko.BSART AS DocumentType
FROM CDHDR AS cdhdr
INNER JOIN CDPOS AS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
INNER JOIN EKPO AS ekpo ON SUBSTRING(cdhdr.OBJECTID, 1, 10) = ekpo.EBELN AND SUBSTRING(cdhdr.OBJECTID, 11, 5) = ekpo.EBELP
INNER JOIN EKKO AS ekko ON ekpo.EBELN = ekko.EBELN
WHERE cdhdr.OBJECTCLAS = 'EINKBELEG' AND cdpos.TABNAME = 'EKPO' AND cdpos.FNAME = 'ELIKZ' AND cdpos.VALUE_NEW = 'X'
AND ekko.AEDAT BETWEEN '[START_DATE]' AND '[END_DATE]' AND ekko.BUKRS IN ([YOUR_COMPANY_CODES]);
UNION ALL
-- 14. Purchase Order Deleted (inferred from change documents)
SELECT
ekpo.EBELN AS PurchaseOrder,
'Purchase Order Deleted' AS Activity,
[Your ETL Tool Functions].DateTime(cdhdr.UDATE, cdhdr.UTIME) AS EventTime,
cdhdr.USERNAME AS UserName,
ekko.LIFNR AS VendorNumber,
ekpo.NETWR AS OrderAmount,
ekpo.MATKL AS MaterialGroup,
ekko.BUKRS AS CompanyCode,
ekko.BSART AS DocumentType
FROM CDHDR AS cdhdr
INNER JOIN CDPOS AS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
INNER JOIN EKPO AS ekpo ON SUBSTRING(cdhdr.OBJECTID, 1, 10) = ekpo.EBELN AND SUBSTRING(cdhdr.OBJECTID, 11, 5) = ekpo.EBELP
INNER JOIN EKKO AS ekko ON ekpo.EBELN = ekko.EBELN
WHERE cdhdr.OBJECTCLAS = 'EINKBELEG' AND cdpos.TABNAME = 'EKPO' AND cdpos.FNAME = 'LOEKZ' AND cdpos.VALUE_NEW = 'L'
AND ekko.AEDAT BETWEEN '[START_DATE]' AND '[END_DATE]' AND ekko.BUKRS IN ([YOUR_COMPANY_CODES]);