Satın Almadan Ödemeye - Satın Alma Siparişi Veri Şablonunuz
Satın Almadan Ödemeye - Satın Alma Siparişi Veri Şablonunuz
- Ayrıntılı analiz için önerilen öznitelikler
- Süreç içinde izlenecek temel faaliyetler
- Adım adım veri çıkarma yönlendirmesi
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ın adıdır. | ||
| Açıklama Bu öznitelik, Satın Alma Siparişinin yaşam döngüsündeki belirli bir eylemi veya durum değişikliğini açıklar. Örneğin 'Satın Alma Siparişi oluşturuldu', 'Satın Alma Siparişi onaylandı' veya 'Mal kabulü kaydedildi'. Bu etkinliklerin sırası süreç akışını oluşturur. Etkinliklerin sırasını ve sıklığını analiz etmek Process Mining'in temelini oluşturur. Gerçek süreci keşfetmenize, tasarlanan modelle karşılaştırmanıza, darboğazları, örneğin 'Fatura alındı' sonrasındaki uzun beklemeleri, belirlemenize ve yeniden işlemeyi, örneğin tekrarlanan 'Satın Alma Siparişi değiştirildi' etkinliklerini, ölçmenize yardımcı olur. Neden önemli? Süreçteki adımları tanımlar ve uçtan uca akışı, varyantları ve darboğazları görselleştirip analiz etmenizi sağlar. Nereden alınır? Temel iş kilometre taşlarını temsil etmek için genellikle EKKO/EKPO'daki durum alanları veya CDHDR/CDPOS'daki değişiklik belgesi günlükleri gibi birden fazla tablo ve alanın birleşiminden elde edilir. Örnekler Satın Alma Siparişi oluşturulduSatın Alma Siparişi onaylandıMal kabulü kaydedildiFatura alındı | |||
| Etkinlik zamanı EventTime | Etkinliğin ne zaman gerçekleştiğini gösteren zaman damgasıdır. | ||
| Açıklama Bu öznitelik, süreçteki her etkinliğin kesin tarihini ve saatini kaydeder. Process Mining'deki zamana dayalı tüm analizlerin temelini oluşturur. Etkinlik zamanı, süreç akışını oluşturmak için etkinlikleri kronolojik sıraya koyar. Ayrıca etkinlikler arasındaki çevrim süreleri, bekleme süreleri ve işleme süreleri gibi süreye dayalı tüm metriklerin hesaplanmasını sağlar. Bu metrikler performans analizi ve darboğazların belirlenmesi için büyük önem taşır. Neden önemli? Bu zaman damgası, olayları doğru sıralamak ve çevrim süreleri, teslim süreleri ve bekleme süreleri dahil tüm performans metriklerini hesaplamak için büyük önem taşır. Nereden alınır? Oluşturma tarihi, değişiklikler için EKKO-AEDAT, veya mal kabulleri için kayıt tarihi, MKPF-BUDAT, gibi belirli etkinliklerle ilişkilendirilmiş zaman damgası alanlarıdır. Genellikle birden fazla tablodaki verilerin birleştirilmesini gerektirir. Ö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 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şturma işleminden son mal kabulü ve tamamlanmaya kadar ilgili tüm etkinlikleri birbirine bağlayan merkezi tanımlayıcıdır. Process Mining analizinde vaka kimliği olarak kullanılır. Analizde etkinlikleri bu numaraya göre gruplamak, her PO'nun yolculuğunu ayrı ayrı yeniden oluşturmanızı sağlar. Bu, çevrim sürelerini hesaplamak, süreç varyantlarını analiz etmek ve tek bir siparişe özgü darboğazları veya sapmaları belirlemek için gereklidir. Neden önemli? Tüm satın alma olaylarını tek bir uçtan uca süreçte birleştiren temel anahtardır. Böylece her Satın Alma Siparişinin yaşam döngüsünü ayrıntılı biçimde analiz edebilirsiniz. Nereden alınır? Bu öznitelik SAP S/4HANA EKKO tablosunda, EBELN alanında bulunur. Örnekler 450001712345000171244500017125 | |||
| Kaynak sistem SourceSystem | Verilerin çıkarıldığı kaynak sistemi tanımlar. | ||
| Açıklama Bu öznitelik, olay verilerinin kaynak sistemini belirtir. Örneğin 'SAP S/4HANA Production' veya 'SAP ECC'. Birden fazla sistemin bulunduğu ortamlarda bu alan, veri kökeni ve sorun giderme için kritik öneme sahiptir. Ayrıca farklı kaynaklardan gelen verilerin doğru yorumlanmasını sağlar. Verilerin bağlamını anlamanıza yardımcı olur ve analizi belirli sistem ortamlarına göre filtrelemek için kullanılabilir. Neden önemli? Verilerin kaynağı hakkında temel bağlam sağlar. Çok sistemli ortamlarda veri yönetişimi, doğrulama ve analiz için önemlidir. Nereden alınır? Bu, genellikle veri çıkarma, dönüştürme ve yükleme, ETL, sürecinde Veri Seti'ni kaynağıyla etiketlemek için eklenen statik 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 damgasıdır. | ||
| Açıklama Bu öznitelik, analiz edilen verilerin güncelliğini gösterir. SAP S/4HANA'dan en son veri çekiminin tarihini ve saatini belirtir. Son veri güncellemesinin zamanını bilmek, analizinizin güncelliğini anlamanız için önemlidir. Bulguları doğru yorumlamanıza yardımcı olur. Böylece gerçek zamanlı bilgilere mi yoksa belirli bir andaki anlık görüntüye mi baktığınızı bilirsiniz. Bu ayrım, analize dayanarak alacağınız kararların geçerliliğini etkiler. Neden önemli? Verilerin güncelliği hakkında bilgi verir ve analitik bulgularınızın bağlamını ve geçerliliğini anlamanızı sağlar. Nereden alınır? Bu, veri çıkarma, dönüştürme ve yükleme, ETL, sürecinde 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 tanımlayıcısıdır. | ||
| Açıklama Bu öznitelik, bir belgeyi oluşturmaktan, değiştirmekten veya onaylamaktan sorumlu SAP kullanıcı kimliğini kaydeder. Sistem içinde gerçekleştirilen işlemlerin izlenebilirliğini sağlar. Kullanıcı bazında analiz yapmak, eğitim ihtiyaçlarını, iş yükü dağılımını ve bireysel performansı belirlemenize yardımcı olur. Örneğin belirli kullanıcıların sürekli olarak uzun onay süreleriyle veya sık yapılan onay sonrası 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 verir. Neden önemli? Sorumluluk sağlar ve bireysel ya da ekip düzeyinde performans analizi yapmanıza imkan verir. 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 | |||
| PO belge türü DocumentType | Standart PO'lar, hizmet PO'ları veya stok nakil siparişleri gibi farklı Satın Alma Siparişi türlerini birbirinden ayıran sınıflandırmadır. | ||
| Açıklama Belge türü, SAP'de Satın Alma Siparişi için süreç akışını, numara aralığını ve alanları kontrol eden temel bir yapılandırma unsurudur. İşletmelerin farklı senaryolara göre satın alma sürecini uyarlamasını sağlar. Süreci belge türüne göre analiz etmek, süreç varyantlarını anlamak için gereklidir. Örneğin standart mal PO'sunun süreci, hizmet PO'sundan veya stok transferinden çok farklı olabilir. Bu öznitelik, belirli iyileştirme fırsatlarını bulmak için bu farklı süreç akışlarını filtrelemenizi ve karşılaştırmanızı sağlar. Neden önemli? Satın Alma Siparişlerini kategorilere ayırır. Farklı satın alma süreçlerini karşılaştırmanıza ve süreç akışlarıyla çevrim sürelerindeki farklılıkları açıklamanıza yardımcı olur. Nereden alınır? Bu öznitelik SAP S/4HANA EKKO tablosunda, BSART alanında bulunur. Örnekler NBFOUB | |||
| Satın alma talebi PurchaseRequisitionNumber | Satın Alma Siparişini başlatan Satın Alma Talebinin, PR, tanımlayıcısıdır. | ||
| Açıklama Bu öznitelik, Satın Alma Siparişini kaynak Satın Alma Talebine bağlar. Doğrudan oluşturulan tüm PO'ların bir PR'si olmayabilir. Bu bağlantı, ilk talepten başlayan uçtan uca satın alma sürecini analiz etmek için gereklidir. 'Satın Alma Talebi onay süresi' gibi KPI'ları destekler ve öncesinde onaylanmış bir talep olmadan oluşturulan PO'ları, yani 'onaysız harcamaları', belirlemek için temel oluşturur. Neden önemli? PO'yu ilk talebe bağlar, uçtan uca süreç analizi yapmanızı ve uyumsuz onaysız harcamaları belirlemenizi sağlar. Nereden alınır? Bu öznitelik SAP S/4HANA EKPO tablosunda, PO kalemi düzeyinde BANFN alanında bulunur. Örnekler 1001005110010052 | |||
| Talep edilen teslimat tarihi RequestedDeliveryDate | İşletmenin tedarikçiden mal veya hizmetleri teslim etmesini istediği tarihtir. | ||
| Açıklama Bu öznitelik, Satın Alma Siparişinde üzerinde anlaşılan hedef teslimat tarihini belirtir. Tedarikçi teslimat performansını ölçmek için temel alınır. Process Mining'de bu tarih, 'Tedarikçi zamanında teslimat oranı' KPI'ını hesaplamak üzere gerçek mal kabulü tarihiyle, 'Mal kabulü kaydedildi' zaman damgasıyla, karşılaştırılır. Bu tarihten sapmaları analiz etmek, 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 oluşturur. Bu, tedarik zinciri yönetimi ve operasyonel planlama açısından önemli bir KPI'dır. Nereden alınır? EKET çizelge satırı tablosunda, EINDT alanında bulunur. Örnekler 2023-06-012023-06-152023-07-01 | |||
| Tedarikçi kimliği VendorId | Mal veya hizmet sağlayan tedarikçinin benzersiz tanımlayıcısıdır. | ||
| Açıklama Tedarikçi Kimliği, bir satın alma siparişini belirli bir tedarikçiye bağlayan önemli bir ana veri öğesidir. Satın alma süreci boyunca iletişim, teslimat ve ödeme işlemlerinde kullanılır. Process Mining içinde bu öznitelik, performans analizinin tedarikçiye göre ayrıştırılmasını sağlar. 'Supplier Lead Time Performance' ve 'Goods Return Rate by Vendor' gibi Dashboardlar için önemlidir. En güvenilir tedarikçileri ve gecikmelere ya da kalite sorunlarına neden olabilecek tedarikçileri belirlemenize yardımcı olur. Neden önemli? Tedarikçi odaklı analiz yapmanızı sağlar. Performansı değerlendirmenize, yüksek ve düşük performans gösteren tedarikçileri belirlemenize ve tedarik zincirini optimize etmenize yardımcı olur. Nereden alınır? Bu öznitelik SAP S/4HANA EKKO tablosunda, LIFNR alanında bulunur. Örnekler 100023100045100088 | |||
| Toplam net tutar TotalNetAmount | Vergiler ve nakliye maliyetleri hariç Satın Alma Siparişinin toplam değeridir. | ||
| 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, PO'ları değerlerine göre, yüksek veya düşük değerli, sınıflandırmak gibi finansal analizler için önemlidir. Böylece süreç yollarının farklı olup olmadığını görebilirsiniz. Ayrıca analizi önceliklendirmek, daha yüksek finansal risk taşıyabilecek veya işletme üzerinde daha büyük etki yaratabilecek yüksek değerli siparişlere odaklanmak için de kullanılabilir. Neden önemli? Finansal temelli analiz yapmanızı sağlar. Satın Alma Siparişlerini değerlerine göre segmentlere ayırmanıza ve süreç iyileştirme çalışmalarını yüksek harcama alanlarına önceliklendirmenize yardımcı olur. Nereden alınır? Bu öznitelik SAP S/4HANA EKKO tablosunda, NETWR alanında bulunur. Örnekler 1500.0025000.50125.75 | |||
| Kalem kategorisi ItemCategory | Standart, konsinye, fason üretim veya hizmet gibi Satın Alma Siparişi kalemlerini sınıflandırır. | ||
| Açıklama Kalem kategorisi, belirli bir malzeme veya hizmetin satın alınmasının nasıl kontrol edileceğini ve işleneceğ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 kaleminin, hizmet giriş belgesi gerektirdiği için, süreci standart stok kaleminin sürecinden önemli ölçüde farklıdır. Kalem kategorisine göre analiz yapmak bu farklılıkları açıklamanıza ve hedefli süreç iyileştirmeleri yapmanıza yardımcı olur. Neden önemli? Mal, hizmet veya fason üretim gibi farklı satın alma türlerini birbirinden ayırarak süreç varyantlarını açıklar. Nereden alınır? Bu öznitelik SAP S/4HANA içindeki EKPO tablosunun PSTYP alanında bulunur. Örnekler 093 | |||
| Kontrol dışı harcama mı? IsMaverickSpend | Satın alma siparişinin, öncesinde onaylanmış bir satın alma talebi olmadan oluşturulup oluşturulmadığını gösteren hesaplanmış işaret. | ||
| Açıklama Bu boolean göstergesi veri işleme sırasında türetilir. Bir satın alma siparişinin ilişkili bir satın alma talebi bulunmuyorsa veya PO oluşturma işlemi standart onay iş akışını atlıyorsa 'true' olarak ayarlanır. Bu öznitelik, 'Maverick Spend Identification' Dashboardını ve ilgili KPI’ları doğrudan destekler. Uyumlu olmayan satın alma davranışının kapsamını ölçmenize, belirli departmanları veya kullanıcı gruplarını hedefleyerek satın alma politikalarını ve kontrollerini güçlendirmenize yardımcı olur. Neden önemli? Uyumsuz satın alma işlemlerini doğrudan belirlemenizi sağlar. Böylece süreç sapmalarını ölçebilir, finansal kontrolleri ve satın alma politikalarını uygulayabilirsiniz. Nereden alınır? Belirli belge türlerinde 'PurchaseRequisitionNumber' değerinin bulunmamasına veya olay sırasının analizine dayanan hesaplanmış alan. Örnekler truefalse | |||
| Malzeme numarası MaterialNumber | Satın alınan belirli malzemeyi veya ürünü tanımlayan kod. | ||
| Açıklama Malzeme numarası, SAP içindeki her malzeme ana kaydına atanan benzersiz koddur. Satın alma, stok yönetimi ve satış dahil olmak üzere bu malzemeyle ilgili tüm işlemlerde kullanılır. Malzeme numarasına veya malzeme grubuna göre yapılan analiz, ürün kategorisi bazında inceleme yapmanızı sağlar. Belirli malzeme türlerine yönelik satın alma süreçlerinin daha düşük verimlilikle yürütülüp yürütülmediğini, daha uzun çevrim sürelerine sahip olup olmadığını veya iadeye daha yatkın olup olmadığını belirlemenize yardımcı olur. Böylece kategori yönetimi için gerekli içgörüleri elde edebilirsiniz. Neden önemli? Ürün kategorisi bazında analiz yapmanızı sağlar. Böylece belirli ürün veya malzemelerle ilgili süreç sorunlarını ya da tedarikçi performansı problemlerini belirleyebilirsiniz. Nereden alınır? Bu öznitelik SAP S/4HANA içindeki EKPO tablosunun MATNR alanında bulunur. Örnekler RM100-100FG210SERV-CONSULT | |||
| Satın alma grubu PurchasingGroup | Belirli satın alma faaliyetlerinden sorumlu 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 birincil iletişim noktasıdır. Bu öznitelik, iş yükünü ve performansı satın alma organizasyonuna göre daha ayrıntılı analiz etmenizi sağlar. Aşırı iş yükü taşıyan ekipleri belirlemek, farklı alıcı gruplarının verimliliğini ölçmek ve kontrol dışı harcama gibi süreç sapmalarına hangi grupların 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örmenizi sağlar. Böylece iş yükünü, verimliliği ve süreç uyumluluğunu ekip düzeyinde analiz edebilirsiniz. Nereden alınır? Bu öznitelik SAP S/4HANA içindeki EKKO tablosunun EKGRP alanında bulunur. Örnekler 001002N00 | |||
| Satın alma organizasyonu PurchasingOrganization | Malzeme ve hizmetlerin satın alınmasından ve tedarikçilerle müzakere yürütülmesinden sorumlu organizasyon birimi. | ||
| Açıklama Satın alma organizasyonu, satın alma süreçlerindeki temel organizasyon birimlerinden biridir. Kurum, şirket veya tesis düzeyinde yapılandırılabilir ve tüm satın alma faaliyetlerinden sorumludur. Süreci satın alma organizasyonuna göre analiz etmek, farklı satın alma ekiplerinin veya bölgelerinin verimliliğini ve performansını değerlendirmenize yardımcı olur. Bu analiz, organizasyon birimleri arasındaki tedarikçi müzakeresi, süreç uyumluluğu veya onay gecikmeleri farklarını ortaya çıkarabilir. Neden önemli? Farklı satın alma departmanları veya bölgeleri arasındaki performansı karşılaştırmanızı sağlar. Böylece iyi uygulamaları ve iyileştirme alanlarını belirleyebilirsiniz. Nereden alınır? Bu öznitelik SAP S/4HANA içindeki EKKO tablosunun EKORG alanında bulunur. Örnekler 10101710US01 | |||
| Şirket kodu CompanyCode | Satın alma siparişinin oluşturulduğu tüzel kişiyi 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 organizasyon özniteliği, farklı tüzel kişiler arasındaki satın alma süreçlerini filtrelemenize ve karşılaştırmanıza olanak tanır. Şirket koduna göre yapılan analiz, süreç yürütümündeki tutarsızlıkları, verimlilik düzeylerindeki farklılıkları veya kuruluş genelindeki değişen uyumluluk oranlarını ortaya çıkarabilir. Neden önemli? Süreç analizinin tüzel kişiye göre ayrıştırılmasını sağlar. Böylece işletmenin farklı bölümlerindeki performansı ve uyumluluğu karşılaştırabilirsiniz. Nereden alınır? Bu öznitelik SAP S/4HANA içindeki EKKO tablosunun BUKRS alanında bulunur. Örnekler 101017102000 | |||
| Tedarikçinin zamanında teslimatı SupplierOnTimeDelivery | Mal kabulünün talep edilen teslimat tarihinde veya daha önce kaydedilip kaydedilmediğini gösteren hesaplanmış işaret. | ||
| Açıklama Bu boolean özniteliği, 'Goods Receipt Posted' etkinliğinin zaman damgası ile 'Requested Delivery Date' karşılaştırılarak türetilir. Mal kabulü istenen tarihte veya daha önce gerçekleşmişse değer 'true' olarak işaretlenir. Bu öznitelik, 'Supplier On-Time Delivery Rate' KPI’ını doğrudan destekler. Zamanında veya gecikmiş teslimatları kolayca filtrelemenizi sağlayarak analizi basitleştirir. Bu özellik, tedarikçi performansı Dashboardları ve tedarikçi skorlaması için önemlidir. Neden önemli? Tedarikçi güvenilirliğini doğrudan ölçer. Zamanında teslimat KPI'ının temelini oluşturur ve tedarikçi performansını etkili biçimde yönetmenizi sağlar. Nereden alınır? 'Goods Receipt Posted' faaliyetinin 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 operasyon tesisi ya da konumu. | ||
| Açıklama SAP içinde tesis, malların üretildiği, depolandığı veya hizmetlerin sunulduğu fiziksel konumdur. Lojistik ve planlama açısından temel bir unsurdur. Süreç analizini tesise göre ayrıştırmak, satın alma sürecindeki bölgesel veya tesise özgü farklılıkları ortaya çıkarabilir. Örneğin belirli tesislerde teslimat sürelerinin daha uzun olup olmadığını veya mal iade oranlarının daha yüksek seyredip seyretmediğini gösterebilir. Bu bulgular, yerel lojistik ya da kalite kontrol sorunlarına işaret edebilir. Neden önemli? Konum bazında analiz yapmanızı sağlar. Böylece farklı operasyon tesisleri, üretim tesisleri veya depolar arasındaki süreç performansı farklarını görebilirsiniz. Nereden alınır? Bu öznitelik SAP S/4HANA içindeki EKPO tablosunun WERKS alanında bulunur. Örnekler 10101710DE01 | |||
| Yeniden işleme var mı? IsRework | Satın alma siparişinin onay sonrasında değiştirilmesi veya mal iadesi gibi yeniden işleme gerektiren bir işlemden geçip geçmediğini gösteren hesaplanmış işaret. | ||
| Açıklama Bu boolean öznitelik, her satın alma siparişindeki faaliyetlerin sırası analiz edilerek hesaplanır. 'Purchase Order Approved' olayından sonra 'Purchase Order Changed' olayı gerçekleşirse veya 'Goods Returned' olayı mevcutsa 'true' olarak işaretlenir. Bu işaret, 'Doğrudan İşleme Oranı' KPI'ının 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ğlar. Böylece yeniden işlemenin maliyetini ve sıklığını ölçebilirsiniz. Neden önemli? Yeniden işleme içeren vakaları işaretleyerek süreç verimsizliğini ölçmenize yardımcı olur. Bu, doğrudan işleme oranlarını hesaplamak ve sapmaların kök nedenlerini belirlemek için önemlidir. Nereden alınır? Faaliyetlerin sırasına dayanan hesaplanmış alan. Mantık, onaydan sonra 'Purchase Order Changed' olayının gerçekleşip gerçekleşmediğini veya 'Goods Returned' olayının bulunup bulunmadığını kontrol eder. Örnekler truefalse | |||
Satın Almadan Ödemeye - Satın alma siparişi faaliyetleri
| Aktivite | Açıklama | ||
|---|---|---|---|
| Fatura alındı | Tedarikçi faturasının SAP sistemine girilmesini ve ilgili Satın Alma Siparişiyle ilişkilendirilmesini gösterir. 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 kilometre taşıdır. Mal kabulü ile fatura işleme arasındaki sürenin analiz edilmesini sağlar. Nereden alınır? BKPF tablosunda bir muhasebe belgesi oluşturulur. Belgenin kalemleri BSEG'de veya evrensel günlük ACDOCA'da bulunur. Belge, RSEG tablosunda PO'ya bağlanır. Yakalayın Muhasebe belgesi başlık tablosu BKPF'deki belge giriş tarihi (CPUDT). Olay türü explicit | |||
| Mal kabulü kaydedildi | Tedarikçiden malların fiziksel olarak teslim alınmasını ve bunun sisteme kaydedilmesini gösterir. Satın Alma Siparişi geçmişini güncelleyen açık bir işlemdir. | ||
| Neden önemli? Tedarikçinin teslim süresini sona erdiren ve faturanın doğrulanmasına yönelik iç süreci başlatan önemli bir kilometre taşıdır. Zamanında teslimat oranlarını izlemek için gereklidir. Nereden alınır? MKPF (başlık) ve MSEG (kalem) tablolarına malzeme belgesi olarak kaydedilir. Belge, belirli bir hareket türüyle, örneğin 101, Satın Alma Siparişi geçmişi tablosu EKBE'ye bağlanır. Yakalayın EKBE üzerinden bağlanan malzeme belgesi başlığındaki MKPF kayıt tarihi (BUDAT). Olay türü explicit | |||
| Satın Alma Siparişi oluşturuldu | Satın Alma Talebine referans verilerek veya referans verilmeden oluşturulabilen resmi Satın Alma Siparişi belgesinin oluşturulmasını gösterir. PO belgesi sistemde ilk kez kaydedildiğinde bu olay açıkça kaydedilir. | ||
| Neden önemli? Bu etkinlik, özellikle onaysız satın alma analizinde süreç için alternatif bir başlangıç noktası olabilir. Genel PO işleme süresini izlemek için temel bir olaydır. Nereden alınır? Satın Alma Siparişi başlık tablosu EKKO'ya kaydedilir. Belgenin oluşturulma tarihi (AEDAT) ve saati doğrudan bu tabloda tutulur. Yakalayın 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 iç onayları aldığını ve tedarikçiye gönderilmek üzere serbest bırakılmaya yetkili olduğunu gösterir. Olay, Satın Alma Siparişinin serbest bırakma stratejisindeki bir durum değişikliğinden anlaşılır. | ||
| Neden önemli? Onay verimliliğini ve onay sonrası yeniden işlemeyi ölçmek için önemli bir kilometre taşıdır. PO oluşturma ile onay arasındaki süreyi analiz etmek, iç süreçlerdeki gecikmeleri ortaya çıkarır. Nereden alınır? EKKO tablosundaki serbest bırakma göstergesi FRGKE'den anlaşılır. Zaman damgası, bu alanın 'serbest bırakıldı' durumuna ne zaman güncellendiğini gösteren değişiklik geçmişi, CDHDR/CDPOS, incelenerek belirlenir. Yakalayın EKKO tablosundaki serbest bırakma göstergesi alanına, FRGKE, ilişkin değişiklik günlüklerinden anlaşılır. Olay türü inferred | |||
| Satın Alma Siparişi tamamlandı | Bir Satın Alma Siparişi kaleminin lojistik açıdan kapatıldığını gösterir. 'Teslimat tamamlandı' ve 'Son fatura' göstergelerinin ikisi de ayarlandığında 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? Satın Alma Siparişi kalem tablosu EKPO'daki durum işaretlerinden anlaşılır. Olay, 'Teslimat tamamlandı' göstergesi ELIKZ ve 'Son fatura' göstergesi EREKZ doğru olarak ayarlandığında gerçekleşir. Yakalayın EKPO alanları ELIKZ ve EREKZ'nin tamamlandı olarak işaretlendiği 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 resmi talebi gösterir ve satın alma sürecini başlatır. Kullanıcı yeni bir Satın Alma Talebi belgesini kaydettiğinde, örneğin ME51N işlemini kullanarak, olay açıkça kaydedilir. | ||
| Neden önemli? Bu, birçok Satın Alma Siparişi yaşam döngüsü için temel başlangıç noktasıdır. Bu olaydan PO oluşturulmasına kadar geçen süreyi analiz etmek, tedarik ve iç işleme süreçlerindeki 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. Yakalayın EBAN tablosunda bir belge oluşturulduğunda kaydedilen olaydır. Olay türü explicit | |||
| Satın Alma Talebi onaylandı | Bir Satın Alma Talebinin yönetici veya yetkilendirilmiş onaylayan tarafından resmi olarak onaylanmasını gösterir. Bu durum genellikle talep belgesindeki bir 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 döngüsü sürelerini izlemek ve darboğazları belirlemek için önemli bir kilometre taşıdır. Buradaki gecikmeler, Satın Alma Siparişinin ne kadar hızlı oluşturulup tedarikçiye gönderilebileceğini doğrudan etkiler. Nereden alınır? EBAN tablosundaki serbest bırakma durumu alanlarından, örneğin FRGZU - Serbest bırakma göstergesinden, anlaşılır. Zaman damgası, son serbest bırakma durumunun ne zaman ayarlandığını kaydeden CDHDR/CDPOS değişiklik belgelerinden elde edilir. Yakalayın EBAN tablosundaki serbest bırakma durumu alanlarına ilişkin 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 nihai olarak kapatılmasını gösterir. Mutabakat belgesi oluşturan açık bir finansal işlemdir. | ||
| Neden önemli? Teknik olarak ödeme sürecinin parçası olsa da bu etkinliğin dahil edilmesi, Satın Almadan Ödemeye döngüsünün tamamını görmenizi sağlar. Ödeme koşullarını ve performansını analiz etmek için önemlidir. Nereden alınır? Ödeme, BKPF/ACDOCA'da mutabakat belgesi olarak kaydedilir. BSEG veya ACDOCA'daki fatura kaleminde yer alan kapatma tarihi (AUGDT), ödeme olayını gösterir. Yakalayın BSEG veya ACDOCA'da bulunan fatura belgesinin kapatma tarihi (AUGDT). Olay türü explicit | |||
| Hizmet teyidi girildi | Bu etkinlik, Satın Alma Siparişinde belirtilen bir hizmetin sunulduğunun teyit edilmesini gösterir. Hizmet giriş belgesi oluşturularak açıkça kaydedilir. | ||
| Neden önemli? Hizmet satın alımlarında mal kabulünün karşılığıdır. Hizmet teslim sürelerini izlemek ve tedarikçi ödemelerinin zamanında yapılmasını sağlamak için büyük önem taşır. Nereden alınır? ESSR (başlık) ve ESLL (satırlar) tablolarında verileri tutulan bir hizmet giriş belgesi oluşturularak kaydedilir. Oluşturma tarihi zaman damgası olarak kullanılır. Yakalayın ESSR tablosundaki Hizmet Giriş Belgesi için oluşturma 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, açık bir ters mal hareketi olarak kaydedilir. | ||
| Neden önemli? Bu etkinlik, yeniden işlemeyi 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ı bir soruna işaret eder. Nereden alınır? Belirli bir iade hareket türüyle, örneğin 122, malzeme belgesi olarak kaydedilir. Olay MKPF/MSEG'ye yazılır ve EKBE geçmiş tablosunda PO'ya bağlanır. Yakalayın EKBE'de iade hareket türüne sahip 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 değişiklik yapıldığını gösterir. Değişiklik, sistem değişiklik günlüklerine açıkça kaydedilir. | ||
| Neden önemli? Özellikle onay sonrasındaki değişiklikleri izlemek, süreç verimsizliklerini, yeniden işlemeyi ve olası uyumluluk sorunlarını belirlemek için büyük önem taşır. Sık yapılan değişiklikler, ilk tanımların yetersiz olduğuna işaret edebilir. Nereden alınır? Satın Alma Siparişi nesnelerine, EINKBELEG, ilişkin 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. Yakalayın EKKO veya EKPO tablolarındaki temel alanlarda yapılan değişiklikler için olay kaydı oluşturulur ve CDHDR/CDPOS'a yazılır. 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 gösterir. Kullanıcının belge üzerinde silme işareti ayarlamasıyla kaydedilir. | ||
| Neden önemli? Süreç için alternatif bir bitiş noktasıdır ve başarısızlığı veya iptali gösterir. PO'ların neden silindiğini analiz etmek, talep planlama veya gereksinim tanımlamadaki sorunları ortaya çıkarabilir. Nereden alınır? Satın Alma Siparişi başlık tablosu EKKO veya kalem tablosu EKPO'daki silme göstergesi işareti LOEKZ'den alınır. Zaman damgası CDHDR/CDPOS değişiklik belgelerinden elde edilir. Yakalayın Silme işareti LOEKZ'nin ayarlandığı CDHDR/CDPOS değişiklik belgelerindeki zaman damgası. Olay türü explicit | |||
| Satın Alma Siparişi tedarikçiye gönderildi | Satın Alma Siparişinin EDI, e-posta veya yazdırma yoluyla tedarikçiye iletildiği anı gösterir. Bu olay genellikle sistemin çıktı yönetimi günlükleri üzerinden kaydedilir. | ||
| Neden önemli? Bu etkinlik, tedarikçi teslim süresinin gerçek başlangıcıdır. Siparişi aldığı andan itibaren tedarikçi performansını doğru ölçmek için büyük önem taşır. Nereden alınır? Satın alma belgesi için gönderilen mesajları kaydeden NAST çıktı kontrol tablosundan alınır. İlgili çıktı türünün, örneğin EDI veya e-posta, tarihi ve saati kullanılabilir. Yakalayın NAST tablosunda PO için başarıyla gönderilen ilk çıktı mesajının 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 uygun yetkilere sahip bir kullanıcı bulunduğundan emin olun. Erişim, 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ı üzerinden sağlanabilir.
- Sistem bağlantı bilgilerini belirleyin: SAP S/4HANA sisteminiz için ana bilgisayar, ö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ğlantı kurun.
- SQL sorgusunu hazırlayın: Bu belgenin sorgu bölümünde verilen eksiksiz SQL sorgusunu SQL düzenleyicinize kopyalayın. Bu sorgu, gerekli tüm aktiviteleri ve öznitelikleri çıkarmak üzere tasarlanmıştır.
- Filtreleme parametrelerini ayarlayın: Sorgudaki yer tutucu değerleri bulun. Analiziniz için istediğiniz tarih aralığıyla _start_date ve _end_date değerlerini değiştirin, örneğin '20230101' ve '20231231'. Analiz etmek istediğiniz şirket kodlarını içerecek şekilde poh.CompanyCode filtresini düzenleyin.
- Sorguyu çalıştırın: Değiştirilmiş SQL sorgusunu S/4HANA veritabanında çalıştırın. Veri hacmine ve belirtilen tarih aralığına bağlı olarak bu işlem biraz zaman alabilir.
- Ön sonuçları inceleyin: Sorgu tamamlandığında SQL istemcinizdeki çıktıyı hızlıca kontrol edin. Farklı aktivitelerin bulunduğunu, zaman damgalarının doğru şekilde doldurulduğunu ve vaka kimliğinin (PurchaseOrderNumber) tutarlı olduğunu doğrulayın.
- 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üklemeye 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 tam olarak eşleştiğini doğrulayın: PurchaseOrderNumber, ActivityName, EventTime vb. Dışa aktarma aracınız adları değiştirdiyse sütun adlarını düzenleyin.
- ProcessMind'e yükleyin: Son hâline getirdiğiniz CSV dosyasını ProcessMind projenize yükleyin. İçe aktarma sırasında dosyanızdaki sütunları ilgili vaka kimliği, aktivite ve zaman damgası alanlarıyla eşleştirin.
Yapılandırma
- Kullanılan temel CDS görünümleri: Çıkarma mantığı, standart ve anlamsal açıdan zengin CDS görünümlerinden yararlanır. Temel 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 kabulü ve iadeler gibi mal hareketleri için.
- I_ServiceEntrySheetAPI01: Hizmet onayı olayları için.
- I_SupplierInvoiceAPI01: Tedarikçi faturası bilgileri için.
- I_OperationalAcctgDocItem: Ödeme takibi için faturaları mali belgelere bağlamak üzere.
- I_ChangeDocument: Satın alma siparişindeki değişiklikleri yakalamak için.
- Tarih aralığı filtreleme: Performansı ve veri hacmini yönetmek için tarih aralığı filtresi uygulamak büyük önem taşır. Sorgu, satın alma siparişi oluşturma tarihi (PurchaseOrderDate) üzerinde _start_date ve _end_date yer tutucularını kullanır. Başlangıç için 3 ila 6 aylık veri önerilir.
- Organizasyonel filtreleme: Çıkarma kapsamını ilgili iş birimleriyle sınırlamak için sorgu her zaman CompanyCode alanına göre filtrelenmelidir. 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ümleri için SELECT yetkisine sahip olması gerekir. Bu görünümlere erişim genellikle S/4HANA'daki belirli iş veya analitik rolleri üzerinden verilir. Gerekli izinler olmadan sorgu başarısız olur.
a Ö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'yu içeren SAP HANA şemasına doğrudan SQL erişiminin bulunduğ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.
- Çıkarma aralığını [Start timestamp] ve [End timestamp] kullanarak tanımlayın. İlk yükleme için üç ila altı aylık bir aralık önerilir. Şirket kodu ve belge türü filtrelerini yalnızca raporlama kapsamı gerektirdiğinde uygulayın.
- EKKO ve EKPO'daki satın alma siparişlerini belirleyin. Satın alma siparişi numarasını, tedarikçiyi, belge türünü, şirket kodunu, oluşturma tarihini, oluşturma saatini ve kalem düzeyindeki öznitelikleri koruyun. Satın alma siparişi düzeyinde TotalNetAmount değerini hesaplamak için EKPO net değerlerini toplayın.
- EBAN'dan satın alma talebi oluşturma ve onay olaylarını çı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ündeki etkin SAP sürüm stratejisine göre yapılandırın.
- Satın alma siparişi oluşturma, onay, değişiklik, silme ve tamamlama olaylarını çıkarın. Oluşturma için EKKO oluşturma tarihi ve saati kullanılır. Onay, değişiklik ve silme için sürüm 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] kullanarak yapılandırın.
- Tedarikçi iletişimi, mal kabulü, hizmet onayı, mal iadesi, fatura girişi ve fatura ödemesi olaylarını uygun çıktı, malzeme belgesi, hizmet girişi, fatura, muhasebe ve mahsuplaşma kaynaklarından çıkarın. Bu kaynaklar yalnızca EKKO ve EKPO ile temsil edilmediğinden sorgu, sisteme özgü nesneler için açık kaynak yer tutucuları içerir.
- Her kaynak olayını aynı olay günlüğü yapısında standartlaştırın. Her satırda PurchaseOrderNumber, ActivityName, EventTime, SourceSystem, LastDataUpdate, VendorId, UserName, TotalNetAmount, PurchaseRequisitionNumber, RequestedDeliveryDate ve DocumentType bulunmalıdır. Kaynakta bir aktivitenin birden fazla geçerli olayı varsa tüm tekrarları koruyun.
- Zaman damgalarını doğrulayın, yalnızca tamamen aynı kaynak satırlarını kaldırın ve kaynak kaydı bulunmayan aktiviteleri varsaymayın. ProcessMind olay günlüğünü olduğu gibi okur. Bu nedenle süreç görselleştirmesinde gösterilen her aktivite açık bir satır olarak bulunmalıdır.
- Sonucu bir başlık satırı ve sabit sütun adları içeren, ayrılmış 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 alanını metin olarak koruyun ve eksiksiz olay günlüğünü yapılandırılmış ProcessMind veri bağlantısı üzerinden yükleyin.
Yapılandırma
- Kaynak nesneleri: EKKO ve EKPO, doğrulanmış satın alma siparişi başlık ve kalem kaynaklarıdır. Talepler, sürüm durumu, değişiklik geçmişi, çıktı, mal hareketleri, hizmet giriş sayfaları, faturalar, ödemeler ve mahsuplaşma için 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 olayları satın alma siparişi numarasıyla ilişkilendirin. Gerekirse kalem referanslarını kaynağa özgü ek bir sütunda koruyun.
- Tarih aralığı: Üç ila altı ayla başlayın. Geçmişe dönük yüklemelerde daha küçük aralıklar kullanın ve eksik kayıtları önlemek için örtüşen sınırları mutabıklaştırın.
- Filtreler: Company Code, Document Type, VendorId, satın alma organizasyonu, satın alma grubu ve olay tarihi filtrelerini gerekli kapsama göre yapılandırın. Şirket kodu ve belge türü filtreleri hedef sistemde geçerli değerleri kullanmalıdır.
- Olay anlamı: İlgili belge alanları veya günlükler mevcut olduğunda oluşturma ve silme açıkça gösterilebilir. Onay ve tamamlama durum tabanlı olaylardır ve yapılandırılmış durum zaman damgaları gerektirir. Savunulabilir bir olay zaman damgası olmadan yalnızca mevcut durumdan satır oluşturmayın.
- Performans: Olay tarihine ve organizasyonel kapsama erken aşamada filtre uygulayın, mümkün olduğunda EKPO'yu olay kaynaklarına katmadan önce toplayın ve büyük geçmişe dönük yüklemeleri zaman aralıklarıyla çalıştırın. Uygun veritabanı istatistiklerinin bulunduğundan emin olun ve kalem, muhasebe ve değişiklik geçmişi kaynakları arasında sınırsız birleştirmelerden kaçının.
- Yenileme zaman damgası: Bir çalıştırmadaki her satır için LastDataUpdate alanını çıkarma işleminin yürütüldüğü zaman damgasına ayarlayı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, stok 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 her kaynak yer tutucusunu hedef SAP S/4HANA sisteminden onaylanmış bir tablo, görünüm, sütun veya ifadeyle değiştirin. Kimlik bilgilerini sorguda veya çıkarma yapılandırmasında göstermeyin.
a Ö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
- Belirtim ve tasarım: Gerekli ve önerilen tüm öznitelikleri içeren nihai olay günlüğü dosyası veri yapısını tanımlayın. Gerekli 13 aktivitenin her biri için veri kaynağı olarak kullanılacak SAP tablolarını, örneğin EKKO, EKPO, EKBE, CDHDR, CDPOS ve BKPF, belgeleyin.
- Program oluşturma: SAP GUI'de SE38 veya SE80 işlem kodunu kullanarak ABAP Editor'e gidin. Örneğin Z_PM_PO_EXTRACT adında yeni bir çalıştırılabilir program oluşturun.
- Seçim ekranını tanımlayın: Raporun seçim ekranını kodlayın. Bu ekran, kullanıcıların çıkarmak istedikleri verileri filtrelemesini sağlar. Satın alma siparişi oluşturma tarih aralığı (P_AEDAT), Şirket Kodu (P_BUKRS) ve Satın Alma Belgesi Türü (P_BSART) parametrelerini ekleyin.
- Veri bildirimleri: Program için gereken dahili tabloları ve veri yapılarını tanımlayın. Buna, belirtim 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ı uygulayın: 13 aktivitenin her biri için veri seçen temel ABAP mantığını yazın. Bu işlem, gerektiğinde birleştirilen ilgili SAP tablolarına yönelik bir dizi SELECT ifadesini içerir. Değişikliğe dayalı olaylar için CDHDR ve CDPOS değişiklik günlüğü tablolarını okuyun.
- Verileri dönüştürün ve eşleyin: 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 olaya göre ActivityName değerini ayarlayın, örneğin '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ştirin: 13 aktivite türünün tamamını işledikten sonra tüm verilerin tek ve birleşik bir dahili tabloda toplandığından emin olun. Bu tablo, seçilen satın alma siparişlerinin eksiksiz olay günlüğünü temsil eder.
- Dosya çıktısını uygulayın: Nihai dahili tabloyu dosyaya yazacak işlevi ekleyin. Önerilen yaklaşım, kullanıcıların dosyayı yerel bilgisayarlarına CSV olarak kaydetmesini sağlamak için cl_gui_frontend_services=>gui_download yöntemini kullanmak veya arka plan işlemleri için SAP uygulama sunucusuna kaydetmek üzere OPEN DATASET kullanmaktır.
- İşlem kodu oluşturun, isteğe bağlı: Programın iş kullanıcıları tarafından kolayca erişilebilir olması için SE93 işlem kodunu kullanarak ABAP programınızı çalıştıran özel bir işlem kodu, örneğin ZPM_PO_EXTRACT, oluşturun.
- Arka plan işini planlayın: Büyük veri hacimleri veya otomatik çıkarmalar için programı arka plan işi olarak çalıştırmak ü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: Program, verileri etkili biçimde filtrelemek için seçim parametreleri içermelidir. Temel filtreler şunlardır:
- Tarih aralığı: Satın alma siparişi oluşturma tarihi (EKKO-AEDAT) için zorunlu tarih aralığı. 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ğe sahip kuruluşlarda çıkarma kapsamını daraltmak için gereklidir.
- Satın Alma Belgesi Türü (BSART): Analizi belirli satın alma siparişi türlerine, örneğin Standart Satın Alma Siparişi, Çerçeve Sipariş veya Stok Transfer Siparişi, odaklamanızı sağlar.
- Değişiklik günlüğünün okunması: 'Purchase Order Approved' veya 'Purchase Order Changed' gibi aktivitelerin çıkarılması SAP değişiklik günlüğü tablolarının (CDHDR, CDPOS) okunmasına dayanır. Bu işlem kaynak yoğun olabilir. ABAP mantığı yalnızca gerekli nesne sınıflarını (EINKBELEG, BANF) ve tablo/alan birleşimlerini seçecek şekilde optimize edilmelidir.
- Yetkilendirmeler: Bu raporu çalıştıran kullanıcı veya teknik hesap, Materials Management (MM), Financial Accounting (FI) ve sistem genelindeki tablolar dahil olmak üzere birden fazla SAP modülündeki tablolar için kapsamlı okuma yetkilerine ihtiyaç duyar. Buna EKKO, EKPO, EBAN, EKBE, BKPF, BSAK, RBKP, NAST, CDHDR ve CDPOS gibi tablolar dahildir.
- Arka planda çalıştırma: Birkaç aydan uzun veri aralıklarını kapsayan veya işlem hacmi yüksek bir sistemde çalışan çıkarmalarda, diyalog işlemi zaman aşımını önlemek için programı her zaman arka planda çalıştırın.
a Ö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 sağlam bir temel sunar. Verimlilik fırsatlarını ortaya çıkarmak ve Satın Almadan Ödemeye sürecinizi bugün dönüştürmek için SAP S/4HANA verilerinizden yararlanmaya başlayın.
Satın Almadan Ödemeye satın alma siparişlerinizi optimize edin: Çevrim süresini şimdi azaltın
Verimsizlikleri ortadan kaldırın ve Satın Almadan Ödemeye satın alma siparişi çevrim sürenizi %30 azaltın.
Kredi kartı gerekmez. Dakikalar içinde kurulumu tamamlayın.