Satın Almadan Ödemeye - Satın alma siparişi Veri Templateiniz
Satın Almadan Ödemeye - Satın alma siparişi Veri Templateiniz
- Toplanması önerilen öznitelikler
- İzlenecek önemli etkinlikler
- SAP ECC için veri çıkarma yönergeleri
Satın Almadan Ödemeye - Satın alma siparişi öznitelikleri
| Ad | Açıklama | ||
|---|---|---|---|
| Etkinlik Activity | Satın alma siparişi yaşam döngüsünde gerçekleşen belirli bir iş olayının veya adımın adıdır. | ||
| 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 etkinliklerin sıralaması, her satın alma siparişinin süreç akışını oluşturur. Etkinliklerin sırasını, sıklığını ve aralarındaki süreyi analiz etmek Process Mining çalışmalarının temelidir. Darboğazları, yeniden çalışma döngülerini ve standart süreçten sapmaları belirlemeye yardımcı olur; böylece iyileştirme ve standartlaştırma çalışmaları hedefli biçimde yürütülebilir. Neden önemli? Etkinlikler, sürecin adımlarını tanımlar. Sıralarını ve zamanlamalarını analiz ederek gerçek süreç akışını, darboğazları ve sapmaları görebilirsiniz. Nereden alınır? CDHDR/CDPOS değişiklik kayıtları, mal kabulü/fatura girişi için EKBE ve talepler için EBAN gibi çeşitli SAP tablolarından ve işlem günlüklerinden elde edilir. Oluşturulması için genellikle özel bir mantık veya veri çıkarma programı gerekir. Örnekler Satın alma siparişi oluşturulduSatın alma siparişi onaylandıMal kabulü kaydedildi | |||
| Olay zamanı EventTime | Etkinliğin gerçekleştiği kesin tarih ve saat. | ||
| Açıklama Bu zaman damgası, siparişin onaylandığı veya mal kabulünün kaydedildiği an gibi bir olayın tam olarak ne zaman gerçekleştiğini gösterir. Bir kayıttaki tüm etkinliklerin kronolojik sırasını belirler. Zaman damgaları, zamana dayalı tüm analizleri mümkün kıldığı için Process Mining çalışmalarının temelidir. Etkinlikler arasındaki döngü sürelerini hesaplamayı, gecikmeleri belirlemeyi, süreç hacmini analiz etmeyi ve hizmet seviyesi anlaşmalarına (SLA) göre performansı ölçmeyi 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 sıraya koymak için gereklidir. 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 elde edilir. Ö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 kayıt 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 etkinlikleri birbirine bağlayan temel tanımlayıcıdır. Her benzersiz sipariş numarası, satın alma sürecinin tek bir örneğini temsil eder. Process Mining çalışmalarında bu öznitelik, her satın almanın baştan sona izlediği yolu yeniden oluşturmak için gereklidir. Her siparişin döngü süresini, süreç farklılıklarını ve uyumluluk kontrollerini ayrıntılı biçimde analiz etmenizi 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 satın alma siparişinin yaşam döngüsünün tamamını analiz etmeyi 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şinin numara aralığını, alan seçimini ve genel süreç akışını belirleyen bir yapılandırmadır. Standart siparişler, hizmet siparişleri veya stok transfer siparişleri için farklı türler tanımlanabilir. Farklı belge türleri çoğu zaman farklı süreçleri izlediğinden, bu öznitelik analiz için kullanışlı bir boyut sunar. Belge türüne göre filtreleme, döngü sürelerini ve süreç akışlarını daha doğru biçimde karşılaştırmanızı sağlar. Neden önemli? Farklı satın alma süreçlerini (ör. standart, hizmet veya iade) birbirinden ayırır. Bu süreçlerin izlediği yollar ve performans beklentileri farklı olabilir. Nereden alınır? Tablo: EKKO, Alan: BSART Örnekler NBFOUB | |||
| Kullanıcı adı UserName | Etkinliği gerçekleştiren kişinin kullanıcı kimliği. | ||
| Açıklama Bu öznitelik, belgeyi oluşturan, değiştiren veya onaylayan çalışanın SAP kullanıcı adını kaydeder. Otomatik adımlarda sistem veya toplu işlem kullanıcı kimliği görünebilir. Kullanıcıya göre analiz yapmak, eğitim ihtiyaçlarını ve yüksek performans gösteren kişileri belirlemeye, olası uyumluluk sorunlarını ortaya çıkarmaya yardımcı olur. İş yükü dağılımı, onay matrisi uyumluluğu ve farklı ekiplerin ya da kişilerin performansıyla ilgili Dashboardlar oluşturmak için önemlidir. Neden önemli? Kullanıcı işlemlerini belirli kişilerle ilişkilendirerek kullanıcı performansını, iş yükünü ve uyumluluk kurallarına bağlılığı analiz etmenizi 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, satın alınan mal ya da hizmet türünü sınıflandırmak için kullanılır. Örnekler arasında BT donanımı, ofis malzemeleri ve profesyonel hizmetler bulunur. Bu öznitelik, harcama analizleri ve satın alma örüntülerini anlamak için önemlidir. Süreci kategoriye göre filtreleyerek farklı kategorilerin nasıl ele alındığını, kimlerin onay verdiğini ve hangi tedarikçilerin hizmet sunduğunu analiz edebilirsiniz. Satın alma siparişi değer analizi Dashboardunun temel boyutlarından biridir. Neden önemli? Süreci ürün veya hizmet kategorisine göre bölümlere ayırarak farklı harcama türlerinin davranışlarını, döngü sürelerini ve tedarikçilerini görmenizi sağlar. Nereden alınır? Tablo: EKPO, Alan: MATKL Örnekler 00101BT_DONANIMIDANIŞMANLIK | |||
| Sipariş tutarı OrderAmount | Satın alma siparişi kaleminin toplam parasal değeri. | ||
| Açıklama Bu öznitelik, satın alma siparişindeki belirli bir kalemin miktarı ile net fiyatının çarpılmasıyla hesaplanan toplam değeri gösterir. Siparişin toplam değerini bulmak için kalem tutarlarının toplanması gerekir. Sipariş tutarına göre analiz yapmak, daha sıkı kontroller veya farklı onay yolları gerektirebilecek yüksek değerli işlemleri belirlemek açısından önemlidir. Satın alma siparişi değer analizi Dashboardunu besler ve süreç iyileştirme çalışmalarını finansal açıdan en önemli siparişlere yöneltmeye yardımcı olur. Neden önemli? Her satın almanın finansal etkisini ölçer; yüksek değerli siparişleri önceliklendirmenizi veya maliyet tasarrufu fırsatlarını belirlemenizi 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ş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ğinden, temel bir organizasyon birimidir. Süreci şirket koduna göre analiz etmek, farklı iş birimleri veya ülkelerdeki satın alma verimliliğini ve uyumluluğu karşılaştırmanızı sağlar. Bir kuruluşta işe yarayan uygulamaları başka bir yerde tekrarlamaya veya süreçte zorlanan birimleri belirlemeye yardımcı olur. Neden önemli? Tüzel kişiliği belirtir; kuruluşun farklı bölümlerindeki süreç performansını karşılaştırmayı ve uyumluluğu denetlemeyi sağlar. Nereden alınır? Tablo: EKKO, Alan: BUKRS Örnekler 10002100US01 | |||
| Tedarikçi numarası VendorNumber | Tedarikçiyi benzersiz biçimde tanımlayan numara. | ||
| Açıklama Bu kod, mal veya hizmet satın alınan tedarikçiyi benzersiz biçimde tanımlar. Satın alma sürecinin temel ana veri alanlarından biridir. Bu öznitelik, tedarikçi odaklı analizler için gereklidir. Tedarikçi teslimat performansını değerlendirmenizi, farklı tedarikçilerin teslimat sürelerini karşılaştırmanızı ve harcama örüntülerini analiz etmenizi sağlar. Tedarikçi teslimat performansı Dashboardunun temel boyutudur. Neden önemli? Tedarikçi performansını analiz etmeyi sağlar; güvenilir tedarikçileri ve gecikmelere ya da kalite sorunlarına yol açanları belirlemenize yardımcı olur. Nereden alınır? Tablo: EKKO, Alan: LIFNR Örnekler 100345V-20598700112 | |||
| Kaynak sistem SourceSystem | Verilerin alındığı sistem. | ||
| Açıklama Bu öznitelik, verilerin kaynağını belirtir. Kaynak genellikle bir SAP ECC örneğinin 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. Veri yönetişimi ve veri kökeni takibi için kaynak sistemi bilmek önemlidir. Verilerin bütünlüğünü korur ve özellikle farklı ERP sistemlerinden veya modüllerinden gelen veriler birleştirildiğinde, veri çıkarma ya da kalite sorunlarını gidermeye yardımcı olur. Neden önemli? Verilerin kaynağını belirtir. Veri yönetişimi, doğrulama ve birden fazla sistemdeki analizleri yönetmek için gereklidir. Nereden alınır? Bu, genellikle veri çıkarma sırasında eklenen ve veri setini kaynak sistemine göre etiketleyen sabit bir değerdir. Örnekler SAP_ECC_PRODECC_EU_100S4H_FIN | |||
| Onay sonrası değişiklik yapıldı mı IsPostApprovalChange | İlk onayın ardından bir satın alma siparişinde değişiklik yapılıp yapılmadığını gösteren bir işaret. | ||
| Açıklama Aynı satın alma siparişi için 'Satın alma siparişi değiştirildi' etkinliği, 'Satın alma siparişi onaylandı' etkinliğinden sonra gerçekleşmişse bu Boole özniteliğinin değeri true olur. Sürecin ilerleyen aşamalarında yapılan sorunlu değişiklikleri belirlemenize yardımcı olur. Hesaplanan bu alan, 'Onay sonrası satın alma siparişi değişiklik oranı' KPI’ını ve 'Satın alma siparişinde yeniden çalışma ve değişiklikler' Dashboardunu doğrudan destekler. Gecikmelere yol açabilen ve yeniden onay gerektiren aksaklık yaratan değişiklikleri ölçüp görünür kılar. Böylece ilk gereksinimlerin belirlenmesi veya kapsamın tanımlanması aşamalarındaki sorunları saptayabilirsiniz. Neden önemli? Onay sonrasındaki yeniden çalışmayı doğrudan ölçer. Süreç istikrarı ve verimliliği açısından önemli bir KPI’dır. Oranın yüksek olması, önceki aşamalardaki gereksinim tanımında sorunlara işaret eder. Nereden alınır? Bu, Event Log içindeki etkinlik sırasından hesaplanan bir özniteliktir. Örnekler truefalse | |||
| Para birimi Currency | Satın alma siparişi tutarının para birimi kodu. | ||
| Açıklama Bu öznitelik, satın alma siparişinin USD, EUR veya GBP gibi hangi para birimi üzerinden düzenlendiğini belirtir. Tüm parasal değerleri doğru yorumlamak için gerekli bağlamı sağlar. Küresel kuruluşlarda doğru finansal analiz için para birimi bilgisi gereklidir. Sipariş değerlerini doğru biçimde toplamanızı ve karşılaştırmanızı sağlar. Parasal KPI’ların tümü, ilgili para birimi dikkate alınarak 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ına yardımcı olur. Nereden alınır? Tablo: EKKO, Alan: WAERS Örnekler USDEURJPY | |||
| Ret nedeni RejectionReason | Satın alma talebinin veya siparişinin neden reddedildiğini açıklayan neden kodu ya da metin. | ||
| Açıklama Bu öznitelik, onay iş akışı sırasında bir satın alma siparişi reddedildiğinde belirtilen nedeni kaydeder. Yeniden çalışma ve gecikmelerin temel nedenlerini anlamak için bu bilgi önemlidir. Ret nedenlerini analiz ederek yanlış fiyatlandırma, bütçe aşımı veya uyumluluk koşullarını karşılamayan tedarikçi seçimi gibi yaygın sorunları belirleyebilirsiniz. Bu bulgular, temel nedenleri gidermenize, ilk satın alma siparişi kayıtlarının kalitesini artırmanıza ve onay sürecini kolaylaştırmanıza yardımcı olur. Neden önemli? Onayların neden başarısız olduğunu doğrudan gösterir. 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 iş akışı yapılandırmalarına bağlı olabilir. Çoğu zaman uygulamaya özgü bilgi gerektirir. Örnekler Yanlış fiyatBütçe aşıldıYinelenen talep | |||
| Satın alma grubu PurchasingGroup | Satın alma faaliyetinden sorumlu alıcı veya alıcı grubu. | ||
| Açıklama Satın alma grubu, belirli bir satın alma faaliyetinden sorumlu alıcıyı veya ekibi temsil eder. Tedarikçilerin temel iletişim noktasıdır. Bu öznitelik, satın alma organizasyonuna kıyasla daha ayrıntılı analiz yapmanızı sağlar. Alıcılar arasındaki iş yükü dağılımını ve performans farklılıklarını anlamaya yardımcı olur; böylece kaynak planlaması ve eğitim çalışmaları daha doğru biçimde yönlendirilebilir. Neden önemli? Bir satın alma işleminden kimin sorumlu olduğunu ayrıntılı biçimde gösterir. Alıcı veya ekip düzeyinde iş yükünü ve performansı analiz etmenizi sağlar. Nereden alınır? Tablo: EKKO, Alan: EKGRP Örnekler 001002N01 | |||
| Satın alma organizasyonu PurchasingOrganization | Fiyat görüşmelerinden ve malzeme ya da hizmet alımlarından sorumlu organizasyon birimi. | ||
| Açıklama Satın alma organizasyonu, SAP’de satın alma faaliyetlerinden sorumlu temel bir organizasyon birimidir. Tüm şirket için merkezi olarak veya tesis ya da bölge bazında merkezi olmayan bir yapıda çalışabilir. 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. Döngü süresi, yeniden çalışma oranı ve maliyet gibi metrikleri farklı organizasyon birimleri arasında karşılaştırarak iyi uygulamaları ve desteğe ihtiyaç duyulan alanları ortaya çıkarır. Neden önemli? Sorumlu satın alma ekibini belirler; farklı organizasyon birimlerinin performansını karşılaştırmayı ve analiz etmeyi 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 kaynak satın alma talebine bağlar. Her siparişin öncesinde bir talep bulunmayabilir. Bu bağlantı, talebin siparişe dönüşmesi Dashboardunu ve talebin siparişe dönüşme oranı KPI’ını analiz etmek için önemlidir. İlk talepten resmî siparişin oluşturulmasına kadar olan sürecin verimliliğini ölçmenizi ve önceden talep oluşturulmadan verilen, kurallara uymayan siparişleri belirlemenizi sağlar. Neden önemli? Siparişi kaynak talebine bağlayarak talebin siparişe dönüşme sürecini analiz etmenizi ve önceden talep oluşturulmadan verilen siparişleri belirlemenizi sağlar. Nereden alınır? Tablo: EKPO, Alan: BANFN Örnekler 1001589010015891 | |||
| Son veri güncellemesi LastDataUpdate | Verilerin kaynak sistemden en son ne zaman yenilendiğini gösteren zaman damgası. | ||
| Açıklama Bu öznitelik, en son veri çıkarma veya güncelleme işleminin tarih ve saatini kaydeder. Analiz edilen verilerin ne kadar güncel olduğunu anlamanıza yardımcı olur. Bu bilgiyi Dashboardlarda göstermek, içgörülerin neredeyse gerçek zamanlı verilere mi yoksa geçmiş bir anlık görüntüye mi dayandığını anlamak açısından önemlidir. Böylece kullanıcıların beklentileri doğru yönetilir ve kararlar verilerin güncelliği bilinerek alınır. Neden önemli? Verilerin güncelliğini gösterir ve kullanıcıların analizin operasyonların en son durumunu yansıtıp yansıtmadığını anlamasını sağlar. Nereden alınır? Bu zaman damgası, veri çıkarma veya ETL işlemi sırasında 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ı ölçmek için temel alınır. Bu tarih, zamanında mal kabulü oranı KPI’ını hesaplamak için gereklidir. Gerçek mal kabulü tarihini talep edilen tarihle karşılaştırarak kuruluşlar tedarikçi güvenilirliğini ve kurum içi teslim alma verimliliğini ölçebilir. Bu analiz, tedarikçi teslimat performansı Dashboardunu doğrudan destekler. Neden önemli? Teslimat için belirlenen hedef tarihtir. Zamanında teslimat 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 yasal adı. | ||
| Açıklama Tedarikçinin, numarasına kıyasla kullanıcılar için daha anlaşılır olan adıdır. Genellikle tedarikçi ana verilerinden alınır. Tedarikçi numarası tabloları birleştirmek ve benzersiz tanımlama yapmak için kullanılırken, tedarikçi adı kullanıcıların gördüğü Dashboardlar ve raporlar için önemlidir. Tedarikçi kodlarını bilmeyen iş kullanıcılarının analizleri daha kolay anlamasını sağlar. Neden önemli? Tedarikçinin kolayca anlaşılır adını sunarak Dashboardları ve raporları iş kullanıcıları için daha anlaşılır hâle getirir. Nereden alınır? Tablo: LFA1, Alan: NAME1. EKKO-LIFNR ile LFA1-LIFNR arasında bağlantı kurulması gerekir. Örnekler Staples Inc.Global Tech SolutionsOffice Supply Co. | |||
| Teslimat zamanında yapıldı mı IsOnTimeDelivery | Malların talep edilen teslimat tarihinde veya bu tarihten önce teslim alınıp alınmadığını gösteren bir işaret. | ||
| Açıklama 'Mal girişi kaydedildi' etkinliğinin zaman damgası, 'Talep edilen teslimat tarihi' ile aynı veya daha erkense bu Boole özniteliğinin değeri true olur. Her satın alma siparişi kaleminin teslimat performansını net biçimde gösterir. Bu öznitelik, 'Zamanında mal girişi oranı' KPI’ının temelini oluşturur. Zamanında ve geciken teslimatları kolayca gruplandırıp filtreleyerek tedarikçi performansını ve şirket içi mal kabul verimliliğini analiz etmenizi sağlar. Neden önemli? Teslimatın zamanında yapılıp yapılmadığını net biçimde ölçer; tedarikçi performansı KPI’larını ve Dashboardlarını doğrudan destekler. Nereden alınır? Bu, mal girişi kayıt tarihi (EKBE-BUDAT) ile talep edilen teslimat tarihinin (EKPO-EINDT) karşılaştırılmasıyla hesaplanan bir özniteliktir. Örnekler truefalse | |||
| Üretim yeri Plant | Malların teslim edileceği fiziksel konum veya üretim yeri. | ||
| Açıklama Üretim yeri; üretim tesisi, depo veya mal ya da hizmetlerin teslim alındığı başka bir konumu temsil eden organizasyon birimidir. Üretim yerine göre analiz yapmak, tedarik sürecindeki coğrafi farklılıkları anlamanıza yardımcı olur. Belirli konumlara yapılan tedarikçi teslimat sürelerindeki farklılıkları ortaya çıkarabilir veya mal kabul süreçleri verimsiz işleyen üretim yerlerini belirleyebilir. Böylece mal girişlerinin zamanında yapılıp yapılmadığını analiz edebilirsiniz. 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 | |||
Satın Almadan Ödemeye - Satın alma siparişi etkinlikleri
| Aktivite | Açıklama | ||
|---|---|---|---|
| Mal kabulü kaydedildi | Bu etkinlik, belirli bir satın alma siparişi kapsamında tedarikçiden malların fiziksel olarak teslim alınmasını gösterir. Mal kabulünün kaydedilmesi (ör. MIGO işlemiyle), malzeme belgesi oluşturan ve envanteri güncelleyen açık bir işlemdir. | ||
| Neden önemli? Bu önemli kilometre taşı, tedarikçi teslimat performansını izlemek ve fatura doğrulama sürecinin başlangıcını belirlemek için kullanılır. Zamanında teslimat oranını ve mal kabulünün zamanlamasını hesaplamaya yardımcı olur. Nereden alınır? Malzeme belgesi oluşturulduğunda kayda geçer. Olayın zaman damgası, malzeme belgesi başlık tablosundaki (MKPF) kayıt tarihi (MKPF-BUDAT) veya oluşturulma tarihidir (MKPF-CPUDT). Belge, kalem tablosu (MSEG) üzerinden satın alma siparişine bağlanır. Kaydedin Satın alma siparişine referans veren malzeme belgeleri için MKPF tablosundaki kayıt veya oluşturulma zaman damgasını kullanın. Olay türü explicit | |||
| Satın alma siparişi oluşturuldu | Bu etkinlik, tedarikçiyle bağlayıcı bir sözleşme niteliğindeki resmî satın alma siparişi belgesinin oluşturulduğunu gösterir. Kullanıcı bir satın alma siparişi oluşturup kaydettiğinde (ör. ME21N işlemiyle) açık bir olay olarak kayda geçer ve EKKO ile EKPO tablolarına kayıt eklenir. | ||
| Neden önemli? Satın alma siparişi yaşam döngüsünün resmî başlangıcını gösterir. Talebin siparişe dönüşme süresini ve siparişin baştan sona tamamlanma süresini ölçmek için önemli bir kilometre taşıdır. Nereden alınır? İlgili satın alma siparişi numarası (EKKO-EBELN) için satın alma siparişi başlık tablosundaki (EKKO) oluşturulma tarihinden (EKKO-AEDAT) alınır. Kaydedin Her yeni satın alma siparişi için EKKO tablosundaki oluşturulma 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önderilebileceğini gösterir. Bu önemli kilometre taşı, genellikle siparişin serbest bırakma durumu tamamen serbest bırakıldı veya onaylandı olarak değiştiğinde çıkarılır. | ||
| Neden önemli? Bu etkinlik, sipariş onay döngü süresi KPI’ını hesaplamak ve onay iş akışındaki darboğazları belirlemek için gereklidir. 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 ne zaman uygulandığını veya genel serbest bırakma durumu göstergesinin (EKKO-FRGKE) serbest bırakıldı olarak ayarlandığını bulmak için satın alma siparişi başlık tablosuna (EKKO) ait değişiklik günlükleri (CDHDR/CDPOS) izlenerek çıkarılır. Kaydedin Siparişin genel serbest bırakma durumunun (EKKO-FRGKE) son onay durumuna geçtiği zaman damgasını belirleyin. Olay türü inferred | |||
| Satın alma siparişi tamamlandı | Satın alma siparişi kaleminin tamamen teslim edildiğini gösterir. Genellikle sipariş kalemindeki Teslimat tamamlandı göstergesinin otomatik veya manuel olarak ayarlanmasından çıkarılır. | ||
| Neden önemli? Bu etkinlik, siparişin yerine getirilmesi aşamasının mantıksal bitiş noktasını gösterir. Oluşturulmasından tamamlanmasına kadar geçen toplam sipariş döngü süresini hesaplamak için gereklidir. Nereden alınır? Sipariş 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, siparişin tamamının bittiğini gösterebilir. Kaydedin EKPO-ELIKZ işaretinin ayarlandığı zaman damgasını değişiklik belgelerinden belirleyin. Olay türü inferred | |||
| Satın alma siparişi tedarikçiye gönderildi | Bu etkinlik, onaylanan satın alma siparişinin EDI, e-posta veya basılı belge gibi bir yolla tedarikçiye resmî olarak iletildiği anı gösterir. Çıktı mesajı başarıyla işlendiğinde mesaj kontrol tablolarında açık bir olay olarak kayda geçer. | ||
| Neden önemli? Bu önemli kilometre taşı, tedarikçinin teslimat süresini başlatır. Tedarikçi performansını ve teslimatların zamanında yapılıp yapılmadığını değerlendirmek için bu olaydan mal kabulüne kadar geçen süreyi analiz etmek gerekir. Nereden alınır? Mesaj durumu tablosuna (NAST) kaydedilir. İlgili sipariş çıktı türünün işleme durumu (NAST-VSTAT) 1, yani başarıyla işlendi olduğunda zaman damgası NAST-DATVR ve NAST-UHRVR alanlarından alınabilir. Kaydedin Siparişin çıktı mesajı için NAST tablosundaki işleme zaman damgasını kullanın. Olay türü explicit | |||
| Satın alma talebi oluşturuldu | Bu etkinlik, mal veya hizmet alımı için resmî bir talep oluşturulduğunu gösterir. Kullanıcı yeni bir satın alma talebi belgesini (ME51N gibi işlemlerle) kaydedince açık bir olay olarak kayda geçer ve EBAN tablosunda benzersiz bir kayıt oluşturulur. | ||
| Neden önemli? Bu, satın alma sürecinin temel başlangıç noktasıdır. Bu olaydan satın alma siparişinin oluşturulmasına kadar geçen süreyi analiz etmek, kurum içi talebin siparişe dönüştürülme verimliliğini ölçmeye yardımcı olur. Nereden alınır? Satın alma talebi başlık tablosuna (EBAN) kayıt eklendiğinde kaydedilir. Bu olayın zaman damgası olarak oluşturulma tarihi (EBAN-BADAT) ve saati kullanılır. Kaydedin Oluşturulma tarihine göre EBAN tablosundaki yeni kayıtları belirleyin. Olay türü explicit | |||
| Hizmet onayı girildi | Hizmet alımına dayalı satın alma siparişlerinde bu etkinlik, hizmetlerin sunulduğunun onaylandığını gösterir. Hizmet Giriş Formu oluşturulduğunda (ör. ML81N işlemiyle) açık bir olay olarak kayda geçer. | ||
| Neden önemli? Hizmetler için mal kabulüne karşılık gelir ve hizmet siparişlerinin tamamlanmasını izlemek için gereklidir. Hizmet ödemesine yönelik finansal süreci başlatır. Nereden alınır? Hizmet Giriş Formu başlık tablosundaki (ESSR) oluşturulma tarihinden (ESSR-ERDAT) alınır. Satın alma siparişi bağlantısı ESLL tablosunda bulunur. Kaydedin Satın alma siparişine bağlı Hizmet Giriş Formları için ESSR tablosundaki oluşturulma zaman damgasını kullanın. Olay türü explicit | |||
| Kalite kontrolü yapıldı | Teslim alınan malların kalite kontrolünden geçtiğini gösterir. Genellikle mal kabulü sırasında oluşturulan bir kontrol partisi için Kalite Yönetimi modülünde kullanım kararı verildiğinde bu etkinlik çıkarılır. | ||
| Neden önemli? Kalitenin büyük önem taşıdığı sektörlerde bu etkinlik, kontrol sürecinin süresini ve sonuçlarını analiz etmeye yardımcı olur. Buradaki gecikmeler, mal kabulü ile malların kullanıma hazır hâle gelmesi arasında darboğaz oluşturabilir. Nereden alınır? Kalite Yönetimi modülündeki verilerden çıkarılır. Mal kabulünde QALS tablosunda bir kontrol partisi oluşturulur. Zaman damgası içeren kullanım kararının QAVE tablosunda oluşturulması, etkinliğin gerçekleştiğini gösterir. Kaydedin Malzeme belgesine bağlı kontrol partisi için QAVE tablosundaki kullanım kararı zaman damgasını belirleyin. Olay türü inferred | |||
| Mallar iade edildi | Daha önce teslim alınan malların, genellikle kalite sorunları veya yanlış sevkiyat nedeniyle tedarikçiye iade edilmesini ifade eder. İade hareket türüyle malzeme belgesi kaydedildiğinde açık bir olay olarak kayda geçer. | ||
| Neden önemli? Bu etkinlik, tedarikçi kalitesi veya sipariş doğruluğuyla ilgili sorunları ortaya çıkarır ve süreçte yeniden çalışmanın önemli bir göstergesidir. Mal kabulü fark oranı KPI’ını hesaplamak için gereklidir. Nereden alınır? İade hareket türü (ör. tedarikçiye iade 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. Kaydedin İlk satın alma siparişine referans veren iade hareket türündeki (ör. 122) malzeme belgelerini belirleyin. Olay türü explicit | |||
| Satın alma siparişi değiştirildi | Satın alma siparişi oluşturulduktan sonra miktar, fiyat veya teslimat tarihi gibi alanlarda yapılan değişiklikleri ifade eder. Bu değişiklikler SAP’nin değişiklik belgesi sisteminde açıkça kaydedilir. | ||
| Neden önemli? Özellikle onaydan sonra sık değişiklik yapılması, süreç verimsizliğine, yetersiz ilk planlamaya veya kapsamın genişlemesine işaret eder. Bu etkinlik, siparişte yeniden çalışma ve değişiklikleri izleyen Dashboard ile ilgili KPI’lar 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ında açıkça kaydedilir. Her değişiklik, zaman damgası içeren yeni bir kayıt oluşturur. Kaydedin Satın alma siparişi numarasıyla bağlantılı CDHDR ve CDPOS tablolarından değişiklik olaylarını ve zaman damgalarını alın. Olay türü explicit | |||
| Satın alma siparişi onaya gönderildi | 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. Serbest bırakma stratejisi devreye girdiğinde ve sipariş onay bekleme durumuna geçtiğinde bu olay çıkarılır. | ||
| Neden önemli? Siparişin oluşturulmasıyla onay sürecinin başlamasını ayrı ayrı izlemek, onay döngü süresi KPI’ını doğru ölçmeye yardımcı olur. Ayrıca onay iş akışı başlamadan önce yaşanan gecikmeleri ortaya çıkarır. Nereden alınır? Satın alma siparişine (EINKBELEG nesnesi) ait değişiklik belgelerinden (CDHDR/CDPOS) çıkarılır. Bu belgeler, serbest bırakma durumunun ilk kez ayarlandığını gösterir. Alternatif olarak, genel serbest bırakma durumu (EKKO-FRGKE) onay sürecinin etkin olduğunu belirten bir değere ilk kez ayarlandığında da olay belirlenebilir. Kaydedin Sipariş için serbest bırakma stratejisini devreye sokan ilk değişiklik belgesi kaydını belirleyin. Olay türü inferred | |||
| Satın alma siparişi reddedildi | Onay iş akışı sırasında bir onaylayıcı satın alma siparişini reddettiğinde gerçekleşir. Siparişin serbest bırakma stratejisi verilerindeki durum değişikliğinden çıkarılan bu olay, reddin gerçekleştiğini gösterir. | ||
| Neden önemli? Retleri izlemek; sipariş verilerindeki kalite sorunlarını, politikalara uyumsuzluğu veya onay matrisindeki sorunları belirlemeye yardımcı olur. Retler çoğu zaman yeniden çalışmaya yol açar ve toplam döngü süresini uzatı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 ret durumu ayarlandığında ret genellikle kayda geçer. Kaydedin Serbest bırakma kodunun iptal edildiğini veya ret anlamına gelen bir durum değişikliğini görmek için değişiklik günlüklerini izleyin. Olay türü inferred | |||
| Satın alma siparişi silindi | Mal kabulü veya faturalama gibi sonraki işlemleri engelleyen, satın alma siparişi kaleminin iptal edilmesini ya da mantıksal olarak silinmesini ifade eder. Sipariş kalemindeki silme göstergesi ayarlandığında bu olay çıkarılır. | ||
| Neden önemli? Bu son etkinlik, siparişin iptal edildiğini gösterir. Siparişlerin neden ve ne zaman silindiğini analiz etmek, talep planlaması 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. Kaydedin EKPO-LOEKZ işaretinin ayarlandığı zaman damgasını değişiklik belgelerinden belirleyin. Olay türü inferred | |||
| Satın alma talebi onaylandı | Satın alma talebinin resmî olarak onaylandığını ve satın alma siparişine dönüştürülebileceğini gösterir. Bu olay, SAP’nin onay stratejisi iş akışının izlediği talep verilerindeki serbest bırakma durumu alanlarında yapılan değişikliklerden çıkarılır. | ||
| Neden önemli? Onayları izlemek, sipariş öncesi aşamadaki darboğazları belirlemek ve onay politikalarına uyumu sağlamak açısından önemlidir. Bu aşamadaki gecikmeler, satın alma döngü süresini doğrudan etkiler. Nereden alınır? Satın alma talebi tablosunun (EBAN) değişiklik günlüklerinden çıkarılır. Özellikle serbest bırakma durumu alanlarındaki değişiklikler (ör. EBAN-FRGZU) izlenir veya EBAN nesnesine ait CDHDR/CDPOS değişiklik belgeleri analiz edilir. Kaydedin 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 'Oluşturun' seçeneğine tıklayın. 'Process Mining PO Data Extraction' gibi bir başlık girin ve türü 'Executable Program' olarak ayarlayın.
- Seçim ekranını tanımlayın: Programda seçim ekranı parametrelerini tanımlayın. Böylece kullanıcılar çıkarmak istedikleri verileri filtreleyebilir. 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ı tanımlayın. Bu yapıda gerekli ve önerilen tüm öznitelikler bulunmalıdır: 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: 'Satın alma talebi oluşturuldu' olaylarını bulmak için EBAN tablosunu sorgulayın ve EKPO tablosu üzerinden bunları satın alma siparişleriyle ilişkilendirin. Serbest bırakma durumu alanlarındaki değişiklikleri izleyerek 'Satın alma talebi onaylandı' olaylarını belirlemek için değişiklik günlüğü tablolarını (CDHDR, CDPOS) kullanın.
- Satın alma siparişinin temel olaylarını seçin: 'Satın alma siparişi oluşturuldu' olayını bulmak için EKKO ve EKPO tablolarını sorgulayın. Serbest bırakma göstergeleri ve silme işaretleri gibi belirli alanlardaki değişikliklere göre 'Satın alma siparişi değiştirildi', 'Satın alma siparişi onaylandı', 'Satın alma siparişi reddedildi', 'Satın alma siparişi tamamlandı' ve 'Satın alma siparişi silindi' olaylarını çıkarmak için EINKBELEG nesnesine ait değişiklik günlüğü tablolarını (CDHDR, CDPOS) kullanın.
- Satın alma siparişi iletişim olaylarını seçin: Siparişin başarıyla gönderildiği kayıtları bulmak ve 'Satın alma siparişi tedarikçiye gönderildi' etkinliğini kaydetmek için NAST tablosunu sorgulayın.
- Mal ve hizmet olaylarını seçin: Hareket türü kategorisine göre 'Mal girişi kaydedildi' ve 'Mallar iade edildi' etkinliklerini belirlemek için EKBE tablosundaki malzeme belgesi kayıtlarını sorgulayın. 'Hizmet kabulü girildi' etkinliğini kaydetmek için hizmet giriş belgelerini ESSR ve ESLL tablolarından sorgulayın.
- Kalite yönetimi olaylarını seçin: Kalite Yönetimi modülü kullanılıyorsa, satın alma siparişiyle bağlantılı bir muayene partisi için kullanım kararı verildiği zamanı bulmak üzere QALS ve QAVE tablolarını sorgulayın. Bu, 'Kalite muayenesi yapıldı' etkinliğini gösterir.
- Verileri birleştirin ve biçimlendirin: Tüm ayrı sorgulardan gelen verileri tek bir nihai dahili tabloda birleştirin. EventTime alanının tutarlı biçimde (ör. YYYY-MM-DDTHH:MI:SS) biçimlendirildiğinden emin olun.
- Dosya indirme işlevini ekleyin: Nihai dahili tabloyu dosya olarak indirme işlevi ekleyin. Önerilen biçim sekmeyle ayrılmış dosya veya CSV’dir. Bunun için GUI_DOWNLOAD işlev modülünü kullanabilirsiniz.
- Programı çalıştırın ve kaydedin: Programı SE38 veya SA38 işlemiyle çalıştırın. Seçim ölçütlerini doldurup raporu başlatın. İstendiğinde çıktı dosyasını .csv uzantısıyla bilgisayarınıza kaydedin. Dosya yüklemeye hazır olacaktır.
Yapılandırma
- Tarih aralığı: Veri çıkarma işlemi için, genellikle satın alma siparişinin oluşturulma tarihine (EKKO-AEDAT) göre belirli bir tarih aralığı tanımlamak önemlidir. 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): Veri çıkarmayı ilgili tüzel kişilerle sınırlamak için bir veya daha fazla şirket koduna göre filtre uygulayın. Bu, performans ve sonuçların konuyla ilgisi açısından önemli bir parametredir.
- Satın alma belgesi türü (BSART): Analizi standart süreçlere odaklamak ve gerekirse özel tedarik türlerini dışarıda bırakmak için belirli belge türlerine (ör. standart satın alma siparişi için 'NB') göre filtre uygulayın.
- Veri ayrıntı düzeyi: Veri çıkarma işlemi, satın alma siparişi kalemi düzeyinde tasarlanmıştır. Vaka kimliği, satın alma siparişi numarasıdır (EBELN). Mal girişleri gibi kalem düzeyindeki olaylar da dahil olmak üzere tüm olaylar bu ana vaka kimliğiyle ilişkilendirilir.
- Performansla ilgili noktalar: Büyük veri setlerinde zaman aşımı hatalarını önlemek için programı arka plan işi (SM36) olarak zamanlayı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 geliştirme ve programı çalıştırma yetkilerinin yanı sıra ABAP Workbench’e (SE38) erişim yetkisi olmalıdır. Ayrıca EKKO, EKPO, EKBE, CDHDR, CDPOS, EBAN, NAST, ESSR ve QM tabloları dahil olmak üzere temel tablolara okuma erişimi gerekir.
Ö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: SAP ECC temel veritabanı için salt okunur kimlik bilgilerini ve bağlantı ayrıntılarını (ana bilgisayar adı, bağlantı noktası, veritabanı adı) 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 şema genellikle 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 şema adını eklemeniz gerekir.
- SQL sorgusunu inceleyin: Sağlanan SQL betiğini istemci aracınızda açın. Bu 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 Ortak Tablo İfadesini (CTE) bulun. Veri çıkarma kapsamını belirlemek için yer tutucu değerleri değiştirin:
- [START_DATE] ve [END_DATE]: Analiz tarih aralığını belirleyin (ör. '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 satın alma siparişi belge türlerini belirtin.
- [Your SAP Schema]: Betik boyunca bu yer tutucuyu 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ı kısaca gözden geçirin. Satır sayısının makul olup olmadığını kontrol edin ve PurchaseOrder, Activity ve EventTime gibi temel sütunların beklendiği gibi doldurulduğundan emin olun.
- Verileri CSV olarak dışa 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ükleme için 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: Analiz ve görselleştirme için son CSV dosyasını Process Mining uygulamanıza yükleyin.
Yapılandırma
- Ön koşullar: SAP ECC temel 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 yetkisi olmalıdır.
- Tarih aralığı filtresi: Veri hacmini sınırlamak için tarih aralığı filtresi uygulamak önemlidir. EKKO.AEDAT (satın alma siparişi değişiklik tarihi) alanına göre 3-6 aylık bir dönem için filtre uygulamak yaygın bir başlangıç noktasıdır. Geniş tarih aralıkları sorgunun çok uzun sürmesine yol açabilir.
- Temel veri filtreleri: Analizi belirli bir kapsamda tutmak için her zaman EKKO.BUKRS (şirket kodu) ve EKKO.BSART (belge türü) alanlarına göre filtre uygulayın. Böylece kapsamı ilgili tüzel kişiler ve iş süreçleriyle sınırlandırabilirsiniz.
- Performansla ilgili noktalar: Sorgu, değişiklik geçmişi tabloları (CDHDR, CDPOS) dahil olmak üzere büyük tabloları birleştirir. Bu işlem sistem kaynaklarını yoğun kullanabilir. Sistem performansını etkilememek için veri çıkarma işlemini yoğun olmayan saatlerde veya üretim dışı bir kopya veritabanında çalıştırmanız önemle önerilir.
- Değişiklik belgesi günlüğü: 'Onaylandı', 'Reddedildi', 'Tamamlandı' ve 'Değiştirildi' 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öneticinize danışarak doğrulayın (SCDO işlemi üzerinden).
Ö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 onaylı bağlayıcının 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 sunucusunun ana bilgisayar adı, sistem numarası, istemci kimliği ve uygun RFC ve tablo okuma yetkilerine sahip özel bir SAP kullanıcı hesabı gerekir.
- Kaynak tabloları belirleyin: ETL işinizde veya veri akışınızda gerekli SAP tablolarını veri kaynağı olarak tanımlayın. Temel tablolar şunlardır: EKKO (satın alma siparişi başlığı), EKPO (satın alma siparişi kalemi), EBAN (satın alma 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ş belgesi başlığı) ve QALS (muayene partisi).
- 'Satın alma siparişi oluşturuldu' olayını çıkarın: EKKO tablosunu kaynak alan bir veri akışı oluşturun. Kayıtları istediğiniz tarih aralığına (ör. AEDAT kullanarak) ve organizasyon kapsamına (ör. şirket kodu için BUKRS, belge türü için BSART) göre filtreleyin. EKKO.EBELN alanını PurchaseOrder ile, 'Satın alma siparişi oluşturuldu' değerini Activity ile eşleyin; EventTime için AEDAT ve ERZET değerlerini birleştirin. Diğer gerekli öznitelikleri de eşleyin.
- 'Mal girişi kaydedildi' olayını çıkarın: MSEG tablosunu kaynak alan ve MBLNR ile MJAHR alanları üzerinden MKPF tablosuna bağlayan ayrı bir veri akışı oluşturun. '101' gibi ilgili hareket türlerine göre filtre uygulayın. MSEG.EBELN alanını PurchaseOrder ile, 'Mal girişi kaydedildi' değerini Activity ile eşleyin; EventTime için MKPF.CPUDT ve MKPF.CPUTM alanlarını kullanın.
- Değişikliğe dayalı olayları çıkarın (onaylar, değişiklikler, silmeler): CDHDR ve CDPOS tablolarını CHANGENR alanı üzerinden birleştirerek kaynak alan bir veri akışı oluşturun. Bu tek kaynak, birden fazla etkinlik türetmek için kullanılabilir.
- OBJECTCLAS = 'EINKBELEG' ve TABNAME = 'EKPO' koşullarına göre filtre uygulayın.
- 'Satın alma siparişi onaylandı' için serbest bırakma durumu alanındaki değişikliklere (ör. FNAME = 'FRGZU') göre filtre uygulayın; yeni değer (VALUE_NEW) nihai onayı göstermelidir.
- 'Satın alma siparişi silindi' için silme göstergesindeki değişikliklere (FNAME = 'LOEKZ') göre filtre uygulayın; yeni değer 'L' olmalıdır.
- 'Satın alma siparişi değiştirildi' için diğer ilgili alanlardaki değişikliklere göre filtre uygulayın. Diğer etkinliklerde kullanılan belirli durum alanlarını hariç tutun.
- Tüm bu etkinliklerde EventTime için CDHDR.UDATE ve CDHDR.UTIME alanlarını kullanın.
- 'Satın alma talebi' olaylarını çıkarın: 'Satın alma talebi oluşturuldu' etkinliği için EBAN tablosundan veri alan bir akış oluşturun. Bu etkinliği bir satın alma siparişi vakasıyla ilişkilendirmek için talep numarası (BANFN) ve kalem (BNFPO) üzerinden EBAN tablosunu EKPO tablosuna bağlayın. 'Satın alma talebi onaylandı' etkinliği için OBJECTCLAS = 'BANF' koşuluyla CDHDR/CDPOS tablolarını kullanın. Etkinliğin sonradan oluşturulan satın alma siparişiyle ilişkilendirilmesi için eşlemeyi dikkatle yapın.
- 'Satın alma siparişi tedarikçiye gönderildi' olayını çıkarın: NAST tablosunu kaynak alan bir veri akışı oluşturun. Satın alma siparişi numarasını içeren OBJECTKEY alanına, ilgili çıktı türüne (KSCHL) ve başarılı işleme durumuna (VSTAT = '1') göre filtre uygulayın. EventTime için ERDAT ve UHR alanlarını kullanın.
- Etkinlik akışlarını birleştirin: Önceki adımlarda oluşturduğunuz 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ışlardaki sütun adlarının ve veri türlerinin (PurchaseOrder, Activity, EventTime vb.) tutarlı olduğundan emin olun.
- Veri türlerini ve biçimleri dönüştürün: EventTime sütununu tutarlı bir zaman damgası biçimine (ör. YYYY-MM-DD HH:MM:SS) dönüştürün. OrderAmount değerini standart bir ondalık biçime çevirin.
- Hedef konumu tanımlayın: Birleştirilmiş veri akışınız için hedef veya 'sink' yapılandırın. Bu genellikle CSV ya da Parquet gibi düz bir dosyadır. Ayırıcıyı, metin niteleyicilerini ve başlık seçeneklerini belirleyin.
- Çalıştırın ve doğrulayın: ETL işinin tamamını ç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 biçimde 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 aralıklarla (ör. her gece) çalışacak şekilde zamanlayın. Oluşturulan dosya, 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ı (ör. Informatica PowerCenter, Talend, SAP Data Services). Gerekli tablolara erişmek için S_RFC ve S_TABU_DIS yetkileri bulunan bir SAP iletişim veya sistem kullanıcısı.
- SAP bağlantısı: Bağlayıcı; 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 uygulamak önemlidir. Yaygın bir yöntem, EKKO.AEDAT (satın alma siparişi oluşturma tarihi) alanını son 3 ila 12 ayı kapsayacak şekilde filtrelemektir. SAP’den gereğinden fazla veri çekilmesini önlemek için bu filtre kaynakta uygulanmalıdır.
- Kuruluş kapsamı filtreleri: Her zaman EKKO.BUKRS (şirket kodu) alanına göre filtre uygulayın. Analizi belirli bir iş birimiyle sınırlamak için EKPO.WERKS (üretim yeri) veya EKKO.EKORG (satın alma organizasyonu) alanlarına göre de filtre uygulamayı değerlendirin.
- Belge türü filtresi: Yalnızca ilgili satın alma siparişi türlerini dahil etmek ve standart Satın Almadan Ödemeye sürecinin parçası olmayan stok transferlerini veya diğer dahili belgeleri hariç tutmak için EKKO.BSART alanını kullanın.
- Performans ayarı: Değişiklik belgesi tablolarından (CDHDR, CDPOS) veri çekmek yavaş olabilir. OBJECTCLAS, OBJECTID ve UDATE alanlarına filtre uygulandığından emin olun. Veri aktarım hızını iyileştirmek için SAP bağlayıcısındaki 'Packet Size' ayarını düzenleyin. Çok büyük sistemlerde önce geçmiş verileri yükleyip ardından planlı artımlı yüklemeler yapmayı değerlendirin.
Ö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, SAP ECC sisteminizde Satın Almadan Ödemeye - Satın alma siparişi sürecinizi iyileştirmek için gereken yol haritasını sunar. İçgörüleri ortaya çıkarmak ve verimliliği artırmak için verilerinizden yararlanmaya hemen başlayın.
Satın Almadan Ödemeye satın alma siparişlerini iyileştirin: Ücretsiz denemeyi bugün başlatın
Darboğazları ortadan kaldırın, çevrim süresini %30 veya daha fazla azaltın.
Kredi kartı gerekmez, dakikalar içinde başlayın