Satın Almadan Ödemeye - Satın alma siparişi veri Templateiniz
Satın Almadan Ödemeye - Satın alma siparişi veri Templateiniz
- Ayrıntılı analiz için önerilen öznitelikler
- Süreçte izlenecek temel etkinlikler
- Veri çıkarma adımlarına ilişkin yönergeler
Satın Almadan Ödemeye - Satın alma siparişi öznitelikleri
| Ad | Açıklama | ||
|---|---|---|---|
| Etkinlik ActivityName | Satın alma siparişi sürecinde gerçekleşen iş olayının veya adımın adı. | ||
| Açıklama Bu öznitelik, satın alma siparişinin yaşam döngüsündeki belirli bir eylemi veya durum değişikliğini tanımlar. Örneğin, 'Satın alma siparişi oluşturuldu', 'Satın alma siparişi onaylandı' veya 'Mal kabulü kaydedildi'. Bu etkinliklerin sıralaması süreç akışını oluşturur. Etkinliklerin sırasını ve sıklığını incelemek, Process Mining çalışmalarının temelini oluşturur. Gerçek süreci keşfetmenize, tasarlanan modelle karşılaştırmanıza, darboğazları (ör. 'Fatura alındı' sonrasındaki uzun beklemeler) belirlemenize ve yeniden çalışmayı (ör. tekrarlanan 'Satın alma siparişi değiştirildi' etkinlikleri) ölçmenize yardımcı olur. Neden önemli? Süreç adımlarını tanımlar; uçtan uca akışı görselleştirip analiz etmenizi, varyantları incelemenizi ve darboğazları belirlemenizi sağlar. Nereden alınır? Temel iş aşamalarını göstermek için genellikle EKKO/EKPO’daki durum alanları veya CDHDR/CDPOS değişiklik belgesi günlükleri gibi birden fazla tablo ve alan bir arada kullanılarak elde edilir. Örnekler Satın alma siparişi oluşturulduSatın alma siparişi onaylandıMal kabulü kaydedildiFatura alındı | |||
| Olay zamanı EventTime | Etkinliğin ne zaman gerçekleştiğini gösteren zaman damgası. | ||
| Açıklama Bu öznitelik, süreçteki her etkinliğin kesin tarih ve saatini kaydeder. Process Mining’de zamana dayalı tüm analizlerin temelini oluşturur. Olay zamanı, süreç akışını oluşturmak için etkinlikleri kronolojik sıraya koyar. Ayrıca çevrim süreleri, bekleme süreleri ve işlem süreleri gibi süreye dayalı tüm metriklerin hesaplanmasını sağlar. Bu metrikler, performans analizi ve darboğazların belirlenmesi açısından önemlidir. Neden önemli? Olayları doğru sıralamak ve çevrim süreleri, teslim süreleri ve bekleme süreleri dâhil tüm performans metriklerini hesaplamak için bu zaman damgası gereklidir. Nereden alınır? Belirli etkinliklerle ilişkili zaman damgası alanları. Örneğin, oluşturulma tarihi (değişiklikler için EKKO-AEDAT) veya kayıt tarihi (mal kabulleri için MKPF-BUDAT). Genellikle birden fazla tablodaki verilerin birleştirilmesi gerekir. Örnekler 2023-04-15T10:00:00Z2023-04-15T14:30:00Z2023-05-01T09:15:00Z | |||
| Satın alma siparişi PurchaseOrderNumber | Satın alma siparişinin (PO) benzersiz tanımlayıcısıdır ve satın alma yaşam döngüsünü izlemek için temel vaka kimliği olarak kullanılır. | ||
| Açıklama Satın alma siparişi numarası, ilk oluşturulmasından son mal kabulüne ve tamamlanmasına kadar ilgili tüm etkinlikleri birbirine bağlayan temel tanımlayıcıdır. Process Mining analizinde vaka kimliği olarak kullanılır. Analizde olayları bu numaraya göre gruplandırarak her bir siparişin yolculuğunu yeniden oluşturabilirsiniz. Bu, çevrim sürelerini hesaplamak, süreç varyantlarını incelemek ve tek bir siparişe özgü darboğazları ya da sapmaları belirlemek için gereklidir. Neden önemli? Tüm satın alma olaylarını uçtan uca tek bir süreçte birleştiren temel anahtardır. Her satın alma siparişinin yaşam döngüsünü ayrıntılı biçimde analiz etmenizi sağlar. Nereden alınır? Bu öznitelik SAP S/4HANA’daki EKKO tablosunun EBELN alanında bulunur. Örnekler 450001712345000171244500017125 | |||
| Kaynak sistem SourceSystem | Verilerin hangi kaynak sistemden çıkarıldığını belirtir. | ||
| Açıklama Bu öznitelik, olay verilerinin geldiği sistemi belirtir; örneğin, 'SAP S/4HANA Üretim' veya 'SAP ECC'. Birden fazla sistemin kullanıldığı ortamlarda bu alan, veri kökenini izlemek, sorun gidermek ve farklı kaynaklardan gelen verilerin doğru yorumlanmasını sağlamak için önemlidir. Verilerin bağlamını anlamanıza yardımcı olur ve belirli sistem ortamlarına göre analizleri filtrelemek için kullanılabilir. Neden önemli? Verilerin kaynağı hakkında önemli bağlam bilgisi sağlar. Birden fazla sistemin bulunduğu ortamlarda veri yönetişimi, doğrulama ve analiz için gereklidir. Nereden alınır? Genellikle veri çıkarma, dönüştürme ve yükleme (ETL) işlemi sırasında veri setinin kaynağını belirtmek için eklenen sabit bir değerdir. Örnekler S4H_PROD_100ECC_EU_200S4H_US_300 | |||
| Son veri güncellemesi LastDataUpdate | Verilerin kaynak sistemden en son yenilendiği veya çıkarıldığı zamanı gösteren zaman damgası. | ||
| Açıklama Bu öznitelik, analiz edilen verilerin güncelliğini belirtir. SAP S/4HANA’dan en son veri çekiminin tarih ve saatini gösterir. Son veri güncellemesinin ne zaman yapıldığını bilmek, analiz sonuçlarının ne kadar güncel olduğunu anlamanızı sağlar. Gerçek zamanlı bilgilere mi yoksa belirli bir andaki verilerin anlık görüntüsüne mi baktığınızı bilerek bulguları doğru yorumlayabilirsiniz. Bu da analize dayanarak alacağınız kararların güncelliğini etkiler. Neden önemli? Verilerin ne kadar güncel olduğunu göstererek kullanıcıların analiz bulgularının bağlamını ve geçerliliğini anlamasına yardımcı olur. Nereden alınır? Veri çıkarma, dönüştürme ve yükleme (ETL) işlemi sırasında eklenen bir meta veri zaman damgasıdır. Örnekler 2024-05-21T02:00:00Z2024-05-20T02:00:00Z2024-05-19T02:00:00Z | |||
| Kullanıcı UserName | Belirli bir etkinliği gerçekleştiren kullanıcının kimliği. | ||
| Açıklama Bu öznitelik, belgeyi oluşturan, değiştiren veya onaylayan SAP kullanıcısının kimliğini kaydeder. Sistem içindeki işlemlerin izlenmesini sağlar. Kullanıcı bazında analiz yapmak; eğitim ihtiyaçlarını, iş yükü dağılımını ve bireysel performansı belirlemeye yardımcı olur. Örneğin, belirli kullanıcıların sürekli uzun onay süreleriyle veya onay sonrası sık değişikliklerle ilişkilendirilip ilişkilendirilmediğini görebilirsiniz. Bu bilgiler, kaynak yönetimi ve süreç iyileştirme çalışmalarına yön verebilir. Neden önemli? Hesap verebilirliği sağlar ve kişi ya da ekip düzeyinde performans analizi yapmanıza yardımcı olur. Böylece eğitim fırsatlarını veya kaynak kısıtlarını belirleyebilirsiniz. Nereden alınır? Bu bilgi EKKO’daki ERNAM (Oluşturan) gibi alanlarda veya değişiklik belgesi tablolarındaki kullanıcı alanında (CDHDR-USERNAME) bulunur. Örnekler CB9980000012JSMITHRROE | |||
| Satın alma siparişi belge türü DocumentType | Standart sipariş, hizmet siparişi veya stok transfer siparişi gibi farklı satın alma siparişi türlerini birbirinden ayıran sınıflandırma. | ||
| Açıklama Belge türü, SAP’de satın alma siparişinin süreç akışını, numara aralığını ve alanlarını belirleyen temel bir yapılandırma öğesidir. İşletmelerin farklı senaryolara göre satın alma sürecini uyarlamasını sağlar. Süreç farklılıklarını anlamak için belge türüne göre analiz yapmak önemlidir. Örneğin, standart mal siparişinin süreci hizmet siparişinden veya stok transferinden oldukça farklı olabilir. Bu öznitelik, farklı süreç akışlarını filtreleyip karşılaştırmanıza ve belirli iyileştirme fırsatlarını bulmanıza yardımcı olur. Neden önemli? Satın alma siparişlerini sınıflandırarak farklı satın alma süreçlerini karşılaştırmanızı ve süreç akışlarıyla çevrim sürelerindeki farklılıkları anlamanızı sağlar. Nereden alınır? Bu öznitelik SAP S/4HANA’daki EKKO tablosunun BSART alanında bulunur. Örnekler NBFOUB | |||
| Satın alma talebi PurchaseRequisitionNumber | Satın alma siparişini başlatan satın alma talebinin (PR) kimliği. | ||
| Açıklama Bu öznitelik, satın alma siparişini onu başlatan satın alma talebine bağlar. Doğrudan oluşturulan siparişlerin tümünde satın alma talebi bulunmayabilir. Bu bağlantı, ilk talepten başlayarak satın alma sürecinin tamamını analiz etmek için gereklidir. 'Satın alma talebi onay süresi' gibi temel performans göstergelerini destekler ve öncesinde onaylanmış bir talep olmadan oluşturulan siparişlerin yol açtığı kurum dışı harcamaları belirlemeye yardımcı olur. Neden önemli? Satın alma siparişini ilk talebe bağlayarak uçtan uca süreç analizi yapmanızı ve uyumluluğa aykırı kurum dışı harcamaları belirlemenizi sağlar. Nereden alınır? Bu öznitelik SAP S/4HANA’daki EKPO tablosunun (satın alma siparişi kalemi düzeyi) BANFN alanında bulunur. Örnekler 1001005110010052 | |||
| Talep edilen teslimat tarihi RequestedDeliveryDate | İşletmenin tedarikçiden mal veya hizmetleri teslim etmesini istediği tarih. | ||
| Açıklama Bu öznitelik, satın alma siparişinde belirlenen hedef teslimat tarihini gösterir. Tedarikçi teslimat performansını ölçmek için temel alınır. Process Mining’de bu tarih, 'Tedarikçi zamanında teslimat oranı' temel performans göstergesini hesaplamak için gerçek mal kabulü tarihiyle ('Mal kabulü kaydedildi' zaman damgası) karşılaştırılır. Bu tarihten sapmaları incelemek, tedarikçi güvenilirliğini değerlendirmeye ve tedarik zinciri risklerini yönetmeye yardımcı olur. Neden önemli? Tedarikçinin zamanında teslimat performansını ölçmek için temel alınır. Bu, tedarik zinciri yönetimi ve operasyonel planlama açısından önemli bir göstergedir. Nereden alınır? EKET teslimat planı tablosunun EINDT alanında bulunur. Örnekler 2023-06-012023-06-152023-07-01 | |||
| Tedarikçi kimliği VendorId | Mal veya hizmet sağlayan tedarikçiyi tanımlayan benzersiz kimlik. | ||
| Açıklama Tedarikçi kimliği, satın alma siparişini belirli bir tedarikçiye bağlayan temel ana verilerden biridir. Satın alma sürecinde iletişim, teslimat ve ödeme işlemlerinde kullanılır. Process Mining’de bu öznitelik, tedarikçi bazında performans analizi yapmanızı sağlar. 'Tedarikçi teslim süresi performansı' ve 'Tedarikçiye göre mal iade oranı' gibi Dashboardlar için gereklidir. En güvenilir tedarikçileri ve gecikmelere ya da kalite sorunlarına yol açabilecek tedarikçileri belirlemenize yardımcı olur. Neden önemli? Tedarikçi odaklı analiz yapmanızı sağlar; performansı değerlendirmenize, iyi ve düşük performans gösteren tedarikçileri belirlemenize ve tedarik zincirini iyileştirmenize yardımcı olur. Nereden alınır? Bu öznitelik SAP S/4HANA’daki EKKO tablosunun LIFNR alanında bulunur. Örnekler 100023100045100088 | |||
| Toplam net tutar TotalNetAmount | Vergi ve nakliye masrafları hariç satın alma siparişinin toplam değeri. | ||
| Açıklama Bu öznitelik, satın alma siparişinin net parasal değerini gösterir. Satın alma işleminin büyüklüğünü belirten temel bir finansal göstergedir. Bu tutar; siparişleri değerlerine göre sınıflandırmak (yüksek ve düşük değerli siparişler) ve süreç akışlarının farklılaşıp farklılaşmadığını görmek gibi finansal analizler için önemlidir. Analize öncelik vermek ve daha fazla finansal risk taşıyabilecek ya da işletme üzerinde daha büyük etkisi olabilecek yüksek değerli siparişlere odaklanmak için de kullanılabilir. Neden önemli? Finansal analiz yapmanızı, satın alma siparişlerini değerlerine göre gruplandırmanızı ve iyileştirme çalışmalarına yüksek harcama yapılan alanlardan başlamanızı sağlar. Nereden alınır? Bu öznitelik SAP S/4HANA’daki EKKO tablosunun NETWR alanında bulunur. Örnekler 1500.0025000.50125.75 | |||
| Kalem kategorisi ItemCategory | Satın alma siparişi kalemini standart, konsinye, fason üretim veya hizmet gibi türlere ayırır. | ||
| Açıklama Kalem kategorisi, belirli bir malzeme veya hizmetin satın alma sürecinin nasıl yürütüleceğini belirler. Mal kabulü ve fatura doğrulaması gibi sonraki adımları etkiler. Bu öznitelik, satın alınan ürüne göre süreç varyantlarını analiz etmek için önemlidir. Örneğin, hizmet kaleminde hizmet giriş belgesi gerekir; bu nedenle süreç standart stok kaleminden oldukça farklıdır. Kalem kategorisine göre analiz yapmak, bu farklılıkları açıklamaya ve hedefli süreç iyileştirmeleri yapmaya yardımcı olur. Neden önemli? Mal, hizmet veya fason üretim gibi farklı tedarik türlerini ayırt ederek süreçteki değişiklikleri açıklar. Nereden alınır? Bu öznitelik, SAP S/4HANA sisteminde EKPO tablosunun PSTYP alanında bulunur. Örnekler 093 | |||
| Malzeme numarası MaterialNumber | Tedarik edilen malzemeyi veya ürünü tanımlayan kod. | ||
| Açıklama Malzeme numarası, SAP’deki her malzeme ana verisi kaydına atanan benzersiz bir koddur. Tedarik, envanter yönetimi ve satış dahil olmak üzere ilgili malzemenin tüm işlemlerinde kullanılır. Malzeme numarasına veya malzeme grubuna göre analiz yapmak, ürün kategorilerine göre inceleme olanağı sağlar. Belirli malzeme türlerinin tedarik süreçlerinin daha verimsiz olup olmadığını, daha uzun çevrim sürelerine sahip olup olmadığını veya iadelerin daha sık yaşanıp yaşanmadığını belirlemeye yardımcı olur. Böylece kategori yönetimi için içgörü sağlar. Neden önemli? Ürün veya malzemelere özgü süreç sorunlarını ve tedarikçi performansı problemlerini belirlemek için kategori bazında analiz yapmanızı sağlar. Nereden alınır? Bu öznitelik, SAP S/4HANA sisteminde EKPO tablosunun MATNR alanında bulunur. Örnekler RM100-100FG210SERV-CONSULT | |||
| Satın alma grubu PurchasingGroup | Belirli tedarik faaliyetlerinden sorumlu alıcı veya alıcı grubu. | ||
| Açıklama Satın alma grubu, belirli satın alma faaliyetlerinden, malzemelerden veya tedarikçilerden sorumlu bir alıcıyı ya da alıcı grubunu ifade eder. Tedarikçiler için başlıca iletişim noktasıdır. Bu öznitelik, iş yükünü ve performansı satın alma organizasyonuna kıyasla daha ayrıntılı analiz etmenizi sağlar. Aşırı iş yükü altındaki ekipleri belirlemek, farklı alıcı gruplarının verimliliğini ölçmek ve hangi grupların süreç sapmalarına, örneğin yetkisiz harcamalara, daha yatkın olduğunu anlamak için kullanılabilir. Neden önemli? Alıcı gruplarının performansını ayrıntılı biçimde göstererek ekip düzeyinde iş yükü, verimlilik ve süreçlere uyum analizine olanak tanır. Nereden alınır? Bu öznitelik, SAP S/4HANA sisteminde EKKO tablosunun EKGRP alanında bulunur. Örnekler 001002N00 | |||
| Satın alma organizasyonu PurchasingOrganization | Mal ve hizmet tedarikinden, ayrıca tedarikçilerle müzakere yürütmekten sorumlu kuruluş birimi. | ||
| Açıklama Satın alma organizasyonu, tedarik süreçlerinin temel kuruluş birimlerinden biridir. Şirket veya tesis düzeyinde ya da kurumsal düzeyde yapılandırılabilir ve tüm satın alma faaliyetlerinden sorumludur. Süreci satın alma organizasyonuna göre analiz etmek, farklı tedarik ekiplerinin veya bölgelerin verimliliğini ve performansını değerlendirmenize yardımcı olur. Kuruluş birimleri arasındaki tedarikçi müzakeresi, süreç uyumluluğu veya onay gecikmesi farklılıklarını ortaya çıkarabilir. Neden önemli? Farklı tedarik departmanlarının veya bölgelerin performansını karşılaştırmanızı, iyi uygulamaları ve iyileştirme alanlarını belirlemenizi sağlar. Nereden alınır? Bu öznitelik, SAP S/4HANA sisteminde EKKO tablosunun EKORG alanında bulunur. Örnekler 10101710US01 | |||
| Şirket kodu CompanyCode | Satın alma siparişinin oluşturulduğu tüzel kişiliği veya şirketi tanımlayan kod. | ||
| Açıklama Şirket kodu, kuruluş içindeki bağımsız bir muhasebe birimini temsil eder. Satın alma siparişiyle ilgili tüm finansal işlemler belirli bir şirket koduna kaydedilir. Bu temel kuruluş özniteliği, farklı tüzel kişiliklerdeki tedarik süreçlerini filtreleyip karşılaştırmanızı sağlar. Şirket koduna göre yapılan analizler, kuruluş genelinde süreç yürütümündeki tutarsızlıkları, verimlilik düzeyi farklılıklarını veya uyumluluk oranlarındaki değişimleri ortaya çıkarabilir. Neden önemli? Süreç analizini tüzel kişiliğe göre ayırarak işletmenin farklı bölümlerindeki performans ve uyumluluk düzeylerini karşılaştırmanızı sağlar. Nereden alınır? Bu öznitelik, SAP S/4HANA sisteminde EKKO tablosunun BUKRS alanında bulunur. Örnekler 101017102000 | |||
| Tedarikçinin zamanında teslimatı SupplierOnTimeDelivery | Mal girişinin, talep edilen teslimat tarihinde veya bu tarihten önce kaydedilip kaydedilmediğini gösteren hesaplanmış bir işaret. | ||
| Açıklama Bu Boole özniteliği, 'Goods Receipt Posted' etkinliğinin zaman damgası ile 'Requested Delivery Date' karşılaştırılarak hesaplanır. Mal girişi talep edilen tarihte veya daha önce gerçekleşmişse değer 'true' olarak işaretlenir. Bu öznitelik, 'Tedarikçinin zamanında teslimat oranı' temel performans göstergesini (KPI) doğrudan destekler. Zamanında veya geç teslimatları kolayca filtrelemenizi sağlayarak tedarikçi performansı Dashboardları ve tedarikçi puan kartları için gerekli analizleri kolaylaştırır. Neden önemli? Tedarikçi güvenilirliğini doğrudan ölçer; zamanında teslimat temel performans göstergesinin temelini oluşturur ve tedarikçi performansını etkili biçimde yönetmenizi sağlar. Nereden alınır? 'Goods Receipt Posted' etkinliğinin zaman damgası ile 'RequestedDeliveryDate' özniteliği karşılaştırılarak hesaplanır. Örnekler truefalse | |||
| Tesis Plant | Malların teslim edildiği veya hizmetlerin sunulduğu operasyonel tesis ya da konum. | ||
| Açıklama SAP’de tesis, malların üretildiği veya depolandığı ya da hizmetlerin sunulduğu fiziksel konumdur. Lojistik ve planlama açısından temel bir unsurdur. Süreç analizini tesise göre ayırmak, tedarik sürecindeki bölgesel veya tesise özgü farklılıkları ortaya çıkarabilir. Örneğin bazı tesislerde teslimat sürelerinin daha uzun olup olmadığını veya mal iadelerinin daha sık yaşanıp yaşanmadığını göstererek yerel lojistik ya da kalite kontrol sorunlarına işaret edebilir. Neden önemli? Konuma göre analiz yapmanızı ve farklı operasyon noktaları, tesisler veya depolar arasındaki süreç performansı farklarını görmenizi sağlar. Nereden alınır? Bu öznitelik, SAP S/4HANA sisteminde EKPO tablosunun WERKS alanında bulunur. Örnekler 10101710DE01 | |||
| Yeniden çalışma var mı IsRework | Satın alma siparişinde onay sonrası değişiklik veya mal iadesi gibi yeniden çalışma olup olmadığını gösteren hesaplanmış bir işaret. | ||
| Açıklama Bu Boole özniteliği, her satın alma siparişinin etkinlik sırası analiz edilerek hesaplanır. 'Purchase Order Approved' etkinliğinden sonra 'Purchase Order Changed' etkinliği gerçekleşirse veya 'Goods Returned' etkinliği varsa değeri 'true' olarak işaretlenir. Bu işaret, 'Doğrudan işleme oranı' temel performans göstergesinin (KPI) hesaplanmasını kolaylaştırır. Manuel müdahale veya düzeltme gerektiren tüm satın alma siparişlerini kolayca filtreleyip görselleştirmenizi sağlayarak yeniden çalışmanın maliyetini ve sıklığını ölçmenize yardımcı olur. Neden önemli? Yeniden çalışma görülen vakaları işaretleyerek süreç verimsizliğini ölçmenize yardımcı olur. Bu, doğrudan işleme oranlarını hesaplamak ve sapmaların temel nedenlerini belirlemek için önemlidir. Nereden alınır? Etkinlik sırasına göre hesaplanan alan. Mantık, onaydan sonra 'Purchase Order Changed' etkinliğinin gerçekleşip gerçekleşmediğini veya 'Goods Returned' etkinliğinin bulunup bulunmadığını denetler. Örnekler truefalse | |||
| Yetkisiz harcama mı IsMaverickSpend | Satın alma siparişinin öncesinde onaylanmış bir satın alma talebi olmadan oluşturulup oluşturulmadığını gösteren hesaplanmış bir işaret. | ||
| Açıklama Bu Boole işareti, veri işleme sırasında hesaplanır. Satın alma siparişiyle ilişkili bir satın alma talebi yoksa veya sipariş oluşturulurken standart onay iş akışı atlanmışsa değeri 'true' olur. Bu öznitelik, 'Yetkisiz harcama tespiti' Dashboardını ve ilgili temel performans göstergelerini (KPI) doğrudan destekler. Kurallara uymayan satın alma davranışlarının boyutunu ölçmenize yardımcı olur. Böylece kuruluşlar, tedarik politikalarını ve kontrollerini güçlendirmek için belirli departmanları veya kullanıcı gruplarını hedefleyebilir. Neden önemli? Kurallara uymayan satın alma işlemlerini doğrudan belirleyerek süreç sapmalarını ölçmenize, finansal kontrolleri ve tedarik politikalarını uygulamanıza yardımcı olur. Nereden alınır? Belirli belge türlerinde 'PurchaseRequisitionNumber' değerinin bulunmamasına veya olay sırasının analizine dayalı hesaplanmış alan. Örnekler truefalse | |||
Satın Almadan Ödemeye - Satın alma siparişi etkinlikleri
| Aktivite | Açıklama | ||
|---|---|---|---|
| Fatura alındı | Tedarikçi faturasının SAP sistemine girilmesini ve ilgili satın alma siparişiyle ilişkilendirilmesini ifade eder. Muhasebe belgesi oluşturan açık bir finansal kayıttır. | ||
| Neden önemli? Satın alma sürecini borçlar muhasebesi sürecine bağlayan önemli bir aşamadır. Mal kabulü ile fatura işleme arasındaki süreyi analiz etmenizi sağlar. Nereden alınır? BKPF tablosunda muhasebe belgesi (başlık) oluşturulur; kalemleri BSEG veya evrensel günlük ACDOCA’da yer alır. Belge, RSEG tablosunda satın alma siparişiyle ilişkilendirilir. Kaydedin BKPF muhasebe belgesi başlık tablosundaki belge giriş tarihi (CPUDT). Olay türü explicit | |||
| Mal kabulü kaydedildi | Tedarikçiden malların fiziksel olarak teslim alınmasını ve bu teslimatın sisteme kaydedilmesini ifade eder. Satın alma siparişi geçmişini güncelleyen açık bir işlemdir. | ||
| Neden önemli? Bu önemli aşama, tedarikçinin teslim süresini sona erdirir ve faturanın kurum içinde doğrulanması sürecini başlatır. Zamanında teslimat oranlarını izlemek için gereklidir. Nereden alınır? MKPF (başlık) ve MSEG (kalem) tablolarında malzeme belgesi olarak kaydedilir. EKBE satın alma siparişi geçmişi tablosuyla belirli bir hareket türü (ör. 101) üzerinden ilişkilendirilir. Kaydedin EKBE üzerinden ilişkilendirilen MKPF malzeme belgesi başlığındaki kayıt tarihi (BUDAT). Olay türü explicit | |||
| Satın alma siparişi oluşturuldu | Satın alma talebine referans verilerek veya verilmeksizin oluşturulabilen resmî satın alma siparişi belgesinin oluşturulduğunu belirtir. Sipariş belgesi sistemde ilk kez kaydedildiğinde bu olay açıkça kaydedilir. | ||
| Neden önemli? Bu etkinlik, özellikle kurum dışı satın alma analizlerinde sürecin alternatif başlangıç noktası olabilir. Genel sipariş işlem süresini izlemek için temel bir olaydır. Nereden alınır? EKKO satın alma siparişi başlık tablosuna kaydedilir. Belgenin oluşturulma tarihi (AEDAT) ve saati doğrudan bu tabloda tutulur. Kaydedin Satın alma siparişi belgesi için EKKO tablosundaki oluşturma zaman damgası (AEDAT). Olay türü explicit | |||
| Satın alma siparişi onaylandı | Satın alma siparişinin gerekli tüm kurum içi onayları aldığını ve tedarikçiye gönderilmek üzere serbest bırakılabileceğini belirtir. Olay, siparişin serbest bırakma stratejisindeki durum değişikliğinden anlaşılır. | ||
| Neden önemli? Onay verimliliğini ve onay sonrası yeniden çalışmayı ölçmek için önemli bir aşamadır. Siparişin oluşturulmasıyla onaylanması arasındaki süreyi incelemek, kurum içi süreç gecikmelerini ortaya çıkarır. Nereden alınır? EKKO tablosundaki serbest bırakma göstergesinden (FRGKE) anlaşılır. Bu alanın serbest bırakıldı durumuna ne zaman güncellendiğini görmek için değişiklik geçmişi (CDHDR/CDPOS) incelenerek zaman damgası belirlenir. Kaydedin EKKO tablosundaki serbest bırakma göstergesi alanına (FRGKE) ait değişiklik günlüklerinden anlaşılır. Olay türü inferred | |||
| Satın alma siparişi tamamlandı | Bu etkinlik, satın alma siparişi kaleminin lojistik açıdan kapatıldığını belirtir. Teslimat tamamlandı ve son fatura göstergelerinin ikisi de ayarlandığında bu durumdan anlaşılır. | ||
| Neden önemli? Satın alma siparişi yaşam döngüsü analizinin bitiş noktasıdır. Bu olaya kadar geçen süreyi ölçmek, satın alma operasyonlarının uçtan uca çevrim süresini verir. Nereden alınır? EKPO satın alma siparişi kalemi tablosundaki durum göstergelerinden anlaşılır. Teslimat tamamlandı göstergesi (ELIKZ) ile son fatura göstergesi (EREKZ) birlikte etkinleştirildiğinde olay gerçekleşir. Kaydedin EKPO tablosundaki ELIKZ ve EREKZ alanlarının ikisinin de tamamlandı olarak işaretlendiğini gösteren değişiklik günlüklerinden anlaşılır. Olay türü inferred | |||
| Satın alma talebi oluşturuldu | Bu etkinlik, mal veya hizmetler için resmî talebi kaydeder ve satın alma sürecini başlatır. Kullanıcı yeni bir satın alma talebi belgesini kaydettiğinde (ör. ME51N işlemiyle) olay açıkça kaydedilir. | ||
| Neden önemli? Bu, birçok satın alma siparişi yaşam döngüsünün başlangıç noktasıdır. Bu olaydan sipariş oluşturulmasına kadar geçen süreyi incelemek, tedarik ve kurum içi işlemlerdeki gecikmeleri belirlemeye yardımcı olur. Nereden alınır? EBAN tablosuna (satın alma talebi) kaydedilir. Oluşturma olayının zaman damgası, EBAN nesnesine ait CDHDR ve CDPOS değişiklik geçmişi tablolarında bulunabilir. Kaydedin EBAN tablosunda belge oluşturulduğunda olay kaydedilir. Olay türü explicit | |||
| Satın alma talebi onaylandı | Bir yöneticinin veya yetkili onaylayıcının satın alma talebini resmen onayladığını gösterir. Bu durum genellikle talep belgesindeki durum değişikliğinden anlaşılır ve belgenin satın alma siparişine dönüştürülmeye hazır olduğunu belirtir. | ||
| Neden önemli? Onay çevrim sürelerini izlemek ve darboğazları belirlemek için önemli bir aşamadır. Buradaki gecikmeler, satın alma siparişinin ne kadar hızlı oluşturulup tedarikçiye gönderileceğini doğrudan etkiler. Nereden alınır? EBAN tablosundaki serbest bırakma durumu alanlarından (ör. FRGZU, serbest bırakma göstergesi) anlaşılır. Zaman damgası, son serbest bırakma durumunun ne zaman ayarlandığını kaydeden CDHDR/CDPOS değişiklik belgelerinden elde edilir. Kaydedin EBAN tablosundaki serbest bırakma durumu alanlarına ait değişiklik günlüklerinden (CDHDR/CDPOS) anlaşılır. Olay türü inferred | |||
| Fatura ödendi | Tedarikçi faturasının ödeme çalıştırması veya manuel ödeme yoluyla kapatıldığını belirtir. Mahsup belgesi oluşturan açık bir finansal işlemdir. | ||
| Neden önemli? Teknik olarak ödeme sürecinin bir parçası olsa da bu etkinliği dâhil etmek, satın almadan ödemeye döngüsünü bütünüyle görmenizi sağlar. Ödeme koşullarını ve performansını analiz etmek için önemlidir. Nereden alınır? Ödeme, BKPF/ACDOCA’da mahsup belgesi olarak kaydedilir. BSEG veya ACDOCA tablosundaki fatura kaleminin mahsup tarihi (AUGDT), ödeme olayını gösterir. Kaydedin BSEG veya ACDOCA’da bulunan fatura belgesinin mahsup tarihi (AUGDT). Olay türü explicit | |||
| Hizmet teyidi girildi | Bu etkinlik, satın alma siparişinde belirtilen hizmetin sunulduğunun teyit edildiğini gösterir. Hizmet giriş belgesi oluşturulduğunda açıkça kaydedilir. | ||
| Neden önemli? Hizmet alımlarında bu etkinlik, mal kabulüne karşılık gelir. Hizmet teslimat sürelerini izlemek ve tedarikçiye zamanında ödeme yapılmasını sağlamak için önemlidir. Nereden alınır? ESSR (başlık) ve ESLL (kalemler) tablolarında tutulan verilerle hizmet giriş belgesi oluşturulduğunda kaydedilir. Oluşturulma tarihi zaman damgası olarak kullanılır. Kaydedin ESSR tablosundaki Hizmet Giriş Belgesi’nin oluşturulma tarihi. Olay türü explicit | |||
| Mallar iade edildi | Daha önce teslim alınan malların genellikle kalite sorunları, hasar veya yanlış sevkiyat nedeniyle tedarikçiye iade edildiğini gösterir. Bu durum, mal hareketinin açık bir ters kaydı olarak tutulur. | ||
| Neden önemli? Bu etkinlik, yeniden çalışmayı ve tedarikçi kalitesi ya da sipariş doğruluğuyla ilgili olası sorunları ortaya çıkarır. Belirli bir tedarikçi veya malzeme için iadelerin sık olması soruna işaret eder. Nereden alınır? Belirli bir iade hareket türüyle (ör. 122) malzeme belgesi olarak kaydedilir. Olay MKPF/MSEG tablolarında tutulur ve EKBE geçmiş tablosunda satın alma siparişiyle ilişkilendirilir. Kaydedin EKBE’de iade hareket türüyle kaydedilen malzeme belgesinin kayıt tarihi. Olay türü explicit | |||
| Satın alma siparişi değiştirildi | Bu etkinlik, satın alma siparişinin ilk oluşturulmasından sonra miktar, fiyat veya teslimat tarihi gibi bir bilginin değiştirildiğini gösterir. Değişiklik sistem günlüklerine açıkça kaydedilir. | ||
| Neden önemli? Özellikle onay sonrasındaki değişiklikleri izlemek, süreç verimsizliklerini, yeniden çalışmayı ve olası uyumluluk sorunlarını belirlemek için önemlidir. Sık değişiklik yapılması, ilk tanımların yetersiz olduğuna işaret edebilir. Nereden alınır? Satın alma siparişi nesnelerine (EINKBELEG) ait CDHDR (başlık) ve CDPOS (kalem) değişiklik belgesi tablolarına kaydedilir. Her değişiklik ayrıntılı bir günlük kaydı oluşturur. Kaydedin EKKO veya EKPO tablolarındaki temel alanlarda yapılan değişiklikler için olay kaydı CDHDR/CDPOS tablolarında tutulur. Olay türü explicit | |||
| Satın alma siparişi silindi | Bir satın alma siparişi kaleminin veya belgenin tamamının iptal edilmesini ya da mantıksal olarak silinmesini ifade eder. Kullanıcı belgede silme göstergesini ayarladığında kaydedilir. | ||
| Neden önemli? Bu etkinlik, sürecin başarısızlık veya iptale işaret eden alternatif bitiş noktasıdır. Siparişlerin neden silindiğini incelemek, talep planlama veya gereksinim tanımlama sorunlarını ortaya çıkarabilir. Nereden alınır? Satın alma siparişi başlık (EKKO) veya kalem (EKPO) tablolarındaki silme göstergesi (LOEKZ) üzerinden alınır. Zaman damgası, değişiklik belgelerinden (CDHDR/CDPOS) elde edilir. Kaydedin Silme göstergesinin (LOEKZ) ayarlandığı anı gösteren değişiklik belgelerindeki (CDHDR/CDPOS) zaman damgası. Olay türü explicit | |||
| Satın alma siparişi tedarikçiye gönderildi | Satın alma siparişinin EDI, e-posta veya basılı belge gibi bir yolla tedarikçiye iletildiği anı gösterir. Bu olay genellikle sistemin çıktı yönetimi günlüklerinden alınır. | ||
| Neden önemli? Bu etkinlik, tedarikçinin teslim süresinin gerçek başlangıcıdır. Siparişin tedarikçiye ulaştığı andan itibaren performansını doğru ölçmek için önemlidir. Nereden alınır? Satın alma belgeleri için gönderilen iletileri kaydeden NAST çıktı denetimi tablosundan alınır. İlgili çıktı türünün (ör. EDI, e-posta) tarih ve saati kullanılabilir. Kaydedin NAST tablosunda satın alma siparişi için kaydedilen ilk başarılı çıktı iletisinin zaman damgası. Olay türü inferred | |||
Veri çıkarma rehberleri
Adımlar
- Ön koşullar ve erişim: SAP S/4HANA sistemindeki Core Data Services (CDS) görünümlerini sorgulamak için gerekli yetkilere sahip bir kullanıcınız olduğundan emin olun. Erişim için SAP HANA Studio, Eclipse için ABAP Development Tools (ADT) veya SAP HANA veritabanına SQL bağlantılarını destekleyen üçüncü taraf bir veri çıkarma aracı kullanabilirsiniz.
- Sistem bağlantı bilgilerini belirleyin: SAP S/4HANA sisteminiz için ana makine, örnek numarası ve kimlik doğrulama bilgileri dahil gerekli bağlantı parametrelerini edinin.
- Veritabanına bağlanın: Tercih ettiğiniz SQL istemcisini kullanarak CDS görünümlerinin bulunduğu SAP S/4HANA veritabanına bağlanın.
- SQL sorgusunu hazırlayın: Bu belgenin sorgu bölümünde verilen SQL sorgusunun tamamını kopyalayıp SQL düzenleyicinize yapıştırın. Sorgu, gerekli tüm etkinlikleri ve öznitelikleri çıkarmak üzere tasarlanmıştır.
- Filtreleme parametrelerini ayarlayın: Sorgudaki yer tutucu değerleri bulun. _start_date ve _end_date değerlerini analiz etmek istediğiniz tarih aralığıyla değiştirin (ör. '20230101' ve '20231231'). Analiz etmek istediğiniz şirket kodlarını eklemek için poh.CompanyCode filtresini düzenleyin.
- Sorguyu çalıştırın: Düzenlediğiniz SQL sorgusunu S/4HANA veritabanında çalıştırın. Veri hacmine ve belirttiğiniz tarih aralığına bağlı olarak sorgunun tamamlanması zaman alabilir.
- İlk sonuçları inceleyin: Sorgu tamamlandığında SQL istemcinizdeki çıktıyı kısaca gözden geçirin. Farklı etkinliklerin bulunduğunu, zaman damgalarının doğru şekilde doldurulduğunu ve vaka kimliğinin (PurchaseOrderNumber) tutarlı olduğunu kontrol edin.
- Verileri dışa aktarın: Sonuç kümesinin tamamını SQL aracınızdan CSV (virgülle ayrılmış değerler) dosyasına aktarın. Karakter sorunlarını önlemek için dosyanın UTF-8 kodlamasını kullandığından emin olun.
- Yükleme için hazırlanın: ProcessMind’e yüklemeden önce CSV dosyasını açın ve sütun başlıklarının veri gereksinimlerinde tanımlanan özniteliklerle (PurchaseOrderNumber, ActivityName, EventTime vb.) tam olarak eşleştiğini doğrulayın. Dışa aktarma aracınız sütun adlarını değiştirdiyse düzeltin.
- ProcessMind’e yükleyin: Son halini verdiğiniz CSV dosyasını ProcessMind projenize yükleyin. İçe aktarma sırasında dosyanızdaki sütunları ilgili vaka kimliği, etkinlik ve zaman damgası alanlarıyla eşleştirin.
Yapılandırma
- Kullanılan temel CDS görünümleri: Veri çıkarma mantığı, anlamsal açıdan zengin standart CDS görünümlerinden yararlanır. Başlıca görünümler şunlardır:
- I_PurchaseOrderItemAPI01: Temel satın alma siparişi kalem verileri için.
- I_PurchaseRequisitionItemAPI01: Satın alma talebi ayrıntıları için.
- I_MaterialDocumentItem: Mal girişi ve iade gibi mal hareketleri için.
- I_ServiceEntrySheetAPI01: Hizmet onay etkinlikleri için.
- I_SupplierInvoiceAPI01: Tedarikçi faturası bilgileri için.
- I_OperationalAcctgDocItem: Ödeme takibi için faturaları finansal belgelere bağlamak üzere.
- I_ChangeDocument: Satın alma siparişindeki değişiklikleri kaydetmek için.
- Tarih aralığı filtresi: Performansı ve veri hacmini yönetmek için tarih aralığı filtresi uygulamak büyük önem taşır. Sorguda, satın alma siparişinin oluşturulma tarihi (PurchaseOrderDate) için _start_date ve _end_date yer tutucuları kullanılır. Başlangıç için 3 ila 6 aylık veri önerilir.
- Kuruluş filtreleri: Veri çıkarma kapsamını ilgili iş birimleriyle sınırlamak için sorguda her zaman CompanyCode filtresi kullanılmalıdır. Daha ayrıntılı filtreleme için ana PO_base ortak tablo ifadesine PurchaseOrderType veya PurchasingOrganization filtreleri eklenebilir.
- Ön koşullar: Sorguyu çalıştıran kullanıcının yukarıda listelenen tüm CDS görünümlerinde SELECT yetkisi olmalıdır. Bu görünümlere erişim genellikle S/4HANA’daki belirli iş veya analitik rolleri üzerinden verilir. Gerekli izinler yoksa sorgu çalışmaz.
Örnek sorgu sql
WITH PO_base AS (
SELECT
poh.PurchaseOrder AS PurchaseOrderNumber,
poi.PurchaseOrderItem AS PurchaseOrderItem,
poh.CompanyCode,
poh.PurchaseOrderType AS DocumentType,
poh.Supplier AS VendorId,
poh.PurchaseOrderDate,
poi.PurchaseRequisition AS PurchaseRequisitionNumber,
poi.NetPriceAmount * poi.OrderQuantity AS TotalNetAmount, -- Note: This is item-level net amount
poh.CreationDate AS POCreationDate,
poh.CreationTime AS POCreationTime,
poh.LastChangeDateTime AS POLastChangeDateTime,
poi.IsDeleted,
poi.DeliveryIsCompleted,
poi.FinalInvoiceIsExpected,
poi.GoodsReceiptIsExpected,
poi.LastGoodsReceiptDate,
poi.LastInvoiceReceiptDate
FROM I_PurchaseOrderAPI01 poh
JOIN I_PurchaseOrderItemAPI01 poi
ON poh.PurchaseOrder = poi.PurchaseOrder
WHERE
poh.PurchaseOrderDate BETWEEN '_start_date' AND '_end_date' -- Placeholder: e.g., '20230101' and '20230630'
AND poh.CompanyCode IN ('[YourCompanyCode]') -- Placeholder: e.g., '1010'
)
-- 1. Purchase Requisition Created
SELECT
po.PurchaseOrderNumber,
'Purchase Requisition Created' AS ActivityName,
CAST(CONCAT(pr.CreationDate, 'T', pr.CreationTime) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem, -- Placeholder
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
pr.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate, -- Available in PR, add if needed
po.DocumentType
FROM I_PurchaseRequisitionItemAPI01 pr
JOIN PO_base po
ON pr.PurchaseRequisition = po.PurchaseRequisitionNumber AND pr.PurchaseRequisitionItem = po.PurchaseOrderItem
UNION ALL
-- 2. Purchase Requisition Approved
SELECT
po.PurchaseOrderNumber,
'Purchase Requisition Approved' AS ActivityName,
CAST(CONCAT(pr.PurReqnReleaseDate, 'T', '000000') AS TIMESTAMP) AS EventTime, -- Time is not available in this view
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
NULL AS UserName, -- Approver info requires complex joins
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_PurchaseRequisitionItemAPI01 pr
JOIN PO_base po
ON pr.PurchaseRequisition = po.PurchaseRequisitionNumber AND pr.PurchaseRequisitionItem = po.PurchaseOrderItem
WHERE
pr.PurReqnReleaseDate IS NOT NULL
UNION ALL
-- 3. Purchase Order Created
SELECT
po.PurchaseOrderNumber,
'Purchase Order Created' AS ActivityName,
CAST(CONCAT(po.POCreationDate, 'T', po.POCreationTime) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
poh.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
poi.RequestedDeliveryDate,
po.DocumentType
FROM PO_base po
JOIN I_PurchaseOrderAPI01 poh ON po.PurchaseOrderNumber = poh.PurchaseOrder
JOIN I_PurchaseOrderItemAPI01 poi ON po.PurchaseOrderNumber = poi.PurchaseOrder AND po.PurchaseOrderItem = poi.PurchaseOrderItem
UNION ALL
-- 4. Purchase Order Approved
SELECT DISTINCT
po.PurchaseOrderNumber,
'Purchase Order Approved' AS ActivityName,
CAST(poh.ReleaseDate AS TIMESTAMP) AS EventTime, -- Assuming ReleaseDate reflects final approval
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
NULL AS UserName, -- Approver info requires complex joins
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
poi.RequestedDeliveryDate,
po.DocumentType
FROM PO_base po
JOIN I_PurchaseOrderAPI01 poh ON po.PurchaseOrderNumber = poh.PurchaseOrder
JOIN I_PurchaseOrderItemAPI01 poi ON po.PurchaseOrderNumber = poi.PurchaseOrder AND po.PurchaseOrderItem = poi.PurchaseOrderItem
WHERE poh.ReleaseDate IS NOT NULL
UNION ALL
-- 5. Purchase Order Sent to Vendor
SELECT DISTINCT
po.PurchaseOrderNumber,
'Purchase Order Sent to Vendor' AS ActivityName,
CAST(poh.ReleaseDate AS TIMESTAMP) AS EventTime, -- Using ReleaseDate as a proxy for sending time
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
NULL AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
poi.RequestedDeliveryDate,
po.DocumentType
FROM PO_base po
JOIN I_PurchaseOrderAPI01 poh ON po.PurchaseOrderNumber = poh.PurchaseOrder
JOIN I_PurchaseOrderItemAPI01 poi ON po.PurchaseOrderNumber = poi.PurchaseOrder AND po.PurchaseOrderItem = poi.PurchaseOrderItem
WHERE poh.ReleaseDate IS NOT NULL
UNION ALL
-- 6. Purchase Order Changed
SELECT DISTINCT
ch.OBJECTID AS PurchaseOrderNumber,
'Purchase Order Changed' AS ActivityName,
CAST(CONCAT(ch.ChangeDocumentDate, 'T', ch.ChangeDocumentTime) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
ch.UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_ChangeDocument ch
JOIN PO_base po ON ch.OBJECTID = po.PurchaseOrderNumber
WHERE
ch.ObjectClassName = 'EINKBELEG' -- Object Class for Purchase Documents
AND CAST(CONCAT(ch.ChangeDocumentDate, 'T', ch.ChangeDocumentTime) AS TIMESTAMP) > CAST(CONCAT(po.POCreationDate, 'T', po.POCreationTime) AS TIMESTAMP)
UNION ALL
-- 7. Goods Receipt Posted
SELECT
po.PurchaseOrderNumber,
'Goods Receipt Posted' AS ActivityName,
CAST(CONCAT(md.PostingDate, 'T', md.CreationTime) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
md.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_MaterialDocumentItem md
JOIN PO_base po
ON md.PurchaseOrder = po.PurchaseOrderNumber AND md.PurchaseOrderItem = po.PurchaseOrderItem
WHERE
md.GoodsMovementType = '101'
UNION ALL
-- 8. Services Confirmation Entered
SELECT
po.PurchaseOrderNumber,
'Services Confirmation Entered' AS ActivityName,
CAST(se.PostingDate AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
se.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_ServiceEntrySheetAPI01 se
JOIN PO_base po
ON se.PurchaseOrder = po.PurchaseOrderNumber AND se.PurchaseOrderItem = po.PurchaseOrderItem
UNION ALL
-- 9. Goods Returned
SELECT
po.PurchaseOrderNumber,
'Goods Returned' AS ActivityName,
CAST(CONCAT(md.PostingDate, 'T', md.CreationTime) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
md.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_MaterialDocumentItem md
JOIN PO_base po
ON md.PurchaseOrder = po.PurchaseOrderNumber AND md.PurchaseOrderItem = po.PurchaseOrderItem
WHERE
md.GoodsMovementType = '122'
UNION ALL
-- 10. Invoice Received
SELECT
po.PurchaseOrderNumber,
'Invoice Received' AS ActivityName,
CAST(inv.PostingDate AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
inv.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_SupplierInvoiceAPI01 inv
JOIN PO_base po
ON inv.PurchaseOrderReference = po.PurchaseOrderNumber
WHERE
inv.DebitCreditCode = 'H' -- 'H' for Credit (Supplier Invoice)
UNION ALL
-- 11. Invoice Paid
SELECT
po.PurchaseOrderNumber,
'Invoice Paid' AS ActivityName,
CAST(doc.ClearingDate AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
doc.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_SupplierInvoiceAPI01 inv
JOIN I_OperationalAcctgDocItem doc
ON inv.AccountingDocument = doc.AccountingDocument
JOIN PO_base po
ON inv.PurchaseOrderReference = po.PurchaseOrderNumber
WHERE
doc.IsCleared = 'X' AND doc.ClearingDate IS NOT NULL
UNION ALL
-- 12. Purchase Order Completed
SELECT
po.PurchaseOrderNumber,
'Purchase Order Completed' AS ActivityName,
CAST(GREATEST(po.LastGoodsReceiptDate, po.LastInvoiceReceiptDate) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
'SYSTEM' AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM PO_base po
WHERE
po.DeliveryIsCompleted = 'X'
AND (po.FinalInvoiceIsExpected = 'X' OR po.GoodsReceiptIsExpected = '') -- Logic for completion
AND GREATEST(po.LastGoodsReceiptDate, po.LastInvoiceReceiptDate) IS NOT NULL
UNION ALL
-- 13. Purchase Order Deleted
SELECT
po.PurchaseOrderNumber,
'Purchase Order Deleted' AS ActivityName,
CAST(po.POLastChangeDateTime AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
NULL AS UserName, -- User who set the flag is in change docs
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM PO_base po
WHERE
po.IsDeleted = 'X' Adımlar
- EKKO ve EKPO tablolarını içeren SAP HANA şemasına doğrudan SQL erişiminiz olduğunu doğrulayın ve gerekli okuma yetkilerini alın. Şema ve bağlantı yer tutucularını sisteminizde yapılandırılmış değerlerle değiştirin.
- Veri çıkarma aralığını [Start timestamp] ve [End timestamp] alanlarını kullanarak belirleyin. İlk yükleme için üç ila altı aylık bir aralık önerilir. Şirket kodu ve belge türü filtrelerini yalnızca raporlama kapsamı gerektiriyorsa uygulayın.
- EKKO ve EKPO tablolarındaki satın alma siparişlerini belirleyin. Satın alma siparişi numarasını, tedarikçiyi, belge türünü, şirket kodunu, oluşturulma tarihini ve saatini, ayrıca kalem düzeyindeki öznitelikleri koruyun. Sipariş düzeyinde TotalNetAmount değerini hesaplamak için EKPO net değerlerini toplayın.
- EBAN tablosundan satın alma talebi oluşturma ve onay etkinliklerini çıkarın. Talepleri satın alma siparişleriyle ilişkilendirmek için EKPO’da bulunan satın alma talebi numarasını ve kalem referansını kullanın. Talep onay göstergeleri ve zaman damgaları sürüm yapılandırmasına göre değiştiğinden, onay durumu ve zaman damgası ifadelerini [Configure based on your system] bölümünde etkin SAP sürüm stratejinize göre yapılandırın.
- Satın alma siparişi oluşturma, onaylama, değiştirme, silme ve tamamlama etkinliklerini çıkarın. Oluşturma etkinliği için EKKO oluşturulma tarihini ve saatini kullanın. Onaylama, değiştirme ve silme etkinlikleri için onay veya değişiklik geçmişi kaynakları gerekir. İlgili geçmiş seçilen şemada sunulmuyorsa, karşılık gelen kaynak ifadelerini [Your table name] ve [Your column name] alanlarını kullanarak yapılandırın.
- Tedarikçi iletişimi, mal girişi, hizmet onayı, mal iadesi, fatura girişi ve fatura ödemesi etkinliklerini ilgili çıktı, malzeme belgesi, hizmet girişi, fatura, muhasebe ve mahsup kaynaklarından çıkarın. Bu kaynaklar yalnızca EKKO ve EKPO ile temsil edilmediğinden sorguda sisteme özgü nesneler için açık yer tutucular bulunur.
- Her kaynak etkinliğini aynı olay günlüğü yapısına dönüştürün. Her satırda PurchaseOrderNumber, ActivityName, EventTime, SourceSystem, LastDataUpdate, VendorId, UserName, TotalNetAmount, PurchaseRequisitionNumber, RequestedDeliveryDate ve DocumentType bulunmalıdır. Kaynakta bir etkinliğin birden fazla geçerli kaydı varsa bunların tümünü koruyun.
- Zaman damgalarını doğrulayın, yalnızca tamamen aynı kaynak satırlarını kaldırın ve kaynak kaydı olmayan etkinlikleri varsaymayın. ProcessMind olay günlüğünü olduğu gibi okur. Bu nedenle süreç görselleştirmesinde gösterilen her etkinlik açık bir satır olarak bulunmalıdır.
- Sonuçları tek başlık satırı ve tutarlı sütun adları içeren, ayraçlı bir dosya veya veritabanı sonuç kümesi olarak dışa aktarın. ProcessMind yükleme yapılandırmasının desteklediği bir zaman damgası biçimi kullanın, PurchaseOrderNumber değerini metin olarak koruyun ve olay günlüğünün tamamını yapılandırılmış ProcessMind veri bağlantısı üzerinden yükleyin.
Yapılandırma
- Kaynak nesneler: EKKO ve EKPO, satın alma siparişi başlık ve kalem verileri için doğrulanmış kaynaklardır. Talepler, onay durumu, değişiklik geçmişi, çıktı, mal hareketleri, hizmet giriş belgeleri, faturalar, ödemeler ve mahsuplar için gereken ek nesneler, SAP S/4HANA sürümüne ve etkin veri modeline göre yapılandırılmalıdır.
- Vaka tanımlayıcısı: Vaka tanımlayıcısı olarak PurchaseOrderNumber kullanın. Kalem düzeyindeki etkinlikleri satın alma siparişi numarasıyla ilişkilendirin. Gerekirse kalem referanslarını kaynağa özgü ek bir sütunda saklayın.
- Tarih aralığı: Üç ila altı ayla başlayın. Geçmiş verileri yüklerken eksik kayıtları önlemek için daha küçük aralıklarla ilerleyin ve çakışan sınırları uzlaştırın.
- Filtreler: Şirket kodu, belge türü, VendorId, satın alma organizasyonu, satın alma grubu ve etkinlik tarihi filtrelerini gereken kapsama göre yapılandırın. Şirket kodu ve belge türü filtrelerinde hedef sistemde geçerli değerler kullanın.
- Etkinlik anlamı: İlgili belge alanları veya günlükler mevcutsa oluşturma ve silme etkinlikleri açıkça belirlenebilir. Onaylama ve tamamlama, durum temelli etkinliklerdir ve yapılandırılmış durum zaman damgaları gerektirir. Savunulabilir bir etkinlik zaman damgası olmadan yalnızca mevcut duruma dayanarak satır oluşturmayın.
- Performans: Etkinlik tarihine ve kuruluş kapsamına göre filtreleri erken uygulayın, mümkün olduğunda olay kaynaklarına katılmadan önce EKPO verilerini toplayın ve büyük geçmiş veri yüklemelerini zaman aralıklarına bölün. Uygun veritabanı istatistiklerinin bulunduğundan emin olun; kalem, muhasebe ve değişiklik geçmişi kaynakları arasında kısıtlanmamış birleştirmelerden kaçının.
- Yenileme zaman damgası: Her çalıştırmadaki tüm satırlar için LastDataUpdate alanına veri çıkarma işleminin yürütüldüğü zamanı yazın.
- Ön koşullar: Gerekli ön koşullar arasında SAP HANA bağlantısı, yapılandırılmış tüm kaynak nesneleri için okuma yetkisi, ilgili satın alma, envanter yönetimi, hizmet tedariki, fatura doğrulama ve borçlar muhasebesi verilerine erişim ve seçilen dosyayı veya sonuç kümesini içe aktarabilen bir ProcessMind bağlantısı bulunur.
- Sisteme özgü yapılandırma: Sorgudaki köşeli parantez içindeki tüm kaynak yer tutucularını hedef SAP S/4HANA sisteminde onaylanmış bir tablo, görünüm, sütun veya ifadeyle değiştirin. Kimlik bilgilerini sorguda veya veri çıkarma yapılandırmasında göstermeyin.
Örnek sorgu sql
WITH
params AS (
SELECT
CAST('[Start timestamp]' AS TIMESTAMP) AS start_ts,
CAST('[End timestamp]' AS TIMESTAMP) AS end_ts,
CAST(CURRENT_TIMESTAMP AS TIMESTAMP) AS last_data_update,
CAST('[Source system]' AS NVARCHAR(100)) AS source_system
FROM DUMMY
),
po_base AS (
SELECT
h.MANDT,
h.EBELN AS PurchaseOrderNumber,
h.LIFNR AS VendorId,
h.BSART AS DocumentType,
h.BUKRS AS CompanyCode,
CAST(h.AEDAT AS DATE) AS POChangedDate,
CAST(h.AEDAT AS TIMESTAMP) AS POChangedTimestamp,
CAST(h.ERNAM AS NVARCHAR(100)) AS POCreatedBy,
CAST(h.BEDAT AS DATE) AS PODate,
CAST(h.EBELN AS NVARCHAR(20)) AS PurchaseOrderKey,
CAST(SUM(COALESCE(i.NETWR, 0)) AS DECIMAL(23, 2)) AS TotalNetAmount,
CAST(MIN(i.BEDNR) AS NVARCHAR(20)) AS PurchaseRequisitionNumber,
CAST(MIN(i.EINDT) AS DATE) AS RequestedDeliveryDate
FROM EKKO h
INNER JOIN EKPO i
ON i.MANDT = h.MANDT
AND i.EBELN = h.EBELN
WHERE h.AEDAT >= (SELECT start_ts FROM params)
AND h.AEDAT < (SELECT end_ts FROM params)
AND h.BUKRS IN ([Company Code filter])
AND h.BSART IN ([Document Type filter])
GROUP BY
h.MANDT,
h.EBELN,
h.LIFNR,
h.BSART,
h.BUKRS,
h.AEDAT,
h.ERNAM,
h.BEDAT
),
po_items AS (
SELECT
i.MANDT,
i.EBELN AS PurchaseOrderNumber,
i.EBELP,
i.BANFN AS PurchaseRequisitionNumber,
i.BEDNR,
i.EINDT AS RequestedDeliveryDate
FROM EKPO i
),
events AS (
SELECT
p.PurchaseOrderNumber,
'Purchase Requisition Created' AS ActivityName,
CAST(r.[Purchase requisition creation timestamp] AS TIMESTAMP) AS EventTime,
s.source_system AS SourceSystem,
s.last_data_update AS LastDataUpdate,
p.VendorId,
CAST(r.[Purchase requisition created by] AS NVARCHAR(100)) AS UserName,
p.TotalNetAmount,
CAST(r.[Purchase requisition number] AS NVARCHAR(20)) AS PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your requisition source table or view] r
ON r.[Client] = p.MANDT
AND r.[Purchase requisition number] = p.PurchaseRequisitionNumber
CROSS JOIN params s
WHERE r.[Purchase requisition creation timestamp] >= s.start_ts
AND r.[Purchase requisition creation timestamp] < s.end_ts
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Requisition Approved' AS ActivityName,
CAST(r.[Purchase requisition approval timestamp] AS TIMESTAMP) AS EventTime,
s.source_system,
s.last_data_update,
p.VendorId,
CAST(r.[Purchase requisition approver] AS NVARCHAR(100)),
p.TotalNetAmount,
CAST(r.[Purchase requisition number] AS NVARCHAR(20)),
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your requisition approval history table or view] r
ON r.[Client] = p.MANDT
AND r.[Purchase requisition number] = p.PurchaseRequisitionNumber
CROSS JOIN params s
WHERE r.[Purchase requisition approval timestamp] >= s.start_ts
AND r.[Purchase requisition approval timestamp] < s.end_ts
AND r.[Approval status] = '[Approved status value]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Created',
CAST(p.PODate AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
p.POCreatedBy,
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
CROSS JOIN params s
WHERE p.PODate >= CAST(s.start_ts AS DATE)
AND p.PODate < CAST(s.end_ts AS DATE)
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Approved',
CAST(a.[Purchase order approval timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(a.[Approver] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your purchase order release history table or view] a
ON a.[Client] = p.MANDT
AND a.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE a.[Purchase order approval timestamp] >= s.start_ts
AND a.[Purchase order approval timestamp] < s.end_ts
AND a.[Release status] = '[Approved release status value]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Sent to Vendor',
CAST(o.[Output timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(o.[Output user] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your purchase order output source table or view] o
ON o.[Client] = p.MANDT
AND o.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE o.[Output timestamp] >= s.start_ts
AND o.[Output timestamp] < s.end_ts
AND o.[Output status] = '[Successfully processed output status]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Changed',
CAST(c.[Change timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(c.[Changed by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your purchase order change history table or view] c
ON c.[Client] = p.MANDT
AND c.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE c.[Change timestamp] >= s.start_ts
AND c.[Change timestamp] < s.end_ts
AND c.[Change indicator] = '[Changed indicator value]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Goods Receipt Posted',
CAST(g.[Goods movement timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(g.[Posted by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your goods movement source table or view] g
ON g.[Client] = p.MANDT
AND g.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE g.[Goods movement timestamp] >= s.start_ts
AND g.[Goods movement timestamp] < s.end_ts
AND g.[Movement type] IN ([Goods receipt movement types])
AND g.[Reversal indicator] IS NULL
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Services Confirmation Entered',
CAST(v.[Service entry timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(v.[Entered by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your service entry sheet source table or view] v
ON v.[Client] = p.MANDT
AND v.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE v.[Service entry timestamp] >= s.start_ts
AND v.[Service entry timestamp] < s.end_ts
AND v.[Service entry status] = '[Accepted service entry status]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Goods Returned',
CAST(g.[Goods movement timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(g.[Posted by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your goods movement source table or view] g
ON g.[Client] = p.MANDT
AND g.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE g.[Goods movement timestamp] >= s.start_ts
AND g.[Goods movement timestamp] < s.end_ts
AND g.[Movement type] IN ([Goods return movement types])
AND g.[Reversal indicator] IS NULL
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Invoice Received',
CAST(i.[Invoice posting timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(i.[Posted by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your supplier invoice source table or view] i
ON i.[Client] = p.MANDT
AND i.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE i.[Invoice posting timestamp] >= s.start_ts
AND i.[Invoice posting timestamp] < s.end_ts
AND i.[Invoice status] = '[Posted invoice status]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Invoice Paid',
CAST(i.[Clearing timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(i.[Cleared by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your supplier invoice clearing source table or view] i
ON i.[Client] = p.MANDT
AND i.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE i.[Clearing timestamp] >= s.start_ts
AND i.[Clearing timestamp] < s.end_ts
AND i.[Clearing status] = '[Cleared status value]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Completed',
CAST(x.[Completion timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(x.[Completion user] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your purchase order item status source table or view] x
ON x.[Client] = p.MANDT
AND x.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE x.[Completion timestamp] >= s.start_ts
AND x.[Completion timestamp] < s.end_ts
AND x.[Delivery completed indicator] = '[Set indicator value]'
AND x.[Final invoice indicator] = '[Set indicator value]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Deleted',
CAST(d.[Deletion timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(d.[Deleted by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your purchase order deletion history table or view] d
ON d.[Client] = p.MANDT
AND d.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE d.[Deletion timestamp] >= s.start_ts
AND d.[Deletion timestamp] < s.end_ts
AND d.[Deletion indicator] = '[Set deletion indicator value]'
)
SELECT
PurchaseOrderNumber,
ActivityName,
EventTime,
SourceSystem,
LastDataUpdate,
VendorId,
UserName,
TotalNetAmount,
PurchaseRequisitionNumber,
RequestedDeliveryDate,
DocumentType
FROM events
WHERE PurchaseOrderNumber IS NOT NULL
AND ActivityName IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY PurchaseOrderNumber, EventTime, ActivityName; Adımlar
- Gereksinimleri belirleme ve tasarım: Gerekli ve önerilen tüm öznitelikleri içeren olay günlüğü dosyasının nihai veri yapısını tanımlayın. Gerekli 13 etkinliğin her biri için kullanılacak SAP tablolarını (ör. EKKO, EKPO, EKBE, CDHDR, CDPOS, BKPF) belgeleyin.
- Program oluşturma: SAP GUI’de SE38 veya SE80 işlem kodunu kullanarak ABAP Düzenleyicisi’ne gidin. Örneğin Z_PM_PO_EXTRACT adında yeni bir çalıştırılabilir program oluşturun.
- Seçim ekranını tanımlama: Raporun seçim ekranını kodlayın. Bu ekran, kullanıcıların çıkarılacak verileri filtrelemesini sağlar. Satın alma siparişi oluşturulma tarih aralığı (P_AEDAT), şirket kodu (P_BUKRS) ve satın alma belgesi türü (P_BSART) için parametreler ekleyin.
- Veri tanımları: Program için gereken dahili tabloları ve veri yapılarını tanımlayın. Buna, gereksinim belirleme adımında tanımlanan yapıyla eşleşen nihai olay günlüğü için bir dahili tablo da dahildir.
- Veri seçme mantığını uygulama: Gerekli 13 etkinliğin her biri için veri seçecek temel ABAP mantığını yazın. Bunun için ilgili SAP tablolarında gerektiğinde birleştirmeler içeren bir dizi SELECT ifadesi kullanın. Değişikliğe dayalı etkinlikler için CDHDR ve CDPOS değişiklik günlüğü tablolarını okuyun.
- Verileri dönüştürme ve eşleme: Alınan her kayıt için SAP tablo alanlarını nihai olay günlüğü dahili tablosundaki karşılık gelen sütunlarla eşleyin. İşlenen etkinliğe göre ActivityName değerini belirleyin (ör. 'Purchase Order Created'). EventTime için tarih ve saat alanlarını tutarlı bir zaman damgası biçimine dönüştürün.
- Olay verilerini birleştirme: 13 etkinlik türünün tümünü işledikten sonra verilerin tek bir birleşik dahili tabloda toplandığından emin olun. Bu tablo, seçilen satın alma siparişlerinin olay günlüğünün tamamını içerir.
- Dosya çıktısını uygulama: Nihai dahili tabloyu dosyaya yazma işlevi ekleyin. Kullanıcıların dosyayı yerel bilgisayarlarına CSV olarak kaydetmesi için cl_gui_frontend_services=>gui_download yöntemini kullanmanız önerilir. Arka plan işlemleri için dosyayı SAP uygulama sunucusuna kaydetmek üzere OPEN DATASET kullanabilirsiniz.
- İşlem kodu oluşturma (isteğe bağlı): Programı iş kullanıcılarının kolayca kullanabilmesi için SE93 işlem kodunu kullanarak ABAP programınızı çalıştıran özel bir işlem kodu (ör. ZPM_PO_EXTRACT) oluşturun.
- Arka plan işi planlama: Büyük veri hacimleri veya otomatik veri çıkarma işlemleri için programı arka plan işi olarak planlamak üzere SM36 işlem kodunu kullanın. Çıktı dosyası, program mantığında belirtilen uygulama sunucusu yoluna yazılır.
Yapılandırma
- Seçim ölçütleri: Programda verileri etkili biçimde filtrelemek için seçim parametreleri bulunmalıdır. Temel filtreler şunlardır:
- Tarih aralığı: Satın alma siparişinin oluşturulma tarihi (EKKO-AEDAT) için zorunlu bir tarih aralığı belirleyin. Veri hacmini ve rapor performansını yönetmek için 3-6 aylık bir dönemle başlamanız önerilir.
- Şirket kodu (BUKRS): Birden fazla tüzel kişiliği olan kuruluşlarda veri çıkarma kapsamını daraltmak için gereklidir.
- Satın alma belgesi türü (BSART): Analizi belirli satın alma siparişi türlerine (ör. standart sipariş, çerçeve siparişi veya stok nakil siparişi) göre filtrelemenizi sağlar.
- Değişiklik günlüğünü okuma: 'Purchase Order Approved' veya 'Purchase Order Changed' gibi etkinliklerin çıkarılması, SAP değişiklik günlüğü tablolarının (CDHDR, CDPOS) okunmasına bağlıdır. Bu işlem yoğun kaynak kullanabilir. ABAP mantığını yalnızca gerekli nesne sınıflarını (EINKBELEG, BANF) ve tablo/alan birleşimlerini seçecek şekilde optimize edin.
- Yetkilendirmeler: Bu raporu çalıştıran kullanıcının veya teknik hesabın, Materials Management (MM), Financial Accounting (FI) ve sistem genelindeki tablolar dahil olmak üzere birden fazla SAP modülündeki tablolara yönelik kapsamlı okuma yetkileri olmalıdır. Bu yetkiler EKKO, EKPO, EBAN, EKBE, BKPF, BSAK, RBKP, NAST, CDHDR ve CDPOS gibi tabloları kapsar.
- Arka planda çalıştırma: Birkaç aydan uzun süreyi kapsayan veri çıkarma işlemlerinde veya işlem hacmi yüksek sistemlerde, iletişim işlemi zaman aşımına uğramasın diye programı her zaman arka planda çalıştırın.
Örnek sorgu abap
REPORT z_pm_po_extract.
" ====================================================================
" SELECTION SCREEN
" ====================================================================
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_aedat FOR sy-datum OBLIGATORY.
SELECT-OPTIONS: s_bukrs FOR ekko-bukrs.
SELECT-OPTIONS: s_bsart FOR ekko-bsart.
PARAMETERS: p_sysid TYPE string DEFAULT '[Your SAP System ID]'.
SELECTION-SCREEN END OF BLOCK b1.
" ====================================================================
" DATA DECLARATIONS
" ====================================================================
TYPES: BEGIN OF ty_event_log,
purchaseordernumber TYPE ebeln,
activityname TYPE string,
eventtime TYPE timestamp,
sourcesystem TYPE string,
lastdataupdate TYPE timestamp,
vendorid TYPE lifnr,
username TYPE ernam,
totalnetamount TYPE netwr,
purchaserequisitionnumber TYPE banfn,
requesteddeliverydate TYPE eedat,
documenttype TYPE bsart,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log,
ls_event_log TYPE ty_event_log.
DATA: lt_ekko TYPE TABLE OF ekko,
lt_ekpo TYPE TABLE OF ekpo.
" ====================================================================
" START OF SELECTION
" ====================================================================
START-OF-SELECTION.
" Get current timestamp for LastDataUpdate
GET TIME STAMP FIELD ls_event_log-lastdataupdate.
ls_event_log-sourcesystem = p_sysid.
" --- Initial Data Selection: Purchase Orders in Scope ---
SELECT * FROM ekko INTO TABLE lt_ekko
WHERE aedat IN s_aedat
AND bukrs IN s_bukrs
AND bsart IN s_bsart.
IF lt_ekko IS INITIAL.
MESSAGE 'No Purchase Orders found for the given criteria.' TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
SELECT * FROM ekpo INTO TABLE lt_ekpo
FOR ALL ENTRIES IN lt_ekko
WHERE ebeln = lt_ekko-ebeln.
" --- 1. Purchase Requisition Created ---
SELECT ban.banfn, ban.erdat, ban.erzet, ban.ernam,
ekpo.ebeln, ekpo.netwr, ekpo.eindt, ekpo.bsart, ekpo.lifnr, ekko.bukrs
FROM eban AS ban
INNER JOIN ekpo AS ekpo ON ban.banfn = ekpo.banfn AND ban.bnfpo = ekpo.bnfpo
INNER JOIN ekko AS ekko ON ekpo.ebeln = ekko.ebeln
WHERE ekko.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_pr_created).
LOOP AT lt_pr_created INTO DATA(ls_pr_created).
ls_event_log-purchaseordernumber = ls_pr_created-ebeln.
ls_event_log-activityname = 'Purchase Requisition Created'.
CONVERT DATE ls_pr_created-erdat TIME ls_pr_created-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-vendorid = ls_pr_created-lifnr.
ls_event_log-username = ls_pr_created-ernam.
ls_event_log-totalnetamount = ls_pr_created-netwr.
ls_event_log-purchaserequisitionnumber = ls_pr_created-banfn.
ls_event_log-requesteddeliverydate = ls_pr_created-eindt.
ls_event_log-documenttype = ls_pr_created-bsart.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 2. Purchase Requisition Approved (via Change Docs on Release Indicator) ---
SELECT h.objectid, h.udate, h.utime, h.username
FROM cdhdr AS h
INNER JOIN cdpos AS p ON h.objectclas = p.objectclas AND h.objectid = p.objectid AND h.changenr = p.changenr
INNER JOIN ekpo AS ekpo ON h.objectid = ekpo.banfn
INNER JOIN ekko AS ekko ON ekpo.ebeln = ekko.ebeln
WHERE h.objectclas = 'BANF'
AND p.tabname = 'EBAN'
AND p.fname = 'FRGZU'
AND p.value_new = 'X' "Configure based on your system release indicator for 'Approved'
AND ekko.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_pr_approved).
LOOP AT lt_pr_approved INTO DATA(ls_pr_approved).
SELECT SINGLE ebeln FROM ekpo INTO ls_event_log-purchaseordernumber WHERE banfn = ls_pr_approved-objectid.
ls_event_log-activityname = 'Purchase Requisition Approved'.
CONVERT DATE ls_pr_approved-udate TIME ls_pr_approved-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_pr_approved-username.
" Other attributes can be populated with another SELECT if needed.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 3. Purchase Order Created ---
LOOP AT lt_ekko INTO DATA(ls_ekko_created).
ls_event_log-purchaseordernumber = ls_ekko_created-ebeln.
ls_event_log-activityname = 'Purchase Order Created'.
CONVERT DATE ls_ekko_created-aedat TIME ls_ekko_created-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-vendorid = ls_ekko_created-lifnr.
ls_event_log-username = ls_ekko_created-ernam.
ls_event_log-totalnetamount = ls_ekko_created-rlwrt.
ls_event_log-purchaserequisitionnumber = ''. "Can be enriched later if needed
ls_event_log-requesteddeliverydate = ''. "Can be enriched from EKPO
ls_event_log-documenttype = ls_ekko_created-bsart.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 4. Purchase Order Approved (via Change Docs on Release Indicator) ---
SELECT h.objectid, h.udate, h.utime, h.username
FROM cdhdr AS h
INNER JOIN cdpos AS p ON h.objectclas = p.objectclas AND h.objectid = p.objectid AND h.changenr = p.changenr
WHERE h.objectclas = 'EINKBELEG'
AND p.tabname = 'EKKO'
AND p.fname = 'FRGKE'
AND p.value_new = 'R' "R for Released
AND h.objectid IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_po_approved).
LOOP AT lt_po_approved INTO DATA(ls_po_approved).
ls_event_log-purchaseordernumber = ls_po_approved-objectid.
ls_event_log-activityname = 'Purchase Order Approved'.
CONVERT DATE ls_po_approved-udate TIME ls_po_approved-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_po_approved-username.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 5. Purchase Order Sent to Vendor ---
SELECT n.objky, n.vstat, n.datvr, n.uhrvr, e.ernam
FROM nast AS n
INNER JOIN ekko AS e ON n.objky = e.ebeln
WHERE n.kappl = 'EF' "Application for Purchasing
AND n.kschl = '[Your PO Output Type]' "e.g. NEU
AND n.vstat = '1' "Successfully processed
AND n.objky IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_po_sent).
LOOP AT lt_po_sent INTO DATA(ls_po_sent).
ls_event_log-purchaseordernumber = ls_po_sent-objky.
ls_event_log-activityname = 'Purchase Order Sent to Vendor'.
CONVERT DATE ls_po_sent-datvr TIME ls_po_sent-uhrvr INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_po_sent-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 6. Purchase Order Changed ---
SELECT objectid, udate, utime, username FROM cdhdr
WHERE objectclas = 'EINKBELEG'
AND tcode IN ('ME22', 'ME22N')
AND objectid IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_po_changed).
LOOP AT lt_po_changed INTO DATA(ls_po_changed).
ls_event_log-purchaseordernumber = ls_po_changed-objectid.
ls_event_log-activityname = 'Purchase Order Changed'.
CONVERT DATE ls_po_changed-udate TIME ls_po_changed-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_po_changed-username.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 7. Goods Receipt Posted & 9. Goods Returned ---
SELECT e.ebeln, m.budat, m.cpudt, m.cputm, m.usnam, b.shkzg, b.bwart
FROM mkpf AS m
INNER JOIN mseg AS s ON m.mblnr = s.mblnr AND m.mjahr = s.mjahr
INNER JOIN t156 AS t ON s.bwart = t.bwart
INNER JOIN ekbe AS e ON s.ebeln = e.ebeln AND s.ebelp = e.ebelp AND s.mblnr = e.belnr AND s.mjahr = e.gjahr
WHERE e.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
AND e.bwart IN ('101', '102', '122', '123') "GR, GR Reversal, Return
INTO TABLE @DATA(lt_goods_mvmt).
LOOP AT lt_goods_mvmt INTO DATA(ls_goods_mvmt).
ls_event_log-purchaseordernumber = ls_goods_mvmt-ebeln.
IF ls_goods_mvmt-bwart = '101'.
ls_event_log-activityname = 'Goods Receipt Posted'.
ELSE.
ls_event_log-activityname = 'Goods Returned'.
ENDIF.
CONVERT DATE ls_goods_mvmt-cpudt TIME ls_goods_mvmt-cputm INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_goods_mvmt-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 8. Services Confirmation Entered ---
SELECT h.erdat, h.erzeit, h.ernam, l.ebeln
FROM essr AS h
INNER JOIN esll AS l ON h.lblni = l.lblni
WHERE l.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_services).
LOOP AT lt_services INTO DATA(ls_services).
ls_event_log-purchaseordernumber = ls_services-ebeln.
ls_event_log-activityname = 'Services Confirmation Entered'.
CONVERT DATE ls_services-erdat TIME ls_services-erzeit INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_services-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 10. Invoice Received ---
SELECT r.ebeln, r.cpudt, r.cputm, r.usnam
FROM rbkp AS r
WHERE r.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_invoice_rcvd).
LOOP AT lt_invoice_rcvd INTO DATA(ls_invoice_rcvd).
ls_event_log-purchaseordernumber = ls_invoice_rcvd-ebeln.
ls_event_log-activityname = 'Invoice Received'.
CONVERT DATE ls_invoice_rcvd-cpudt TIME ls_invoice_rcvd-cputm INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_invoice_rcvd-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 11. Invoice Paid ---
SELECT b.ebeln, s.augdt, s.augbl, b.usnam
FROM rbkp AS b
INNER JOIN bseg AS e ON b.belnr = e.belnr AND b.gjahr = e.gjahr
INNER JOIN bsak AS s ON e.bukrs = s.bukrs AND e.belnr = s.belnr AND e.gjahr = s.gjahr AND e.buzei = s.buzei
WHERE b.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
AND s.augdt IS NOT NULL
INTO TABLE @DATA(lt_invoice_paid).
LOOP AT lt_invoice_paid INTO DATA(ls_invoice_paid).
ls_event_log-purchaseordernumber = ls_invoice_paid-ebeln.
ls_event_log-activityname = 'Invoice Paid'.
CONVERT DATE ls_invoice_paid-augdt INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_invoice_paid-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 12. Purchase Order Completed & 13. Purchase Order Deleted (via Change Docs) ---
SELECT h.objectid, h.udate, h.utime, h.username, p.fname
FROM cdhdr AS h
INNER JOIN cdpos AS p ON h.changenr = p.changenr
INNER JOIN ekpo AS ekpo ON h.objectid = |{ ekpo.ebeln }{ ekpo.ebelp }|
WHERE h.objectclas = 'EINKBELEG'
AND p.tabname = 'EKPO'
AND p.fname IN ('ELIKZ', 'EREKZ', 'LOEKZ')
AND p.value_new = 'X'
AND ekpo.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_po_status_change).
LOOP AT lt_po_status_change INTO DATA(ls_po_status_change).
ls_event_log-purchaseordernumber = substring( val = ls_po_status_change-objectid, off = 0, len = 10 ).
CASE ls_po_status_change-fname.
WHEN 'LOEKZ'.
ls_event_log-activityname = 'Purchase Order Deleted'.
WHEN 'ELIKZ' OR 'EREKZ'.
"This logic may need refinement to check if both are now set.
ls_event_log-activityname = 'Purchase Order Completed'.
ENDCASE.
CONVERT DATE ls_po_status_change-udate TIME ls_po_status_change-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_po_status_change-username.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- Final Output to CSV ---
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = 'C:\temp\po_event_log.csv'
filetype = 'ASC'
CHANGING
data_tab = lt_event_log. Başlamaya hazır mısınız?
Bu Template, Process Mining yolculuğunuz için iyi bir başlangıç noktası sunar. Verimlilik fırsatlarını ortaya çıkarmak ve Satın Almadan Ödemeye sürecinizi dönüştürmek için SAP S/4HANA verilerinizden bugün yararlanmaya başlayın.
Satın Almadan Ödemeye sipariş sürecinizi iyileştirin: çevrim süresini şimdi kısaltın
Verimsizlikleri giderin ve Satın Almadan Ödemeye sipariş çevrim sürenizi %30 kısaltın.
Kredi kartı gerekmez. Kurulumu birkaç dakikada tamamlayın.