Tedarik zinciri yönetimi Veri Templateiniz
Tedarik zinciri yönetimi Veri Templateiniz
- Toplanması önerilen öznitelikler
- İzlenecek temel etkinlikler
- Veri çıkarma yönergeleri
Tedarik zinciri yönetimi öznitelikleri
| Ad | Açıklama | ||
|---|---|---|---|
| Etkinlik adı ActivityName | Tedarik zinciri sürecinin belirli bir noktasında gerçekleşen iş etkinliğinin veya olayın adı. | ||
| Açıklama Bu öznitelik, lojistik siparişinin yaşam döngüsündeki Satın Alma Siparişi Verildi veya Mal Çıkışı Kaydedildi gibi belirli bir adımı ya da kilometre taşını tanımlar. Bu etkinlikler, süreci oluşturan olaylar dizisini meydana getirir. Etkinlik dizisini analiz etmek, Process Mining çalışmalarının temelini oluşturur. Gerçek süreç akışını keşfetmenizi, standart çalışma prosedürleriyle karşılaştırmanızı ve gecikmeye ya da yeniden çalışmaya yol açan süreç adımlarını belirlemenizi sağlar. Neden önemli? Sürecin adımlarını tanımlar. Süreç haritalarını keşfetmek, varyantları analiz etmek ve etkinlikler arasındaki çevrim sürelerini ölçmek için temel oluşturur. Nereden alınır? Veri dönüştürme sırasında çeşitli SAP tablolarındaki işlem kodları veya durum değişiklikleri (ör. EKKO, LIKP, VBUK) kullanıcıların anlayacağı etkinlik adlarıyla eşleştirilerek oluşturulur. Örnekler Satın alma siparişi oluşturulduSatın alma siparişi için mal girişi kaydedildiGiden teslimat oluşturulduTeslimat kanıtı onaylandı | |||
| Lojistik siparişi LogisticsOrder | İlk talep aşamasından son teslimat onayına kadar uzanan, uçtan uca tek bir tedarik zinciri sürecini tanımlayan benzersiz kimlik. | ||
| Açıklama Lojistik siparişi, temel vaka tanımlayıcısı olarak tedarik zincirindeki belirli bir talep veya sipariş karşılama isteğiyle ilgili tüm etkinlikleri birbirine bağlar. Bu yaklaşım, bir ürünün planlama ve tedarikten üretim ve dağıtıma kadar tüm yaşam döngüsünün izlenmesini ve sürecin bütününün görülmesini sağlar. Process Mining çalışmalarında lojistik siparişine göre analiz yapmak, bir talebin karşılanması için izlenen yolun tamamını ortaya çıkarır. Tedarik veya satış gibi birbirinden kopuk süreçlere ayrı ayrı bakmak yerine, tedarik zincirinin tamamındaki yaygın varyantları, darboğazları ve sapmaları belirlemenize yardımcı olur. Neden önemli? İlgili tüm olayları tek bir süreç örneğinde birleştiren bu temel anahtar, tedarik zincirinin uçtan uca analiz edilmesini sağlar. Nereden alınır? Bu, kavramsal bir tanımlayıcıdır ve Satış Siparişi numarasını sonraki Satın Alma Siparişi ve Teslimat numaralarıyla ilişkilendirmek gibi çeşitli belge numaralarını birleştirerek oluşturulması gerekebilir. SAP S/4HANA Tedarik Zinciri belgelerine veya konu uzmanına danışın. Örnekler LO-4500078192LO-4500078193LO-4500078194 | |||
| Olay zamanı EventTime | Etkinliğin gerçekleştiği tarih ve saati gösteren zaman damgası. | ||
| Açıklama Bu öznitelik, süreçteki her etkinliğin kesin tarih ve saatini verir. Olay günlüğünün kronolojik temelini oluşturarak süreç adımlarını gerçekte gerçekleşme sırasına göre dizer. Olay zamanı, zamana dayalı tüm analizler için önemlidir. Etkinlikler arasındaki çevrim sürelerini ve sürecin toplam teslim süresini hesaplamak, zaman içindeki performans eğilimlerini izlemek ve darboğazların ne zaman ortaya çıkabileceğini belirlemek için kullanılır. Neden önemli? Bu zaman damgası, tüm süreleri ve performans metriklerini hesaplamak, süreç darboğazlarını ve teslim sürelerini analiz etmek için gereklidir. Nereden alınır? Değişiklik belgeleri için CDHDR/CDPOS gibi temel SAP tablolarındaki belge oluşturma veya durum değişikliği zaman damgası alanlarından ya da başlık tablolarındaki ERDAT/ERZET gibi belirli tarih ve saat alanlarından alınır. Örnekler 2023-04-15T10:25:00Z2023-04-18T14:00:00Z2023-04-22T08:15:00Z | |||
| Kaynak sistem SourceSystem | Verinin alındığı sistem. | ||
| Açıklama Olay verilerinin oluşturulduğu belirli kaynak sistem örneğini tanımlar. Karmaşık bir sistem ortamında şirketin farklı bölgeler veya iş birimleri için birden fazla SAP S/4HANA örneği olabilir. Bu öznitelik, veri yönetişimi ve analizi bölümlere ayırmak açısından önemlidir. Analistlerin farklı sistemlerdeki süreç performansını karşılaştırmasına veya tek bir yetkili kaynaktaki verileri incelemesine olanak tanır. Neden önemli? Verinin kaynağı hakkında önemli bağlam bilgisi sağlar. Bu bilgi, verileri doğrulamak ve farklı sistem ortamlarındaki süreçleri karşılaştırmak için önemlidir. Nereden alınır? Genellikle kaynağı tanımlamak için veri çıkarma sırasında eklenen sabit bir değerdir; örneğin SAP Sistem Kimliği (SAPSID). Örnekler S4H_PROD_EUS4H_PROD_NAS4H_DEV | |||
| Son veri güncellemesi LastDataUpdate | Verinin kaynak sistemden en son yenilendiği veya çıkarıldığı zaman damgası. | ||
| Açıklama Bu öznitelik, olay günlüğü verilerinin en son ne zaman güncellendiğini gösterir. Analiz edilen verilerin güncelliğini belirtir ve kullanıcıların verinin ne kadar yeni olduğunu bilmesini sağlar. Her analizde, bilinçli kararlar almak için verinin ne kadar güncel olduğunu bilmek önemlidir. Bu zaman damgası, kullanıcıların verilere güvenmesine ve Dashboardlar ile KPI’ların kapsadığı zaman aralığını anlamasına yardımcı olur. Neden önemli? Verinin güncelliğini şeffaf biçimde göstererek kullanıcıların süreç analizinin ne kadar güncel olduğunu bilmesini sağlar. Nereden alınır? Bu meta veri alanı genellikle başarılı bir veri yenileme işleminin sonunda veri çıkarma veya ETL aracı tarafından oluşturulur ve doldurulur. Örnekler 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| İşlemi gerçekleştiren kullanıcı ExecutingUser | Etkinliği gerçekleştiren kişinin kullanıcı kimliği. | ||
| Açıklama Bu öznitelik, satın alma siparişi oluşturma veya mal girişini kaydetme gibi belirli bir etkinliği gerçekleştiren çalışanın SAP kullanıcı adını ya da kimliğini kaydeder. Süreç adımlarını bu adımlarda görev alan çalışanlarla ilişkilendirir. Kullanıcıya göre analiz yapmak, iş yükünün nasıl dağıldığını anlamaya, eğitim ihtiyaçlarını belirlemeye ve kişiler ya da ekipler arasındaki performans farklarını görmeye yardımcı olur. Ayrıca önemli süreç adımlarını kimin gerçekleştirdiğini inceleyerek uyumluluk analizine katkı sağlar. Neden önemli? Etkinlikleri belirli kullanıcılarla ilişkilendirerek iş yükü analizini, performans karşılaştırmasını ve uyumluluğa aykırı işlemlerin incelenmesini sağlar. Nereden alınır? EKKO (satın alma siparişi başlığı), LIKP (teslimat başlığı) ve VBRK (fatura başlığı) gibi birçok SAP tablosundaki 'Oluşturan' veya 'Değiştiren' alanlarında bulunur. Örneğin ERNAM alanı. Örnekler CBROWNJSMITHASINGH | |||
| Kalite kontrolü sonucu QualityInspectionResult | Geçti veya Kaldı gibi bir kalite kontrolünün sonucu. | ||
| Açıklama Bu öznitelik, üretilen veya teslim alınan mallara uygulanan kalite kontrolünün sonucunu kaydeder. Sonuca göre mallar sonraki adıma geçebilir ya da yeniden işleme, iade veya hurdaya ayırma gerekebilir. Bu öznitelik, Kalite Kontrolü Ret Oranları Dashboardu ve KPI’ı için önemlidir. Başarısız kontrollerin sıklığını ve nedenlerini analiz ederek belirli ürünlerde, tedarikçilerde veya üretim hatlarında tekrarlayan kalite sorunlarını belirleyebilirsiniz. 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 tutulur. Veriler QALS gibi muayene partisi tablolarından ve QAVE’deki kullanım kararı kodlarından alınabilir. Örnekler GeçtiKaldıYeniden çalışma gerekiyorSapmayla geçti | |||
| Malzeme numarası MaterialNumber | İşlenen ürün veya malzemeyi tanımlayan benzersiz kod. | ||
| Açıklama Genellikle SKU olarak adlandırılan malzeme numarası, SAP’deki belirli bir ürünü tanımlayan benzersiz koddur. Süreç etkinliklerini üretilen, tedarik edilen veya sevk edilen fiziksel ya da dijital mallarla ilişkilendirir. Bu öznitelik, ürün odaklı analiz için önemlidir. Belirli ürünlerde kalite sorunlarının, üretim gecikmelerinin veya stok tükenmelerinin daha sık yaşanıp yaşanmadığını belirlemeye yardımcı olur. Belirli ürün gruplarının performansını incelemek için Dashboardları malzemeye göre filtreleyebilirsiniz. Neden önemli? Gecikme veya kalite sorunları gibi süreç problemlerinin belirli malzemelerde yoğunlaşıp yoğunlaşmadığını görmek için ürün düzeyinde analiz yapmayı sağlar. Nereden alınır? Satış siparişleri için VBAP, satın alma siparişleri için EKPO ve teslimatlar için LIPS gibi çoğu belgenin kalem düzeyindeki tablolarında bulunur. Alanın adı genellikle MATNR’dir. Örnekler FG-100-ARM-2034-BSA-5500 | |||
| Müşteri adı CustomerName | Siparişin karşılandığı müşterinin adı. | ||
| Açıklama Bu öznitelik, bir satış siparişi ve sonraki sipariş karşılama etkinlikleriyle ilişkili son müşteriyi tanımlar. Tedarik zinciri sürecindeki talep tarafına ilişkin bağlam sağlar. Process Mining çalışmalarında müşteriye göre analiz yapmak, önemli müşterilerin sipariş karşılama örüntülerini ve performans düzeylerini belirlemeye yardımcı olur. Teslimat Kanıtı Gecikme Analizi gibi Dashboardlarda, belirli müşterilerin onayları sürekli geciktirip geciktirmediğini görmek için kullanılır. Neden önemli? Analizi müşteriye göre bölümlere ayırarak müşteriye özgü davranışları, darboğazları veya hizmet düzeyi anlaşması performansını ortaya çıkarır. Nereden alınır? Müşteri numarası (KUNNR), satış belgelerinde (ör. VBAK tablosunda) tutulur. Müşteri adı, merkezi müşteri ana verileri tablosu KNA1'den alınır. Örnekler Retail CorpInnovate SolutionsManufacturing Partners | |||
| Talep edilen teslimat tarihi RequestedDeliveryDate | Tedarikçiden malları teslim etmesinin istendiği tarih. | ||
| Açıklama Bu, satın alma siparişinde belirtilen ve tedarikçiden beklenen teslimat tarihidir. Gerçek teslimat performansını ölçmek için temel alınır. Bu tarih, Tedarikçinin Zamanında Teslimat Oranı KPI’ını hesaplamak için gereklidir. Gerçek mal girişi tarihini talep edilen tarihle karşılaştırarak tedarikçilerin taahhütlerini yerine getirip getirmediğini nesnel biçimde ölçebilirsiniz. Neden önemli? Tedarikçinin Zamanında Teslimat Oranı KPI’ını hesaplamak için temel alınan tarihtir ve tedarikçi performansının yönetiminde önemli rol oynar. Nereden alınır? Satın alma siparişi kalem tablosu EKPO’da EINDT (Teslimat Tarihi) alanında bulunur. Örnekler 2023-05-20T00:00:00Z2023-06-15T00:00:00Z2023-07-01T00:00:00Z | |||
| Tedarikçi adı SupplierName | Tedarik faaliyetleriyle ilişkili tedarikçinin adı. | ||
| Açıklama Bu öznitelik, mal veya hizmetlerin hangi tedarikçiden alındığını gösterir. Genellikle Satın Alma Talebi Oluşturuldu ve Satın Alma Siparişi Verildi gibi etkinliklerle ilişkilendirilir. Tedarikçi adı, Tedarikçi Teslimat Performansı Dashboardu için gereklidir. Verileri filtreleyip bölümlere ayırarak farklı tedarikçilerin zamanında teslimat oranlarını, teslim sürelerini ve kalite düzeylerini karşılaştırmanızı sağlar. Bu karşılaştırmalar, stratejik tedarik ve tedarikçi ilişkilerinin yönetimi açısından önemlidir. Neden önemli? Tedarikçiye göre performans analizi yapmayı sağlar. Bu, tedarik sürecini iyileştirmek ve tedarikçilerin güvenilirliğini değerlendirmek için önemlidir. Nereden alınır? Tedarikçi numarası (LIFNR), satın alma belgelerinde (ör. EKKN ve EBAN tablolarında) tutulur. Tedarikçi adı, merkezi tedarikçi ana verileri tablosu LFA1'den alınır. Örnekler Global Components Inc.Advanced Materials LLCPrecision Parts Co. | |||
| Üretim yeri Plant | Etkinliğin gerçekleştiği üretim veya dağıtım tesisi. | ||
| Açıklama Üretim yeri, malların üretildiği, depolandığı veya dağıtıldığı konumu temsil eden bir SAP kuruluş birimidir. Süreç etkinliklerine coğrafi veya işlevsel bağlam kazandırır. Süreç performansını üretim yerine göre analiz etmek yaygın bir ihtiyaçtır. Farklı operasyon noktalarındaki verimliliği, işlem hacmini ve uyumluluğu karşılaştırıp kıyaslamanıza yardımcı olur. Böylece iyi uygulamaları veya iyileştirme gereken noktaları belirleyebilirsiniz. Neden önemli? Farklı tesislerdeki performansı karşılaştırmak için analize coğrafi veya kurumsal bir boyut kazandırır. Nereden alınır? VBAP (satış), EKPO (satın alma) ve LIPS (teslimat) gibi birçok belge kalemi tablosunda bulunur. Alanın adı genellikle WERKS’tir. Örnekler 100021003500 | |||
| Bitiş zamanı EndTime | Bir etkinliğin ne zaman tamamlandığını gösteren ve işlem süresini hesaplamak için kullanılan zaman damgası. | ||
| Açıklama Bitiş zamanı, belirli bir etkinliğin tamamlandığı anı gösterir. Başlangıç zamanı (EventTime) etkinliğin ne zaman başladığını belirtirken bitiş zamanı, özellikle anlık gerçekleşmeyen etkinliklerin ne kadar sürdüğünü anlamak için gereklidir. Analizde hem başlangıç hem de bitiş zamanının bulunması, işlem süresiyle bekleme süresini doğru biçimde ölçmenizi sağlar. Böylece bir görev üzerinde çalışarak geçirilen süreyle sonraki adımı beklerken geçen süreyi ayırt edebilir ve verimlilik fırsatlarını belirleyebilirsiniz. Neden önemli? Etkinliklerin işlem sürelerini doğru biçimde hesaplamayı ve katma değer sağlayan çalışmayla bekleme süresini ayırt etmeyi sağlar. Nereden alınır? SAP’deki durum değişikliklerinden elde edilebilir. Örneğin JEST/JCDS gibi tablolardaki 'Devam Ediyor' durum güncellemesi başlangıcı, 'Tamamlandı' durum güncellemesi ise bitişi gösterir. Anlık gerçekleşen olaylarda EndTime, StartTime ile aynı olabilir. Örnekler 2023-04-15T11:30:00Z2023-04-18T14:05:00Z2023-04-22T09:00:00Z | |||
| Satın alma siparişi numarası PurchaseOrderNumber | Satın alma siparişi (PO) belgesinin benzersiz tanımlayıcısı. | ||
| Açıklama Satın alma siparişi numarası, tedarikçiden malzeme sipariş etmek için kullanılan resmî belge numarasıdır. Tedarik zincirinin tedarik aşamasındaki temel tanımlayıcılardan biridir. Bu öznitelik, tedarik sürecini ayrıntılı incelemenizi sağlar. Tedarik Uçtan Uca Çevrim Süresi Dashboardunda ve Tedarikçinin Zamanında Teslimat Oranı KPI’ını hesaplamak için kullanılır; talep, sipariş, mal girişi ve ödeme etkinliklerini birbirine bağlar. Neden önemli? Tedarik alt sürecini ayrıntılı incelemek ve ilgili tedarik olaylarını birbirine bağlamak için temel bir tanımlayıcı görevi görür. Nereden alınır? Satın alma siparişi başlık tablosu EKKO’da ve kalem tablosu EKPO’da bulunur. Alanın adı EBELN’dir. Örnekler 450007819245000781934500078194 | |||
| Satış siparişi numarası SalesOrderNumber | Satış siparişi (SO) belgesinin benzersiz tanımlayıcısı. | ||
| Açıklama Satış siparişi numarası, müşteriye yapılan satışı onaylayan resmî belge numarasıdır. Tedarik zincirinin Siparişten Tahsilata aşamasındaki temel tanımlayıcılardan biridir. Bu öznitelik, belirli bir müşteri siparişinin karşılanma sürecini izlemeyi sağlar. İlk müşteri talebini teslimat ve faturalandırma gibi sonraki tüm etkinliklerle ilişkilendirerek Sipariş Karşılama Teslim Süresi Analizini destekler. Neden önemli? Sipariş karşılama alt sürecinin temel tanımlayıcısıdır; müşteri talebini lojistik ve mali mutabakatla ilişkilendirir. Nereden alınır? Satış siparişi başlık tablosu VBAK’ta ve kalem tablosu VBAP’ta bulunur. Alanın adı VBELN’dir. Örnekler 100023451000234610002347 | |||
| Sipariş miktarı OrderQuantity | Sipariş kalemindeki malzeme miktarı. | ||
| Açıklama Bu öznitelik, bir satış veya satın alma siparişi kaleminde talep edilen malzeme miktarını belirtir. Her işlem için hacim ölçüsü sağlar. Miktara göre analiz yapmak, iş etkisi daha yüksek olabilecek büyük hacimli siparişlere öncelik vermeye yardımcı olur. Birim başına maliyet gibi diğer metrikleri normalleştirmek veya sipariş büyüklüğünün işlem sürelerini nasıl etkilediğini anlamak için de kullanılabilir. Neden önemli? İşlemlerin hacmini göstererek etki analizine ve vakaların büyüklüğe göre bölümlere ayrılmasına olanak tanır. Nereden alınır? EKPO’daki MENGE (satın alma siparişi) veya VBAP’taki KWMENG (satış siparişi) gibi kalem düzeyindeki tablolarda bulunur. Örnekler 100500025 | |||
| Taşıyıcı adı CarrierName | Sevkiyatı gerçekleştiren taşıma şirketinin veya nakliye acentesinin adı. | ||
| Açıklama Taşıyıcı adı, malları örneğin depodan müşteriye taşımaktan sorumlu lojistik hizmet sağlayıcısını tanımlar. Bu öznitelik, Taşıma Çevrim Süresi Analizi Dashboardu için gereklidir. Farklı taşıyıcıların taşıma sürelerini, maliyetlerini ve güvenilirliğini karşılaştırarak lojistik planlamasını ve taşıyıcı seçimini iyileştirmenizi sağlar. Neden önemli? Taşıma hizmeti sağlayıcısına göre performans analizi yapmayı sağlar. Bu, lojistik maliyetlerini ve teslimat sürelerini iyileştirmek için önemlidir. Nereden alınır? Taşıyıcı kimliği (nakliye acentesi), VTTK (Sevkiyat Başlığı) tablosu gibi sevkiyat belgelerinde tutulur. Taşıyıcının adı LFA1 gibi ana veri tablolarından alınır. Örnekler DHLFedExMaersk Logistics | |||
| Teslimat gecikti mi IsLateDelivery | Tedarikçi teslimatının talep edilen teslimat tarihinden sonra yapılıp yapılmadığını gösteren mantıksal değer. | ||
| Açıklama Bu hesaplanan işaret, teslimatın zamanında yapılıp yapılmadığını doğru veya yanlış olarak gösterir. Mal Girişi Kaydedildi etkinliğinin zaman damgası, Talep Edilen Teslimat Tarihi özniteliğiyle karşılaştırılarak hesaplanır. Bu öznitelik, tedarikçi performansıyla ilgili Dashboard ve KPI’ların oluşturulmasını kolaylaştırır. Tedarikçinin Zamanında Teslimat Oranını hesaplamak ve en sık gecikme yaşanan tedarikçileri, malzemeleri veya bölgeleri belirlemek için verileri hızla filtreleyip bir araya getirebilirsiniz. Neden önemli? Her teslimat için net bir ikili sonuç sunarak tedarikçi performansı analizini kolaylaştırır. Zamanında teslimat KPI’ı için gereklidir. Nereden alınır? Bu, hesaplanan bir alandır. Mantık şöyledir: IF ('Goods Receipt For PO Posted'.EventTime > PurchaseOrder.RequestedDeliveryDate) THEN True ELSE False. Örnekler truefalse | |||
| Yeniden çalışma mı IsRework | Bir etkinliğin veya etkinlik dizisinin yeniden çalışmayı temsil edip etmediğini gösteren işaret. | ||
| Açıklama Bu mantıksal öznitelik, süreçte daha önceki adımların tekrarlandığı etkinlikleri işaretleyerek yeniden çalışma veya düzeltme yapıldığını gösterir. Örneğin, Kalite Kontrolü etkinliğinin ardından Üretim Siparişi Oluşturuldu adımı ve sonra bir Kalite Kontrolü daha gelirse ikinci kontrol yeniden çalışma olarak işaretlenebilir. Yeniden çalışmayı belirlemek, süreç verimsizliğini ve gizli maliyetleri anlamak için önemlidir. Bu işaret, yeniden çalışma döngülerinin sıklığını ve etkisini ölçmeye yardımcı olur; Sipariş İşleme Hata Oranı KPI’ının hesaplanmasını destekler ve süreç iyileştirme alanlarını ortaya çıkarır. Neden önemli? Yeniden çalışma döngüsüne giren etkinlikleri açıkça belirleyip sayarak süreç verimsizliklerini ölçmeye yardımcı olur. Nereden alınır? Genellikle Process Mining aracında, aynı vaka içindeki yinelenen etkinlik dizileri belirlenerek hesaplanır. Örnekler truefalse | |||
Tedarik zinciri yönetimi etkinlikleri
| Aktivite | Açıklama | ||
|---|---|---|---|
| Mal çıkışı kaydedildi | Bu etkinlik, malların depodan yasal ve fiziksel olarak çıkışını ifade eder. Envanteri azaltır, satılan malların maliyetini kaydeder ve siparişin resmî olarak sevk edildiğini gösterir. | ||
| Neden önemli? Bu, malların yolda olduğu dönemin başlangıcını gösteren önemli bir kilometre taşıdır. Malların teslim edilmek üzere şirketin mülkiyetinden çıktığı kesin noktadır. Nereden alınır? Bu, malzeme belgesi oluşturan açık bir olaydır. Zaman damgası, malzeme belgesi başlığında (MKPF, BUDAT alanı) kaydedilir ve teslimat belgesindeki (LIKP, WBSTK alanı) mal hareketi durumunu günceller. Kaydedin Giden teslimatla ilişkili mal çıkışı malzeme belgesindeki kayıt tarihini (MKPF-BUDAT) kullanın. Olay türü explicit | |||
| Mallar üretildi | Bu etkinlik, malların üretiminin tamamlandığının teyit edilmesini ifade eder. Genellikle üretim siparişinden mal girişi olarak kaydedilir ve mamul stoklara alınır. | ||
| Neden önemli? Bu, üretim döngüsünün sonunu gösterir. Üretim siparişinin oluşturulmasıyla bu olay arasındaki süre, üretim verimliliğini ölçen temel bir metrik olan üretim çevrim süresidir. Nereden alınır? Bu olay, malzeme belgesi kaydıyla (üretim siparişinden mal girişi) açıkça yakalanabilir. Ayrıca üretim siparişinin son teyidinden (AFRU tablosu) veya durumun 'Teslim edildi' olarak değişmesinden çıkarılabilir. Kaydedin Üretim siparişi için son mal girişine ait malzeme belgesinin kayıt tarihinden veya durum değişikliğinden çıkarın. Olay türü inferred | |||
| Satın alma siparişi için mal girişi kaydedildi | Satın alma siparişine bağlı olarak tedarikçiden ham madde veya mal teslim alınmasını ifade eder. Mallar depoya ya da tesise ulaştığında bu olay kaydedilir. | ||
| Neden önemli? Bu etkinlik, satın alma döngüsünün tedarikçi teslimatı bölümünü tamamlar. Tedarikçinin zamanında teslimat oranını hesaplamak ve gelen lojistik performansını anlamak için gereklidir. Nereden alınır? Bu, malzeme belgesi kaydıyla yakalanan açık bir olaydır. Olayın zaman damgası, malzeme belgesi başlık tablosunda (MKPF, BUDAT alanı) bulunur. Satın alma siparişiyle bağlantı kalem tablosundadır (MSEG). Kaydedin Satın alma siparişiyle ilişkili malzeme belgesindeki kayıt tarihini (MKPF-BUDAT) kullanın. Olay türü explicit | |||
| Satın alma siparişi oluşturuldu | Gerekli malzemeler için harici bir tedarikçiye satın alma siparişinin resmî olarak oluşturulup gönderildiğini gösterir. Bu etkinlik, satın alma talebini tedarikçiyle yasal olarak bağlayıcı bir taahhüde dönüştürür. | ||
| Neden önemli? Önemli bir kilometre taşı olan bu etkinlik, tedarikçi teslimat sürelerini ve satın alma döngülerini ölçmek açısından gereklidir. Tedarikçinin zamanında teslimat performansını değerlendirmek için başlangıç noktası sağlar. Nereden alınır? Bu, satın alma siparişi oluşturulduğunda kaydedilen açık bir olaydır. Oluşturulma zaman damgası, satın alma siparişi başlık tablosunda (EKKO, AEDAT alanı) tutulur. Kaydedin Satın alma siparişi için belge oluşturulma tarihini (EKKO-AEDAT) kullanın. Olay türü explicit | |||
| Satış siparişi oluşturuldu | Bu etkinlik, müşterinin mal talebini resmî olarak kayda alan yeni bir satış siparişinin oluşturulduğunu gösterir. Kullanıcı sistemde yeni satış siparişi belgesini kaydettiğinde açık bir olay olarak kaydedilir. | ||
| Neden önemli? Bu, Siparişten Tahsilata sürecinin temel başlangıç noktasıdır. Bu olayla diğer olaylar arasındaki süreyi analiz ederek sipariş karşılama süresini ölçebilir ve ilk işleme gecikmelerini belirleyebilirsiniz. Nereden alınır? Bu olay açıkça kaydedilir. Satış siparişi tablolarındaki değişiklik belgelerinde (CDHDR/CDPOS) veya satış siparişi başlık tablosundaki (VBAK, ERDAT alanı) oluşturulma zaman damgasında bulunabilir. Kaydedin Satış siparişi belgesi için oluşturulma tarihini (VBAK-ERDAT) ve saatini (VBAK-ERZET) kullanın. Olay türü explicit | |||
| Teslimat kanıtı onaylandı | Müşterinin veya taşıyıcının, malların belirtildiği şekilde teslim alındığını resmen onaylamasını ifade eder. Bu bilgi çoğu zaman teslimat kanıtı (POD) verileri eklenerek giden teslimat belgesinin güncellenmesiyle kaydedilir. | ||
| Neden önemli? Bu etkinlik, sipariş karşılama sürecinin kesin bitiş noktasıdır. Doğru faturalandırma, anlaşmazlıkların çözümü ve teslimat döngüsünün son ayağının ölçülmesi açısından önemlidir. Nereden alınır? Bu, açıkça kaydedilen bir olaydır. Teslimat kanıtı tarihi, teslimat başlık tablosunda (LIKP, PODAT alanı) veya ilgili POD tablolarında (VLPOD) tutulur. Kaydedin Teslimat belgesindeki teslimat kanıtı tarihini (LIKP-PODAT) kullanın. Olay türü explicit | |||
| Giden teslimat oluşturuldu | Müşteriye gönderilecek malların toplanmasına ve sevk edilmesine izin veren bir teslimat belgesinin oluşturulduğunu gösterir. Bu etkinlik, süreci sipariş yönetiminden lojistik uygulamaya taşır. | ||
| Neden önemli? Bu, fiziksel sipariş karşılama sürecini başlatan önemli bir adımdır. Siparişin oluşturulmasıyla teslimatın oluşturulması arasındaki gecikmeler, planlama veya ürün bulunabilirliği sorunlarına işaret edebilir. Nereden alınır? Bu açıkça kaydedilen bir olaydır. Oluşturulma zaman damgası, teslimat başlık tablosunda (LIKP, ERDAT alanı) tutulur. Kaydedin Teslimat belgesi başlığındaki oluşturulma tarihini (LIKP-ERDAT) ve saatini (LIKP-ERZET) kullanın. Olay türü explicit | |||
| Kalite kontrolü yapıldı | Üretilen mallara yönelik kalite kontrolünün tamamlandığını ifade eder. Kontrolün başarılı veya başarısız sonucu, kullanım kararı olarak kaydedilir. | ||
| Neden önemli? Bu etkinlik, ürün kalitesini izlemek ve üretim sorunlarını belirlemek için gereklidir. Yüksek ret oranları veya uzun kontrol süreleri önemli darboğazlara işaret edebilir. Nereden alınır? Bu, kalite kontrol partisi için kullanım kararı verildiğinde yakalanan açık bir olaydır. Karar tarihi QALS tablosunda (PASTRTERM alanı) veya QAVE tablosunda bulunur. Kaydedin Kontrol partisi için kullanım kararının kaydedildiği zaman damgasını kullanın (QALS/QAVE tabloları). Olay türü explicit | |||
| Müşteri faturası oluşturuldu | Bu etkinlik, teslim edilen mal veya hizmetlere göre müşteri için fatura belgesinin oluşturulmasını ifade eder. Sürecin son mali mutabakat aşamasını başlatır. | ||
| Neden önemli? Bu etkinlik, faturalandırma çevrim süresini analiz etmek için önemlidir. Teslimat onayı ile faturalandırma arasındaki gecikmeler nakit akışını olumsuz etkileyebilir. Nereden alınır? Bu, açıkça kaydedilen bir olaydır. Oluşturulma zaman damgası, fatura belgesi başlık tablosunda (VBRK, ERDAT alanı) tutulur. Kaydedin Fatura belgesi başlığındaki oluşturulma tarihini (VBRK-ERDAT) kullanın. Olay türü explicit | |||
| Satın alma talebi oluşturuldu | Bu etkinlik, gerekli malları veya ham maddeleri tedarik etmek için kurum içinde bir talep oluşturulduğunu gösterir. Genellikle stok satış siparişini karşılamaya yetmediğinde veya yeniden sipariş düzeyinin altına düştüğünde başlatılır. | ||
| Neden önemli? Bu, satın alma döngüsünün ilk adımıdır. Talebin oluşturulmasını izlemek, satın alma sürecini başlatmadaki gecikmeleri belirlemeye ve uçtan uca satın alma sürecini analiz etmeye yardımcı olur. Nereden alınır? Bu açıkça kaydedilen bir olaydır. Oluşturulma zaman damgası, satın alma talebi başlık tablosunda (EBAN, BADAT alanı) tutulur. Kaydedin Satın alma talebi belgesi için oluşturulma tarihini (EBAN-BADAT) kullanın. Olay türü explicit | |||
| Sevkiyat oluşturuldu | Taşıma planlaması için bir veya daha fazla teslimatı bir araya getiren sevkiyat belgesinin oluşturulmasını ifade eder. Bu belgede taşıyıcı, güzergâh ve taşıma türüyle ilgili ayrıntılar yer alır. | ||
| Neden önemli? Bu etkinlik, resmî taşıma planlamasının başlangıcıdır. Mal çıkışı ile sevkiyatın tamamlanması arasındaki süreyi analiz ederek taşıma sürecinin verimliliğini görebilirsiniz. Nereden alınır? Bu, sevkiyat başlık tablosuna (VTTK, ERDAT alanı) açıkça kaydedilen bir olaydır. LE-TRA modülünün parçasıdır ve her kuruluş bu modülü kullanmayabilir. Kaydedin Sevkiyat belgesi başlığındaki oluşturulma tarihini (VTTK-ERDAT) kullanın. Olay türü explicit | |||
| Stok durumu kontrol edildi | Satış siparişini karşılamak için istenen ürünlerin stokta olup olmadığını belirleyen sistem veya manuel kontrolü ifade eder. Bu adım genellikle satış siparişi oluşturulurken otomatik olarak gerçekleştirilir, ancak ayrı bir olay olarak kaydedilmeyebilir. | ||
| Neden önemli? Sipariş ile bu kontrol arasındaki süreyi ve kontrol sonucunu anlamak, stok düzeylerinin sipariş karşılama süresini nasıl etkilediğini analiz etmenize yardımcı olur. Buradaki gecikmeler çoğu zaman satın alma veya üretim faaliyetlerini başlatır. Nereden alınır? Bu genellikle açıkça kaydedilen bir olay değildir. Satış siparişi kalem tablosunda (VBEP) ilk teyitli teslimat plan satırının oluşturulmasından veya sipariş kalemindeki durum değişikliklerinden çıkarılabilir. Kaydedin Satış siparişi teslimat plan satırındaki (VBEP tablosu) teyit durumu güncellemesinden çıkarın. Olay türü inferred | |||
| Üretim siparişi oluşturuldu | Satış siparişi için gereken mamulleri üretmek üzere bir üretim siparişi oluşturulduğunu gösterir. Bu, kurum içi üretim sürecinin resmî başlangıcıdır. | ||
| Neden önemli? Üretim siparişinin oluşturulması, üretim çevrim süresinin başlangıcını gösterir. Bu etkinliği analiz ederek talep sinyali ile üretimin başlaması arasındaki gecikmeleri belirleyebilirsiniz. Nereden alınır? Bu açıkça kaydedilen bir olaydır. Oluşturulma tarihi, üretim siparişi başlık tablosunda (AUFK, ERDAT alanı) tutulur. Kaydedin Sipariş başlık tablosundaki oluşturulma tarihini (AUFK-ERDAT) kullanın. Olay türü explicit | |||
| Ürün toplama tamamlandı | Bu etkinlik, giden teslimat için ürünlerin depodan fiziksel olarak toplanmasının tamamlandığını gösterir. Birçok sistemde teslimat belgesinin toplama durumu güncellendiğinde teyit edilir. | ||
| Neden önemli? Verimli ürün toplama, depo iş hacmi açısından büyük önem taşır. Bu etkinliği izlemek, depo operasyonlarındaki darboğazları belirlemeye ve toplama performansını ölçmeye yardımcı olur. Nereden alınır? Bu, çoğu zaman tek ve belirgin bir olay değildir; durum değişikliklerinden çıkarım yapılabilir. Teslimat kalemi tablosundaki (LIPS, KOSTA alanı) toplama durumu 'C' (Tamamen işlendi) olarak ayarlandığında kaydedilir. Kaydedin Toplama durumu (LIPS-KOSTA) tamamen toplandı olarak güncellendiğinde değişiklik belgelerinden çıkarım yapın. Olay türü inferred | |||
| Varış noktasında mallar boşaltıldı | Bu etkinlik, malların müşterinin bulunduğu yerde fiziksel olarak boşaltıldığını gösterir. SAP’de bu olay açıkça izlenmeyebilir; çoğu zaman taşıyıcı verilerinden veya sonraki olaylardan çıkarım yapmak gerekir. | ||
| Neden önemli? Bu, yolculuğun taşıma ayağının sonunu gösterir. Mal çıkışından bu noktaya kadar geçen süre taşıma süresidir ve lojistiği iyileştirmek için önemli bir ölçüttür. Nereden alınır? Bu olay, temel ERP sisteminde nadiren açıkça kaydedilir. Taşıyıcının EDI mesajlarından, Transportation Management (TM) modülündeki verilerden veya varsa teslimat kanıtı belgesinin zaman damgasından çıkarım yapılabilir. Kaydedin Taşıyıcı durum güncellemelerinden (ör. EDI 214) çıkarım yapın veya yaklaşık bir gösterge olarak teslimat kanıtı zaman damgasını kullanın. Olay türü inferred | |||
Veri çıkarma rehberleri
Adımlar
- Ön koşullar: Gerekli SAP S/4HANA Core Data Services (CDS) görünümlerine erişmek için yeterli yetkiye sahip bir kullanıcınız olduğundan emin olun. Bunun için genellikle SAP güvenlik ekibinizin atadığı özel bir rol gerekir. Ayrıca SAP HANA veritabanına bağlanabilen DBeaver veya SAP HANA Studio gibi bir SQL istemcisine ihtiyacınız vardır.
- Veritabanı bağlantısını kurun: SQL istemcinizi SAP S/4HANA veritabanına bağlanacak şekilde yapılandırın. Veritabanı sunucusunun ana bilgisayar adı, bağlantı noktası (ör. 3xx15; xx, örnek numarasıdır), veritabanı kullanıcı adı ve parola gerekir.
- SQL sorgusunu hazırlayın: Bu belgenin sorgu bölümünde verilen SQL sorgusunun tamamını kopyalayıp SQL istemcinizin düzenleyicisine yapıştırın. Sorgu, çeşitli lojistik ve satış modüllerindeki belirtilen tüm etkinlikleri çıkarmak için hazırlanmıştır.
- Veri çıkarma parametrelerini ayarlayın: Sorguyu çalıştırmadan önce her alt sorgudaki
WHEREkoşullarında yer alan yer tutucuları bulun. Analiz ettiğiniz gerçek şirket kodunu yazmak için'YourCompanyCode'değerini değiştirin. İstenen veri çıkarma dönemini belirlemek üzere'YYYY-MM-DD'gibi tarih aralığı yer tutucularını da düzenleyin. - 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 göre değişir. Sistem yükünü azaltmak için sorguyu yoğun olmayan saatlerde çalıştırmanız önerilir.
- İlk sonuçları inceleyin: Sorgu tamamlandığında SQL istemcinizdeki çıktıyı kısaca gözden geçirin. Satır sayısının makul olup olmadığını kontrol edin; LogisticsOrder, ActivityName ve EventTime gibi sütunların dolu olduğundan ve farklı etkinlik adlarının göründüğünden emin olun.
- Verileri CSV olarak dışa aktarın: Sonuç kümesinin tamamını SQL istemcinizden CSV dosyasına aktarın. Özel karakterlerle ilgili sorun yaşamamak için UTF-8 kodlamasını seçin.
- Yükleme için biçimlendirin: Son CSV dosyasındaki sütun başlıklarının, veri alımı için gereken öznitelik adlarıyla (ör.
LogisticsOrder,ActivityName,EventTime) tam olarak eşleştiğinden emin olun. Sorguyu verildiği şekilde kullandıysanız başka bir veri dönüşümü gerekmez.
Yapılandırma
- Ön koşullar: Alttaki SAP HANA veritabanına erişim gerekir. Veritabanı kullanıcısının sorguda başvurulan tüm CDS görünümlerinde
SELECTyetkisi olmalıdır. Bunlara I_SalesOrderItem, I_PurchaseOrderItem, I_OutboundDeliveryItem, I_MaterialDocumentItem, I_ProductionOrder, I_QualityInspection, I_Shipment ve I_BillingDocumentItem dahildir, ancak bunlarla sınırlı değildir. - Tarih aralığı filtresi: Verilen sorguda genellikle oluşturma tarihi alanına (
CreationDateveyaDocumentDate) uygulanan bir tarih aralığı filtresi yer tutucusu bulunur. İlk analiz için, sistemi aşırı yüklemeden temsili bir veri seti elde etmek amacıyla 3 ila 6 aylık bir dönem önerilir. - Temel iş filtreleri: Sonuçların ilgili olması için verileri belirli organizasyon birimlerine göre filtrelemek önemlidir. Sorguda
CompanyCodeiçin önceden yapılandırılmış bir yer tutucu bulunur. Analiz kapsamınıza göreSalesOrganization,DistributionChannelveyaPlantfiltrelerini de ekleyebilirsiniz. - Performansla ilgili noktalar: Bu karmaşık sorgu, birden fazla büyük CDS görünümünü birleştirir. Çalıştırılması önemli miktarda sistem kaynağı tüketebilir. Veri çıkarma işlemlerini mesai saatleri dışında planlayın. Çok büyük veri setlerinde sorguyu aya göre daha küçük ve sıralı gruplar halinde çalıştırmayı değerlendirin.
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
- İlgili lojistik, satış, tedarik, envanter, üretim, kalite, teslimat, sevkiyat, teslimat kanıtı ve faturalama verilerini içeren SAP HANA şemasına doğrudan okuma erişiminiz olduğunu doğrulayın. Şema adını, bağlantı bilgilerini ve yetkileri SAP Basis veya veri platformu ekibinden alın. Kaynak sisteme veri yazmayın.
- Hedef sistemdeki S/4HANA veri modelini doğrulayın. Satınalma siparişleri için EKKO ve EKPO, giden teslimatlar için LIKP ve LIPS kullanılır. Satış siparişleri, satınalma talepleri, malzeme belgeleri, üretim siparişleri, kalite kontrol sonuçları, sevkiyatlar, teslimat kanıtı ve faturalama için ek nesneler yapılandırılmalıdır. Sorgudaki köşeli parantez içindeki her nesne veya sütun yer tutucusunu, sistem veri sözlüğünde doğrulanmış nesnelerle değiştirin.
- LogisticsOrder ilişkilendirme kuralını tanımlayın. Tercih edilen yöntem, satış siparişinden sonraki teslimatlara, malzeme belgelerine, üretim veya tedarik belgelerine ve faturalama belgelerine uzanan, doğrulanmış bir belge akışı ilişkisidir. Doğrudan ilişki yoksa belgelenmiş bir ilişkilendirme tablosu veya iş sürecine özel bir eşleme yapılandırın. Vakaları yalnızca malzeme numarasına veya tarihe göre ilişkilendirmeyin.
- Veri çıkarma dönemini [Start date parameter] ve [End date parameter] değerleriyle belirleyin. Dönemi olay zaman damgalarına tutarlı biçimde uygulayın. Ancak dönem içindeki olayları açıklamak için gereken, dönemden önce oluşturulmuş belgeleri de dahil edin.
- İşaretli filtre bölümünde şirket kodunu, satış organizasyonunu, tesisi, satınalma organizasyonunu, belge türünü ve diğer iş filtrelerini yapılandırın. Filtreleri yalnızca hedef sistemdeki değerlerini doğruladıktan sonra kullanın.
- Her etkinlik dalındaki köşeli parantezli tablo ve sütun başvurularını doğrulanmış adlarla değiştirin. Her dal aynı sütunları ve uyumlu veri türlerini döndürmelidir. ProcessMind eksik olayları kendiliğinden çıkarsamadığı için sorgu, gerekli 15 etkinliğin her biri için açıkça bir satır oluşturur.
- Sorguyu SAP HANA Database Explorer, SAP HANA cockpit SQL Console veya onaylı SQL istemcisinde çalıştırın. UNION ALL sorgusunun tamamını çalıştırmadan önce her etkinlik dalını ayrı ayrı test edin. Çalıştırma planlarını inceleyin ve ilk testi kısa bir tarih aralığıyla sınırlayın.
- Belge ilişkilerini, zaman damgalarını, kullanıcı kimliklerini, tedarikçi ve müşteri değerlerini, malzeme ve tesis değerlerini ve kalite sonuçlarını doğrulayın. Kalem düzeyindeki birleştirmelerden kaynaklanan yinelenen satırları inceleyin ve belge başına bir olay veya belge kalemi başına bir olay gibi yapılandırılmış olay ayrıntı düzeyi kuralını uygulayın.
- Sonucu UTF-8 CSV veya ProcessMind’in desteklediği başka bir tablo biçiminde dışa aktarın. LogisticsOrder, ActivityName, EventTime, SourceSystem, LastDataUpdate, ExecutingUser, SupplierName, CustomerName, MaterialNumber, Plant, RequestedDeliveryDate ve QualityInspectionResult çıktı sütun adlarını aynen koruyun. EventTime değerinin zaman damgası olduğundan ve LastDataUpdate alanının tutarlı biçimde doldurulduğundan emin olun.
- Dosyayı ProcessMind’e yükleyin ve LogisticsOrder alanını vaka kimliği, ActivityName alanını etkinlik, EventTime alanını olay zaman damgası olarak eşleyin. 15 etkinlik etiketinin tamamının açık olaylar olarak işlendiğini doğrulayın ve artımlı veri çıkarma davranışını doğruladıktan sonra kontrollü bir yenileme planlayın.
Yapılandırma
- Tarih aralığı: 3 ila 6 aylık veriyle başlayın. İlk testlerde daha kısa bir dönem kullanın; performansı ve belge ilişkilerini doğruladıktan sonra aralığı genişletin.
- Kaynak şema: [SAP HANA schema name] değerini, doğrulanmış S/4HANA tablolarını veya görünümlerini içeren şemaya ayarlayın. Her S/4HANA kurulumunda klasik bir ERP tablosunun aynı adla bulunduğunu varsaymayın.
- Belge kapsamı: [Company Code filter], [Sales Organization filter], [Plant filter], [Purchasing Organization filter] ve [Document Type filter] değerlerini süreç kapsamına göre yapılandırın.
- İlişkilendirme: Her olayın bir LogisticsOrder değerine atanması için [Your document flow or correlation object] öğesini yapılandırın. Eksik veya belirsiz bir ilişkilendirme sessizce atanmamalı, raporlanmalıdır.
- Olay ayrıntı düzeyi: Belge, belge kalemi veya işle ilgili durum değişikliği başına bir olay seçin. Tüm dallarda aynı kuralı uygulayın ve yalnızca teknik nedenlerle yinelenen satırları kaldırın.
- Zaman damgası önceliği: Her etkinlik için doğrulanmış kayıt, oluşturma, teyit, durum değişikliği, kontrol, teslimat, boşaltma, POD veya faturalama zaman damgasını kullanın. İş olayı zamanının yerine veri çıkarma zamanını koymayın.
- Kaynak etiketi: [Source system label] değerini, onaylı SAP S/4HANA sistem kimliği gibi sabit bir değere ayarlayın.
- Yenileme zaman damgası: [Last data update expression] değerini onaylı veri çıkarma zaman damgasına veya kaynak yenileme zaman damgasına ayarlayın.
- Performans: Tarih ve organizasyon filtrelerini erken uygulayın, yalnızca gerekli sütunları seçin, sınırsız kalem düzeyindeki birleştirmelerden kaçının ve çalıştırma planını inceleyin. Düzenli yüklemeler için kalıcı bir veri çıkarma görünümü veya hazırlama tablosu kullanmayı değerlendirin.
- Yetkiler: İlgili SAP HANA şema nesnelerine okuma erişimi ve SQL çalıştırma izni gerekir. İş doğrulaması için ilgili satış, tedarik, envanter, üretim, kalite, lojistik yürütme, taşıma ve faturalama verilerine erişim gerekir.
- İşlevsel kapsam: Dağıtılan sistemin, istenen etkinliklerle temsil edilen iş süreçlerini içerdiğini doğrulayın. Sevkiyat, boşaltma, POD, kalite, üretim ve faturalama verileri ayrı uygulamalarda veya eklentilerde tutulabilir.
- Güvenlik: Kuruluşunuzun müşteri, tedarikçi, malzeme, finans ve kullanıcı verilerine ilişkin kurallarını uygulayın. Gerektiğinde hassas alanları maskeleyin veya erişimlerini kısıtlayın.
a Örnek sorgu sql
WITH
parameters AS (
SELECT
CAST('[Start date parameter]' AS TIMESTAMP) AS start_ts,
CAST('[End date parameter]' AS TIMESTAMP) AS end_ts,
CAST('[Last data update expression]' AS TIMESTAMP) AS last_data_update,
CAST('[Source system label]' AS NVARCHAR(100)) AS source_system,
CAST('[Company Code filter]' AS NVARCHAR(20)) AS company_code_filter,
CAST('[Sales Organization filter]' AS NVARCHAR(20)) AS sales_org_filter,
CAST('[Plant filter]' AS NVARCHAR(20)) AS plant_filter,
CAST('[Purchasing Organization filter]' AS NVARCHAR(20)) AS purchasing_org_filter,
CAST('[Document Type filter]' AS NVARCHAR(20)) AS document_type_filter
FROM DUMMY
),
base_events AS (
SELECT
CAST('[Sales order correlation column]' AS NVARCHAR(100)) AS LogisticsOrder,
CAST('Sales Order Created' AS NVARCHAR(100)) AS ActivityName,
CAST('[Sales order creation timestamp]' AS TIMESTAMP) AS EventTime,
CAST('[Executing user column]' AS NVARCHAR(100)) AS ExecutingUser,
CAST('[Supplier name column]' AS NVARCHAR(255)) AS SupplierName,
CAST('[Customer name column]' AS NVARCHAR(255)) AS CustomerName,
CAST('[Material number column]' AS NVARCHAR(100)) AS MaterialNumber,
CAST('[Plant column]' AS NVARCHAR(100)) AS Plant,
CAST('[Requested delivery date column]' AS DATE) AS RequestedDeliveryDate,
CAST('[Quality inspection result column]' AS NVARCHAR(100)) AS QualityInspectionResult
FROM [Your sales order source object]
CROSS JOIN parameters p
WHERE CAST('[Sales order creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Sales order creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Sales order company code column]' AS NVARCHAR(20)) = p.company_code_filter
AND CAST('[Sales order sales organization column]' AS NVARCHAR(20)) = p.sales_org_filter
AND CAST('[Sales order document type column]' AS NVARCHAR(20)) = p.document_type_filter
UNION ALL
SELECT
CAST('[Inventory check correlation column]' AS NVARCHAR(100)),
CAST('Inventory Availability Checked' AS NVARCHAR(100)),
CAST('[Inventory check timestamp]' AS TIMESTAMP),
CAST('[Inventory check user column]' AS NVARCHAR(100)),
CAST('[Inventory supplier name column]' AS NVARCHAR(255)),
CAST('[Inventory customer name column]' AS NVARCHAR(255)),
CAST('[Inventory material number column]' AS NVARCHAR(100)),
CAST('[Inventory plant column]' AS NVARCHAR(100)),
CAST('[Inventory requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your inventory availability source object]
CROSS JOIN parameters p
WHERE CAST('[Inventory check timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Inventory check timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Inventory company code column]' AS NVARCHAR(20)) = p.company_code_filter
AND CAST('[Inventory sales organization column]' AS NVARCHAR(20)) = p.sales_org_filter
UNION ALL
SELECT
CAST('[Purchase requisition correlation column]' AS NVARCHAR(100)),
CAST('Purchase Requisition Created' AS NVARCHAR(100)),
CAST('[Purchase requisition creation timestamp]' AS TIMESTAMP),
CAST('[Purchase requisition user column]' AS NVARCHAR(100)),
CAST('[Purchase requisition supplier name column]' AS NVARCHAR(255)),
CAST('[Purchase requisition customer name column]' AS NVARCHAR(255)),
CAST('[Purchase requisition material number column]' AS NVARCHAR(100)),
CAST('[Purchase requisition plant column]' AS NVARCHAR(100)),
CAST('[Purchase requisition requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your purchase requisition source object]
CROSS JOIN parameters p
WHERE CAST('[Purchase requisition creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Purchase requisition creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Purchase requisition plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Purchase order correlation column]' AS NVARCHAR(100)),
CAST('Purchase Order Issued' AS NVARCHAR(100)),
CAST('[Purchase order issue timestamp]' AS TIMESTAMP),
CAST('[Purchase order user column]' AS NVARCHAR(100)),
CAST('[Purchase order supplier name column]' AS NVARCHAR(255)),
CAST('[Purchase order customer name column]' AS NVARCHAR(255)),
CAST('[Purchase order material number column]' AS NVARCHAR(100)),
CAST('[Purchase order plant column]' AS NVARCHAR(100)),
CAST('[Purchase order requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM EKKO po_header
INNER JOIN EKPO po_item
ON po_header.[Purchase order number column] = po_item.[Purchase order number column]
CROSS JOIN parameters p
WHERE CAST('[Purchase order issue timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Purchase order issue timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Purchase order company code column]' AS NVARCHAR(20)) = p.company_code_filter
AND CAST('[Purchase order purchasing organization column]' AS NVARCHAR(20)) = p.purchasing_org_filter
AND CAST('[Purchase order document type column]' AS NVARCHAR(20)) = p.document_type_filter
UNION ALL
SELECT
CAST('[Goods receipt correlation column]' AS NVARCHAR(100)),
CAST('Goods Receipt For PO Posted' AS NVARCHAR(100)),
CAST('[Goods receipt posting timestamp]' AS TIMESTAMP),
CAST('[Goods receipt user column]' AS NVARCHAR(100)),
CAST('[Goods receipt supplier name column]' AS NVARCHAR(255)),
CAST('[Goods receipt customer name column]' AS NVARCHAR(255)),
CAST('[Goods receipt material number column]' AS NVARCHAR(100)),
CAST('[Goods receipt plant column]' AS NVARCHAR(100)),
CAST('[Goods receipt requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your material document header source object] material_header
INNER JOIN [Your material document item source object] material_item
ON material_header.[Material document number column] = material_item.[Material document number column]
AND material_header.[Material document year column] = material_item.[Material document year column]
CROSS JOIN parameters p
WHERE CAST('[Goods receipt posting timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Goods receipt posting timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Goods receipt plant column]' AS NVARCHAR(20)) = p.plant_filter
AND CAST('[Goods receipt movement type column]' AS NVARCHAR(20)) = '[Goods receipt movement type value]'
UNION ALL
SELECT
CAST('[Production order correlation column]' AS NVARCHAR(100)),
CAST('Production Order Created' AS NVARCHAR(100)),
CAST('[Production order creation timestamp]' AS TIMESTAMP),
CAST('[Production order user column]' AS NVARCHAR(100)),
CAST('[Production order supplier name column]' AS NVARCHAR(255)),
CAST('[Production order customer name column]' AS NVARCHAR(255)),
CAST('[Production order material number column]' AS NVARCHAR(100)),
CAST('[Production order plant column]' AS NVARCHAR(100)),
CAST('[Production order requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your production order source object]
CROSS JOIN parameters p
WHERE CAST('[Production order creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Production order creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Production order plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Production receipt correlation column]' AS NVARCHAR(100)),
CAST('Goods Produced' AS NVARCHAR(100)),
CAST('[Production receipt timestamp]' AS TIMESTAMP),
CAST('[Production receipt user column]' AS NVARCHAR(100)),
CAST('[Production receipt supplier name column]' AS NVARCHAR(255)),
CAST('[Production receipt customer name column]' AS NVARCHAR(255)),
CAST('[Production receipt material number column]' AS NVARCHAR(100)),
CAST('[Production receipt plant column]' AS NVARCHAR(100)),
CAST('[Production receipt requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your production receipt source object]
CROSS JOIN parameters p
WHERE CAST('[Production receipt timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Production receipt timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Production receipt plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Quality inspection correlation column]' AS NVARCHAR(100)),
CAST('Quality Inspection Performed' AS NVARCHAR(100)),
CAST('[Quality inspection completion timestamp]' AS TIMESTAMP),
CAST('[Quality inspection user column]' AS NVARCHAR(100)),
CAST('[Quality supplier name column]' AS NVARCHAR(255)),
CAST('[Quality customer name column]' AS NVARCHAR(255)),
CAST('[Quality material number column]' AS NVARCHAR(100)),
CAST('[Quality plant column]' AS NVARCHAR(100)),
CAST('[Quality requested delivery date column]' AS DATE),
CAST('[Quality inspection result column]' AS NVARCHAR(100))
FROM [Your quality inspection source object]
CROSS JOIN parameters p
WHERE CAST('[Quality inspection completion timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Quality inspection completion timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Quality plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Outbound delivery correlation column]' AS NVARCHAR(100)),
CAST('Outbound Delivery Created' AS NVARCHAR(100)),
CAST('[Outbound delivery creation timestamp]' AS TIMESTAMP),
CAST('[Outbound delivery user column]' AS NVARCHAR(100)),
CAST('[Outbound delivery supplier name column]' AS NVARCHAR(255)),
CAST('[Outbound delivery customer name column]' AS NVARCHAR(255)),
CAST('[Outbound delivery material number column]' AS NVARCHAR(100)),
CAST('[Outbound delivery plant column]' AS NVARCHAR(100)),
CAST('[Outbound delivery requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM LIKP delivery_header
INNER JOIN LIPS delivery_item
ON delivery_header.[Delivery number column] = delivery_item.[Delivery number column]
CROSS JOIN parameters p
WHERE CAST('[Outbound delivery creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Outbound delivery creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Outbound delivery plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Picking correlation column]' AS NVARCHAR(100)),
CAST('Picking Completed' AS NVARCHAR(100)),
CAST('[Picking completion timestamp]' AS TIMESTAMP),
CAST('[Picking user column]' AS NVARCHAR(100)),
CAST('[Picking supplier name column]' AS NVARCHAR(255)),
CAST('[Picking customer name column]' AS NVARCHAR(255)),
CAST('[Picking material number column]' AS NVARCHAR(100)),
CAST('[Picking plant column]' AS NVARCHAR(100)),
CAST('[Picking requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your picking status source object]
CROSS JOIN parameters p
WHERE CAST('[Picking completion timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Picking completion timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Picking plant column]' AS NVARCHAR(20)) = p.plant_filter
AND CAST('[Picking completion status column]' AS NVARCHAR(50)) = '[Picking completed status value]'
UNION ALL
SELECT
CAST('[Goods issue correlation column]' AS NVARCHAR(100)),
CAST('Goods Issue Posted' AS NVARCHAR(100)),
CAST('[Goods issue posting timestamp]' AS TIMESTAMP),
CAST('[Goods issue user column]' AS NVARCHAR(100)),
CAST('[Goods issue supplier name column]' AS NVARCHAR(255)),
CAST('[Goods issue customer name column]' AS NVARCHAR(255)),
CAST('[Goods issue material number column]' AS NVARCHAR(100)),
CAST('[Goods issue plant column]' AS NVARCHAR(100)),
CAST('[Goods issue requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your goods issue source object]
CROSS JOIN parameters p
WHERE CAST('[Goods issue posting timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Goods issue posting timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Goods issue plant column]' AS NVARCHAR(20)) = p.plant_filter
AND CAST('[Goods issue movement type column]' AS NVARCHAR(20)) = '[Goods issue movement type value]'
UNION ALL
SELECT
CAST('[Shipment correlation column]' AS NVARCHAR(100)),
CAST('Shipment Created' AS NVARCHAR(100)),
CAST('[Shipment creation timestamp]' AS TIMESTAMP),
CAST('[Shipment user column]' AS NVARCHAR(100)),
CAST('[Shipment supplier name column]' AS NVARCHAR(255)),
CAST('[Shipment customer name column]' AS NVARCHAR(255)),
CAST('[Shipment material number column]' AS NVARCHAR(100)),
CAST('[Shipment plant column]' AS NVARCHAR(100)),
CAST('[Shipment requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your shipment source object]
CROSS JOIN parameters p
WHERE CAST('[Shipment creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Shipment creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Shipment plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Unloading correlation column]' AS NVARCHAR(100)),
CAST('Goods Unloaded at Destination' AS NVARCHAR(100)),
CAST('[Unloading timestamp]' AS TIMESTAMP),
CAST('[Unloading user column]' AS NVARCHAR(100)),
CAST('[Unloading supplier name column]' AS NVARCHAR(255)),
CAST('[Unloading customer name column]' AS NVARCHAR(255)),
CAST('[Unloading material number column]' AS NVARCHAR(100)),
CAST('[Unloading plant column]' AS NVARCHAR(100)),
CAST('[Unloading requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your unloading or carrier event source object]
CROSS JOIN parameters p
WHERE CAST('[Unloading timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Unloading timestamp]' AS TIMESTAMP) < p.end_ts
UNION ALL
SELECT
CAST('[POD correlation column]' AS NVARCHAR(100)),
CAST('Proof Of Delivery Confirmed' AS NVARCHAR(100)),
CAST('[POD confirmation timestamp]' AS TIMESTAMP),
CAST('[POD user column]' AS NVARCHAR(100)),
CAST('[POD supplier name column]' AS NVARCHAR(255)),
CAST('[POD customer name column]' AS NVARCHAR(255)),
CAST('[POD material number column]' AS NVARCHAR(100)),
CAST('[POD plant column]' AS NVARCHAR(100)),
CAST('[POD requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your proof of delivery source object]
CROSS JOIN parameters p
WHERE CAST('[POD confirmation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[POD confirmation timestamp]' AS TIMESTAMP) < p.end_ts
UNION ALL
SELECT
CAST('[Billing correlation column]' AS NVARCHAR(100)),
CAST('Customer Invoice Created' AS NVARCHAR(100)),
CAST('[Billing creation timestamp]' AS TIMESTAMP),
CAST('[Billing user column]' AS NVARCHAR(100)),
CAST('[Billing supplier name column]' AS NVARCHAR(255)),
CAST('[Billing customer name column]' AS NVARCHAR(255)),
CAST('[Billing material number column]' AS NVARCHAR(100)),
CAST('[Billing plant column]' AS NVARCHAR(100)),
CAST('[Billing requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your billing document source object]
CROSS JOIN parameters p
WHERE CAST('[Billing creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Billing creation timestamp]' AS TIMESTAMP) < p.end_ts
)
SELECT
LogisticsOrder,
ActivityName,
EventTime,
parameters.source_system AS SourceSystem,
parameters.last_data_update AS LastDataUpdate,
ExecutingUser,
SupplierName,
CustomerName,
MaterialNumber,
Plant,
RequestedDeliveryDate,
QualityInspectionResult
FROM base_events
CROSS JOIN parameters
WHERE LogisticsOrder IS NOT NULL
AND ActivityName IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY LogisticsOrder, EventTime, ActivityName; Adımlar
- Ön koşullar: SAP S/4HANA sisteminizde ABAP programları oluşturup çalıştırmak (SE38 işlemine erişim) ve VBAK, LIKP, EKKO ve MKPF gibi tedarik zinciri tablolarından veri okumak için geliştirici anahtarınız ve gerekli yetkileriniz olduğundan emin olun.
- Programı oluşturun:
SE38işlem kodunu kullanarak ABAP Editor’ü açın. Yeni program için örneğinZ_PM_SCM_EXTRACTIONadını girin ve 'Create' seçeneğine tıklayın. Açıklayıcı bir başlık girin ve program türünü 'Executable Program' olarak belirleyin. - Kodu ekleyin: Aşağıdaki 'query' bölümündeki ABAP kodunun tamamını kopyalayıp yeni programınızın ABAP Editor’üne yapıştırın.
- Metin öğelerini tanımlayın: Go To > Text Elements > Selection Texts yolunu izleyin. Kullanıcı arayüzünün anlaşılır ve kullanımı kolay olması için önerilen tüm seçim ekranı etiketlerini etkinleştirin.
- Programı etkinleştirin: CTRL+S, ardından CTRL+F3 tuşlarına basarak veya araç çubuğundaki etkinleştirme simgesini kullanarak programı kaydedip etkinleştirin. Sistem yapılandırmasına bağlı olarak oluşabilecek sözdizimi hatalarını giderin.
- Programı çalıştırın: F8 tuşuna basarak veya 'Direct Processing' düğmesini kullanarak programı çalıştırın. Açılan seçim ekranında çıkarılacak verileri filtreleyebilirsiniz.
- Veri çıkarma parametrelerini ayarlayın: Seçim ekranında Sales Order Creation Date için tarih aralığını belirtin. Veri hacmini yönetmek için belirli Company Code veya Sales Organization değerlerine göre de filtreleme yapmanız önemle önerilir. Çıktı dosyası için SAP uygulama sunucusundaki tam yolu girin.
- Arka planda çalıştırın: Birkaç ayı kapsayan büyük veri setlerinde işlem zaman aşımını önlemek için programı arka planda çalıştırın. Menüden Program > Execute in Background seçeneğini belirleyip işi planlayın.
- Veri dosyasını alın: Program tamamlandığında, belirttiğiniz uygulama sunucusu dizinine gitmek için
AL11işlem kodunu kullanın. Oluşturulan dosyayı bulun veCG3Yişlemiyle yerel bilgisayarınıza indirin. - Yüklemeye hazırlayın: İndirilen dosyanın virgül veya noktalı virgülle ayrılmış CSV gibi düz metin biçiminde ve UTF-8 kodlamalı olduğundan emin olun. Dosya artık süreç analizi aracına yüklenmeye hazırdır.
Yapılandırma
- Seçim tarih aralığı (S_ERDAT): En önemli filtredir. Satış siparişlerinin ilk seçimi için
VBAK-ERDAToluşturma tarihine göre zaman aralığını belirler. Yönetilebilir bir veri hacmi için son 3 ila 6 ay gibi sınırlı bir dönemle başlayın. - Satış organizasyonu (S_VKORG): Veri çıkarımını belirli satış organizasyonlarıyla sınırlamak için isteğe bağlı bir filtredir. Analizi belirli bir iş birimine veya bölgeye odaklamak için kullanışlıdır.
- Şirket kodu (S_BUKRS): Verileri belirli şirket kodlarıyla sınırlamak için isteğe bağlı bir filtredir. Veri kapsamını daraltıp performansı artırmak için kullanılması önemle önerilir.
- Çıktı dosyası yolu (P_FILE): Son olay günlüğünün kaydedileceği SAP uygulama sunucusundaki tam yoldur. Programı çalıştıran kullanıcının bu dizine yazma izni olmalıdır. Örnek:
/usr/sap/trans/tmp/scm_event_log.csv. - Çalıştırma modu: Program, küçük test veri çıkarımları için ön planda çalıştırılabilir. Önemli miktarda veri söz konusu olduğunda zaman aşımını önlemek ve yoğun saatlerde sistem yükünü azaltmak için arka planda çalıştırılması gerekir.
- Sistem yetkileri: 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 olmalıdır.
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. Başlamaya hazır mısınız?
Verilerinizi hazırlamak ve tedarik zinciri performansınızı bugün iyileştirmeye başlamak için bu Templateten yararlanın. Her adımda size yardımcı olmaya hazırız.
Tedarik zinciri yönetiminizi şimdi iyileştirin
Uçtan uca görünürlük elde edin, birkaç gün içinde tahmin doğruluğunu %90'a çıkarın.
14 günlük ücretsiz deneme, kredi kartı gerekmez.