Tedarik Zinciri Yönetimi Veri Template'iniz
Tedarik Zinciri Yönetimi Veri Template'iniz
- Toplanması Önerilen Nitelikler
- Takip Edilmesi Gereken Temel Aktiviteler
- Veri Çekim Rehberliği
Tedarik Zinciri Yönetimi Öznitelikleri
| Ad | Açıklama | ||
|---|---|---|---|
| Faaliyet Adı ActivityName | Tedarik zinciri sürecinde belirli bir noktada gerçekleşen iş faaliyetinin veya `event`'inin adı. | ||
| Açıklama Bu öznitelik, lojistik sipariş yaşam döngüsü içindeki belirli bir adımı veya kilometre taşını (örneğin, 'Satın Alma Siparişi Verildi' veya 'Mal Çıkışı Kaydedildi') tanımlar. Bu faaliyetler, süreci oluşturan Neden önemli Sürecin adımlarını tanımlar; bu, süreç haritalarını keşfetmek, varyantları analiz etmek ve faaliyetler arasındaki döngü sürelerini ölçmek için temeldir. Nereden alınır Çeşitli SAP tablolarındaki (örn. EKKO, LIKP, VBUK) işlem kodları veya durum değişikliklerinin veri dönüşümü sırasında kullanıcı dostu aktivite adlarına eşlenmesiyle oluşturulur. Örnekler Satın Alma Siparişi VerildiSatın Alma Siparişi İçin Mal Kabul KaydedildiGiden Teslimat OluşturulduTeslimat Kanıtı Onaylandı | |||
| Lojistik Sipariş LogisticsOrder | Başlangıç talebinden nihai teslimat onayına kadar tek, uçtan uca bir tedarik zinciri süreci için benzersiz tanımlayıcı. | ||
| Açıklama Lojistik Sipariş, tedarik zinciri içindeki belirli bir talep veya karşılama isteğiyle ilgili tüm faaliyetleri bağlayan birincil Neden önemli Bu, ilgili tüm Nereden alınır Bu kavramsal bir tanımlayıcıdır ve bir Satış Siparişi numarası ile sonraki Satın Alma Siparişi ve Teslimat numaraları gibi çeşitli belge numaralarını bağlayarak oluşturulması gerekebilir. SAP S/4HANA Tedarik Zinciri dokümantasyonuna veya bir konu uzmanına danışın. Örnekler LO-4500078192LO-4500078193LO-4500078194 | |||
| Olay Zamanı EventTime | Faaliyetin ne zaman gerçekleştiğini gösteren, tarih ve saati içeren `timestamp`. | ||
| Açıklama Bu öznitelik, süreçteki her faaliyet için kesin tarih ve saati sağlar. Neden önemli Bu Nereden alınır Belge oluşturma veya temel SAP tablolarındaki durum değişiklikleriyle ilişkili zaman damgası alanlarından, örneğin değişiklik belgeleri için CDHDR/CDPOS veya başlık tablolarındaki ERDAT/ERZET gibi belirli tarih/saat alanlarından çıkarılır. Örnekler 2023-04-15T10:25:00Z2023-04-18T14:00:00Z2023-04-22T08:15:00Z | |||
| Kaynak Sistem SourceSystem | `Data`nın kaynaklandığı sistem. | ||
| Açıklama Olay verilerinin oluşturulduğu belirli kaynak sistem örneğini tanımlar. Karmaşık bir ortamda, bir şirketin farklı bölgeler veya iş birimleri için birden fazla SAP S/4HANA örneği olabilir. Bu öznitelik, veri yönetimi ve analiz segmentasyonu için önemlidir. Analistlerin farklı sistemler arasındaki süreç performansını karşılaştırmasına veya verileri tek, yetkili bir kaynaktan izole etmesine olanak tanır. Neden önemli
Nereden alınır Bu, genellikle Örnekler S4H_PROD_EUS4H_PROD_NAS4H_DEV | |||
| Son Veri Güncellemesi LastDataUpdate | Verilerin kaynak sistemden en son ne zaman yenilendiğini veya çıkarıldığını gösteren zaman damgası. | ||
| Açıklama Bu öznitelik, Neden önemli Veri güncelliği hakkında şeffaflık sağlayarak, kullanıcıların süreç analizinin ne kadar güncel olduğunu bilmesini sağlar. Nereden alınır Bu, genellikle başarılı bir Örnekler 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| Kalite Kontrol Sonucu QualityInspectionResult | Bir kalite kontrol denetiminin sonucu, örneğin 'Başarılı' veya 'Başarısız'. | ||
| Açıklama Bu öznitelik, üretilen veya alınan mallar üzerinde gerçekleştirilen bir kalite kontrolünün sonucunu kaydeder. Sonuç, malların bir sonraki adıma geçip geçemeyeceğini veya yeniden işleme, iade veya hurdaya ayırma gerektirip gerektirmediğini belirler.\n\nBu, Kalite Kontrol Ret Oranları Neden önemli Kaliteyle ilgili KPI'ların hesaplanmasını doğrudan destekler ve tedarik zincirindeki düşük kalite kaynaklarını belirlemeye yardımcı olur. Nereden alınır Bu bilgi genellikle Kalite Yönetimi (QM) modülünde saklanır. Örnekler BaşarılıBaşarısızYeniden İşleme GerekliSapmayla Geçti | |||
| Malzeme Numarası MaterialNumber | İşlenen ürün veya malzeme için benzersiz tanımlayıcı. | ||
| Açıklama Genellikle Neden önemli Süreç sorunlarının (gecikmeler veya kalite hataları gibi) belirli malzemelerde yoğunlaşıp yoğunlaşmadığını belirlemek için ürün düzeyinde analiz yapılmasını sağlar. Nereden alınır Çoğu belge için kalem seviyesi tablolarında bulunur; örneğin Satış Siparişleri için VBAP, Satın Alma Siparişleri için EKPO ve Teslimatlar için LIPS. Alan tipik olarak MATNR olarak adlandırılır. Örnekler FG-100-ARM-2034-BSA-5500 | |||
| Müşteri Adı CustomerName | Siparişin yerine getirildiği müşterinin adı. | ||
| Açıklama Bu öznitelik, bir satış siparişi ve sonraki karşılama faaliyetleriyle ilişkili son müşteriyi tanımlar. Tedarik zinciri sürecinin talep tarafı için bağlam sağlar.\n\nProcess Mining'de, müşteriye göre analiz yapmak, anahtar hesaplar için farklı karşılama Neden önemli Analizin müşteriye göre segmentasyonuna olanak tanır, müşteriye özel davranışları, darboğazları veya hizmet seviyesi anlaşması performansını ortaya çıkarır. Nereden alınır Müşteri numarası (KUNNR), satış belgelerinde (örneğin, VBAK tablosu) saklanır. Adı, merkezi müşteri ana tablosu KNA1'den alınır. Örnekler Retail A.Ş.Çözümler YenileÜretim Ortakları | |||
| Talep Edilen Teslimat Tarihi RequestedDeliveryDate | Tedarikçiden malları teslim etmesinin istendiği tarih. | ||
| Açıklama Bu, satın alma siparişinde belirtilen teslimat tarihidir ve tedarikçi için hedefi temsil eder. Gerçek teslimat performansının ölçüldüğü temel olarak hizmet eder.\n\nBu tarih, Tedarikçi Zamanında Teslimat Oranı Neden önemli Bu, 'Tedarikçi Zamanında Teslimat Oranı' Nereden alınır Satın alma siparişi kalem tablosu EKPO'da, EINDT (Teslimat Tarihi) alan adıyla bulunur. Örnekler 2023-05-20T00:00:00Z2023-06-15T00:00:00Z2023-07-01T00:00:00Z | |||
| Tedarikçi Adı SupplierName | Tedarik faaliyetleriyle ilişkili tedarikçi veya satıcının adı. | ||
| Açıklama Bu öznitelik, mal veya hizmetlerin tedarik edildiği tedarikçiyi tanımlar. Genellikle 'Satın Alma Talebi Oluşturuldu' ve 'Satın Alma Siparişi Verildi' gibi faaliyetlerle ilişkilidir.\n\nTedarikçi Adı, Tedarikçi Teslimat Performansı Neden önemli Tedarikçiye göre performans analizine olanak tanır; bu, tedarik sürecini optimize etmek ve tedarikçi güvenilirliğini değerlendirmek için çok önemlidir. Nereden alınır Tedarikçi numarası (LIFNR), satın alma belgelerinde (örneğin, EKKN, EBAN tabloları) saklanır. Adı, merkezi satıcı ana tablosu LFA1'den alınır. Örnekler Global Components Inc.Advanced Materials LLCPrecision Parça A.Ş. | |||
| Tesis Plant | Faaliyetin gerçekleştiği üretim veya dağıtım tesisi. | ||
| Açıklama Tesis (Plant), malların üretildiği, depolandığı veya dağıtıldığı bir konumu temsil eden bir SAP organizasyonel birimidir. Süreç faaliyetleri için coğrafi veya işlevsel bağlamı sağlar.\n\nTesis bazında süreç performansını analiz etmek yaygın bir gerekliliktir. Farklı operasyonel siteler arasında verimlilik, üretim hızı ve Neden önemli Analiz için coğrafi veya organizasyonel bir boyut sağlar, farklı tesisler arasında performans karşılaştırması yapılmasına olanak tanır. Nereden alınır VBAP (Satış), EKPO (Satın Alma) ve LIPS (Teslimat) gibi birçok belge kalem tablosunda bulunur. Alan tipik olarak WERKS olarak adlandırılır. Örnekler 100021003500 | |||
| Yürüten Kullanıcı ExecutingUser | `Activity`'yi gerçekleştiren kişinin kullanıcı kimliği. | ||
| Açıklama Bu öznitelik, belirli bir faaliyeti (örneğin, bir satın alma siparişi oluşturma veya mal girişi kaydetme) gerçekleştiren çalışanın SAP kullanıcı adını veya kimliğini yakalar. Süreç adımlarını ilgili insan kaynaklarına bağlar.\n\nKullanıcıya göre analiz yapmak, iş yükü dağılımını anlamaya, eğitim ihtiyaçlarını belirlemeye ve bireyler veya ekipler arasındaki performans farklılıklarını tespit etmeye yardımcı olur. Ayrıca, kritik süreç adımlarını kimin gerçekleştirdiğini görmek için Neden önemli Faaliyetleri belirli kullanıcılara atar, iş yükü analizi, performans karşılaştırması ve uyumsuz eylemlerin araştırılmasını sağlar. Nereden alınır Birçok SAP tablosundaki 'Oluşturan' veya 'Değiştiren' alanlarında bulunur; örneğin EKKO (Satın Alma Siparişi Başlığı), LIKP (Teslimat Başlığı) ve VBRK (Fatura Başlığı)'ndaki ERNAM. Örnekler CBROWNJSMITHASINGH | |||
| Bitiş Saati EndTime | Bir faaliyetin ne zaman tamamlandığını gösteren `timestamp`, işlem süresini hesaplamak için kullanılır. | ||
| Açıklama Bitiş Zamanı, belirli bir faaliyetin tamamlandığını işaret eder. Başlangıç Zamanı ( Neden önemli Kesin aktivite işleme sürelerinin hesaplanmasını sağlar, katma değerli iş ile bekleme süresi arasında ayrım yapmaya yardımcı olur. Nereden alınır SAP'deki durum değişikliklerinden türetilebilir. Örneğin, başlangıç 'Devam Ediyor' durum güncellemesi, bitiş ise JEST/JCDS gibi tablolardan 'Tamamlandı' durum güncellemesidir. Anlık olaylar için Bitiş Zamanı, Başlangıç Zamanı'na eşit olabilir. Örnekler 2023-04-15T11:30:00Z2023-04-18T14:05:00Z2023-04-22T09:00:00Z | |||
| Gecikmeli Teslimat mı IsLateDelivery | Bir tedarikçi teslimatının talep edilen teslimat tarihinden sonra yapılıp yapılmadığını gösteren bir boolean bayrak. | ||
| Açıklama Bu hesaplanmış işaret, bir teslimatın zamanında olup olmadığına dair basit bir doğru veya yanlış göstergesi sağlar. 'Satın Alma Siparişi İçin Mal Kabulü Kaydedildi' faaliyetinin Neden önemli Her teslimat için net, ikili bir sonuç sağlayarak tedarikçi performans analizini basitleştirir; bu, zamanında teslimat Nereden alınır Bu hesaplanmış bir alandır. Mantık şudur: EĞER ('Satın Alma Siparişi İçin Mal Kabulü Kaydedildi'.EventTime > PurchaseOrder.RequestedDeliveryDate) O ZAMAN Doğru DEĞİLSE Yanlış. Örnekler truefalse | |||
| İşlem Süresi ProcessingTime | Bir faaliyet üzerinde aktif olarak çalışılan süre. | ||
| Açıklama İşlem Süresi, bir faaliyetin başlangıç zamanından bitiş zamanına kadar hesaplanan süredir. Adımlar arasındaki bekleme süresinin aksine, bir süreç adımı için fiili çalışma veya 'dokunma süresi'ni temsil eder.\n\nBu metrik, verimsizlikleri belirlemek için temeldir. İşlem süresini bekleme süresinden ayırarak, analistler gecikmelerin görevlerin yavaş yürütülmesinden mi yoksa departmanlar veya sistemler arasındaki uzun kuyruklardan ve devir gecikmelerinden mi kaynaklandığını belirleyebilirler. Neden önemli Aktif çalışma süresini boş bekleme süresinden ayırmaya yardımcı olur, bu da süreç gecikmelerinin gerçek kaynaklarını belirlemek için kritik öneme sahiptir. Nereden alınır Aktivitenin Başlangıç Zamanı'nın Bitiş Zamanı'ndan çıkarılmasıyla hesaplanır (Bitiş Zamanı - Başlangıç Zamanı). Örnekler 1S30D8SP2D | |||
| Purchase Order Number PurchaseOrderNumber | Satın Alma Siparişi (PO) belgesi için benzersiz tanımlayıcı. | ||
| Açıklama Satın Alma Siparişi Numarası, bir tedarikçiden malzeme sipariş etmek için kullanılan resmi belge numarasıdır. Tedarik zincirinin satın alma bölümünde anahtar bir tanımlayıcıdır.\n\nBu öznitelik, tedarik sürecine derinlemesine inilmesini sağlar. Tedarik Uçtan Uca Döngü Süresi Neden önemli Tedarik alt sürecine derinlemesine inmek ve ilgili tedarik Nereden alınır Satın Alma Siparişi başlık tablosu EKKO ve kalem tablosu EKPO'da bulunur. Alanın adı EBELN'dir. Örnekler 450007819245000781934500078194 | |||
| Satış Siparişi Numarası SalesOrderNumber | Satış Siparişi (SO) belgesi için benzersiz tanımlayıcı. | ||
| Açıklama Satış Siparişi Numarası, bir müşteriye yapılan satışı onaylayan resmi belge numarasıdır. Tedarik zincirinin siparişten nakde dönüştürme (order-to-cash) bölümünde anahtar bir tanımlayıcıdır.\n\nBu öznitelik, belirli bir müşteri siparişinin karşılanmasını takip etmek için kritik öneme sahiptir. İlk müşteri talebini teslimat ve faturalandırma gibi tüm sonraki faaliyetlere bağlamaya yardımcı olarak Sipariş Karşılama Süresi Analizini destekler. Neden önemli Müşteri talebini lojistik ve finansal mutabakata bağlayan, sipariş karşılama alt süreci için temel bir tanımlayıcı görevi görür. Nereden alınır Satış Siparişi başlık tablosu VBAK ve kalem tablosu VBAP'ta bulunur. Alanın adı VBELN'dir. Örnekler 100023451000234610002347 | |||
| Sipariş Miktarı OrderQuantity | Sipariş kalemindeki malzemenin miktarı. | ||
| Açıklama Bu öznitelik, bir satış siparişi veya satın alma siparişi kaleminde istenen bir malzemenin birim sayısını belirtir. Her işlem için bir hacim ölçüsü sağlar.\n\nMiktara göre analiz yapmak, daha büyük bir iş etkisi olabilecek yüksek hacimli siparişler üzerindeki analizi önceliklendirmeye yardımcı olur. Ayrıca, birim başına maliyet hesaplama gibi diğer metrikleri normalize etmek veya sipariş boyutunun işlem sürelerini nasıl etkilediğini anlamak için de kullanılabilir. Neden önemli İşlemlere hacim bağlamı sağlar, etki analizi yapılmasına ve vakaların boyutuna göre segmentlere ayrılmasına olanak tanır. Nereden alınır Kalem seviyesi tablolarında bulunur; örneğin EKPO'daki MENGE (Satın Alma Siparişi) veya VBAP'taki KWMENG (Satış Siparişi). Örnekler 100500025 | |||
| Taşıyıcı Adı CarrierName | Sevkiyatı yapan nakliye şirketinin veya nakliyecinin adı. | ||
| Açıklama Taşıyıcı Adı, malları konumlar arasında, örneğin bir depodan müşteriye taşımaktan sorumlu lojistik servis sağlayıcısını tanımlar.\n\nBu öznitelik, Taşıma Döngü Süresi Analizi Neden önemli Taşıma sağlayıcısına göre performans analizine olanak tanır; bu, lojistik maliyetlerini ve teslimat sürelerini optimize etmek için anahtardır. Nereden alınır Taşıyıcı Kimliği (nakliye acentesi), VTTK (Sevkiyat Başlığı) tablosu gibi sevkiyat belgelerinde saklanır. Adı, LFA1 gibi ana Örnekler DHLFedExMaersk Logistics | |||
| Yeniden İşleme mi? IsRework | Bir faaliyetin veya faaliyet dizisinin yeniden işleme temsil edip etmediğini gösteren bir bayrak. | ||
| Açıklama Bu boolean öznitelik, süreçteki önceki adımların tekrarları olan faaliyetleri işaretleyerek bir tür yeniden işleme veya düzeltme olduğunu gösterir. Örneğin, bir 'Kalite Kontrolü'nü bir 'Üretim Siparişi Oluşturuldu' adımı ve ardından başka bir 'Kalite Kontrolü' takip ediyorsa, ikinci kontrol yeniden işleme olarak işaretlenebilir.\n\nYeniden işlemeyi belirlemek, süreç verimsizliğini ve gizli maliyetleri anlamak için anahtardır. Bu işaret, yeniden işleme döngülerinin sıklığını ve etkisini nicelleştirmeye yardımcı olur, Sipariş İşleme Hata Oranı Neden önemli Yeniden işleme döngüsünün bir parçası olan faaliyetleri açıkça belirleyerek ve sayarak süreç verimsizliklerini nicelleştirmeye yardımcı olur. Nereden alınır Bu, genellikle Örnekler truefalse | |||
Tedarik Zinciri Yönetimi Faaliyetleri
| Aktivite | Açıklama | ||
|---|---|---|---|
| Mal Çıkışı Yapıldı | Bu faaliyet, malların depodan yasal ve fiziksel olarak çıkışını temsil eder. Envanteri azaltır ve satılan malların maliyetini kaydeder, siparişin resmi sevkiyatını işaret eder. | ||
| Neden önemli Bu, 'yolda' döneminin başlangıcını işaret eden kritik bir kilometre taşıdır. Malların şirketin mülkiyetinden teslimat için çıktığı kesin noktadır. Nereden alınır Bu, bir malzeme belgesi oluşturan açık bir Yakala Giden teslimatla ilişkili mal çıkışı malzeme belgesinden kayıt tarihini (MKPF-BUDAT) kullanın. Event tipi explicit | |||
| Satın Alma Siparişi İçin Mal Kabul Kaydedildi | Bir satın alma siparişine karşılık bir tedarikçiden hammadde veya malların fiziksel olarak teslim alınmasını temsil eder. Bu `event`, malların depoya veya tesise ulaştığında kaydedilir. | ||
| Neden önemli Bu faaliyet, tedarik döngüsünün tedarikçi teslimat kısmını tamamlar. Tedarikçi zamanında teslimat oranlarını hesaplamak ve gelen lojistik performansını anlamak için hayati öneme sahiptir. Nereden alınır Bu, bir malzeme belgesi kaydı aracılığıyla yakalanan açık bir Yakala Satın alma siparişiyle ilişkili malzeme belgesinden kayıt tarihini (MKPF-BUDAT) kullanın. Event tipi explicit | |||
| Satın Alma Siparişi Verildi | Gerekli malzemeler için harici bir tedarikçiye satın alma siparişinin resmi olarak oluşturulmasını ve gönderilmesini işaretler. Bu aktivite, bir satın alma talebini bir tedarikçiyle yasal olarak bağlayıcı bir taahhüde dönüştürür. | ||
| Neden önemli Kritik bir dönüm noktası olarak, bu aktivite tedarikçi teslimat sürelerini ve tedarik döngüsü sürelerini ölçmek için çok önemlidir. Tedarikçi zamanında teslimat performansını değerlendirmek için bir temel sağlar. Nereden alınır Bu, satın alma siparişinin oluşturulmasıyla kaydedilen açık bir Yakala Satın alma siparişi için belge oluşturma tarihini (EKKO-AEDAT) kullanın. Event tipi explicit | |||
| Satış Siparişi Oluşturuldu | Bu faaliyet, bir müşterinin mallar için talebini resmi olarak yakalayan yeni bir satış siparişinin oluşturulmasını işaret eder. Bir kullanıcı sistemde yeni bir satış siparişi belgesi kaydettiğinde kaydedilen açık bir `event`'tir. | ||
| Neden önemli Bu, siparişten nakde dönüştürme (order-to-cash) süreci için birincil başlangıç noktasıdır. Bu Nereden alınır Bu Yakala Satış siparişi belgesi için oluşturma tarihini (VBAK-ERDAT) ve saatini (VBAK-ERZET) kullanın. Event tipi explicit | |||
| Teslimat Kanıtı Onaylandı | Müşteri veya taşıyıcıdan, malların belirtildiği gibi alındığına dair resmi onayı temsil eder. Bu genellikle giden teslimatın `POD` bilgileriyle güncellenmesiyle kaydedilir. | ||
| Neden önemli Bu faaliyet, karşılama sürecinin kesin sonudur. Doğru faturalandırma, anlaşmazlık çözümü ve teslimat döngüsünün son ayağını ölçmek için kritik öneme sahiptir. Nereden alınır Bu açık bir Yakala Teslimat belgesinden Teslimat Kanıtı Tarihini (LIKP-PODAT) kullanın. Event tipi explicit | |||
| Üretilen Mallar | Bu faaliyet, malların üretiminin tamamlandığına dair onayı temsil eder. Genellikle üretim siparişinden bir mal alımı olarak kaydedilir ve bitmiş ürünü envantere taşır. | ||
| Neden önemli Bu, üretim döngüsünün sonunu işaret eder. Üretim siparişi oluşturma ile bu Nereden alınır Bu, bir malzeme belgesi kaydı (üretim siparişinden mal alımı) aracılığıyla açıkça yakalanabilir veya üretim siparişinin nihai onayından (AFRU tablosu) veya 'Teslim Edildi' durum değişikliğinden çıkarılabilir. Yakala Üretim siparişi için son mal kabul malzeme belgesinin kayıt tarihinden veya bir durum değişikliğinden çıkarın. Event tipi inferred | |||
| Envanter Mevcudiyeti Kontrol Edildi | İstenen ürünlerin satış siparişini karşılamak için stokta olup olmadığını belirlemek üzere sistem veya manuel kontrolü temsil eder. Bu genellikle satış siparişi oluşturma sırasında otomatik bir adımdır ancak ayrı bir `event` olarak kaydedilmeyebilir. | ||
| Neden önemli Bir sipariş ile bu kontrol arasındaki süreyi ve sonucunu anlamak, envanter seviyelerinin karşılama sürelerini nasıl etkilediğini analiz etmeye yardımcı olur. Buradaki gecikmeler genellikle tedarik veya üretim faaliyetlerine yol açar. Nereden alınır Bu genellikle açık bir Yakala Satış siparişi plan satırındaki (VBEP tablosu) onay durumu güncellemesinden çıkarın. Event tipi inferred | |||
| Giden Teslimat Oluşturuldu | Müşteriye mal toplama ve sevkiyatını yetkilendiren bir teslimat belgesinin oluşturulmasını belirtir. Bu faaliyet, süreci sipariş yönetiminden lojistik yürütmeye taşır. | ||
| Neden önemli Bu, fiziksel karşılama sürecini başlatan anahtar bir adımdır. Sipariş oluşturma ve teslimat oluşturma arasındaki gecikmeler, planlama veya bulunabilirlik sorunlarına işaret edebilir. Nereden alınır Bu açık bir Yakala Teslimat belgesi başlığından oluşturma tarihini (LIKP-ERDAT) ve saatini (LIKP-ERZET) kullanın. Event tipi explicit | |||
| Kalite Kontrolü Gerçekleştirildi | Üretilen mallar üzerindeki bir kalite kontrol denetiminin tamamlanmasını temsil eder. Bu denetimin sonucu, başarılı veya başarısız olarak, bir kullanım kararında kaydedilir. | ||
| Neden önemli Bu faaliyet, ürün kalitesini izlemek ve üretim sorunlarını belirlemek için kritik öneme sahiptir. Yüksek ret oranları veya uzun muayene süreleri önemli Nereden alınır Bu, bir kalite kontrol lotu için kullanım kararı verildiğinde yakalanan açık bir Yakala Muayene lotu için kullanım kararının kaydedildiği Event tipi explicit | |||
| Mallar Varış Yerinde Boşaltıldı | Bu faaliyet, malların müşterinin konumunda fiziksel olarak boşaltılmasını belirtir. Bu `event` SAP'de açıkça takip edilmeyebilir ve genellikle taşıyıcı `veri`lerinden veya sonraki `event`'lerden çıkarılması gerekir. | ||
| Neden önemli Bu, yolculuğun 'yolda' aşamasının sonunu işaret eder. Mal çıkışından bu noktaya kadar geçen süre, lojistik optimizasyonu için anahtar olan taşıma süresidir. Nereden alınır Bu, çekirdek Yakala Taşıyıcı durum güncellemelerinden (örn. EDI 214) çıkarın veya Teslimat Kanıtı zaman damgasını yakın bir vekil olarak kullanın. Event tipi inferred | |||
| Müşteri Faturası Oluşturuldu | Bu faaliyet, teslim edilen mallara veya hizmetlere dayanarak müşteri için faturalandırma belgesinin oluşturulmasını işaret eder. Sürecin son finansal mutabakat kısmını başlatır. | ||
| Neden önemli Bu faaliyet, faturalandırma döngü süresini analiz etmek için anahtardır. Teslimat onayı ve faturalandırma arasındaki gecikmeler, nakit akışını olumsuz etkileyebilir. Nereden alınır Bu açık bir Yakala Faturalandırma belgesi başlığından oluşturma tarihini (VBRK-ERDAT) kullanın. Event tipi explicit | |||
| Satın Alma İsteği Oluşturuldu | Bu faaliyet, gerekli mal veya hammaddeleri tedarik etmek için dahili bir talebin oluşturulmasını belirtir. Genellikle envanterin bir satış siparişini karşılamak için yetersiz olması veya yeniden sipariş noktasının altına düşmesi durumunda tetiklenir. | ||
| Neden önemli Bu, tedarik döngüsünün ilk adımıdır. Oluşturulmasını takip etmek, tedarikin başlatılmasındaki gecikmeleri belirlemeye yardımcı olur ve uçtan uca satın alma sürecinin analizini destekler. Nereden alınır Bu açık bir Yakala Satın alma talebi belgesi için oluşturma tarihini (EBAN-BADAT) kullanın. Event tipi explicit | |||
| Sevkiyat Oluşturuldu | Taşıma planlaması için bir veya daha fazla teslimatı gruplayan bir sevkiyat belgesinin oluşturulmasını temsil eder. Bu belge, taşıyıcı, rota ve taşıma modu hakkında ayrıntıları içerir. | ||
| Neden önemli Bu faaliyet, resmi taşıma planlamasının başlangıcıdır. Mal çıkışı ile sevkiyat tamamlanması arasındaki süreyi analiz etmek, taşıma sürecinin verimliliğini ortaya koyar. Nereden alınır Bu, sevkiyat başlık tablosunda (VTTK, ERDAT alanı) kaydedilen açık bir Yakala Sevkiyat belgesi başlığından oluşturma tarihini (VTTK-ERDAT) kullanın. Event tipi explicit | |||
| Toplama Tamamlandı | Bu faaliyet, giden teslimat için depodan ürün toplama fiziksel sürecinin tamamlanmasını işaret eder. Birçok sistemde, bu, teslimat belgesinin toplama durumu güncellendiğinde onaylanır. | ||
| Neden önemli Verimli toplama, depo verimi için kritik öneme sahiptir. Bu aktiviteyi takip etmek, depo operasyonlarındaki darboğazları belirlemeye ve toplama performansını ölçmeye yardımcı olur. Nereden alınır Bu genellikle tek, ayrık bir Yakala Toplama durumu (LIPS-KOSTA) tamamen toplandı olarak güncellendiğinde değişiklik belgelerinden çıkarın. Event tipi inferred | |||
| Üretim Siparişi Oluşturuldu | Satış siparişi için gerekli bitmiş malları üretmek üzere bir üretim siparişinin oluşturulduğunu gösterir. Bu, kurum içi üretim sürecinin resmi başlangıcıdır. | ||
| Neden önemli Bir üretim siparişinin oluşturulması, üretim teslim süresinin başlangıcını işaret eder. Bunun analizi, talep sinyali ile üretim başlangıcı arasındaki gecikmeleri belirlemeye yardımcı olur. Nereden alınır Bu açık bir Yakala Sipariş başlık tablosundan oluşturma tarihini (AUFK-ERDAT) kullanın. Event tipi explicit | |||
Veri Çekim Kılavuzları
Adımlar
- Ön Koşullar: Gerekli SAP S/4HANA Çekirdek Veri Servisleri (CDS) görünümlerine erişmek için yeterli yetkilere sahip bir kullanıcınız olduğundan emin olun. Bu genellikle SAP güvenlik ekibiniz tarafından atanmış belirli bir rol gerektirir. Ayrıca, SAP HANA veri tabanına bağlanabilen DBeaver veya SAP HANA Studio gibi bir SQL istemcisine de ihtiyacınız olacaktır.
- Veri Tabanı Bağlantısı Kurun: SQL istemcinizi SAP S/4HANA veri tabanına bağlanacak şekilde yapılandırın. Veri tabanı sunucu adresi, bağlantı noktası (örneğin, 3xx15, burada xx örnek numarasıdır), bir veri tabanı kullanıcı adı ve bir parola gerekecektir.
- SQL Sorgusunu Hazırlayın: Bu belgenin sorgu bölümünde sağlanan SQL sorgusunun tamamını SQL istemcinizin düzenleyicisine kopyalayın. Bu sorgu, çeşitli lojistik ve satış modüllerinden tüm belirtilen faaliyetleri çekmek için tasarlanmıştır.
- Veri Çekim Parametrelerini Ayarlayın: Sorguyu çalıştırmadan önce, her alt sorgunun
WHEREyan tümcelerindeki yer tutucu koşullarını bulun.'YourCompanyCode'öğesini analiz ettiğiniz gerçek şirket koduyla değiştirmeli ve istenilen veri çekim dönemini tanımlamak için'YYYY-MM-DD'gibi tarih aralığı yer tutucularını ayarlamalısınız. - Sorguyu Çalıştırın: SQL betiğinin tamamını çalıştırın. Çalışma süresi, seçilen tarih aralığına ve sisteminizdeki veri hacmine bağlı olarak değişecektir. Sistem yükünü en aza indirmek için bunu yoğun olmayan saatlerde çalıştırmanız tavsiye edilir.
- İlk Sonuçları İnceleyin: Sorgu tamamlandığında, SQL istemcinizdeki çıktıyı kısaca tarayın. Makul sayıda satır olup olmadığını kontrol edin, LogisticsOrder, ActivityName ve EventTime gibi sütunların dolu olduğundan emin olun ve çeşitli aktivite adlarının göründüğünü doğrulayın.
- Verileri CSV'ye Aktarın: Tüm sonuç setini SQL istemcinizden bir CSV dosyasına aktarın. Özel karakterlerle ilgili sorunları önlemek için UTF-8 kodlamasını seçin.
- Yükleme için Biçimlendirme: Nihai CSV dosyasındaki sütun başlıklarının alım için gerekli öznitelik adlarıyla (örn.
LogisticsOrder,ActivityName,EventTime) tam olarak eşleştiğinden emin olun. Sağlanan SQL sorgusu kullanıldığında başka bir veri dönüşümüne gerek duyulmamalıdır.
Konfigürasyon
- Ön Koşullar: Temel SAP HANA veri tabanına erişim gereklidir. Veri tabanı kullanıcısı, sorguda referans verilen tüm CDS görünümleri üzerinde
SELECTyetkilerine sahip olmalıdır; buna I_SalesOrderItem, I_PurchaseOrderItem, I_OutboundDeliveryItem, I_MaterialDocumentItem, I_ProductionOrder, I_QualityInspection, I_Shipment ve I_BillingDocumentItem dahil ancak bunlarla sınırlı değildir. - Tarih Aralığı Filtrelemesi: Sağlanan sorgu, genellikle bir oluşturulma tarihi alanında (
CreationDateveyaDocumentDate) bir tarih aralığı filtresi için bir yer tutucu içerir. İlk analiz için, aşırı sistem yüküne neden olmadan temsili bir veri seti sağlamak amacıyla 3 ila 6 aylık bir dönem önerilir. - Anahtar İş Filtreleri: Verilerin ilgili olmasını sağlamak için belirli organizasyonel birimlere göre filtrelenmesi kritik öneme sahiptir. Sorgu,
Şirket Koduiçin bir yer tutucu ile önceden yapılandırılmıştır. Analiz kapsamınıza bağlı olarakSatış Organizasyonu,Dağıtım KanalıveyaTesisiçin de filtreler eklemek isteyebilirsiniz. - Performans Değerlendirmeleri: Bu, birden fazla büyük CDS görünümünü birleştiren karmaşık bir sorgudur. Çalıştırma, önemli sistem kaynakları tüketebilir. Veri çekimlerini iş dışı saatlerde planlayın. Çok büyük veri setleri için, sorguyu aya göre daha küçük, sıralı partiler halinde çalıştırmayı düşünün.
a Örnek Sorgu sql
WITH SalesOrderLink AS (
SELECT DISTINCT
sd.SalesDocument AS SalesOrder,
pr.PurchaseRequisition AS PurchaseRequisition,
po.PurchaseOrder AS PurchaseOrder,
od.DeliveryDocument AS OutboundDelivery,
bd.BillingDocument AS BillingDocument
FROM I_SalesDocItemProcessFlow AS pf
LEFT JOIN I_SalesDocumentItem AS sd ON pf.PrecedingDocument = sd.SalesDocument AND pf.PrecedingDocumentItem = sd.SalesDocumentItem
LEFT JOIN I_PurchaseRequisitionItem AS pr ON pf.SubsequentDocument = pr.PurchaseRequisition AND pf.SubsequentDocumentItem = pr.PurchaseRequisitionItem
LEFT JOIN I_PurchaseOrderItem AS po ON pf.SubsequentDocument = po.PurchaseOrder AND pf.SubsequentDocumentItem = po.PurchaseOrderItem
LEFT JOIN I_OutboundDeliveryItem AS od ON pf.SubsequentDocument = od.DeliveryDocument AND pf.SubsequentDocumentItem = od.DeliveryDocumentItem
LEFT JOIN I_BillingDocumentItem AS bd ON pf.SubsequentDocument = bd.BillingDocument AND pf.SubsequentDocumentItem = bd.BillingDocumentItem
WHERE sd.SalesDocument IS NOT NULL
)
SELECT
so.SalesOrder AS "LogisticsOrder",
'Sales Order Created' AS "ActivityName",
so.CreationDate || ' ' || so.CreationTime AS "EventTime",
so.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
soi.Material AS "MaterialNumber",
soi.Plant AS "Plant",
soi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_SalesOrder AS so
JOIN I_SalesOrderItem AS soi ON so.SalesOrder = soi.SalesOrder
LEFT JOIN I_Customer AS cust ON so.SoldToParty = cust.Customer
WHERE so.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
so.SalesOrder AS "LogisticsOrder",
'Inventory Availability Checked' AS "ActivityName",
so.CreationDate || ' ' || so.CreationTime AS "EventTime",
so.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
soi.Material AS "MaterialNumber",
soi.Plant AS "Plant",
soi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_SalesOrder AS so
JOIN I_SalesOrderItem AS soi ON so.SalesOrder = soi.SalesOrder
LEFT JOIN I_Customer AS cust ON so.SoldToParty = cust.Customer
WHERE so.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Purchase Requisition Created' AS "ActivityName",
pr.CreationDate || ' ' || '00:00:00' AS "EventTime",
pr.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
pri.Material AS "MaterialNumber",
pri.Plant AS "Plant",
pri.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_PurchaseRequisition AS pr
JOIN I_PurchaseRequisitionItem AS pri ON pr.PurchaseRequisition = pri.PurchaseRequisition
JOIN SalesOrderLink sl ON pr.PurchaseRequisition = sl.PurchaseRequisition
WHERE pr.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND pr.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Purchase Order Issued' AS "ActivityName",
po.PurchaseOrderDate || ' ' || '00:00:00' AS "EventTime",
po.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
sup.SupplierName AS "SupplierName",
poi.Material AS "MaterialNumber",
poi.Plant AS "Plant",
poi.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_PurchaseOrder AS po
JOIN I_PurchaseOrderItem AS poi ON po.PurchaseOrder = poi.PurchaseOrder
LEFT JOIN I_Supplier AS sup ON po.Supplier = sup.Supplier
JOIN SalesOrderLink sl ON po.PurchaseOrder = sl.PurchaseOrder
WHERE po.PurchaseOrderDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND po.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Goods Receipt For PO Posted' AS "ActivityName",
md.DocumentDate || ' ' || md.CreationTime AS "EventTime",
md.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
sup.SupplierName AS "SupplierName",
mdi.Material AS "MaterialNumber",
mdi.Plant AS "Plant",
poi.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_MaterialDocumentHeader AS md
JOIN I_MaterialDocumentItem AS mdi ON md.MaterialDocument = mdi.MaterialDocument AND md.MaterialDocumentYear = mdi.MaterialDocumentYear
JOIN I_PurchaseOrderItem AS poi ON mdi.PurchaseOrder = poi.PurchaseOrder AND mdi.PurchaseOrderItem = poi.PurchaseOrderItem
LEFT JOIN I_Supplier AS sup ON poi.Supplier = sup.Supplier
JOIN SalesOrderLink sl ON poi.PurchaseOrder = sl.PurchaseOrder
WHERE md.DocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND mdi.GoodsMovementType = '101' AND mdi.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Production Order Created' AS "ActivityName",
po.CreationDate || ' ' || po.CreationTime AS "EventTime",
po.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
po.Material AS "MaterialNumber",
po.ProductionPlant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_ProductionOrder AS po
JOIN SalesOrderLink sl ON po.SalesOrder = sl.SalesOrder
WHERE po.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Goods Produced' AS "ActivityName",
md.DocumentDate || ' ' || md.CreationTime AS "EventTime",
md.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
mdi.Material AS "MaterialNumber",
mdi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_MaterialDocumentHeader AS md
JOIN I_MaterialDocumentItem AS mdi ON md.MaterialDocument = mdi.MaterialDocument AND md.MaterialDocumentYear = mdi.MaterialDocumentYear
JOIN I_ProductionOrder AS po ON mdi.ManufacturingOrder = po.ManufacturingOrder
JOIN SalesOrderLink sl ON po.SalesOrder = sl.SalesOrder
WHERE md.DocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND mdi.GoodsMovementType = '101'
UNION ALL
SELECT
qi.SalesOrder AS "LogisticsOrder",
'Quality Inspection Performed' AS "ActivityName",
qi.InspLotUsageDecisionDate || ' ' || qi.InspLotUsageDecisionTime AS "EventTime",
qi.InspLotUsageDecisionMadeByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
qi.Material AS "MaterialNumber",
qi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
qi.InspLotUsageDecisionCode AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_QualityInspection AS qi
WHERE qi.InspLotUsageDecisionDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND qi.SalesOrder IS NOT NULL
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Outbound Delivery Created' AS "ActivityName",
od.CreationDate || ' ' || od.CreationTime AS "EventTime",
od.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Picking Completed' AS "ActivityName",
od.PickingDate || ' ' || od.PickingTime AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.PickingDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallPickingStatus = 'C'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Goods Issue Posted' AS "ActivityName",
od.ActualGoodsMovementDate || ' ' || od.ActualGoodsMovementTime AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.ActualGoodsMovementDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallGoodsMovementStatus = 'C'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Shipment Created' AS "ActivityName",
sh.CreationDate || ' ' || sh.CreationTime AS "EventTime",
sh.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
NULL AS "MaterialNumber",
sh.ShippingPoint AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_Shipment AS sh
JOIN I_ShipmentDelivery AS sd ON sh.Shipment = sd.Shipment
JOIN SalesOrderLink sl ON sd.Delivery = sl.OutboundDelivery
WHERE sh.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Proof Of Delivery Confirmed' AS "ActivityName",
od.PODActualDate || ' ' || '00:00:00' AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.PODActualDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallPODStatus = 'C'
UNION ALL
SELECT
bdi.SalesDocument AS "LogisticsOrder",
'Customer Invoice Created' AS "ActivityName",
bd.BillingDocumentDate || ' ' || bd.CreationTime AS "EventTime",
bd.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
bdi.Material AS "MaterialNumber",
bdi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_BillingDocument AS bd
JOIN I_BillingDocumentItem AS bdi ON bd.BillingDocument = bdi.BillingDocument
LEFT JOIN I_Customer AS cust ON bd.SoldToParty = cust.Customer
WHERE bd.BillingDocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND bd.CompanyCode = 'YourCompanyCode' AND bdi.SalesDocument IS NOT NULL; Adımlar
- Ön Koşullar: Gerekli SAP S/4HANA Çekirdek Veri Servisleri (CDS) görünümlerine erişmek için yeterli yetkilere sahip bir kullanıcınız olduğundan emin olun. Bu genellikle SAP güvenlik ekibiniz tarafından atanmış belirli bir rol gerektirir. Ayrıca, SAP HANA veri tabanına bağlanabilen DBeaver veya SAP HANA Studio gibi bir SQL istemcisine de ihtiyacınız olacaktır.
- Veri Tabanı Bağlantısı Kurun: SQL istemcinizi SAP S/4HANA veri tabanına bağlanacak şekilde yapılandırın. Veri tabanı sunucu adresi, bağlantı noktası (örneğin, 3xx15, burada xx örnek numarasıdır), bir veri tabanı kullanıcı adı ve bir parola gerekecektir.
- SQL Sorgusunu Hazırlayın: Bu belgenin sorgu bölümünde sağlanan SQL sorgusunun tamamını SQL istemcinizin düzenleyicisine kopyalayın. Bu sorgu, çeşitli lojistik ve satış modüllerinden tüm belirtilen faaliyetleri çekmek için tasarlanmıştır.
- Veri Çekim Parametrelerini Ayarlayın: Sorguyu çalıştırmadan önce, her alt sorgunun
WHEREyan tümcelerindeki yer tutucu koşullarını bulun.'YourCompanyCode'öğesini analiz ettiğiniz gerçek şirket koduyla değiştirmeli ve istenilen veri çekim dönemini tanımlamak için'YYYY-MM-DD'gibi tarih aralığı yer tutucularını ayarlamalısınız. - Sorguyu Çalıştırın: SQL betiğinin tamamını çalıştırın. Çalışma süresi, seçilen tarih aralığına ve sisteminizdeki veri hacmine bağlı olarak değişecektir. Sistem yükünü en aza indirmek için bunu yoğun olmayan saatlerde çalıştırmanız tavsiye edilir.
- İlk Sonuçları İnceleyin: Sorgu tamamlandığında, SQL istemcinizdeki çıktıyı kısaca tarayın. Makul sayıda satır olup olmadığını kontrol edin, LogisticsOrder, ActivityName ve EventTime gibi sütunların dolu olduğundan emin olun ve çeşitli aktivite adlarının göründüğünü doğrulayın.
- Verileri CSV'ye Aktarın: Tüm sonuç setini SQL istemcinizden bir CSV dosyasına aktarın. Özel karakterlerle ilgili sorunları önlemek için UTF-8 kodlamasını seçin.
- Yükleme için Biçimlendirme: Nihai CSV dosyasındaki sütun başlıklarının alım için gerekli öznitelik adlarıyla (örn.
LogisticsOrder,ActivityName,EventTime) tam olarak eşleştiğinden emin olun. Sağlanan SQL sorgusu kullanıldığında başka bir veri dönüşümüne gerek duyulmamalıdır.
Konfigürasyon
- Ön Koşullar: Temel SAP HANA veri tabanına erişim gereklidir. Veri tabanı kullanıcısı, sorguda referans verilen tüm CDS görünümleri üzerinde
SELECTyetkilerine sahip olmalıdır; buna I_SalesOrderItem, I_PurchaseOrderItem, I_OutboundDeliveryItem, I_MaterialDocumentItem, I_ProductionOrder, I_QualityInspection, I_Shipment ve I_BillingDocumentItem dahil ancak bunlarla sınırlı değildir. - Tarih Aralığı Filtrelemesi: Sağlanan sorgu, genellikle bir oluşturulma tarihi alanında (
CreationDateveyaDocumentDate) bir tarih aralığı filtresi için bir yer tutucu içerir. İlk analiz için, aşırı sistem yüküne neden olmadan temsili bir veri seti sağlamak amacıyla 3 ila 6 aylık bir dönem önerilir. - Anahtar İş Filtreleri: Verilerin ilgili olmasını sağlamak için belirli organizasyonel birimlere göre filtrelenmesi kritik öneme sahiptir. Sorgu,
Şirket Koduiçin bir yer tutucu ile önceden yapılandırılmıştır. Analiz kapsamınıza bağlı olarakSatış Organizasyonu,Dağıtım KanalıveyaTesisiçin de filtreler eklemek isteyebilirsiniz. - Performans Değerlendirmeleri: Bu, birden fazla büyük CDS görünümünü birleştiren karmaşık bir sorgudur. Çalıştırma, önemli sistem kaynakları tüketebilir. Veri çekimlerini iş dışı saatlerde planlayın. Çok büyük veri setleri için, sorguyu aya göre daha küçük, sıralı partiler halinde çalıştırmayı düşünün.
a Örnek Sorgu sql
WITH SalesOrderLink AS (
SELECT DISTINCT
sd.SalesDocument AS SalesOrder,
pr.PurchaseRequisition AS PurchaseRequisition,
po.PurchaseOrder AS PurchaseOrder,
od.DeliveryDocument AS OutboundDelivery,
bd.BillingDocument AS BillingDocument
FROM I_SalesDocItemProcessFlow AS pf
LEFT JOIN I_SalesDocumentItem AS sd ON pf.PrecedingDocument = sd.SalesDocument AND pf.PrecedingDocumentItem = sd.SalesDocumentItem
LEFT JOIN I_PurchaseRequisitionItem AS pr ON pf.SubsequentDocument = pr.PurchaseRequisition AND pf.SubsequentDocumentItem = pr.PurchaseRequisitionItem
LEFT JOIN I_PurchaseOrderItem AS po ON pf.SubsequentDocument = po.PurchaseOrder AND pf.SubsequentDocumentItem = po.PurchaseOrderItem
LEFT JOIN I_OutboundDeliveryItem AS od ON pf.SubsequentDocument = od.DeliveryDocument AND pf.SubsequentDocumentItem = od.DeliveryDocumentItem
LEFT JOIN I_BillingDocumentItem AS bd ON pf.SubsequentDocument = bd.BillingDocument AND pf.SubsequentDocumentItem = bd.BillingDocumentItem
WHERE sd.SalesDocument IS NOT NULL
)
SELECT
so.SalesOrder AS "LogisticsOrder",
'Sales Order Created' AS "ActivityName",
so.CreationDate || ' ' || so.CreationTime AS "EventTime",
so.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
soi.Material AS "MaterialNumber",
soi.Plant AS "Plant",
soi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_SalesOrder AS so
JOIN I_SalesOrderItem AS soi ON so.SalesOrder = soi.SalesOrder
LEFT JOIN I_Customer AS cust ON so.SoldToParty = cust.Customer
WHERE so.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
so.SalesOrder AS "LogisticsOrder",
'Inventory Availability Checked' AS "ActivityName",
so.CreationDate || ' ' || so.CreationTime AS "EventTime",
so.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
soi.Material AS "MaterialNumber",
soi.Plant AS "Plant",
soi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_SalesOrder AS so
JOIN I_SalesOrderItem AS soi ON so.SalesOrder = soi.SalesOrder
LEFT JOIN I_Customer AS cust ON so.SoldToParty = cust.Customer
WHERE so.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Purchase Requisition Created' AS "ActivityName",
pr.CreationDate || ' ' || '00:00:00' AS "EventTime",
pr.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
pri.Material AS "MaterialNumber",
pri.Plant AS "Plant",
pri.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_PurchaseRequisition AS pr
JOIN I_PurchaseRequisitionItem AS pri ON pr.PurchaseRequisition = pri.PurchaseRequisition
JOIN SalesOrderLink sl ON pr.PurchaseRequisition = sl.PurchaseRequisition
WHERE pr.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND pr.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Purchase Order Issued' AS "ActivityName",
po.PurchaseOrderDate || ' ' || '00:00:00' AS "EventTime",
po.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
sup.SupplierName AS "SupplierName",
poi.Material AS "MaterialNumber",
poi.Plant AS "Plant",
poi.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_PurchaseOrder AS po
JOIN I_PurchaseOrderItem AS poi ON po.PurchaseOrder = poi.PurchaseOrder
LEFT JOIN I_Supplier AS sup ON po.Supplier = sup.Supplier
JOIN SalesOrderLink sl ON po.PurchaseOrder = sl.PurchaseOrder
WHERE po.PurchaseOrderDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND po.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Goods Receipt For PO Posted' AS "ActivityName",
md.DocumentDate || ' ' || md.CreationTime AS "EventTime",
md.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
sup.SupplierName AS "SupplierName",
mdi.Material AS "MaterialNumber",
mdi.Plant AS "Plant",
poi.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_MaterialDocumentHeader AS md
JOIN I_MaterialDocumentItem AS mdi ON md.MaterialDocument = mdi.MaterialDocument AND md.MaterialDocumentYear = mdi.MaterialDocumentYear
JOIN I_PurchaseOrderItem AS poi ON mdi.PurchaseOrder = poi.PurchaseOrder AND mdi.PurchaseOrderItem = poi.PurchaseOrderItem
LEFT JOIN I_Supplier AS sup ON poi.Supplier = sup.Supplier
JOIN SalesOrderLink sl ON poi.PurchaseOrder = sl.PurchaseOrder
WHERE md.DocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND mdi.GoodsMovementType = '101' AND mdi.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Production Order Created' AS "ActivityName",
po.CreationDate || ' ' || po.CreationTime AS "EventTime",
po.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
po.Material AS "MaterialNumber",
po.ProductionPlant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_ProductionOrder AS po
JOIN SalesOrderLink sl ON po.SalesOrder = sl.SalesOrder
WHERE po.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Goods Produced' AS "ActivityName",
md.DocumentDate || ' ' || md.CreationTime AS "EventTime",
md.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
mdi.Material AS "MaterialNumber",
mdi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_MaterialDocumentHeader AS md
JOIN I_MaterialDocumentItem AS mdi ON md.MaterialDocument = mdi.MaterialDocument AND md.MaterialDocumentYear = mdi.MaterialDocumentYear
JOIN I_ProductionOrder AS po ON mdi.ManufacturingOrder = po.ManufacturingOrder
JOIN SalesOrderLink sl ON po.SalesOrder = sl.SalesOrder
WHERE md.DocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND mdi.GoodsMovementType = '101'
UNION ALL
SELECT
qi.SalesOrder AS "LogisticsOrder",
'Quality Inspection Performed' AS "ActivityName",
qi.InspLotUsageDecisionDate || ' ' || qi.InspLotUsageDecisionTime AS "EventTime",
qi.InspLotUsageDecisionMadeByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
qi.Material AS "MaterialNumber",
qi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
qi.InspLotUsageDecisionCode AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_QualityInspection AS qi
WHERE qi.InspLotUsageDecisionDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND qi.SalesOrder IS NOT NULL
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Outbound Delivery Created' AS "ActivityName",
od.CreationDate || ' ' || od.CreationTime AS "EventTime",
od.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Picking Completed' AS "ActivityName",
od.PickingDate || ' ' || od.PickingTime AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.PickingDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallPickingStatus = 'C'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Goods Issue Posted' AS "ActivityName",
od.ActualGoodsMovementDate || ' ' || od.ActualGoodsMovementTime AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.ActualGoodsMovementDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallGoodsMovementStatus = 'C'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Shipment Created' AS "ActivityName",
sh.CreationDate || ' ' || sh.CreationTime AS "EventTime",
sh.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
NULL AS "MaterialNumber",
sh.ShippingPoint AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_Shipment AS sh
JOIN I_ShipmentDelivery AS sd ON sh.Shipment = sd.Shipment
JOIN SalesOrderLink sl ON sd.Delivery = sl.OutboundDelivery
WHERE sh.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Proof Of Delivery Confirmed' AS "ActivityName",
od.PODActualDate || ' ' || '00:00:00' AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.PODActualDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallPODStatus = 'C'
UNION ALL
SELECT
bdi.SalesDocument AS "LogisticsOrder",
'Customer Invoice Created' AS "ActivityName",
bd.BillingDocumentDate || ' ' || bd.CreationTime AS "EventTime",
bd.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
bdi.Material AS "MaterialNumber",
bdi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_BillingDocument AS bd
JOIN I_BillingDocumentItem AS bdi ON bd.BillingDocument = bdi.BillingDocument
LEFT JOIN I_Customer AS cust ON bd.SoldToParty = cust.Customer
WHERE bd.BillingDocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND bd.CompanyCode = 'YourCompanyCode' AND bdi.SalesDocument IS NOT NULL; Adımlar
- Ön Koşullar: SAP S/4HANA sisteminizde ABAP programları oluşturmak ve çalıştırmak (SE38 işlem koduna erişim) ve VBAK, LIKP, EKKO ve MKPF gibi tedarik zinciri tablolarından okumak için bir geliştirici anahtarına ve gerekli yetkilere sahip olduğunuzdan emin olun.
- Program Oluşturun:
SE38işlem kodunu kullanarak ABAP Düzenleyiciyi açın. Yeni program için, örneğinZ_PM_SCM_EXTRACTIONgibi bir isim girin ve 'Oluştur'a tıklayın. Açıklayıcı bir başlık sağlayın ve program türünü 'Yürütülebilir Program' olarak ayarlayın. - Kodu Ekleyin: Aşağıdaki 'sorgu' bölümünden ABAP kodunun tamamını kopyalayın ve yeni programınız için ABAP Düzenleyiciye yapıştırın.
- Metin Öğelerini Tanımlayın: Git > Metin Öğeleri > Seçim Metinleri'ne gidin. Kullanıcı arayüzünün net ve kullanıcı dostu olmasını sağlamak için önerilen tüm seçim ekranı etiketlerini etkinleştirin.
- Programı Etkinleştirin: CTRL+S ve ardından CTRL+F3 tuşlarına basarak veya araç çubuğundaki etkinleştir simgesini kullanarak programı kaydedin ve etkinleştirin. Sistem özel konfigürasyonları nedeniyle ortaya çıkabilecek sözdizimi hatalarını giderin.
- Programı Çalıştırın: F8'e basarak veya 'Doğrudan İşleme' düğmesini kullanarak programı çalıştırın. Çekilecek veriyi filtrelemenize olanak tanıyan bir seçim ekranı görünecektir.
- Veri Çekim Parametrelerini Ayarlayın: Seçim ekranında, Satış Siparişi Oluşturma Tarihi için tarih aralığını belirtin. Veri hacmini yönetmek için belirli Şirket Kodlarına veya Satış Organizasyonlarına göre filtreleme yapılması da şiddetle tavsiye edilir. SAP uygulama sunucusundaki çıktı dosyası için tam yolu girin.
- Arka Planda Çalıştırın: Birkaç ayı kapsayan büyük veri setleri için, işlem zaman aşımlarını önlemek amacıyla programı arka planda çalıştırmak çok önemlidir. Menüden Program > Arka Planda Çalıştır'ı seçin ve işi planlayın.
- Veri Dosyasını Alın: Program çalışması tamamlandıktan sonra, belirttiğiniz uygulama sunucusundaki dizine gitmek için
AL11işlem kodunu kullanın. Oluşturulan dosyayı bulun veCG3Yişlem kodunu kullanarak yerel makinenize indirin. - Yüklemeye Hazırlık: İndirilen dosyanın düz metin formatında, örneğin virgül veya noktalı virgül ayırıcıları olan CSV gibi olduğundan ve UTF-8 kodlaması kullandığından emin olun. Dosya şimdi process mining aracına yüklenmeye hazırdır.
Konfigürasyon
- Seçim Tarih Aralığı (S_ERDAT): Bu, en kritik filtredir. Satış siparişlerinin ilk seçimi için, oluşturulma tarihlerine (
VBAK-ERDAT) göre zaman aralığını tanımlar. Yönetilebilir veri hacimleri sağlamak için son 3 ila 6 ay gibi odaklanmış bir dönemle başlayın. - Satış Organizasyonu (S_VKORG): Veri çekimini belirli satış organizasyonlarıyla sınırlamak için isteğe bağlı bir filtredir. Bu, analizi belirli bir iş birimi veya bölgeye odaklamak için kullanışlıdır.
- Şirket Kodu (S_BUKRS): Veriyi belirli şirket kodlarıyla sınırlamak için isteğe bağlı bir filtredir. Veri kapsamını azaltmak ve performansı artırmak için şiddetle tavsiye edilir.
- Çıktı Dosya Yolu (P_FILE): Nihai olay günlüğü dosyasının kaydedileceği SAP uygulama sunucusundaki tam yoldur. Programı çalıştıran kullanıcının bu dizine yazma erişimi olması gerekir. Örnek:
/usr/sap/trans/tmp/scm_event_log.csv. - Çalıştırma Modu: Program, küçük test veri çekimleri için ön planda çalıştırılabilir. Ancak, önemli herhangi bir veri hacmi için, zaman aşımlarını önlemek ve yoğun saatlerde sistem üzerindeki yükü azaltmak amacıyla arka plan işleme zorunludur.
- Sistem Yetkilendirmeleri: Raporu çalıştıran kullanıcının, VBAK, VBAP, EKKO, EKPO, MSEG, MKPF, LIKP, LIPS, VBRK, AUFK, QAVE, KNA1 ve LFA1 dahil ancak bunlarla sınırlı olmamak üzere tüm temel tablolara okuma erişimi olması gerekir.
a Örnek Sorgu abap
REPORT Z_PM_SCM_EXTRACTION.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
PARAMETERS: p_file TYPE string LOWER CASE DEFAULT '/usr/sap/trans/tmp/scm_event_log.csv'.
SELECT-OPTIONS: s_erdat FOR sy-datum OBLIGATORY,
s_vkorg FOR vbak-vkorg,
s_bukrs FOR vbak-bukrs.
*&---------------------------------------------------------------------*
*& Data Type Definitions
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
LogisticsOrder TYPE vbeln_va,
ActivityName TYPE string,
EventTime TYPE string,
SourceSystem TYPE sysysid,
LastDataUpdate TYPE string,
ExecutingUser TYPE ernam,
SupplierName TYPE name1_gp,
CustomerName TYPE name1_gp,
MaterialNumber TYPE matnr,
Plant TYPE werks_d,
RequestedDeliveryDate TYPE vdatu,
QualityInspectionResult TYPE string,
END OF ty_event_log.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
DATA: lt_event_log TYPE TABLE OF ty_event_log,
ls_event_log TYPE ty_event_log,
lv_sysid TYPE sysysid,
lv_last_update TYPE string.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
lv_sysid = sy-sysid.
CONCATENATE sy-datum sy-uzeit INTO lv_last_update.
" Select base data: Sales Orders
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, h~kunnr, h~bukrs, h~vdatu, i~posnr, i~matnr, i~werks
INTO TABLE @DATA(lt_so)
FROM vbak AS h
INNER JOIN vbap AS i ON h~vbeln = i~vbeln
WHERE h~erdat IN @s_erdat
AND h~vkorg IN @s_vkorg
AND h~bukrs IN @s_bukrs.
IF lt_so IS INITIAL.
MESSAGE 'No sales orders found for the given criteria.' TYPE 'I'.
RETURN.
ENDIF.
" Select related documents using Document Flow (VBFA)
SELECT *
INTO TABLE @DATA(lt_vbfa)
FROM vbfa
FOR ALL ENTRIES IN @lt_so
WHERE vbelv = @lt_so-vbeln
AND posnv = @lt_so-posnr.
" Collect all unique document numbers
DATA: lt_vbeln_pr TYPE RANGE OF banfn,
lt_vbeln_po TYPE RANGE OF ebeln,
lt_vbeln_dn TYPE RANGE OF vbeln_vl,
lt_vbeln_gi TYPE RANGE OF mblnr,
lt_vbeln_auf TYPE RANGE OF aufnr,
lt_vbeln_inv TYPE RANGE OF vbeln_vf,
lt_vbeln_shp TYPE RANGE OF tknum.
LOOP AT lt_vbfa INTO DATA(ls_vbfa).
CASE ls_vbfa-vbtyp_n.
WHEN 'H'. " Purchase Requisition
APPEND ls_vbfa-vbeln TO lt_vbeln_pr.
WHEN 'K'. " Purchase Order
APPEND ls_vbfa-vbeln TO lt_vbeln_po.
WHEN 'J'. " Delivery
APPEND ls_vbfa-vbeln TO lt_vbeln_dn.
WHEN 'R'. " Goods Movement (GI)
APPEND ls_vbfa-vbeln TO lt_vbeln_gi.
WHEN 'L'. " Production Order
APPEND ls_vbfa-vbeln TO lt_vbeln_auf.
WHEN 'M'. " Invoice
APPEND ls_vbfa-vbeln TO lt_vbeln_inv.
WHEN '8'. " Shipment
APPEND ls_vbfa-vbeln TO lt_vbeln_shp.
ENDCASE.
ENDLOOP.
SORT lt_vbeln_pr. DELETE ADJACENT DUPLICATES FROM lt_vbeln_pr.
SORT lt_vbeln_po. DELETE ADJACENT DUPLICATES FROM lt_vbeln_po.
SORT lt_vbeln_dn. DELETE ADJACENT DUPLICATES FROM lt_vbeln_dn.
SORT lt_vbeln_gi. DELETE ADJACENT DUPLICATES FROM lt_vbeln_gi.
SORT lt_vbeln_auf. DELETE ADJACENT DUPLICATES FROM lt_vbeln_auf.
SORT lt_vbeln_inv. DELETE ADJACENT DUPLICATES FROM lt_vbeln_inv.
SORT lt_vbeln_shp. DELETE ADJACENT DUPLICATES FROM lt_vbeln_shp.
" Select detailed data for each document type
SELECT banfn, badat, ernam FROM eban INTO TABLE @DATA(lt_eban) FOR ALL ENTRIES IN @lt_so WHERE bnfpo = @lt_so-posnr AND banfn IN @lt_vbeln_pr.
SELECT ebeln, aedat, ernam, lifnr FROM ekko INTO TABLE @DATA(lt_ekko) WHERE ebeln IN @lt_vbeln_po.
SELECT vbeln, erdat, erzet, ernam, kodat, wadat_ist, podat FROM likp INTO TABLE @DATA(lt_likp) WHERE vbeln IN @lt_vbeln_dn.
SELECT mblnr, mjahr, budat, usnam FROM mkpf INTO TABLE @DATA(lt_mkpf) WHERE mblnr IN @lt_vbeln_gi.
SELECT mblnr, mjahr, zeile, bwart, lfbnr, ebeln, aufnr FROM mseg INTO TABLE @DATA(lt_mseg) FOR ALL ENTRIES IN @lt_mkpf WHERE mblnr = @lt_mkpf-mblnr AND mjahr = @lt_mkpf-mjahr.
SELECT aufnr, erdat, ernam FROM aufk INTO TABLE @DATA(lt_aufk) WHERE aufnr IN @lt_vbeln_auf.
SELECT prueflos, vdatum, vcode FROM qave INTO TABLE @DATA(lt_qave) FOR ALL ENTRIES IN @lt_so WHERE aufnr IN @lt_vbeln_auf.
SELECT vbeln, erdat, erzet, ernam FROM vbrk INTO TABLE @DATA(lt_vbrk) WHERE vbeln IN @lt_vbeln_inv.
SELECT tknum, erdat, erzet FROM vttk INTO TABLE @DATA(lt_vttk) WHERE tknum IN @lt_vbeln_shp.
SELECT kunnr, name1 FROM kna1 INTO TABLE @DATA(lt_kna1) FOR ALL ENTRIES IN @lt_so WHERE kunnr = @lt_so-kunnr.
SELECT lifnr, name1 FROM lfa1 INTO TABLE @DATA(lt_lfa1) FOR ALL ENTRIES IN @lt_ekko WHERE lifnr = @lt_ekko-lifnr.
" Assemble Event Log
LOOP AT lt_so INTO DATA(ls_so).
CLEAR ls_event_log.
READ TABLE lt_kna1 INTO DATA(ls_kna1) WITH KEY kunnr = ls_so-kunnr BINARY SEARCH.
ls_event_log-LogisticsOrder = ls_so-vbeln.
ls_event_log-SourceSystem = lv_sysid.
ls_event_log-LastDataUpdate = lv_last_update.
ls_event_log-CustomerName = ls_kna1-name1.
ls_event_log-MaterialNumber = ls_so-matnr.
ls_event_log-Plant = ls_so-werks.
ls_event_log-RequestedDeliveryDate = ls_so-vdatu.
" 1. Sales Order Created
ls_event_log-ActivityName = 'Sales Order Created'.
CONCATENATE ls_so-erdat ls_so-erzet INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_so-ernam.
APPEND ls_event_log TO lt_event_log.
" 2. Inventory Availability Checked (proxy event)
ls_event_log-ActivityName = 'Inventory Availability Checked'.
CONCATENATE ls_so-erdat ls_so-erzet INTO ls_event_log-EventTime. " Using SO creation time as a proxy
ls_event_log-ExecutingUser = ls_so-ernam.
APPEND ls_event_log TO lt_event_log.
" Find related documents for this SO item
LOOP AT lt_vbfa INTO ls_vbfa WHERE vbelv = ls_so-vbeln AND posnv = ls_so-posnr.
CASE ls_vbfa-vbtyp_n.
WHEN 'H'. " 3. Purchase Requisition Created
READ TABLE lt_eban INTO DATA(ls_eban) WITH KEY banfn = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Purchase Requisition Created'.
CONCATENATE ls_eban-badat '000000' INTO ls_event_log-EventTime. " PR has no time field
ls_event_log-ExecutingUser = ls_eban-ernam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
WHEN 'K'. " 4. Purchase Order Issued
READ TABLE lt_ekko INTO DATA(ls_ekko) WITH KEY ebeln = ls_vbfa-vbeln.
IF sy-subrc = 0.
READ TABLE lt_lfa1 INTO DATA(ls_lfa1) WITH KEY lifnr = ls_ekko-lifnr BINARY SEARCH.
ls_event_log-ActivityName = 'Purchase Order Issued'.
CONCATENATE ls_ekko-aedat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_ekko-ernam.
ls_event_log-SupplierName = ls_lfa1-name1.
APPEND ls_event_log TO lt_event_log.
ENDIF.
WHEN 'L'. " 6. Production Order Created
READ TABLE lt_aufk INTO DATA(ls_aufk) WITH KEY aufnr = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Production Order Created'.
CONCATENATE ls_aufk-erdat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_aufk-ernam.
APPEND ls_event_log TO lt_event_log.
" 8. Quality Inspection Performed
READ TABLE lt_qave INTO DATA(ls_qave) WITH KEY prueflos = ls_vbfa-vbeln. " Approximation linking lot to order
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Quality Inspection Performed'.
CONCATENATE ls_qave-vdatum '000000' INTO ls_event_log-EventTime.
ls_event_log-QualityInspectionResult = ls_qave-vcode.
APPEND ls_event_log TO lt_event_log.
CLEAR ls_event_log-QualityInspectionResult.
ENDIF.
ENDIF.
WHEN 'J'. " 9. Outbound Delivery Created
READ TABLE lt_likp INTO DATA(ls_likp) WITH KEY vbeln = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Outbound Delivery Created'.
CONCATENATE ls_likp-erdat ls_likp-erzet INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_likp-ernam.
APPEND ls_event_log TO lt_event_log.
" 10. Picking Completed
IF ls_likp-kodat IS NOT INITIAL.
ls_event_log-ActivityName = 'Picking Completed'.
CONCATENATE ls_likp-kodat '120000' INTO ls_event_log-EventTime. " Using Picking Date as proxy
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 14. Proof Of Delivery Confirmed
IF ls_likp-podat IS NOT INITIAL.
ls_event_log-ActivityName = 'Proof Of Delivery Confirmed'.
CONCATENATE ls_likp-podat '000000' INTO ls_event_log-EventTime.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDIF.
WHEN 'M'. " 15. Customer Invoice Created
READ TABLE lt_vbrk INTO DATA(ls_vbrk) WITH KEY vbeln = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Customer Invoice Created'.
CONCATENATE ls_vbrk-erdat ls_vbrk-erzet INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_vbrk-ernam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
WHEN '8'. " 12. Shipment Created
READ TABLE lt_vttk INTO DATA(ls_vttk) WITH KEY tknum = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Shipment Created'.
CONCATENATE ls_vttk-erdat ls_vttk-erzet INTO ls_event_log-EventTime.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDCASE.
ENDLOOP.
" Find material movements (MSEG) not directly in VBFA
" 5. Goods Receipt For PO Posted
LOOP AT lt_mseg INTO DATA(ls_mseg_po) WHERE ebeln IN (SELECT ebeln FROM ekpo WHERE banfn IN (SELECT banfn FROM eban WHERE vbeln = ls_so-vbeln) ) AND bwart = '101'.
READ TABLE lt_mkpf INTO DATA(ls_mkpf_po) WITH KEY mblnr = ls_mseg_po-mblnr mjahr = ls_mseg_po-mjahr.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Goods Receipt For PO Posted'.
CONCATENATE ls_mkpf_po-budat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_mkpf_po-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 7. Goods Produced
LOOP AT lt_mseg INTO DATA(ls_mseg_pp) WHERE aufnr IN (SELECT aufnr FROM afpo WHERE kdauf = ls_so-vbeln) AND bwart = '101'.
READ TABLE lt_mkpf INTO DATA(ls_mkpf_pp) WITH KEY mblnr = ls_mseg_pp-mblnr mjahr = ls_mseg_pp-mjahr.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Goods Produced'.
CONCATENATE ls_mkpf_pp-budat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_mkpf_pp-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 11. Goods Issue Posted
LOOP AT lt_mseg INTO DATA(ls_mseg_gi) WHERE lfbnr IN (SELECT vbeln FROM lips WHERE vgbel = ls_so-vbeln) AND bwart = '601'.
READ TABLE lt_mkpf INTO DATA(ls_mkpf_gi) WITH KEY mblnr = ls_mseg_gi-mblnr mjahr = ls_mseg_gi-mjahr.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Goods Issue Posted'.
CONCATENATE ls_mkpf_gi-budat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_mkpf_gi-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
ENDLOOP.
" Remove duplicate events for the same case
SORT lt_event_log BY LogisticsOrder ActivityName EventTime.
DELETE ADJACENT DUPLICATES FROM lt_event_log COMPARING LogisticsOrder ActivityName EventTime.
" Write data to file
DATA: lt_output TYPE TABLE OF string.
APPEND 'LogisticsOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate,ExecutingUser,SupplierName,CustomerName,MaterialNumber,Plant,RequestedDeliveryDate,QualityInspectionResult' TO lt_output.
LOOP AT lt_event_log INTO ls_event_log.
DATA(lv_line) = |
{ ls_event_log-LogisticsOrder },
{ ls_event_log-ActivityName },
{ ls_event_log-EventTime },
{ ls_event_log-SourceSystem },
{ ls_event_log-LastDataUpdate },
{ ls_event_log-ExecutingUser },
{ ls_event_log-SupplierName },
{ ls_event_log-CustomerName },
{ ls_event_log-MaterialNumber },
{ ls_event_log-Plant },
{ ls_event_log-RequestedDeliveryDate },
{ ls_event_log-QualityInspectionResult }|
.
REPLACE ALL OCCURRENCES OF ',' IN lv_line WITH ' '.
REPLACE ALL OCCURRENCES OF REGEX '\s+' IN lv_line WITH '' LEADING.
CONDENSE lv_line.
APPEND lv_line TO lt_output.
ENDLOOP.
cl_gui_frontend_services=>gui_download(
EXPORTING
filename = p_file
filetype = 'ASC'
CHANGING
data_tab = lt_output
EXCEPTIONS
OTHERS = 24
).
IF sy-subrc <> 0.
MESSAGE 'Error downloading file.' TYPE 'E'.
ELSE.
MESSAGE |File downloaded successfully to { p_file }| TYPE 'S'.
ENDIF.