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