Satın Almadan Ödemeye - Satın Alma Siparişi Veri Şablonunuz
Satın Almadan Ödemeye - Satın Alma Siparişi Veri Şablonunuz
- Toplanması önerilen öznitelikler
- İzlenecek temel etkinlikler
- SAP ECC için veri çıkarma yönlendirmesi
Satın Almadan Ödemeye - Satın alma siparişi öznitelikleri
| Ad | Açıklama | ||
|---|---|---|---|
| Faaliyet Activity | Satın alma 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ı tanımlar. Bu faaliyetlerin sıralaması, her satın alma siparişi için süreç akışını oluşturur. Faaliyetler arasındaki sıralamayı, sıklığı ve süreyi analiz etmek Process Mining'in temelini oluşturur. Bu analiz, darboğazları, yeniden çalışma döngülerini ve standart süreçten sapmaları belirlemeye yardımcı olarak hedefli iyileştirmeler ve standardizasyon çalışmaları yapılmasını sağlar. Neden önemli? Faaliyetler 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, mal kabulü ve fatura girişi için EKBE, talepler için EBAN gibi çeşitli SAP tablolarından ve işlem günlüklerinden türetilir. Oluşturulması çoğu zaman ö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 | Faaliyetin gerçekleştiği kesin tarih ve saat. | ||
| Açıklama Bu zaman damgası, PO'nun onaylandığı veya mal kabulünün kaydedildiği an gibi bir olayın gerçekleştiği kesin zamanı gösterir. Vaka içindeki tüm faaliyetlerin kronolojik sırasını sağlar. Zaman damgaları, zamana dayalı tüm analizleri mümkün kıldığı için Process Mining'in temel unsurlarındandır. Bunlar; faaliyetler arasındaki döngü sürelerinin hesaplanmasını, gecikmelerin belirlenmesini, süreç akış hızının analiz edilmesini ve hizmet seviyesi anlaşmalarına (SLA'lar) göre performansın ölçülmesini sağlar. Neden önemli? Bu zaman damgası, döngü süreleri ve darboğazlar gibi süreye dayalı tüm metrikleri hesaplamak ve olayları kronolojik olarak sıralamak için önemlidir. Nereden alınır? EKKO-AEDAT (Değişiklik Tarihi), CDHDR-UDATE/UTIME (Değişiklik Günlüğü Zaman Damgası) veya EKBE-BUDAT (Kayıt Tarihi) gibi SAP tablolarındaki çeşitli tarih ve saat alanlarından türetilir. Ö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 (PO) belgesinin benzersiz tanımlayıcısıdır ve satın alma sürecini izlemek için temel vaka olarak kullanılır. | ||
| Açıklama Satın alma siparişi numarası, oluşturulmasından son mal kabulüne ve tamamlanmasına kadar tüm faaliyetleri birbirine bağlayan merkezi tanımlayıcıdır. Her benzersiz PO numarası, satın alma sürecinin tek bir örneğini temsil eder. Process Mining'de bu öznitelik, her satın almanın uçtan uca yolculuğunu yeniden oluşturmak için gereklidir. Her sipariş için döngü sürelerinin, süreç farklılıklarının ve uyumluluk kontrollerinin ayrıntılı biçimde analiz edilmesini sağlar ve tüm süreç modelinin temelini oluşturur. Neden önemli? İlgili tüm olayları birbirine bağlayan temel tanımlayıcıdır ve her bir satın alma siparişinin yaşam döngüsünün tamamının analiz edilmesini sağlar. Nereden alınır? Tablo: EKKO, Alan: EBELN Örnekler 450001762345000176244500017625 | |||
| Belge türü DocumentType | Farklı satın alma siparişi türlerini sınıflandıran kod. | ||
| Açıklama Belge Türü, SAP'de satın alma siparişi için numara aralığını, alan seçimini ve genel süreç akışını kontrol eden bir yapılandırmadır. Örneğin standart PO'lar, hizmet PO'ları veya stok nakil siparişleri için farklı türler bulunabilir. Bu öznitelik, farklı belge türleri çoğu zaman bilinçli olarak farklı süreçleri izlediği için güçlü bir analiz boyutudur. Belge türüne göre filtreleme yapmak, döngü sürelerinin ve süreç akışlarının daha doğru, eşdeğer koşullarda karşılaştırılmasını sağlar. Neden önemli? Farklı satın alma süreçlerini (ör. standart, hizmet, iade) birbirinden ayırır. Bu süreçlerin yolları ve performans beklentileri genellikle farklıdır. Nereden alınır? Tablo: EKKO, Alan: BSART Örnekler NBFOUB | |||
| Kullanıcı adı UserName | Faaliyeti 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ı içerir. Otomatik adımlarda bir sistem veya toplu işlem kullanıcı kimliği görünebilir. Kullanıcı bazında analiz, eğitim ihtiyaçlarını, yüksek performans gösteren kişileri veya olası uyumluluk sorunlarını belirlemeye yardımcı olur. İş yükü dağılımı ve onay matrisi uyumluluğuyla ilgili Dashboardlar oluşturmak ve farklı ekiplerin veya kişilerin performansını anlamak için önemlidir. Neden önemli? Kullanıcı işlemlerini belirli kişilere bağlayarak 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 | Benzer özelliklere sahip malzeme veya hizmetleri gruplandırmak için kullanılan sınıflandırma. | ||
| Açıklama Malzeme grubu veya satın alma kategorisi, tedarik edilen ürün ya da hizmet türünü sınıflandırmak için kullanılır. Örnekler arasında "IT Hardware", "Office Supplies" veya "Professional Services" bulunur. Bu öznitelik, harcama analizi ve tedarik örüntülerinin anlaşılması için önemlidir. Sürecin farklı kategorilerin nasıl ele alındığını, kimlerin onayladığını ve hangi tedarikçilerin bunları sağladığını analiz edecek şekilde filtrelenmesini sağlar. Satın Alma Siparişi değer analizi Dashboardunun temel boyutlarından biridir. Neden önemli? Sürecin ürün veya hizmet kategorisine göre bölümlere ayrılmasını sağlar ve 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 satır öğesinin toplam değerini, miktarın net fiyatla çarpılmasıyla hesaplar. Tam satın alma siparişi değerini elde etmek için satır tutarlarının toplanması gerekir. Sürecin sipariş tutarına göre analiz edilmesi, daha sıkı kontroller veya farklı onay yolları gerektirebilecek yüksek değerli işlemleri belirlemek için önemlidir. Satın Alma Siparişi değer analizi Dashboardunu destekler ve süreç iyileştirme çalışmalarının finansal açıdan en önemli siparişlere öncelik vermesine yardımcı olur. Neden önemli? Her satın almanın finansal etkisini ölçer. Böylece yüksek değerli siparişlere öncelik vermek veya maliyet tasarrufu fırsatlarını belirlemek için değere dayalı analiz yapılabilir. Nereden alınır? Tablo: EKPO, Alan: NETWR (Net sipariş değeri). Örnekler 1500.00250.7512345.50 | |||
| Şirket kodu CompanyCode | Satın alma işlemini başlatan tüzel kişiliğin veya şirketin tanımlayıcısı. | ||
| Açıklama Şirket Kodu, SAP'de bağımsız bir tüzel kişiliği temsil eder. Tüm işlemler şirket kodu düzeyinde kaydedildiği için temel bir organizasyon birimidir. Süreci Şirket Koduna göre analiz etmek, farklı iş birimleri veya ülkeler arasındaki satın alma verimliliğini ve uyumluluğu karşılaştırmayı sağlar. Bir kuruluştaki en iyi uygulamaların başka bir yerde uygulanmasına veya süreçte zorlanan belirli birimlerin belirlenmesine yardımcı olur. Neden önemli? Tüzel kişiliği temsil eder ve kuruluşun farklı bölümleri arasında süreç performansı karşılaştırması ile uyumluluk kontrolleri yapılmasını sağlar. Nereden alınır? Tablo: EKKO, Alan: BUKRS Örnekler 10002100US01 | |||
| Tedarikçi numarası VendorNumber | Tedarikçi veya satıcı için benzersiz tanımlayıcı. | ||
| Açıklama Bu, ürün veya hizmetlerin tedarik edildiği tedarikçiyi benzersiz biçimde tanımlayan koddur. Tedarik sürecindeki önemli bir ana veri parçasıdır. Bu öznitelik, tedarikçi odaklı analiz için gereklidir. Tedarikçi teslimat performansının değerlendirilmesini, farklı tedarikçiler arasındaki teslim sürelerinin karşılaştırılmasını ve harcama örüntülerinin analiz edilmesini sağlar. Tedarikçi teslimat performansı Dashboardunun temel boyutudur. Neden önemli? Tedarikçi performansının analiz edilmesini sağlar ve güvenilir tedarikçilerin yanı sıra gecikmelere veya kalite sorunlarına yol açan tedarikçilerin belirlenmesine yardımcı olur. Nereden alınır? Tablo: EKKO, Alan: LIFNR Örnekler 100345V-20598700112 | |||
| Kaynak sistem SourceSystem | Verilerin çıkarıldığı sistem. | ||
| Açıklama Verilerin kaynağını tanımlar. Bu kaynak genellikle bir SAP ECC örneği tanımlayıcısıdır (ör. 'ECC_PROD_100'). Birden fazla sistemin bulunduğu ortamlarda veri kaynaklarını birbirinden ayırmaya yardımcı olur. Yönetişim ve veri soyu açısından kaynak sistemi bilmek önemlidir. Özellikle farklı ERP sistemlerinden veya modüllerden gelen veriler birleştirildiğinde veri bütünlüğünü korur ve veri çıkarma ya da kalite sorunlarının giderilmesine yardımcı olur. Neden önemli? Verilerin kaynağını tanımlar. Bu bilgi, veri yönetişimi, doğrulama ve birden fazla sistemdeki analizlerin yönetimi için önemlidir. Nereden alınır? Genellikle veri çıkarma sürecinde eklenen ve veri setini kaynak sistemiyle etiketleyen statik bir değerdir. Örnekler SAP_ECC_PRODECC_EU_100S4H_FIN | |||
| Onay sonrası değişiklik mi IsPostApprovalChange | İlk onaydan sonra bir PO değişikliği gerçekleşip gerçekleşmediğini gösteren işaret. | ||
| Açıklama Bu boolean öznitelik, aynı satın alma siparişi için Satın Alma Siparişi onaylandı etkinliğinden sonra Satın Alma Siparişi değiştirildi etkinliği algılanırsa true değerini alır. Sürecin geç aşamalarında gerçekleşen sorunlu değişiklikleri ayırmaya yardımcı olur. Bu hesaplanan alan, Onay sonrası satın alma siparişi değişiklik oranı temel performans göstergesini ve Satın Alma Siparişi yeniden çalışma ve değişiklikler Dashboardunu doğrudan destekler. Gecikmelere ve yeniden onay gereksinimine yol açabilecek, süreci aksatan değişiklikleri ölçmeye ve öne çıkarmaya yardımcı olur. Böylece ilk belirtim veya kapsam belirleme sürecindeki sorunlar görülebilir. Neden önemli? Onay sonrasındaki yeniden çalışmayı doğrudan ölçer. Bu, süreç kararlılığı ve verimliliği için önemli bir KPI'dır. Yüksek oranlar, üst aşamalardaki gereksinim tanımlama sorunlarına işaret eder. Nereden alınır? Bu, olay günlüğündeki etkinlik dizisinden türetilen hesaplanmış bir özniteliktir. Örnekler truefalse | |||
| Para birimi Currency | Satın alma siparişi tutarının para birimi kodu. | ||
| Açıklama Satın alma siparişi değerinin ifade edildiği para birimini belirtir; örneğin USD, EUR veya GBP. Tüm parasal değerler için gerekli bağlamı sağlar. Küresel kuruluşlarda doğru finansal analiz için para birimi bilgisi gereklidir. Sipariş değerlerinin doğru biçimde toplanıp karşılaştırılmasını sağlar ve tüm parasal KPI'lar para birimi bağlamında yorumlanmalıdır. Neden önemli? Tüm parasal değerler için gerekli bağlamı sağlar ve özellikle çok uluslu kuruluşlarda doğru finansal analize yardımcı olur. 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 ya da metni. | ||
| Açıklama Bu öznitelik, bir satın alma siparişinin onay iş akışı sırasında reddedilmesiyle ilgili belirtilen nedeni kaydeder. Bu bilgi, yeniden çalışma ve gecikmelerin temel nedenlerini anlamak için büyük önem taşır. Ret nedenlerini analiz etmek; yanlış fiyatlandırma, bütçe aşımı veya uyumlu olmayan tedarikçi seçimi gibi yaygın sorunları belirlemenize 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 daha akıcı hale getirmesini sağlar. Neden önemli? Onayların neden başarısız olduğuna doğrudan ışık tutar. Böylece yeniden çalışmayı azaltmak ve onay çevrim sürelerini kısaltmak için hedefli iyileştirmeler yapabilirsiniz. Nereden alınır? Bu bilgiyi bulmak zor olabilir. Uzun metin alanlarında saklanabilir veya özel Workflow yapılandırmasına bağlı olabilir. Çoğu zaman uygulamaya özel bilgi gerektirir. Örnekler Yanlış fiyatBütçe aşıldıYinelenen talep | |||
| Satın alma grubu PurchasingGroup | Satın alma faaliyetinden sorumlu belirli satın almacı veya satın almacılar grubu. | ||
| Açıklama Satın Alma Grubu, belirli bir satın alma faaliyetinden sorumlu satın almacıyı veya satın almacılar ekibini temsil eder. Tedarikçiler için temel iletişim noktasıdır. Bu öznitelik, Satın Alma Organizasyonuna göre daha ayrıntılı bir analiz düzeyi sunar. Satın almacılar arasındaki iş yükü dağılımının anlaşılmasına ve satın almacı düzeyindeki performans farklılıklarının belirlenmesine yardımcı olur. Bu bilgiler kaynak planlama ve eğitim çalışmalarına yön verebilir. Neden önemli? Bir satın almadan kimin sorumlu olduğunu ayrıntılı biçimde gösterir ve satın almacı veya ekip düzeyinde iş yükü ile performans analizine olanak tanır. Nereden alınır? Tablo: EKKO, Alan: EKGRP Örnekler 001002N01 | |||
| Satın alma organizasyonu PurchasingOrganization | Fiyat görüşmelerinden ve mal ya da hizmetlerin satın alınmasından sorumlu organizasyon birimi. | ||
| Açıklama Satın Alma Organizasyonu, SAP'de satın alma faaliyetlerinden sorumlu temel organizasyon birimidir. Tüm şirket için merkezi veya tesis ya da bölge bazında merkezi olmayan bir yapıda olabilir. Süreç performansını Satın Alma Organizasyonuna göre analiz etmek, hangi satın alma ekiplerinin daha verimli olduğunu belirlemeye yardımcı olur. Farklı organizasyon birimleri arasındaki döngü süresi, yeniden çalışma oranları ve maliyet gibi metriklerin karşılaştırılmasını, en iyi uygulamaların ve destek gerektiren alanların ortaya çıkarılmasını sağlar. Neden önemli? Sorumlu satın alma ekibini tanımlar ve farklı organizasyon birimleri arasında performans karşılaştırması ile analiz yapılmasını sağlar. Nereden alınır? Tablo: EKKO, Alan: EKORG Örnekler 1000US01DE01 | |||
| Satın alma talebi PurchaseRequisition | Satın alma siparişinden önce oluşturulan satın alma talebinin tanımlayıcısı. | ||
| Açıklama Bu öznitelik, satın alma siparişini onu oluşturan satın alma talebine bağlar. Her satın alma siparişinden önce bir talep bulunmayabilir. Bu bağlantı, Talebin siparişe dönüşümü Dashboardunu ve Talebin satın alma siparişine dönüşüm oranı temel performans göstergesini analiz etmek için önemlidir. İlk talepten resmi siparişin oluşturulmasına kadar olan üst sürecin verimliliğini ölçmeyi ve talep olmadan oluşturulan uyumsuz satın alma siparişlerini belirlemeyi sağlar. Neden önemli? PO'yu kaynak talebine bağlar. Böylece PR'dan PO'ya dönüşüm süreci analiz edilebilir ve öncesinde talep bulunmadan oluşturulan PO'lar belirlenebilir. Nereden alınır? Tablo: EKPO, Alan: BANFN Örnekler 1001589010015891 | |||
| Son veri güncellemesi LastDataUpdate | Verilerin kaynak sistemden en son yenilendiği zamanı gösteren zaman damgası. | ||
| Açıklama Bu öznitelik, en son veri çıkarma veya güncelleme işleminin tarih ve saatini kaydeder. Analiz edilen verilerin güncelliği hakkında bağlam sağlar. Bu bilgilerin Dashboardlarda gösterilmesi, kullanıcıların içgörülerin gerçeğe yakın zamanlı verilere mi yoksa geçmiş bir anlık görüntüye mi dayandığını anlaması açısından önemlidir. Kullanıcı beklentilerinin yönetilmesine ve kararların yaşı bilinen verilere dayanarak alınmasına yardımcı olur. Neden önemli? Verilerin güncelliği hakkında bilgi verir ve kullanıcıların analizin operasyonların en güncel durumunu yansıtıp yansıtmadığını anlamasını sağlar. Nereden alınır? Bu zaman damgası, veri çıkarma veya ETL süreci tarafından çalıştırıldığı anda oluşturulur ve eklenir. Örnekler 2023-10-27T02:00:00Z2023-10-28T02:00:00Z | |||
| Talep edilen teslimat tarihi RequestedDeliveryDate | İş biriminin tedarikçiden mal veya hizmetleri teslim etmesini istediği tarih. | ||
| Açıklama Bu, satın alma siparişinde belirtilen hedef teslimat tarihidir. Gerçek teslimat performansının ölçüldüğü temel tarihi oluşturur. Bu tarih, Zamanında mal kabulü oranı temel performans göstergesinin hesaplanması için gereklidir. Gerçek mal kabulü tarihinin bu talep edilen tarihle karşılaştırılması, kuruluşların tedarikçi güvenilirliğini ve kurum içi mal kabulü verimliliğini nicel olarak ölçmesini sağlar. Ayrıca Tedarikçi teslimat performansı Dashboardunu doğrudan destekler. Neden önemli? Teslimat için hedef tarihtir. Zamanında performans KPI'larını hesaplamak ve tedarikçi güvenilirliğini değerlendirmek için gereklidir. Nereden alınır? Tablo: EKPO, Alan: EINDT Örnekler 2023-06-102023-07-222023-08-01 | |||
| Tedarikçi adı VendorName | Tedarikçinin veya satıcının yasal adı. | ||
| Açıklama Tedarikçinin, tedarikçi numarasına göre kullanıcılar için daha anlaşılır olan açıklayıcı adıdır. Genellikle tedarikçi ana verilerinden alınır. Tedarikçi numarası birleştirme ve benzersiz tanımlama için kullanılırken Tedarikçi adı, kullanıcıların gördüğü Dashboardlar ve raporlar için önemlidir. Tedarikçi kodlarına aşina olmayan iş kullanıcıları için analizleri daha anlaşılır ve erişilebilir hale getirir. Neden önemli? Tedarikçi için insanların kolayca anlayabileceği bir ad sağlar ve Dashboardları ve raporları iş kullanıcılarının anlamasını kolaylaştırır. Nereden alınır? Tablo: LFA1, Alan: NAME1. EKKO-LIFNR ile LFA1-LIFNR arasında birleştirme yapılması gerekir. Örnekler Staples Inc.Global Tech SolutionsOffice Supply Co. | |||
| Tesis Plant | Malların teslim edileceği fiziksel konum veya tesis. | ||
| Açıklama Tesis, malların veya hizmetlerin teslim alındığı üretim tesisi, depo ya da başka bir konumu temsil eden organizasyon birimidir. Tesis bazında analiz yapmak, satın alma sürecindeki coğrafi farklılıkları anlamaya yardımcı olur. Belirli konumlara yapılan tedarikçi teslimat sürelerindeki farklılıkları ortaya çıkarabilir veya mal kabulünün verimliliğiyle ilgili analizleri desteklemek üzere belirli tesislerdeki verimsiz kabul süreçlerini gösterebilir. Neden önemli? Teslimat konumunu belirtir. Bölgesel süreç farklılıklarını ve lojistik performansını analiz etmek için kullanışlıdır. Nereden alınır? Tablo: EKPO, Alan: WERKS Örnekler 100011002000 | |||
| Zamanında teslim edildi mi IsOnTimeDelivery | Malların talep edilen teslimat tarihinde veya daha önce teslim alınıp alınmadığını gösteren işaret. | ||
| Açıklama Bu boolean öznitelik, "Goods Receipt Posted" etkinliğinin zaman damgası "Requested Delivery Date" tarihinde veya daha önceyse true değerini alır. Her PO kalemi için teslimat performansını net ve ikili bir sonuçla gösterir. Bu öznitelik, "On-Time Goods Receipt Rate" KPI'ının temelini oluşturur. Zamanında ve geciken teslimatları kolayca toplamanıza ve filtrelemenize imkan vererek tedarikçi performansını ve kurum içi mal kabul verimliliğini analiz etmeyi kolaylaştırır. Neden önemli? Teslimatın zamanında gerçekleşip gerçekleşmediğini gösteren net bir başarı veya başarısızlık metriği sağlar ve tedarikçi performansı temel performans göstergelerini ve Dashboardlarını doğrudan destekler. Nereden alınır? Mal kabul kaydı tarihinin (EKBE-BUDAT) talep edilen teslimat tarihiyle (EKPO-EINDT) karşılaştırılmasıyla türetilen hesaplanmış bir özniteliktir. Örnekler truefalse | |||
Satın Almadan Ödemeye - Satın alma siparişi faaliyetleri
| Aktivite | Açıklama | ||
|---|---|---|---|
| Mal kabulü kaydedildi | Bu faaliyet, belirli bir satın alma siparişine bağlı olarak tedarikçiden malların fiziksel olarak teslim alınmasını gösterir. Mal kabulünün kaydedilmesi, malzeme belgesi oluşturan ve stokları güncelleyen açık bir işlemdir (ör. MIGO işlemiyle). | ||
| Neden önemli? Bu, tedarikçi teslimat performansını ve fatura doğrulama sürecinin başlangıcını izlemek için önemli bir kilometre taşıdır. Zamanında teslimat oranlarını ve mal kabulünün zamanında yapılmasını hesaplamak için kullanılır. Nereden alınır? Bir malzeme belgesi oluşturulduğunda kaydedilir. Olay zaman damgası, malzeme belgesi başlık tablosu MKPF'deki kayıt tarihi (MKPF-BUDAT) veya oluşturma tarihidir (MKPF-CPUDT). Belge, kalem tablosu MSEG üzerinden PO ile ilişkilendirilir. Yakalayın PO'ya referans veren malzeme belgeleri için MKPF tablosundaki kayıt veya oluşturma zaman damgasını kullanın. Olay türü explicit | |||
| Satın alma siparişi oluşturuldu | Bu faaliyet, tedarikçiyle bağlayıcı bir sözleşme niteliğindeki resmi satın alma siparişi belgesinin oluşturulduğunu gösterir. Kullanıcı bir PO oluşturup kaydettiğinde (ör. ME21N işlemiyle) kaydedilen açık bir olaydır ve EKKO ile EKPO tablolarında kayıtlar oluşturur. | ||
| Neden önemli? Satın alma siparişi yaşam döngüsünün resmi başlangıcını gösterir. Hem PR'dan PO'ya dönüşüm süresini hem de siparişin uçtan uca tamamlanma süresini ölçmek için önemli bir kilometre taşıdır. Nereden alınır? İlgili PO numarası (EKKO-EBELN) için satın alma siparişi başlık tablosu EKKO'daki oluşturma tarihinden (EKKO-AEDAT) alınır. Yakalayın Her yeni satın alma siparişi için EKKO tablosundaki oluşturma zaman damgasını kullanın. Olay türü explicit | |||
| Satın alma siparişi onaylandı | Satın alma siparişinin son onayını ve tedarikçiye gönderilmesine izin verildiğini gösterir. Bu önemli 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 etkinlik, Satın Alma Siparişi onay çevrim süresi temel performans göstergesini hesaplamak ve onay iş akışındaki darboğazları belirlemek için önemlidir. Siparişin tedarikçiye gönderilmesi gibi sonraki etkinliklerin çoğu için ön koşuldur. Nereden alınır? Son serbest bırakma kodunun uygulandığı zamanı veya genel serbest bırakma durumu göstergesinin (EKKO-FRGKE) 'serbest bırakıldı' olarak ayarlandığı zamanı bulmak için satın alma siparişi başlık tablosu EKKO'ya ait değişiklik günlükleri (CDHDR/CDPOS) izlenerek çıkarılır. Yakalayın PO'nun genel serbest bırakma durumunun (EKKO-FRGKE) son onay durumuna değiştiği zaman damgasını belirleyin. Olay türü inferred | |||
| Satın alma siparişi tamamlandı | Bir satın alma siparişi kaleminin tamamen teslim edildiğini gösterir. Bu, genellikle satın alma siparişi kaleminde 'Teslimat tamamlandı' göstergesinin otomatik veya manuel olarak ayarlanmasından türetilen bir olaydır. | ||
| Neden önemli? Bu faaliyet, siparişin tamamlanması bölümünün mantıksal bitiş noktasıdır. Oluşturmadan tamamlanmaya kadar uçtan uca PO döngü süresini hesaplamak için gereklidir. Nereden alınır? PO kalemi için 'Teslimat tamamlandı' göstergesinin (EKPO-ELIKZ) 'X' olarak ayarlandığı zamanı kaydeden değişiklik belgelerinden (CDHDR/CDPOS) çıkarılır. Son kalemin tamamlandı olarak işaretlenmesi, PO'nun tamamlandığını gösterebilir. Yakalayın EKPO-ELIKZ bayrağının ayarlandığı zamanı değişiklik belgelerinden belirleyin. Olay türü inferred | |||
| Satın alma siparişi tedarikçiye gönderildi | Onaylanan satın alma siparişinin EDI, e-posta veya yazdırma yoluyla tedarikçiye resmi olarak iletildiği noktayı gösterir. Çıktı mesajı başarıyla işlendiğinde mesaj kontrol tablolarına kaydedilen açık bir olaydır. | ||
| Neden önemli? Bu, tedarikçinin teslimat süresini başlatan önemli bir kilometre taşıdır. Bu olay ile mal kabulü arasındaki süreyi analiz etmek, tedarikçi performansını ve teslimat zamanlamasını değerlendirmek için önemlidir. Nereden alınır? Mesaj durumu tablosu NAST'a kaydedilir. İlgili PO çıktı türü için işleme durumu (NAST-VSTAT) '1' (başarıyla işlendi) olduğunda zaman damgası NAST-DATVR ve NAST-UHRVR alanlarından alınabilir. Yakalayın PO'nun çıktı mesajı için NAST tablosundaki işleme zaman damgasını kullanın. Olay türü explicit | |||
| Satın alma talebi oluşturuldu | Bu faaliyet, mal veya hizmetler için resmi bir talep oluşturulduğunu gösterir. Kullanıcı yeni bir satın alma talebi belgesini kaydettiğinde (ME51N gibi işlemler kullanılarak) kaydedilen açık bir olaydır ve EBAN tablosunda benzersiz bir kayıt oluşturur. | ||
| Neden önemli? Bu, satın alma sürecinin temel başlangıç noktasıdır. Bu olay ile satın alma siparişinin oluşturulması arasındaki süreyi analiz etmek, kurum içi talebin uygulanabilir siparişlere dönüştürülme verimliliğini ölçmeye yardımcı olur. Nereden alınır? Satın alma talebi başlık tablosu olan EBAN'a bir kayıt eklendiğinde kaydedilir. Oluşturma tarihi (EBAN-BADAT) ve saati, bu olayın zaman damgası olarak kullanılır. Yakalayın Oluşturma tarihine göre EBAN tablosundaki yeni kayıtları belirleyin. Olay türü explicit | |||
| Hizmet onayı girildi | Hizmet tabanlı satın alma siparişlerinde bu faaliyet, hizmetlerin sunulduğunun onaylandığını gösterir. Hizmet Giriş Belgesi oluşturulduğunda kaydedilen açık bir olaydır (ör. ML81N işlemiyle). | ||
| Neden önemli? Bu, hizmetler için mal kabulünün karşılığıdır ve hizmet siparişlerinin tamamlanmasını izlemek için gereklidir. Hizmet ödemesine ilişkin finansal süreci tetikler. Nereden alınır? Hizmet Giriş Belgesi başlık tablosu ESSR'daki oluşturma tarihinden (ESSR-ERDAT) alınır. Satın alma siparişiyle bağlantı ESLL tablosunda bulunur. Yakalayın PO ile ilişkilendirilmiş Hizmet Giriş Belgeleri için ESSR tablosundaki oluşturma zaman damgasını kullanın. Olay türü explicit | |||
| Kalite denetimi yapıldı | Teslim alınan malların kalite denetiminden geçirildiğini gösterir. Bu faaliyet, genellikle mal kabulü sırasında oluşturulan bir denetim partisinde Kalite Yönetimi modülünde kullanım kararı verildiğinde çıkarılır. | ||
| Neden önemli? Kalitenin büyük önem taşıdığı sektörlerde bu faaliyet, denetim sürecinin süresini ve sonuçlarını analiz etmeye yardımcı olur. Bu aşamadaki gecikmeler, mal kabulü ile malların kullanıma sunulması arasında darboğazlar oluşturabilir. Nereden alınır? Kalite Yönetimi modülünden çıkarılır. Mal kabulü sırasında bir denetim partisi oluşturulur (QALS tablosu) ve faaliyet, zaman damgası içeren bir kullanım kararı oluşturulduğunda işaretlenir (QAVE tablosu). Yakalayın Malzeme belgesiyle ilişkilendirilmiş denetim partisi için QAVE tablosundaki kullanım kararının zaman damgasını belirleyin. Olay türü inferred | |||
| Mallar iade edildi | Daha önce teslim alınan malların, çoğunlukla kalite sorunları veya yanlış sevkiyatlar nedeniyle tedarikçiye iade edilmesini ifade eder. İade türüne özgü bir hareket türüyle malzeme belgesi kaydedildiğinde oluşan açık bir olaydır. | ||
| Neden önemli? Bu faaliyet, tedarikçi kalitesi veya sipariş doğruluğuyla ilgili sorunları gösterir ve süreçte yeniden çalışma için önemli bir göstergedir. Mal Kabulü Sapma Oranı KPI'ını hesaplamak için gereklidir. Nereden alınır? İade hareket türü (ör. Tedarikçiye İade Teslimatı için '122') kullanıldığında malzeme belgesi tablolarına (MKPF/MSEG) kaydedilir. Kayıt tarihi (MKPF-BUDAT) zaman damgası olarak kullanılır. Yakalayın Orijinal PO'ya referans veren iade hareket türüne (ör. 122) sahip malzeme belgelerini belirleyin. Olay türü explicit | |||
| Satın alma siparişi değiştirildi | Satın alma siparişinin ilk oluşturulmasından sonra miktar, fiyat veya teslimat tarihleri gibi alanlarda yapılan her türlü değişikliği ifade eder. Bu değişiklikler SAP'nin değişiklik belgesi sistemine açıkça kaydedilir. | ||
| Neden önemli? Özellikle onaydan sonra yapılan sık değişiklikler, süreç verimsizliklerine, başlangıçtaki planlamanın yetersizliğine veya kapsamın kontrolsüz biçimde genişlemesine işaret eder. Bu etkinlik, Satın Alma Siparişi yeniden çalışma ve değişiklikler Dashboardu ile ilgili temel performans göstergeleri için gereklidir. Nereden alınır? Satın alma siparişi nesnesine (EINKBELEG) ait değişiklik belgesi başlık (CDHDR) ve kalem (CDPOS) tablolarına açıkça kaydedilir. Her değişiklik, zaman damgası içeren yeni bir kayıt oluşturur. Yakalayın Satın alma siparişi numarasıyla ilişkilendirilmiş CDHDR ve CDPOS tablolarından değişiklik olaylarını ve zaman damgalarını çıkarın. Olay türü explicit | |||
| Satın alma siparişi onayı istendi | 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 gösterir. Bu olay, serbest bırakma stratejisi tetiklendiğinde ve PO bekleyen onay durumuna geçtiğinde çıkarılır. | ||
| Neden önemli? Satın alma siparişinin oluşturulması ile onay sürecinin başlamasını birbirinden ayırmak, onay çevrim süresi temel performans göstergesinin doğru şekilde ölçülmesine yardımcı olur. Onay iş akışı başlamadan önceki olası gecikmeyi ortaya çıkarır. Nereden alınır? Satın alma siparişine (nesne EINKBELEG) ait, serbest bırakma durumunun ilk kez ayarlandığını gösteren değişiklik belgelerinden (CDHDR/CDPOS) veya genel serbest bırakma durumu (EKKO-FRGKE) onay sürecinin aktif olduğunu belirten bir değere ilk kez ayarlandığında çıkarılır. Yakalayın PO için serbest bırakma stratejisini tetikleyen ilk değişiklik belgesi kaydını belirleyin. Olay türü inferred | |||
| Satın alma siparişi reddedildi | Bu etkinlik, bir onaylayan kişinin onay iş akışı sırasında satın alma siparişini reddetmesiyle gerçekleşir. Reddetme işleminin gerçekleştiğini gösteren, satın alma siparişinin onay stratejisi verilerindeki durum değişikliğinden türetilen bir olaydır. | ||
| Neden önemli? Reddetmeleri izlemek, PO veri kalitesi sorunlarını, politikalara uyumsuzluğu veya onay matrisindeki problemleri belirlemeye yardımcı olur. Reddetmeler çoğu zaman yeniden çalışmaya yol açar ve toplam döngü süresini artırır. Nereden alınır? Satın alma siparişinin serbest bırakma durumuna ait değişiklik belgelerinden (CDHDR/CDPOS) çıkarılır. Serbest bırakma kodu iptal edildiğinde veya belirli bir reddetme durumu ayarlandığında genellikle bir reddetme kaydedilir. Yakalayın Serbest bırakma kodunun iptal edildiğini veya reddetmeyi gösteren bir durum değişikliğini belirlemek için değişiklik günlüklerini izleyin. Olay türü inferred | |||
| Satın alma siparişi silindi | Bir satın alma siparişi kaleminin iptal edilmesini veya mantıksal olarak silinmesini ifade eder ve mal kabulü ya da faturalama gibi sonraki işlemleri engeller. PO kaleminde silme göstergesi ayarlandığında kaydedilen bir olaydır. | ||
| Neden önemli? Bu, siparişin iptal edildiğini gösteren sonlandırıcı bir faaliyettir. Siparişlerin neden ve ne zaman silindiğini analiz etmek, talep planlama veya tedarikçi seçimiyle ilgili sorunları ortaya çıkarabilir. Nereden alınır? 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. Yakalayın EKPO-LOEKZ bayrağının ayarlandığı zamanı değişiklik belgelerinden belirleyin. Olay türü inferred | |||
| Satın alma talebi onaylandı | Bir satın alma talebinin resmi olarak onaylanmasını ve satın alma siparişine dönüştürülmesine izin verilmesini ifade eder. Bu olay, SAP’nin onay stratejisi iş akışında izlenen satın alma talebi verilerindeki serbest bırakma durumu alanlarının değişimlerinden çıkarılır. | ||
| Neden önemli? Onayları izlemek, sipariş öncesi aşamadaki darboğazları belirlemek ve onay politikalarına uyumluluğu sağlamak için önemlidir. Bu aşamadaki gecikmeler, toplam satın alma döngü süresini doğrudan etkiler. Nereden alınır? Satın alma talebi tablosu EBAN'a ait değişiklik günlüklerinden, özellikle serbest bırakma durumu alanlarındaki değişiklikler izlenerek (ör. EBAN-FRGZU) veya EBAN nesnesine ait CDHDR/CDPOS değişiklik belgeleri analiz edilerek çıkarılır. Yakalayın Son onayın zaman damgasını belirlemek için EBAN serbest bırakma durumu alanlarına ait değişiklik belgelerini izleyin. Olay türü inferred | |||
Veri çıkarma rehberleri
Adımlar
- ABAP programı oluşturun: SE38 işlem kodunu kullanarak ABAP Editor'ü açın. Yeni programınız için Z_PM_PO_EXTRACT gibi bir ad girin ve "Create" seçeneğine tıklayın. "Process Mining PO Data Extraction" gibi bir başlık girin ve türü "Executable Program" olarak belirleyin.
- Seçim ekranını tanımlayın: Programda seçim ekranı parametrelerini tanımlayın. Bu parametreler, kullanıcıların çıkarmak istedikleri verileri filtrelemesini sağlar. Temel parametreler arasında Satın alma siparişi oluşturma tarih aralığı, Şirket kodu (BUKRS) ve Satın alma belgesi türü (BSART) bulunur.
- Veri yapılarını tanımlayın: Nihai Event Log biçimiyle eşleşen bir dahili tablo yapısı bildirin. Bu yapı, gerekli ve önerilen tüm öznitelikleri içermelidir: PurchaseOrder, Activity, EventTime, UserName, VendorNumber, OrderAmount, MaterialGroup, CompanyCode ve DocumentType.
- Veri seçme mantığını uygulayın: Gerekli 14 etkinliğin her biri için veri seçen temel ABAP mantığını yazın. Bunun için EKKO, EKPO, EKBE, EBAN, CDHDR, CDPOS ve NAST gibi birden fazla SAP tablosunu sorgulamanız gerekir. Kodu düzenli tutmak için her etkinlikte ayrı bir alt yordam (PERFORM) kullanın.
- Satın alma talebi verilerini seçin: "Purchase Requisition Created" etkinlikleri için EBAN tablosunu sorgulayın ve bunları EKPO tablosu üzerinden Satın alma siparişlerine bağlayın. "Purchase Requisition Approved" etkinliklerini belirlemek için değişiklik günlüğü tablolarını (CDHDR, CDPOS) kullanarak serbest bırakma durumu alanlarındaki değişiklikleri izleyin.
- Satın alma siparişinin temel etkinliklerini seçin: "Purchase Order Created" etkinliği için EKKO ve EKPO tablolarını sorgulayın. EINKBELEG nesnesindeki değişiklik günlüğü tablolarını (CDHDR, CDPOS) kullanarak serbest bırakma göstergeleri ve silme işaretleri gibi belirli alanlardaki değişikliklere göre "Purchase Order Changed", "Purchase Order Approved", "Purchase Order Rejected", "Purchase Order Completed" ve "Purchase Order Deleted" etkinliklerini çıkarın.
- PO iletişim etkinliklerini seçin: PO'nun başarıyla gönderildiği kayıtları bulmak için NAST tablosunu sorgulayın ve "Purchase Order Sent to Vendor" etkinliğini yakalayın.
- Mal ve hizmet etkinliklerini seçin: Malzeme belgesi kayıtlarını sorgulayarak hareket türü kategorisine göre "Goods Receipt Posted" ve "Goods Returned" etkinliklerini belirlemek için EKBE tablosunu kullanın. "Services Confirmation Entered" etkinliğini yakalamak için hizmet giriş sayfalarını belirlemek üzere ESSR ve ESLL tablolarını sorgulayın.
- Kalite yönetimi etkinliklerini seçin: Kalite Yönetimi modülü kullanılıyorsa, bir PO ile ilişkilendirilmiş kontrol partisinde kullanım kararının ne zaman verildiğini belirlemek için QALS ve QAVE tablolarını sorgulayın. Bu, "Quality Inspection Performed" etkinliğini temsil eder.
- Verileri birleştirin ve biçimlendirin: Tüm ayrı seçimlerden gelen verileri tek bir nihai dahili tabloda birleştirin. EventTime alanının tutarlı biçimde (örneğin YYYY-MM-DDTHH:MI:SS) biçimlendirildiğinden emin olun.
- Dosya indirmeyi uygulayın: Nihai dahili tabloyu dosya olarak indirmek için işlev ekleyin. Önerilen biçim, GUI_DOWNLOAD işlev modülüyle oluşturulabilen 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 ölçütlerini doldurun ve raporu çalıştırın. İstendiğinde çıktı dosyasını .csv uzantısıyla yerel bilgisayarınıza kaydedin. Dosya yüklemeye hazır olacaktır.
Yapılandırma
- Tarih aralığı: Çıkarma işlemi için genellikle Satın alma siparişi oluşturma tarihine (EKKO-AEDAT) göre belirli bir tarih aralığı tanımlamanız büyük önem taşır. Veri hacmi ile süreç içgörüsü arasında denge kurmak için 3-6 aylık bir aralık iyi bir başlangıç noktasıdır.
- Şirket kodu (BUKRS): Çıkarma işlemini ilgili tüzel kişilerle sınırlamak için bir veya daha fazla şirket koduna göre filtre uygulayın. Bu, performans ve uygun kapsam açısından temel bir parametredir.
- Satın alma belgesi türü (BSART): Analizi standart süreçlere odaklamak ve gerekirse özel satın alma türlerini hariç tutmak için belirli belge türlerine, örneğin standart PO için "NB" değerine göre filtre uygulayın.
- Veri ayrıntı düzeyi: Çıkarma işlemi, satın alma siparişi kalemi düzeyi için tasarlanmıştır. Case ID, Satın alma siparişi numarasıdır (EBELN). Mal kabulü gibi kalem düzeyindeki etkinlikler dahil tüm etkinlikler bu ana Case ID'ye bağlanır.
- Performans değerlendirmeleri: Büyük Veri Setleri için zaman aşımı hatalarını önlemek üzere programı arka plan işi (SM36) olarak planlayın. Özellikle CDHDR ve CDPOS gibi tablolarda WHERE koşullarında kullanılan temel alanlar için veritabanı dizinlerinin bulunduğundan emin olun.
- Ön koşullar: Raporu çalıştıran kullanıcının ABAP workbench'e (SE38) erişim ve programı geliştirme ve çalıştırma yetkisi olmalıdır. Ayrıca EKKO, EKPO, EKBE, CDHDR, CDPOS, EBAN, NAST, ESSR ve QM tabloları dahil tüm temel tablolara okuma erişimi gerekir.
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ını kurun: Temel SAP ECC veritabanı için salt okunur kimlik bilgilerini ve bağlantı ayrıntılarını, yani ana bilgisayar adını, portu ve veritabanı adını edinin. DBeaver, SQL Developer veya SSMS gibi gerekli istemci araçlarının yüklü olduğundan emin olun.
- SAP şemasını belirleyin: Veritabanına bağlanın ve tabloların bulunduğu birincil SAP şemasını belirleyin. Bu ad çoğu zaman SAPSR3, SAPHANADB veya sisteme özgü benzer bir addır. Kullanıcınız için varsayılan şema değilse sorgudaki tüm tablo adlarının önüne bu şemayı eklemeniz gerekir.
- SQL sorgusunu inceleyin: Sağlanan SQL betiğini istemci aracınızda açın. Bu ayrıntılı sorgu, birden fazla SAP tablosunu birleştirerek Satın Almadan Ödemeye sürecindeki 14 farklı etkinliği çıkarmak için tasarlanmıştır.
- Sorgu parametrelerini özelleştirin: Betiğin başındaki PO_BASE Common Table Expression (CTE) bölümünü bulun. Çıkarma kapsamını belirlemek için yer tutucu değerleri değiştirin:
- [START_DATE] ve [END_DATE]: Analiz tarih aralığını belirleyin, örneğin "20230101" ve "20230630". AEDAT (Değiştirilme tarihi) alanına göre filtre uygulamanız önerilir.
- [COMPANY_CODE_1], [COMPANY_CODE_2]: Dahil edilecek SAP Şirket kodlarını belirtin.
- [DOC_TYPE_1], [DOC_TYPE_2]: Dahil edilecek PO belge türlerini belirtin.
- [Your SAP Schema]: Bu yer tutucuyu betiğin tamamında gerçek SAP şema adınızla değiştirin.
- Sorguyu çalıştırın: Özelleştirilmiş SQL betiğini SAP veritabanında çalıştırın. Çalışma süresi tarih aralığına, veri hacmine ve veritabanı performansına göre değişir.
- Sonuçları inceleyin: Sorgu tamamlandığında çıktıyı hızlıca gözden geçirin. Satır sayısının makul olduğunu ve PurchaseOrder, Activity ve EventTime gibi temel sütunların beklendiği şekilde doldurulduğunu kontrol edin.
- Verileri CSV'ye aktarın: Sonuç kümesinin tamamını SQL istemcinizden CSV dosyasına aktarın. Karakter sorunlarını önlemek için UTF-8 kodlamasını kullanın.
- Yüklemeye hazırlayın: CSV dosyanızdaki sütun başlıklarının gerekli öznitelik 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.
Yapılandırma
- Ön koşullar: Temel SAP ECC veritabanına doğrudan, salt okunur erişim gerekir. Kullanıcıların EKKO, EKPO, EKBE, EBAN, CDHDR, CDPOS ve NAST gibi tabloları sorgulamak için yeterli yetkiye sahip olması gerekir.
- Tarih aralığı filtresi: Veri hacmini sınırlamak için tarih aralığı filtresi uygulamak önemlidir. 3-6 aylık bir dönem için EKKO.AEDAT (PO değişiklik tarihi) alanına filtre uygulamak yaygın bir başlangıç yaklaşımıdır. Geniş tarih aralıkları sorgunun çok uzun sürmesine yol açabilir.
- Temel veri filtreleri: Odaklı bir analiz için her zaman EKKO.BUKRS (Şirket kodu) ve EKKO.BSART (Belge türü) alanlarına filtre uygulayın. Böylece kapsamı ilgili tüzel kişiler ve iş süreçleriyle sınırlandırabilirsiniz.
- Performans değerlendirmeleri: Sorgu, değişiklik geçmişi tabloları CDHDR ve CDPOS dahil olmak üzere birçok büyük tabloyu birleştirir. Bu işlem kaynakları yoğun kullanabilir. Sistem performansını etkilememek için çıkarma işlemini yoğun olmayan saatlerde veya çoğaltılmış, üretim dışı bir veritabanında çalıştırmanız önemle önerilir.
- Değişiklik belgesi günlüğü: "Approved", "Rejected", "Completed" ve "Changed" gibi etkinliklerin doğruluğu, SAP'de ilgili alanlar için değişiklik belgesi günlüğünün etkin olmasına bağlıdır. Bu günlüğün etkin olduğunu SAP yöneticinizle doğrulayın (SCDO işlemi üzerinden).
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 indicator Adımlar
- Ön koşullar ve bağlantı: Üçüncü taraf ETL aracınızda SAP Certified Connector bileşeninin yüklü ve lisanslı olduğundan 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ına, sistem numarasına, istemci kimliğine ve uygun RFC ile tablo okuma yetkilerine sahip özel bir SAP kullanıcısına ihtiyacınız olacaktır.
- Kaynak tabloları belirleyin: ETL işiniz veya veri akışınız içinde gerekli SAP tablolarını veri kaynakları olarak tanımlayın. Temel tablolar şunlardır: EKKO (PO Header), EKPO (PO Item), EBAN (Purchase Requisition), CDHDR (Change Document Header), CDPOS (Change Document Item), MSEG (Document Segment: Material), MKPF (Material Document Header), NAST (Message Status), ESSR (Service Entry Sheet Header) ve QALS (Inspection Lot).
- 'Purchase Order Created' olayını çıkarın: EKKO tablosundan veri alan bir veri akışı oluşturun. Kayıtları istediğiniz tarih aralığına (örneğin AEDAT kullanarak) ve kuruluş kapsamına (örneğin Company Code için BUKRS, Document Type için BSART) göre filtreleyin. EKKO.EBELN değerini PurchaseOrder alanına, 'Purchase Order Created' değerini Activity alanına eşleyin ve EventTime için AEDAT ile ERZET değerlerini birleştirin. Gerekli diğer öznitelikleri de eşleyin.
- 'Goods Receipt Posted' olayını çıkarın: MSEG tablosundan veri alan ve MBLNR ile MJAHR üzerinden MKPF tablosuna bağlanan ayrı bir veri akışı oluşturun. '101' gibi ilgili hareket türlerine göre filtreleyin. MSEG.EBELN değerini PurchaseOrder alanına, 'Goods Receipt Posted' değerini Activity alanına eşleyin ve EventTime için MKPF.CPUDT ile MKPF.CPUTM değerlerini kullanın.
- Değişiklik tabanlı olayları çıkarın (onaylar, değişiklikler, silmeler): CDHDR ve CDPOS tablolarından veri alan, CHANGENR üzerinden birleştirilmiş bir veri akışı oluşturun. Bu tek kaynak, birden fazla etkinlik türetmek için kullanılabilir.
- OBJECTCLAS = 'EINKBELEG' ve TABNAME = 'EKPO' olacak şekilde filtreleyin.
- 'Purchase Order Approved' için serbest bırakma durumu alanındaki değişiklikleri filtreleyin (örneğin, FNAME = 'FRGZU'); burada yeni değer (VALUE_NEW) nihai onayı göstermelidir.
- 'Purchase Order Deleted' için silme göstergesindeki değişiklikleri filtreleyin (FNAME = 'LOEKZ'); yeni değer 'L' olmalıdır.
- 'Purchase Order Changed' için diğer ilgili alan değişikliklerini filtreleyin ve diğer etkinliklerde kullanılan belirli durum alanlarını hariç tutun.
- Tüm bu olaylar için EventTime değerinde CDHDR.UDATE ve CDHDR.UTIME alanlarını kullanın.
- 'Purchase Requisition' olaylarını çıkarın: 'Purchase Requisition Created' için EBAN tablosundan bir veri akışı oluşturun. Bunu bir PurchaseOrder vakasına bağlamak için EBAN ile EKPO tablolarını talep numarası (BANFN) ve kalem (BNFPO) üzerinden birleştirin. 'Purchase Requisition Approved' için OBJECTCLAS = 'BANF' koşuluyla CDHDR/CDPOS tablolarını kullanın. Olayın nihai PO ile ilişkilendirildiğinden emin olmak için dikkatli bir haritalama yapmanız gerekir.
- 'PO Sent to Vendor' olayını çıkarın: NAST tablosundan veri alan bir veri akışı oluşturun. OBJECTKEY (PO numarasını içerir), ilgili çıktı türü (KSCHL) ve başarılı işleme durumu (VSTAT = '1') üzerinden filtreleyin. EventTime için ERDAT ve UHR alanlarını kullanın.
- Etkinlik akışlarını birleştirin: Önceki adımlarda oluşturduğunuz tüm veri akışlarının çıktılarını birleştirmek için ETL aracınızdaki 'Union' veya 'Merge' dönüşümünü kullanın. Tüm akışlarda sütun adlarının ve veri türlerinin (PurchaseOrder, Activity, EventTime vb.) tutarlı olduğundan emin olun.
- Veri türü ve biçim dönüşümü: EventTime sütununun tutarlı bir zaman damgası biçimine (örneğin YYYY-MM-DD HH:MM:SS) dönüştürüldüğünden emin olun. OrderAmount değerini standart ondalık biçime dönüştürün.
- Hedefi tanımlayın: Birleşik veri akışınız için bir hedef veya 'sink' yapılandırın. Bu hedef genellikle CSV ya da Parquet gibi düz bir dosyadır. Ayırıcıyı, metin niteleyicilerini ve başlık seçeneklerini yapılandırın.
- Çalıştırın ve doğrulayın: Tam ETL işini çalıştırın. Çıktı dosyasında 14 etkinliğin tümünün bulunduğunu, satır sayılarının makul olduğunu ve temel özniteliklerin doğru şekilde doldurulduğunu doğrulayın.
- Zamanlayın ve dışa aktarın: Doğrulama tamamlandıktan sonra verileri güncel tutmak için ETL işini düzenli çalışacak şekilde zamanlayın (örneğin, her gece). Oluşturulan dosya artık Process Mining aracınıza yüklenmeye hazırdır.
Yapılandırma
- Ön koşullar: ECC için ilgili SAP Certified Connector ile birlikte kullanılan ticari bir ETL aracı, örneğin Informatica PowerCenter, Talend veya SAP Data Services. Gerekli tablolarda S_RFC ve S_TABU_DIS yetkilerine sahip bir SAP dialog veya sistem kullanıcısı.
- SAP bağlantısı: Connector, SAP uygulama sunucusu, sistem numarası, istemci, kullanıcı ve parola bilgileriyle yapılandırılmalıdır. Secure Network Communications (SNC) kullanılması önerilir.
- Tarih aralığı filtresi: Veri hacmini sınırlamak için tarih aralığı filtresi uygulamanız önemlidir. Yaygın uygulamalardan biri, EKKO.AEDAT (PO Oluşturma Tarihi) alanını son 3 ila 12 ayla sınırlamaktır. SAP sisteminden gereğinden fazla veri çıkarılmasını önlemek için bu filtre kaynağa uygulanmalıdır.
- Organizasyon kapsamı filtreleri: Her zaman EKKO.BUKRS (Şirket Kodu) alanına göre filtre uygulayın. Analizi belirli bir iş birimiyle sınırlandırmak için EKPO.WERKS (Üretim Yeri) veya EKKO.EKORG (Satın Alma Organizasyonu) alanlarını da filtrelemeyi değerlendirin.
- Belge türü filtresi: Yalnızca ilgili satın alma siparişi türlerini dahil etmek için EKKO.BSART alanını kullanın. Standart P2P sürecinin parçası olmayan stok transferlerini veya diğer dahili belgeleri hariç tutun.
- Performans ayarları: Değişiklik belgesi tablolarından, CDHDR ve CDPOS, veri çıkarmak yavaş olabilir. OBJECTCLAS, OBJECTID ve UDATE alanlarına filtre uygulandığından emin olun. Veri aktarım hızını iyileştirmek için SAP Connector içindeki 'Packet Size' ayarını düzenleyin. Çok büyük sistemlerde önce geçmiş verileri yüklemeyi, ardından planlı delta yüklemeleri çalıştırmayı değerlendirin.
a Örnek sorgu sql
/*
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]); Başlamaya hazır mısınız?
Bu Template ile SAP ECC'deki Satın Almadan Ödemeye - Satın alma siparişi sürecinizi optimize etmek için gereken yol haritasına sahipsiniz. İçgörüleri ortaya çıkarmak ve verimliliği artırmak için verilerinizden bugün yararlanmaya başlayın.
P2P Satın alma siparişini optimize edin: Ücretsiz denemenizi bugün başlatın
Darboğazları ortadan kaldırın ve çevrim süresini %30 veya daha fazla azaltın.
Kredi kartı gerekmez, dakikalar içinde başlayın