Szablon danych do zarządzania zapasami
Szablon danych do zarządzania zapasami
- Zalecane atrybuty do zebrania
- Czynności do śledzenia podczas odkrywania procesu
- Wskazówki dotyczące ekstrakcji danych z SAP S/4HANA
Atrybuty zarządzania zapasami
| Nazwa | Opis | ||
|---|---|---|---|
| Czas zdarzenia EventTime | Dokładna data i godzina zarejestrowania czynności dotyczącej zapasu w systemie. | ||
| Opis Czas zdarzenia to znacznik czasu wskazujący dokładny moment wystąpienia czynności. Pozwala uporządkować zdarzenia chronologicznie i odtworzyć przebieg procesu dla każdej partii zapasu. Stanowi podstawę wszystkich analiz process mining opartych na czasie. Dokładność czasu zdarzenia ma zasadnicze znaczenie przy obliczaniu wskaźników, takich jak czas cyklu, czas realizacji i czas trwania. Umożliwia analizę wyników procesu w różnych okresach, pomaga ustalić, kiedy pojawiają się wąskie gardła, i dostarcza danych o przyczynach opóźnień, na przykład o czasie oczekiwania partii na zwolnienie z kontroli jakości. Dlaczego to ważne Ten znacznik czasu porządkuje zdarzenia chronologicznie i stanowi podstawę obliczeń czasu trwania oraz wyników procesu. Skąd pobrać Zwykle jest to połączenie daty księgowania (MKPF-BUDAT) i godziny wprowadzenia (MKPF-CPUTM) z tabeli nagłówków dokumentów materiałowych MKPF. Przykłady 2023-10-26T09:00:00Z2023-11-15T14:35:10Z2024-01-05T23:15:00Z | |||
| Partia zapasu InventoryBatchLot | Unikalny identyfikator określonej ilości produktu, używany jako identyfikator sprawy do śledzenia jej cyklu życia. | ||
| Opis Numer partii zapasu jest głównym identyfikatorem sprawy, który łączy wszystkie działania dotyczące określonej ilości produktu. Dzięki niemu można chronologicznie prześledzić drogę zapasu: od przyjęcia do magazynu, przez kolejne przesunięcia i zmiany statusu, aż po wydanie do sprzedaży lub produkcji albo utylizację. W analizie procesów ten atrybut ma podstawowe znaczenie. Pozwala prześledzić cały przebieg procesu dla każdej partii, dokładnie mierzyć czasy cyklu, wykrywać różnice w przebiegu i sprawdzać, jak obsługiwane są poszczególne partie. Analiza na poziomie partii jest szczególnie ważna w branżach, w których liczą się identyfikowalność, kontrola jakości i zarządzanie terminami ważności, takich jak farmacja, przemysł spożywczy i chemiczny. Dlaczego to ważne To główny identyfikator łączący wszystkie powiązane zdarzenia dotyczące zapasu w jedną sprawę. Umożliwia analizę procesu od początku do końca. Skąd pobrać Zwykle jest to numer partii zapisany w polu CHARG w tabelach SAP, takich jak MCHA (kartoteka partii) lub MCH1 (partie). Przykłady B001-A452023L202405-XYZ789456123BATCH-05-24 | |||
| Czynność ActivityName | Nazwa zdarzenia biznesowego, które wystąpiło w określonym momencie procesu zarządzania zapasami. | ||
| Opis Atrybut „Czynność” opisuje pojedynczy krok lub zdarzenie w cyklu życia partii zapasu. Może oznaczać przyjęcie towaru, przesunięcie zapasu, kontrolę jakości lub wydanie materiału. Każda czynność jest zapisem zdarzenia dotyczącego partii w określonym momencie. Analiza czynności stanowi podstawę process mining. Pozwala wizualizować przebieg procesu, wykrywać częste i rzadkie ścieżki, wskazywać wąskie gardła powodujące opóźnienia oraz analizować pętle poprawek. Poznanie kolejności i częstotliwości czynności, takich jak „Złomowanie zapasu” czy „Kontrola jakości”, pomaga wskazać obszary wymagające usprawnienia i zwiększyć sprawność operacji. Dlaczego to ważne Określa kroki procesu, umożliwiając wizualizację i analizę cyklu życia zapasu. Skąd pobrać To atrybut pochodny, często tworzony przez przypisanie typów ruchu SAP (MSEG-BWART) lub kodów transakcji (MKPF-TCODE2) do czytelnych nazw. Przykłady Zaksięgowanie przyjęcia towaruZaksięgowanie przesunięcia do miejsca składowaniaZaksięgowanie wydania towaru do dostawyZłomowanie zapasu | |||
| Ilość Quantity | Ilość materiału objętego ruchem magazynowym. | ||
| Opis Ten atrybut określa ilość materiału przeniesionego, przyjętego, wydanego lub skorygowanego w ramach danej czynności. Wartość jest zapisywana w podstawowej jednostce miary materiału. Analiza ilości pozwala ocenić skalę i wpływ procesów magazynowych. Umożliwia tworzenie dashboardów pokazujących wolumen obsługiwanych towarów, na przykład „Wydania towarów według SKU”. Służy też do obliczania KPI, takich jak „Udział zapasów zezłomowanych lub zutylizowanych”, dzięki czemu analiza uwzględnia nie tylko liczbę zdarzeń, lecz także ich wymiar ilościowy. Dlaczego to ważne Określa ilość materiału w każdej czynności, co pozwala analizować przepustowość, wolumen złomowanych zapasów i skutki korekt. Skąd pobrać W tabeli pozycji dokumentu materiałowego MSEG, w polu MENGE (Quantity). Przykłady 10012.55000-10 | |||
| Kod przyczyny ruchu MovementReasonCode | Kod określający przyczynę ruchu zapasów. | ||
| Opis Kod przyczyny ruchu wyjaśnia, dlaczego wykonano dane przemieszczenie towaru. Często opisuje nieplanowane ruchy, takie jak korekty zapasów, zwroty lub złomowanie. Ten atrybut jest bardzo przydatny w analizie przyczyn źródłowych. Na dashboardzie „Przyczyny ręcznych korekt zapasów” analiza kodów przyczyn może ujawnić źródła rozbieżności, na przykład uszkodzenia, kradzieże lub błędy przy wprowadzaniu danych. Dzięki temu można rozwiązywać problemy u źródła, zamiast jedynie korygować ich skutki. Dlaczego to ważne Wyjaśnia przyczyny nieplanowanych ruchów zapasów i pozwala precyzyjnie badać ich źródła. Skąd pobrać W tabeli pozycji dokumentu materiałowego MSEG, w polu GRUND (Reason for Movement). Przykłady 00010005102 | |||
| Miejsce składowania StorageLocation | Określona lokalizacja w zakładzie, w której fizycznie przechowywane są zapasy. | ||
| Opis Miejsce składowania to jednostka organizacyjna pozwalająca rozróżniać zapasy materiałów w obrębie jednego zakładu. Zakład może na przykład mieć osobne miejsca składowania dla surowców, wyrobów gotowych i zapasów oczekujących na kontrolę jakości. Ten atrybut pozwala określić lokalizację dokładniej niż zakład. W analizie służy do badania przepływu towarów między obszarami magazynu, na przykład czasu przeniesienia zapasów ze strefy przyjęć do magazynu głównego. Analiza wykorzystania przestrzeni i częstotliwości przemieszczeń według miejsca składowania pomaga usprawnić układ magazynu i logistykę wewnętrzną. Dlaczego to ważne Pozwala dokładnie określić lokalizację zapasów w zakładzie oraz analizować przemieszczenia wewnętrzne i efektywność składowania. Skąd pobrać W tabeli pozycji dokumentu materiałowego MSEG, w polu LGORT (Storage Location). Przykłady 0001RM01FG01QI01 | |||
| Nazwa użytkownika UserName | Identyfikator użytkownika, który wykonał transakcję w SAP. | ||
| Opis Ten atrybut zapisuje identyfikator użytkownika SAP, który zaksięgował dokument lub wykonał czynność. Ułatwia ustalenie, kto odpowiada za poszczególne działania w procesie zarządzania zapasami. Analiza według użytkownika pomaga ocenić wyniki pracy, zgodność i potrzeby szkoleniowe. Na przykład dashboard „Przyczyny ręcznych korekt zapasów” wykorzystuje ten atrybut, aby wskazać osoby wykonujące najwięcej korekt. Może to pomóc ustalić, kto potrzebuje dodatkowego szkolenia, wykryć nieuprawnione działania lub wyróżnić osoby osiągające dobre wyniki. Dlaczego to ważne Pozwala ustalić odpowiedzialność oraz wykryć zachowania, potrzeby szkoleniowe i problemy ze zgodnością dotyczące konkretnych użytkowników. Skąd pobrać Znajduje się w tabeli nagłówków dokumentów materiałowych MKPF, w polu USNAM (nazwa użytkownika). Przykłady JSMITHMBROWNWAREHOUSE_OPS | |||
| Numer materiału MaterialNumber | Unikalny identyfikator zarządzanego produktu lub materiału. | ||
| Opis Numer materiału, często nazywany SKU (Stock Keeping Unit), to unikalny kod przypisany do konkretnego produktu. Jest podstawowym elementem danych podstawowych w zarządzaniu zapasami i służy do śledzenia ilości, wartości oraz przesunięć towarów. W process mining analiza według numeru materiału pozwala spojrzeć na procesy magazynowe z perspektywy produktu. Ułatwia ustalenie, które produkty najdłużej przechodzą kontrolę jakości, które są najczęściej złomowane i dla których wykonuje się najwięcej przesunięć wewnętrznych. Taki podział pomaga wykrywać problemy dotyczące konkretnych produktów i dostosowywać strategie zarządzania zapasami do różnych rodzajów towarów. Dlaczego to ważne Pozwala podzielić analizę według produktów i wykryć wzorce oraz problemy dotyczące konkretnych pozycji. Skąd pobrać Znajduje się w tabeli pozycji dokumentu materiałowego MSEG, w polu MATNR. Dane podstawowe są przechowywane w tabeli MARA. Przykłady RM-1001FG-2050-B100-400-A | |||
| Typ ruchu MovementType | Trzycyfrowy klucz w SAP określający sposób księgowania ruchu towarów. | ||
| Opis Typ ruchu to ważny klucz kontrolny w SAP Inventory Management, który określa charakterystykę przesunięcia materiału. Wskazuje aktualizowane konta, układ ekranu transakcji oraz pola ilości i wartości, które zostaną zmienione. Na przykład typ 101 oznacza przyjęcie towaru, 311 przesunięcie, a 551 złomowanie. Ten atrybut często służy do wyznaczania czytelnej nazwy „Czynności”. Analiza według typu ruchu daje szczegółowy, techniczny obraz przepływu zapasów. Jest niezbędna do sprawdzenia poprawności mapy procesu i wykrycia konkretnych transakcji, które mogą powodować wąskie gardła lub odchylenia. Dlaczego to ważne Zapewnia precyzyjną, techniczną klasyfikację każdego zdarzenia dotyczącego zapasu. Jest niezbędny do wyznaczania czynności i prowadzenia szczegółowej analizy. Skąd pobrać Znajduje się w tabeli pozycji dokumentu materiałowego MSEG, w polu BWART (typ ruchu). Przykłady 101311261551601 | |||
| Zakład Plant | Jednostka organizacyjna oznaczająca obiekt, w którym znajdują się zapasy, na przykład fabrykę lub centrum dystrybucyjne. | ||
| Opis Zakład (Plant) to centralna jednostka organizacyjna w SAP. Może oznaczać zakład produkcyjny, centralny magazyn lub siedzibę firmy. Wszystkie zapasy są fizycznie lub logicznie przypisane do zakładu. Analiza według zakładu pozwala porównywać przebieg i wyniki procesów w różnych lokalizacjach. Pomaga odpowiedzieć na pytania takie jak: „W którym zakładzie najdłużej trwa odkładanie towaru do magazynu?” albo „Czy odsetek rozbieżności w zapasach jest wyższy w zakładzie A niż w zakładzie B?”. Taki podział geograficzny lub organizacyjny ułatwia wykrywanie problemów charakterystycznych dla danej lokalizacji i dzielenie się sprawdzonymi rozwiązaniami w całej organizacji. Dlaczego to ważne Umożliwia porównywanie procesów magazynowych i ich wyników w różnych lokalizacjach firmy. Skąd pobrać W tabeli pozycji dokumentu materiałowego MSEG, w polu WERKS (Plant). Przykłady 10001710DE01US01 | |||
| Czas realizacji zamówienia OrderFulfillmentCycleTime | Czas od rozpoczęcia kompletacji do zaksięgowania wydania towaru do dostawy. | ||
| Opis Ta miara obliczana jest jako czas od czynności „Rozpoczęcie kompletacji” do czynności „Zaksięgowanie wydania towaru do dostawy”. Pokazuje, ile czasu magazyn potrzebuje na przygotowanie i wysłanie zamówienia klienta od rozpoczęcia procesu. Miara bezpośrednio odpowiada KPI „Czas realizacji zamówienia”. Jej analiza pozwala ocenić, jak szybko firma reaguje na zapotrzebowanie klientów. Czas można podzielić według produktu, magazynu lub klienta, aby ustalić, na którym etapie kompletacji, pakowania lub wysyłki powstają opóźnienia. Wpływają one bezpośrednio na zadowolenie klientów i sprawność logistyki. Dlaczego to ważne Mierzy szybkość i sprawność procesu wydania towaru z magazynu, co wpływa na zadowolenie klientów. Skąd pobrać Atrybut obliczany na podstawie różnicy czasu między zdarzeniami „Rozpoczęcie kompletacji” i „Zaksięgowanie wydania towaru do dostawy” dla każdej partii. Przykłady 7200144003600 | |||
| Data ważności ExpirationDate | Data, po której partia materiału traci ważność i nie nadaje się już do użycia. | ||
| Opis Data przydatności do użycia (SLED) to ważna dana podstawowa dla towarów łatwo psujących się lub wrażliwych na upływ czasu. Jest przypisana do partii i określa, kiedy produktu nie można już sprzedawać ani zużywać. Ten atrybut jest niezbędny na dashboardzie „Analiza zapasów przestarzałych i przeterminowanych”. Analiza czynności z uwzględnieniem daty ważności pozwala wykryć partie zagrożone przeterminowaniem i podjąć odpowiednie działania. Ułatwia też ocenę skuteczności zasad rotacji zapasów, takich jak FEFO (pierwsze traci ważność, pierwsze wychodzi), oraz oszacowanie strat wynikających ze złomowania przeterminowanych zapasów. Dlaczego to ważne Umożliwia analizę zapasów przestarzałych i przeterminowanych, pomagając ograniczyć straty i marnotrawstwo. Skąd pobrać W tabeli danych podstawowych partii MCH1 lub MCHA, w polu VFDAT (Shelf Life Expiration Date). Przykłady 2024-12-312025-06-302024-09-01 | |||
| Jednostka miary UnitOfMeasure | Jednostka, w której podawana jest ilość materiału, na przykład sztuki lub kilogramy. | ||
| Opis Jednostka miary określa sposób wyrażenia atrybutu „Ilość”. Typowe przykłady to sztuki (PC), kilogramy (KG), litry (L) i kartony (BOX). Dzięki temu wartość ilości można właściwie zinterpretować. Choć często pełni funkcję prostego opisu, ten atrybut ma znaczenie dla jakości danych i analiz wymagających przeliczenia różnych jednostek na wspólną miarę. Aby na przykład poprawnie obliczyć łączną wartość zapasów przeznaczonych do złomowania, trzeba uwzględnić różne jednostki i w razie potrzeby je przeliczyć. Dlaczego to ważne Ułatwia interpretację atrybutu „Ilość” i pozwala prawidłowo ocenić wolumen materiałów. Skąd pobrać W tabeli pozycji dokumentu materiałowego MSEG, w polu MEINS (Base Unit of Measure). Przykłady Szt.KgSzt.M | |||
| Miejsce składowania w magazynie StorageBin | Najdokładniej określona jednostka lokalizacji w magazynie, w której fizycznie znajdują się materiały. | ||
| Opis Miejsce składowania w magazynie wskazuje konkretną lokalizację, na przykład miejsce na regale. Taki poziom szczegółowości jest zwykle dostępny po wdrożeniu SAP Warehouse Management (WM) lub Extended Warehouse Management (EWM). Ten atrybut ma duże znaczenie na dashboardzie „Wykorzystanie przestrzeni magazynowej”. Pozwala ocenić, jak efektywnie wykorzystywana jest powierzchnia magazynu, wskazać miejsca narażone na zatory oraz wykryć nieefektywne ścieżki odkładania lub kompletacji. Analiza przemieszczeń między lokalizacjami pomaga usprawnić układ magazynu i skrócić czas przemieszczania się pracowników. Dlaczego to ważne Zapewnia najdokładniejsze dane o lokalizacji, co pozwala analizować wykorzystanie przestrzeni magazynowej i sprawność operacji. Skąd pobrać W przypadku WM dane można znaleźć w tabelach zleceń transportowych, takich jak LTAK/LTAP. Dla dokumentów magazynowych mogą znajdować się w MSEG-LGPBE. Szczegóły można sprawdzić w dokumentacji SAP S/4HANA. Przykłady A-01-01-AB-05-10-CRCV-AREA-01 | |||
| Numer dokumentu materiałowego MaterialDocumentNumber | Unikalny numer dokumentu materiałowego, w którym zapisano ruch towaru. | ||
| Opis Po zaksięgowaniu ruchu towaru w SAP system tworzy dokument materiałowy potwierdzający to zdarzenie. Ten atrybut jest unikalnym identyfikatorem dokumentu. Jeden dokument materiałowy może obejmować wiele pozycji lub czynności. W process mining numer dokumentu materiałowego jest ważnym identyfikatorem transakcji. Pozwala grupować powiązane zdarzenia zaksięgowane razem. Jest też niezbędny podczas audytu i przy przechodzeniu od analizy procesu do systemu źródłowego w celu sprawdzenia konkretnej transakcji. Dlaczego to ważne Służy jako identyfikator transakcji podczas audytu i pozwala grupować czynności wykonane w ramach jednego dokumentu. Skąd pobrać W tabelach MKPF (nagłówek) i MSEG (pozycja), w polu MBLNR (Number of Material Document). Przykłady 490000123450000056784900002345 | |||
| Ostatnia aktualizacja danych LastDataUpdate | Znacznik czasu wskazujący, kiedy dane tego rekordu zostały ostatnio odświeżone z systemu źródłowego. | ||
| Opis Ten atrybut zapisuje datę i godzinę ostatniej ekstrakcji lub aktualizacji danych z systemu źródłowego. Informuje, jak aktualne są analizowane dane. Dzięki temu użytkownicy mogą ocenić, czy pracują na danych niemal bieżących, czy na migawce z wcześniejszego okresu. Przy każdej analizie aktualność danych ma znaczenie dla trafności wniosków. To pole pozwala analitykom i użytkownikom biznesowym sprawdzić, czy dane są aktualne. Często jest też wyświetlane na dashboardach, aby zapewnić kontekst dla prezentowanych informacji. Dlaczego to ważne Informuje użytkowników o aktualności danych i pomaga upewnić się, że analizy opierają się na najnowszych dostępnych informacjach. Skąd pobrać Ten znacznik czasu jest generowany i dodawany podczas procesu ekstrakcji, transformacji i ładowania danych (ETL). Przykłady 2024-05-21T08:00:00Z2024-05-20T08:00:00Z | |||
| Rodzaj zapasu StockType | Określa status zapasu, na przykład dostępny do użycia, w kontroli jakości lub zablokowany. | ||
| Opis Rodzaj zapasu określa jego przydatność do wykorzystania. Główne kategorie to zapasy nieograniczonego użycia (dostępne), zapasy w kontroli jakości (oczekujące na sprawdzenie) oraz zapasy zablokowane (niedostępne do użycia). Ruch towaru często wiąże się ze zmianą rodzaju zapasu. Śledzenie tych zmian pomaga zrozumieć proces udostępniania zapasów. Bezpośrednio wiąże się z czynnościami takimi jak „Przekazanie zapasu do kontroli jakości” i „Zmiana statusu zapasu na zablokowany”. Analiza czasu spędzonego w poszczególnych kategoriach, zwłaszcza w kontroli jakości, pozwala wykrywać opóźnienia ograniczające dostępność towarów do sprzedaży lub produkcji. Dlaczego to ważne Pokazuje, czy zapasy można wykorzystać, co pomaga analizować opóźnienia kontroli jakości i dostępność towarów. Skąd pobrać W tabeli pozycji dokumentu materiałowego MSEG, w polu INSMK (Stock Type). Przykłady Do swobodnego wykorzystaniaKontrola jakościZapas zablokowany | |||
| System źródłowy SourceSystem | Wskazuje system, z którego wyodrębniono dane. | ||
| Opis Ten atrybut wskazuje system, w którym pierwotnie zapisano dane dotyczące zarządzania zapasami. W tym przypadku jest to konkretna instancja SAP S/4HANA. Informacja ta ma znaczenie w środowiskach, w których dane pochodzą z kilku systemów ERP, systemów zarządzania magazynem lub starszych platform. Przy analizie jednego systemu może się wydawać niezmienna, ale staje się istotna przy łączeniu danych z różnych źródeł w celu uzyskania pełnego obrazu procesu. Pomaga w zarządzaniu danymi, rozwiązywaniu problemów z ich ekstrakcją i zachowaniu przejrzystości pochodzenia danych. Dlaczego to ważne Informuje o pochodzeniu danych, co jest niezbędne do zarządzania danymi i analizy obejmującej wiele systemów. Skąd pobrać Zwykle jest to wartość wpisana na stałe podczas transformacji danych, aby wskazać konkretną instancję SAP S/4HANA. Przykłady S4H_PROD_100SAP_S4_FINANCES4HANA_GLOBAL | |||
Czynności w procesie zarządzania zapasami
| Działanie | Opis | ||
|---|---|---|---|
| Zaksięgowanie korekty zapasu | Rejestruje zmianę ilości zapasu wynikającą z inwentaryzacji lub innej rozbieżności. Zdarzenie koryguje stan ewidencyjny tak, aby odpowiadał stanowi fizycznemu. | ||
| Dlaczego to ważne Korekty są niezbędne do utrzymania dokładności stanów magazynowych. Częste korekty mogą wskazywać na problemy z obsługą zapasów, zabezpieczeniami lub wprowadzaniem danych. Skąd pobrać Zdarzenie jest rejestrowane w tabeli MATDOC. Identyfikują je typy ruchu (BWART) związane z inwentaryzacją, na przykład 701 (nadwyżka) lub 702 (niedobór). Rejestrowanie Dane pochodzą z dokumentów materiałowych w MATDOC z typami ruchu związanymi z korektami inwentaryzacyjnymi, na przykład 701 lub 702. Typ zdarzenia explicit | |||
| Zaksięgowanie przesunięcia do miejsca składowania | Oznacza fizyczne przeniesienie partii z obszaru przyjęć lub strefy odkładczej do docelowej lokalizacji albo miejsca składowania. W SAP jest rejestrowane jako dokument materiałowy przesunięcia. | ||
| Dlaczego to ważne Ta czynność kończy proces przyjęcia towaru. Czas jej wykonania, czyli czas odkładania, to ważny KPI sprawności magazynu. Skąd pobrać Zdarzenie jest rejestrowane w tabeli MATDOC jako przesunięcie, często między lokalizacjami składowania, na przykład z typem ruchu 311. Konkretne przesunięcie zależy od struktury magazynu. Rejestrowanie Zdarzenie identyfikują dokumenty przesunięć w MATDOC, które przenoszą zapas z tymczasowej lokalizacji przyjęć (SLoc) do docelowej lokalizacji składowania (SLoc). Typ zdarzenia explicit | |||
| Zaksięgowanie przyjęcia towaru | Oznacza pierwsze przyjęcie partii zapasów do magazynu, zwykle od dostawcy lub z produkcji. Zdarzenie jest jawnie rejestrowane w SAP S/4HANA, gdy przy przyjęciu towaru tworzony jest dokument materiałowy. | ||
| Dlaczego to ważne To główne zdarzenie rozpoczynające cykl życia zapasu. Analiza czasu od tej czynności do kolejnych, na przykład odłożenia towaru, pozwala ocenić sprawność przyjęć magazynowych. Skąd pobrać Zdarzenie jest rejestrowane w tabeli MATDOC. Identyfikuje je typ ruchu (BWART), na przykład 101 dla przyjęcia z zamówienia zakupu lub 103 dla przyjęcia do zapasu zablokowanego. Rejestrowanie Dane pochodzą z dokumentów materiałowych w MATDOC, oznaczonych odpowiednimi typami ruchu przyjęcia towaru. Typ zdarzenia explicit | |||
| Zaksięgowanie wydania towaru do dostawy | Rejestruje końcowy etap procesu wysyłki, w którym partia zostaje przekazana klientowi lub przewoźnikowi. Jest to jawna transakcja, która zmniejsza zapas i jest księgowana w rachunkowości. | ||
| Dlaczego to ważne To ważne zdarzenie kończące realizację zamówienia. Pozwala mierzyć terminowość dostaw i obliczać całkowity czas realizacji zamówienia. Skąd pobrać Zdarzenie jest rejestrowane w tabeli MATDOC. Identyfikuje je typ ruchu (BWART) oznaczający wydanie towaru do dostawy sprzedażowej, zwykle 601. Rejestrowanie Dane pochodzą z dokumentów materiałowych w MATDOC z typem ruchu 601. Typ zdarzenia explicit | |||
| Zaksięgowanie wydania towaru do produkcji | Oznacza zużycie partii zapasów na potrzeby zlecenia produkcyjnego lub procesowego. Transakcja zmniejsza zapas i przypisuje koszt materiału do zlecenia produkcyjnego. | ||
| Dlaczego to ważne To podstawowe zdarzenie zużycia, które kończy cykl życia zapasu komponentu. Jest ważne przy analizie dostępności materiałów do produkcji i wzorców ich zużycia. Skąd pobrać Zdarzenie jest rejestrowane w tabeli MATDOC. Identyfikują je typy ruchu (BWART) oznaczające wydanie towaru do zlecenia, na przykład 261. Rejestrowanie Dane pochodzą z dokumentów materiałowych w MATDOC z typem ruchu 261. Typ zdarzenia explicit | |||
| Złomowanie zapasu | Oznacza ostateczne wycofanie partii z zapasów i trwałe usunięcie jej z ewidencji. Zwykle dotyczy zapasów przeterminowanych, uszkodzonych lub przestarzałych. | ||
| Dlaczego to ważne To zdarzenie końcowe oznacza stratę finansową. Analiza złomowania pomaga wykryć problemy związane ze starzeniem się zapasów, procedurami obsługi lub prognozowaniem popytu. Skąd pobrać Zdarzenie jest rejestrowane w tabeli MATDOC. Identyfikują je typy ruchu (BWART) związane ze złomowaniem, na przykład 551 (z zapasu nieograniczonego), 553 (z kontroli jakości) lub 555 (z zapasu zablokowanego). Rejestrowanie Dane pochodzą z dokumentów materiałowych w MATDOC z typami ruchu związanymi ze złomowaniem, na przykład 551. Typ zdarzenia explicit | |||
| Zwolnienie zapasu z kontroli jakości | Oznacza, że partia przeszła kontrolę jakości i jest dostępna do użycia lub odłożenia na miejsce składowania. Zdarzenie jest rejestrowane jako jawne przesunięcie z zapasu objętego kontrolą jakości do innego typu zapasu, na przykład do zapasu nieograniczonego. | ||
| Dlaczego to ważne Ten etap oznacza zakończenie kontroli jakości i udostępnienie zapasu. Opóźnienia mogą powodować poważne problemy w dalszych etapach produkcji lub realizacji zamówień. Skąd pobrać Zdarzenie jest rejestrowane w tabeli MATDOC jako przesunięcie. Zwykle identyfikuje je typ ruchu (BWART) 321, który przenosi zapas z „kontroli jakości” do „użytku nieograniczonego”. Rejestrowanie Dane pochodzą z dokumentów materiałowych w MATDOC z typem ruchu 321. Typ zdarzenia explicit | |||
| Przekazanie zapasu do kontroli jakości | Oznacza przeniesienie przyjętej partii do zapasu objętego kontrolą jakości. Do czasu zwolnienia partia nie jest dostępna do użycia. W SAP jest to jawna transakcja zmieniająca typ zapasu partii. | ||
| Dlaczego to ważne Ta czynność rozpoczyna kontrolę jakości. Czas od jej wykonania do zwolnienia zapasu z kontroli jakości jest ważnym wskaźnikiem opóźnień związanych z jakością. Skąd pobrać Zdarzenie jest rejestrowane w tabeli MATDOC. Może to być przyjęcie towaru, na przykład typ ruchu 101 z typem zapasu (INSMK) ustawionym na „Q” (kontrola jakości), albo przesunięcie, na przykład typ 322. Rejestrowanie Zdarzenie identyfikują dokumenty materiałowe w MATDOC, które przenoszą zapas do typu „kontrola jakości”. Typ zdarzenia explicit | |||
| Przyjęcie zwrotu od klienta | Rejestruje zwrot partii wcześniej wydanej klientowi do magazynu. Jest to jawna transakcja zwiększająca zapas. | ||
| Dlaczego to ważne Śledzenie zwrotów pomaga zrozumieć problemy z jakością produktów i niezadowolenie klientów. Obsługa zwrotów i podejmowanie decyzji o ich dalszym przeznaczeniu również mogą być źródłem nieefektywności. Skąd pobrać Zdarzenie jest rejestrowane w tabeli MATDOC. Identyfikują je typy ruchu (BWART) związane ze zwrotami sprzedażowymi, na przykład 651 (do zapasu nieograniczonego) lub 653 (do kontroli jakości). Rejestrowanie Dane pochodzą z dokumentów materiałowych w MATDOC z typami ruchu dla zwrotów sprzedażowych, na przykład 651 lub 653. Typ zdarzenia explicit | |||
| Rozpoczęcie kompletacji | Oznacza początek realizacji zamówienia, gdy tworzone jest zadanie magazynowe polegające na pobraniu partii z miejsca składowania. Zdarzenie jest często rejestrowane przy utworzeniu zlecenia przesunięcia lub zadania magazynowego. | ||
| Dlaczego to ważne Ta czynność rozpoczyna kompletację. Analiza czasu od tego zdarzenia do zakończenia kompletacji pomaga ocenić sprawność pracy magazynierów i wykryć opóźnienia. Skąd pobrać Zdarzenie zwykle nie jest rejestrowane w MATDOC. W systemach Warehouse Management (WM/EWM) można je wywnioskować ze znacznika czasu utworzenia zlecenia przesunięcia (tabela LTAK) lub zadania magazynowego. Rejestrowanie Zdarzenie można wywnioskować z rekordu utworzenia zlecenia przesunięcia (w WM) lub zadania magazynowego (w EWM) powiązanego z partią materiału. Typ zdarzenia inferred | |||
| Zaksięgowanie wewnętrznego przesunięcia zapasu | Rejestruje przesunięcie partii zapasów między lokalizacjami lub miejscami składowania w obrębie tego samego zakładu. Jest to jawna transakcja, która tworzy dokument materiałowy. | ||
| Dlaczego to ważne Śledzenie przesunięć wewnętrznych pomaga ocenić sprawność operacji magazynowych, wykryć zbędne przemieszczenia i zmierzyć czas uzupełniania zapasów między lokalizacjami. Skąd pobrać Zdarzenie jest rejestrowane w tabeli MATDOC. Przesunięcia między lokalizacjami składowania są zwykle oznaczone typem ruchu (BWART) 311. Rejestrowanie Dane pochodzą z dokumentów materiałowych w MATDOC z typami ruchu dla wewnętrznych przesunięć zapasów, na przykład 311. Typ zdarzenia explicit | |||
| Zmiana statusu partii | Oznacza zmianę w kartotece partii, na przykład zmianę statusu z „nieograniczonego” na „ograniczony”. Nie jest to przesunięcie materiału, lecz rejestrowana zmiana danych podstawowych. | ||
| Dlaczego to ważne Zmiany statusu partii bezpośrednio wpływają na możliwość jej wykorzystania w sprzedaży lub produkcji. Analiza tych zmian może ujawnić problemy z zapasami zbliżającymi się do terminu ważności lub z kontrolą jakości, nawet jeśli nie dochodzi do fizycznego przesunięcia. Skąd pobrać Zdarzenie można wywnioskować z dzienników zmian tabel kartoteki partii (MCH1, MCHA). Tabele CDHDR i CDPOS rejestrują zmiany pola statusu partii (MCH1-ZUSTD). Rejestrowanie Zdarzenie wynika z dokumentów zmian w CDHDR/CDPOS dotyczących pola statusu w kartotece partii (MCH1-ZUSTD). Typ zdarzenia inferred | |||
| Zmiana statusu zapasu na nieograniczony | Oznacza zmianę statusu partii, która zostaje zwolniona z blokady lub wstrzymania związanego z kontrolą jakości i udostępniona do użycia. Zdarzenie jest rejestrowane jako jawne przesunięcie. | ||
| Dlaczego to ważne Ta czynność oznacza zakończenie blokady zapasu. Analiza czasu, przez jaki zapas pozostaje zablokowany, pomaga usprawnić proces rozwiązywania problemów. Skąd pobrać Zdarzenie jest rejestrowane w tabeli MATDOC jako przesunięcie. Typ ruchu (BWART) 344 przenosi zapas ze statusu „zablokowany” do „użytku nieograniczonego”. Rejestrowanie Zdarzenie identyfikują dokumenty materiałowe w MATDOC z typem ruchu 344. Typ zdarzenia explicit | |||
| Zmiana statusu zapasu na zablokowany | Oznacza zmianę statusu partii, która uniemożliwia jej wydanie, na przykład z powodu uszkodzenia, wstrzymania lub innych przyczyn. W SAP jest to jawne przesunięcie. | ||
| Dlaczego to ważne Zdarzenie wskazuje przerwy w dostępności zapasów. Częste blokowanie może świadczyć o problemach z obsługą, warunkami składowania lub jakością dostaw. Skąd pobrać Zdarzenie jest rejestrowane w tabeli MATDOC jako przesunięcie. Typ ruchu (BWART) 344 służy zwykle do przeniesienia zapasu ze statusu „zablokowany” do „nieograniczony”, a typ 343 do przeniesienia ze statusu „nieograniczony” do „zablokowany”. Ta czynność dotyczy typu 343. Rejestrowanie Zdarzenie identyfikują dokumenty materiałowe w MATDOC z typem ruchu 343. Typ zdarzenia explicit | |||
Instrukcje ekstrakcji danych
Kroki
- Uzyskaj dostęp do systemu: Upewnij się, że mają Państwo użytkownika z uprawnieniami do odpytywania widoków Core Data Services (CDS) w systemie SAP S/4HANA. Dostęp zwykle nadaje administrator systemu.
- Wybierz klienta SQL: Wybierz narzędzie SQL, które może połączyć się z bazą danych SAP HANA. Popularne opcje to SAP HANA Studio, SAP HANA Database Explorer oraz narzędzia innych firm, takie jak DBeaver.
- Skonfiguruj połączenie z bazą danych: W kliencie SQL utwórz nowe połączenie z bazą danych. Potrzebne będą nazwa hosta bazy HANA, numer portu (zwykle 3<instance_number>15) oraz dane logowania użytkownika bazy.
- Przygotuj zapytanie SQL: Skopiuj całe zapytanie SQL z sekcji „query” tego dokumentu do edytora klienta SQL.
- Ustaw parametry zapytania: Znajdź w zapytaniu wartości zastępcze. Zastąp
I_MaterialDocumentItem.PostingDate BETWEEN 'YYYYMMDD' AND 'YYYYMMDD'wybranym zakresem dat, na przykładBETWEEN '20230101' AND '20230630'. Zaktualizuj też filtry dotyczące firmy lub zakładu, takie jakMaterialDocumentItem.Plant IN ('Plant1', 'Plant2'), aby odpowiadały strukturze organizacji. - Uruchom zapytanie: Wykonaj zmodyfikowane zapytanie SQL w bazie danych S/4HANA. Czas wykonania zależy od zakresu dat i ilości danych o zapasach w systemie.
- Sprawdź dane: Po zakończeniu zapytania przejrzyj wyniki w kliencie SQL i upewnij się, że są poprawne i kompletne. Sprawdź, czy występują różne czynności i czy kluczowe atrybuty mają wartości.
- Wyeksportuj dziennik zdarzeń: Wyeksportuj cały zestaw wyników z klienta SQL do pliku CSV. Ustaw kodowanie UTF-8, aby uniknąć problemów z wyświetlaniem znaków.
- Przygotuj plik do przesłania: Nazwy kolumn w pliku CSV muszą dokładnie odpowiadać aliasom użytym w zapytaniu, na przykład
InventoryBatchLot,ActivityName,EventTimei innym. Plik jest gotowy do przesłania do narzędzia process mining.
Konfiguracja
- Uprawnienia: Użytkownik uruchamiający zapytanie musi mieć uprawnienia
SELECTdo następujących widoków CDS:I_MaterialDocumentItem,I_BatchChangeDocumentiI_WarehouseTask. Wymagany jest również dostęp do schematu bazy danych, w którym znajdują się te widoki. - Filtrowanie zakresu dat: Należy filtrować pola
PostingDate,ChangeDocumentCreationDatelubWarehouseTaskCreationDatewedług zakresu dat. Typowy okres analizy wynosi od 3 do 12 miesięcy. Zapytanie obejmujące kilka lat może znacząco obniżyć wydajność. - Filtry organizacyjne: Aby przyspieszyć zapytanie i zawęzić analizę, dodaj klauzule
WHEREfiltrujące wedługPlantlubCompanyCode. Ograniczy to ilość danych i pozwoli skupić ekstrakcję na odpowiednich obszarach działalności. - Ilość danych: Systemy zarządzania zapasami generują duże ilości danych. Szeroki zakres dat może zwrócić miliony wierszy, co może obciążyć system źródłowy podczas ekstrakcji i spowolnić działanie klienta SQL.
- Extended Warehouse Management (EWM): Czynność „Rozpoczęcie kompletacji” opiera się na widoku CDS
I_WarehouseTask, który zawiera dane tylko wtedy, gdy używany jest SAP Extended Warehouse Management. Jeśli organizacja korzysta ze starszego modułu Warehouse Management (WM) lub tylko z Inventory Management (IM), ta czynność nie zostanie wyodrębniona.
Przykładowe zapytanie sql
SELECT
mat_doc.Batch AS "InventoryBatchLot",
CASE
WHEN mat_doc.MovementType = '101' AND mat_doc.InventoryStockType = '2' THEN 'Stock Posted to Quality Inspection'
WHEN mat_doc.MovementType = '101' THEN 'Goods Receipt Posted'
WHEN mat_doc.MovementType = '321' THEN 'Quality Inspection Stock Released'
WHEN mat_doc.MovementType = '311' THEN 'Internal Stock Transfer Posted'
WHEN mat_doc.MovementType = '344' THEN 'Stock Status Changed to Blocked'
WHEN mat_doc.MovementType IN ('343', '322') THEN 'Stock Status Changed to Unrestricted'
WHEN mat_doc.MovementType IN ('701', '702') THEN 'Inventory Adjustment Posted'
WHEN mat_doc.MovementType = '601' THEN 'Goods Issue for Delivery Posted'
WHEN mat_doc.MovementType = '261' THEN 'Goods Issue for Production Posted'
WHEN mat_doc.MovementType IN ('651', '653') THEN 'Sales Return Received'
WHEN mat_doc.MovementType = '551' THEN 'Stock Scrapped'
WHEN mat_doc.MovementType = '313' THEN 'Put-Away Transfer Posted' -- Example for two-step transfers
ELSE 'Unknown Material Movement'
END AS "ActivityName",
TO_TIMESTAMP(mat_doc.PostingDate || LPAD(mat_doc.CreationTime, 6, '0'), 'YYYYMMDDHH24MISS') AS "EventTime",
mat_doc.Material AS "MaterialNumber",
mat_doc.CreatedByUser AS "UserName",
mat_doc.MovementType AS "MovementType",
mat_doc.Plant AS "Plant",
mat_doc.StorageLocation AS "StorageLocation",
mat_doc.QuantityInEntryUnit AS "Quantity",
mat_doc.ReasonForMovement AS "MovementReasonCode"
FROM
I_MaterialDocumentItem AS mat_doc
WHERE
mat_doc.Batch IS NOT NULL AND mat_doc.Batch <> ''
AND mat_doc.PostingDate BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
-- AND mat_doc.Plant IN ('Plant1', 'Plant2') -- Placeholder: Add filters for relevant plants
UNION ALL
SELECT
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 3) AS "InventoryBatchLot",
'Batch Status Changed' AS "ActivityName",
change_doc.ChangeDocumentCreationDateTime AS "EventTime",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 1) AS "MaterialNumber",
change_doc.ChangedByUser AS "UserName",
NULL AS "MovementType",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 2) AS "Plant",
NULL AS "StorageLocation",
NULL AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_BatchChangeDocument AS change_doc
WHERE
change_doc.ChangeDocumentTable = 'MCHA' AND change_doc.ChangeDocumentTableFieldName = 'ZUSTD'
AND TO_VARCHAR(change_doc.ChangeDocumentCreationDate) BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
UNION ALL
SELECT
wh_task.Batch AS "InventoryBatchLot",
'Picking Initiated' AS "ActivityName",
wh_task.WarehouseTaskCreationDateTime AS "EventTime",
wh_task.Product AS "MaterialNumber",
wh_task.CreatedByUser AS "UserName",
NULL AS "MovementType",
wh_task.Plant AS "Plant",
wh_task.SourceStorageLocation AS "StorageLocation",
wh_task.TargetQuantity AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_WarehouseTask AS wh_task
WHERE
wh_task.Batch IS NOT NULL AND wh_task.Batch <> ''
AND wh_task.WarehouseProcessType IN ('P210', 'P220') -- Placeholder: Adjust process types based on your picking configuration
AND TO_VARCHAR(wh_task.WarehouseTaskCreationDate) BETWEEN '20230101' AND '20231231'; -- Placeholder: Set your date range Kroki
- Potwierdź, że bezpośredni dostęp SQL do SAP HANA jest zatwierdzony, a użytkownik ekstrakcji ma uprawnienia do odczytu tabeli MATDOC i wymaganych tabel danych podstawowych partii. Ustal właściciela schematu fizycznego i zastąp [Your SAP HANA schema] zatwierdzoną nazwą schematu.
- Sprawdź, które pola tabel MATDOC i partii są dostępne w używanej wersji SAP S/4HANA. Poniższe zapytanie korzysta z często dostępnych pól MATDOC i MCHA, ale dostępność i nazewnictwo pól mogą się różnić w zależności od wersji, wdrożenia i aktywowanego zakresu. Przed uruchomieniem zastąp wszystkie pola oznaczone [Configure based on your system].
- Określ okres ekstrakcji, zastępując [Start timestamp] i [End timestamp] znacznikami czasu w formacie ISO. Przy pierwszej ekstrakcji użyj okresu od trzech do sześciu miesięcy. Następnie wydłuż go po sprawdzeniu ilości danych i wydajności.
- Uruchom zapytanie w zatwierdzonym kliencie SQL, SAP HANA Database Explorer lub innym autoryzowanym narzędziu do obsługi baz danych. Ogranicz wyniki do wymaganych kodów firm, zakładów, rodzajów dokumentów lub rodzajów ruchu, zastępując odpowiednie wartości zastępcze filtrów.
- Sprawdź mapowanie rodzajów ruchu w CTE czynności. Znaczenie rodzajów ruchu zależy od konfiguracji systemu i firmy. Zastąp przykładowe listy rodzajów ruchu wartościami skonfigurowanymi w systemie docelowym dla przyjęcia towaru, kontroli jakości, zwolnienia, odłożenia do magazynu, przemieszczenia wewnętrznego, zapasu zablokowanego, zapasu do swobodnego wykorzystania, korekty zapasów, kompletacji, wydania do dostawy, wydania do produkcji, zwrotu od klienta i złomowania.
- Sprawdź, czy każdy wiersz wynikowy zawiera InventoryBatchLot, ActivityName i EventTime. Upewnij się, że identyfikator partii jest wystarczająco stabilny, by pełnić funkcję identyfikatora case w ProcessMind. Jeśli do rozróżnienia identycznych wartości partii w różnych jednostkach organizacyjnych potrzebne są materiał, zakład lub miejsce składowania, użyj skonfigurowanego złożonego identyfikatora case zamiast samej wartości partii.
- Sprawdź kolejność zdarzeń, zduplikowane wiersze, dokumenty korygujące, anulowane dokumenty i obsługę stref czasowych. MATDOC zapisuje księgowania dokumentów, dlatego dokumenty korygujące i anulujące mogą pojawić się jako osobne zdarzenia, o ile nie zostaną jawnie wykluczone lub odpowiednio zmapowane.
- Wyeksportuj wyniki zapytania do pliku płaskiego, w którym każdy wiersz odpowiada jednemu zdarzeniu. Uwzględnij kolumny InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity i MovementReasonCode. Zapisuj znaczniki czasu w spójnym formacie ISO 8601 i zachowaj zera wiodące w wartościach materiału, partii, zakładu i miejsca składowania.
- Prześlij dziennik zdarzeń do ProcessMind i przypisz InventoryBatchLot jako identyfikator case, ActivityName jako czynność, a EventTime jako znacznik czasu zdarzenia. Nie zakładaj, że ProcessMind samodzielnie rozpozna czynności, połączy rekordy lub uzupełni brakujące zdarzenia.
Konfiguracja
- Metoda ekstrakcji: bezpośrednie zapytanie SQL do danych o zapasach i partiach w SAP HANA. Zapytanie odczytuje MATDOC i łączy ją z danymi podstawowymi partii z MCHA. Tabelę MCH1 lub inną tabelę partii należy dodać dopiero po sprawdzeniu odpowiednich pól i poziomu partii w systemie docelowym.
- Zakres dat: zacznij od trzech do sześciu miesięcy. Ustal EventTime na podstawie daty i godziny księgowania dokumentu materiałowego dostępnych w MATDOC. Przy ładowaniu przyrostowym zastosuj kontrolowany okres nakładania się zakresów, aby uwzględnić opóźnione księgowania, a następnie usuń duplikaty na podstawie skonfigurowanych identyfikatorów dokumentu i pozycji.
- Wymagane filtry: skonfiguruj kod firmy, zakład, rodzaj dokumentu materiałowego, rodzaj ruchu, obecność partii i datę księgowania zgodnie z zakresem procesu. Przed dodaniem do zapytania potwierdź, że pola kodu firmy i rodzaju dokumentu są dostępne w zainstalowanej wersji.
- Mapowanie czynności: znaczenie rodzajów ruchu zależy od konfiguracji. Utrzymuj zatwierdzoną tabelę mapowania albo zastąp listy rodzajów ruchu w zapytaniu wartościami używanymi w firmie. Nie traktuj przykładowych list jako uniwersalnej interpretacji SAP.
- Zakres partii: zapytanie pomija wiersze bez wartości partii, ponieważ identyfikatorem case jest InventoryBatchLot. Jeśli identyfikator partii ma być wyznaczany na podstawie innego źródła, skonfiguruj je jawnie przed ekstrakcją.
- Szczegółowość zdarzeń: każdy kwalifikujący się wiersz MATDOC dotyczący pozycji jest zwracany jako osobne zdarzenie. Zapytanie nie wyznacza na podstawie późniejszych rekordów czynności kompletacji, decyzji dotyczących jakości, zmian statusu partii ani innych czynności.
- Zmiany danych podstawowych partii: sam MATDOC nie zapewnia wiarygodnych danych o zmianach statusu partii. Skonfiguruj źródło dokumentów zmian lub historii partii dla czynności „Zmiana statusu partii”. Zapytanie zawiera przykładową gałąź, którą przed uruchomieniem trzeba połączyć ze zweryfikowanym źródłem.
- Kompletacja: rozpoczęcie kompletacji jest zazwyczaj zapisane w danych o realizacji operacji magazynowych, a nie w MATDOC. Skonfiguruj zweryfikowane źródło zadań magazynowych lub zleceń transportowych i zastąp przykładową gałąź przed uruchomieniem.
- Wydajność: filtruj dane według znacznika czasu lub daty księgowania, zakładu, kodu firmy i odpowiednich rodzajów ruchu. Pobieraj tylko wymagane kolumny, unikaj skanowania całej historii bez filtrów i uruchamiaj zapytanie w zatwierdzonym oknie obciążenia systemu. Przy dużych wolumenach MATDOC zaleca się ekstrakcję partycjami lub przyrostową.
- Uprawnienia i wymagania wstępne: uzyskaj zatwierdzone połączenie z bazą danych, dostęp do schematu i uprawnienia do odczytu danych o zapasach SAP S/4HANA oraz dostęp do źródeł danych o realizacji operacji magazynowych lub historii zmian, jeśli są używane dla dwóch czynności spoza MATDOC. Potwierdź, że bezpośredni dostęp do bazy jest zgodny z modelem operacyjnym SAP i zasadami wsparcia obowiązującymi w organizacji.
- Strefy czasowe: sprawdź strefy czasowe bazy danych i aplikacji. Przed przesłaniem danych do ProcessMind przelicz EventTime w spójny sposób.
- Ochrona danych: stosuj zasady organizacji dotyczące identyfikatorów użytkowników, danych materiałowych, danych związanych z klientami i danych logowania do bazy. Nie umieszczaj danych logowania w treści zapytania.
Przykładowe zapytanie sql
WITH
params AS (
SELECT
TO_TIMESTAMP('[Start timestamp]') AS start_ts,
TO_TIMESTAMP('[End timestamp]') AS end_ts
FROM DUMMY
),
movement_map AS (
SELECT '101' AS movement_type, 'Goods Receipt Posted' AS activity_name FROM DUMMY
UNION ALL SELECT '105', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '107', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '109', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '321', 'Stock Posted to Quality Inspection' FROM DUMMY
UNION ALL SELECT '322', 'Quality Inspection Stock Released' FROM DUMMY
UNION ALL SELECT '343', 'Stock Status Changed to Unrestricted' FROM DUMMY
UNION ALL SELECT '344', 'Stock Status Changed to Blocked' FROM DUMMY
UNION ALL SELECT '311', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '309', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '301', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '311', 'Put-Away Transfer Posted' FROM DUMMY
UNION ALL SELECT '309', 'Put-Away Transfer Posted' FROM DUMMY
UNION ALL SELECT '701', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '702', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '703', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '704', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '705', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '706', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '601', 'Goods Issue for Delivery Posted' FROM DUMMY
UNION ALL SELECT '602', 'Goods Issue for Delivery Posted' FROM DUMMY
UNION ALL SELECT '261', 'Goods Issue for Production Posted' FROM DUMMY
UNION ALL SELECT '262', 'Goods Issue for Production Posted' FROM DUMMY
UNION ALL SELECT '651', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '653', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '654', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '551', 'Stock Scrapped' FROM DUMMY
UNION ALL SELECT '552', 'Stock Scrapped' FROM DUMMY
),
matdoc_events AS (
SELECT
m.MATNR AS MaterialNumber,
m.CHARG AS InventoryBatchLot,
COALESCE(m.BUDAT_MKPF, m.BUDAT) AS EventTime,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(m.BWART AS NVARCHAR(3)) AS MovementType,
m.WERKS AS Plant,
m.LGORT AS StorageLocation,
m.MENGE AS Quantity,
m.GRUND AS MovementReasonCode,
mm.activity_name AS ActivityName,
m.MBLNR AS MaterialDocumentNumber,
m.MJAHR AS MaterialDocumentYear,
m.ZEILE AS MaterialDocumentItem
FROM [Your SAP HANA schema].MATDOC m
INNER JOIN movement_map mm
ON CAST(m.BWART AS NVARCHAR(3)) = mm.movement_type
CROSS JOIN params p
WHERE m.CHARG IS NOT NULL
AND TRIM(m.CHARG) <> ''
AND COALESCE(m.BUDAT_MKPF, m.BUDAT) >= p.start_ts
AND COALESCE(m.BUDAT_MKPF, m.BUDAT) < p.end_ts
AND m.WERKS IN ([Configure based on your system])
),
batch_enriched_events AS (
SELECT
e.InventoryBatchLot,
e.ActivityName,
e.EventTime,
e.MaterialNumber,
e.UserName,
e.MovementType,
e.Plant,
e.StorageLocation,
e.Quantity,
e.MovementReasonCode,
e.MaterialDocumentNumber,
e.MaterialDocumentYear,
e.MaterialDocumentItem,
c.CUOBJ_BM AS BatchObjectNumber
FROM matdoc_events e
LEFT JOIN [Your SAP HANA schema].MCHA c
ON c.MATNR = e.MaterialNumber
AND c.CHARG = e.InventoryBatchLot
AND c.WERKS = e.Plant
),
verified_batch_status_events AS (
SELECT
CAST(NULL AS NVARCHAR(40)) AS InventoryBatchLot,
'Batch Status Changed' AS ActivityName,
CAST(NULL AS TIMESTAMP) AS EventTime,
CAST(NULL AS NVARCHAR(40)) AS MaterialNumber,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(NULL AS NVARCHAR(3)) AS MovementType,
CAST(NULL AS NVARCHAR(4)) AS Plant,
CAST(NULL AS NVARCHAR(4)) AS StorageLocation,
CAST(NULL AS DECIMAL(31,3)) AS Quantity,
CAST(NULL AS NVARCHAR(3)) AS MovementReasonCode,
CAST(NULL AS NVARCHAR(20)) AS MaterialDocumentNumber,
CAST(NULL AS NVARCHAR(4)) AS MaterialDocumentYear,
CAST(NULL AS NVARCHAR(6)) AS MaterialDocumentItem,
CAST(NULL AS NVARCHAR(40)) AS BatchObjectNumber
FROM DUMMY
WHERE 1 = 0
),
verified_picking_events AS (
SELECT
CAST(NULL AS NVARCHAR(40)) AS InventoryBatchLot,
'Picking Initiated' AS ActivityName,
CAST(NULL AS TIMESTAMP) AS EventTime,
CAST(NULL AS NVARCHAR(40)) AS MaterialNumber,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(NULL AS NVARCHAR(3)) AS MovementType,
CAST(NULL AS NVARCHAR(4)) AS Plant,
CAST(NULL AS NVARCHAR(4)) AS StorageLocation,
CAST(NULL AS DECIMAL(31,3)) AS Quantity,
CAST(NULL AS NVARCHAR(3)) AS MovementReasonCode,
CAST(NULL AS NVARCHAR(20)) AS MaterialDocumentNumber,
CAST(NULL AS NVARCHAR(4)) AS MaterialDocumentYear,
CAST(NULL AS NVARCHAR(6)) AS MaterialDocumentItem,
CAST(NULL AS NVARCHAR(40)) AS BatchObjectNumber
FROM DUMMY
WHERE 1 = 0
),
all_events AS (
SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM batch_enriched_events
UNION ALL SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM verified_batch_status_events
UNION ALL SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM verified_picking_events
)
SELECT
InventoryBatchLot,
ActivityName,
EventTime,
MaterialNumber,
UserName,
MovementType,
Plant,
StorageLocation,
Quantity,
MovementReasonCode
FROM all_events
WHERE InventoryBatchLot IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY InventoryBatchLot, EventTime, MaterialDocumentYear, MaterialDocumentNumber, MaterialDocumentItem, ActivityName; Kroki
- Otwórz edytor ABAP: Zaloguj się do systemu SAP S/4HANA. Otwórz edytor ABAP za pomocą kodu transakcji
SE38. - Utwórz nowy program: W polu „Program” wpisz nazwę nowego programu, na przykład
Z_PM_INVENTORY_EXTRACT, i kliknij przycisk „Utwórz”. Podaj opisowy tytuł, ustaw typ „Program wykonywalny” i zapisz program w pakiecie. - Zdefiniuj parametry programu: W edytorze programu zdefiniuj ekran wyboru, który będzie interfejsem użytkownika do ekstrakcji. Umożliwi on określenie parametrów, takich jak zakres dat i zakład, dla pobieranych danych.
- Zaimplementuj logikę ekstrakcji: Skopiuj cały kod ABAP z sekcji „Zapytanie” i wklej go do edytora ABAP. Kod pobiera dane dotyczące wszystkich 14 wymaganych działań związanych z zapasami z różnych tabel SAP.
- Poznaj główne założenia programu: Program pobiera dane o poszczególnych działaniach związanych z zapasami z tabel źródłowych, takich jak
MKPFiMSEGdla ruchów materiałowych orazCDHDRiCDPOSdla zmian danych podstawowych. Następnie łączy wyniki za pomocąUNION ALLw jednej tabeli wewnętrznej, która reprezentuje dziennik zdarzeń. - Skonfiguruj zapis do pliku: Końcowa część kodu zapisuje połączone dane z tabeli wewnętrznej do pliku. Instrukcja
OPEN DATASETtworzy plik na serwerze aplikacji SAP. Należy podać prawidłową ścieżkę serwera, do której użytkownik systemu SAP ma uprawnienia zapisu. - Uruchom program: Zapisz i aktywuj program ABAP (Ctrl+F3). Uruchom go, naciskając F8. Na ekranie wyboru podaj wymagany zakres dat i inne filtry, na przykład zakład lub kod spółki.
- Uruchom program jako zadanie w tle: Przy dużej ilości danych program należy uruchomić jako zadanie w tle, aby uniknąć przekroczenia limitu czasu sesji. Na ekranie uruchamiania (F8) wybierz z menu
Program -> Execute in Background. Zaplanuj zadanie poza godzinami szczytu. - Pobierz plik wynikowy: Po zakończeniu zadania znajdź plik na serwerze aplikacji SAP. Za pomocą kodu transakcji
AL11przejrzyj katalogi serwera i odszukaj plik. Użyj transakcjiCG3Y, aby pobrać go na komputer. - Przygotuj plik do przesłania: Otwórz pobrany plik w edytorze tekstu lub arkuszu kalkulacyjnym. Upewnij się, że jest zapisany w formacie CSV z wierszem nagłówkowym, przecinkiem jako separatorem i cudzysłowami jako ogranicznikami tekstu. Przed przesłaniem do narzędzia process mining sprawdź, czy nazwy kolumn są zgodne z wymaganiami.
Konfiguracja
- Zakres dat księgowania: To najważniejszy parametr. Zalecamy pobieranie danych w mniejszych partiach, na przykład obejmujących od 3 do 6 miesięcy, aby zapewnić sprawne działanie i uniknąć przekroczenia limitu czasu systemu.
- Filtr zakładu: Zdecydowanie zaleca się filtrowanie według jednego lub kilku zakładów (
WERKS). Pobieranie danych jednocześnie dla wszystkich zakładów może znacznie obciążyć zasoby. - Filtr kodu spółki: Można dodać opcjonalny filtr kodu spółki (
BUKRS), aby dodatkowo ograniczyć zakres danych, jeśli organizacja korzysta w tym samym systemie z kilku kodów spółek. - Ścieżka pliku na serwerze aplikacji: Program ABAP wymaga wcześniej określonej, prawidłowej ścieżki katalogu na serwerze aplikacji SAP. Upewnij się, że użytkownik systemu SAP (
SY-UNAME) ma odpowiednie uprawnienia systemu operacyjnego do zapisu plików w tym katalogu. - Uprawnienia: Użytkownik uruchamiający ekstrakcję musi mieć uprawnienia do transakcji
SE38(tworzenie i uruchamianie programu), dostęp do wyświetlania tabelMKPF,MSEG,MCH1,CDHDR,CDPOS,LTAKiLTAPoraz możliwość planowania zadań w tle (SM36/SM37).
Przykładowe zapytanie abap
REPORT Z_PM_INVENTORY_EXTRACT.
" ====================================================================
" SELECTION SCREEN
" ====================================================================
SELECT-OPTIONS: s_budat FOR sy-datum OBLIGATORY.
SELECT-OPTIONS: s_werks FOR mseg-werks.
PARAMETERS: p_fpath TYPE string DEFAULT '/usr/sap/trans/tmp/inventory_log.csv' OBLIGATORY.
" ====================================================================
" DATA STRUCTURES
" ====================================================================
TYPES: BEGIN OF ty_event_log,
InventoryBatchLot TYPE charg,
ActivityName TYPE string,
EventTime TYPE string,
MaterialNumber TYPE matnr,
UserName TYPE xubname,
MovementType TYPE bwart,
Plant TYPE werks_d,
StorageLocation TYPE lgort_d,
Quantity TYPE menge_d,
MovementReasonCode TYPE grund,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log.
" ====================================================================
" DATA SELECTION
" ====================================================================
START-OF-SELECTION.
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Receipt Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('101', '103', '105', '501', '521', '561')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
CASE mseg~shkzg
WHEN 'H' THEN 'Stock Posted to Quality Inspection'
WHEN 'S' THEN 'Quality Inspection Stock Released'
END AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '321' " For QI to Unrestricted
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Put-Away Transfer Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '311' AND mseg~shkzg = 'H' " Assume put-away is the credit side
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Internal Stock Transfer Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('301', '311', '313', '315')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
CASE mseg~bwart
WHEN '343' THEN 'Stock Status Changed to Blocked'
WHEN '344' THEN 'Stock Status Changed to Unrestricted'
END AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('343', '344')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Inventory Adjustment Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('701', '702', '711', '712')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Issue for Delivery Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '601'
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Issue for Production Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '261'
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Sales Return Received' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('651', '653')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Stock Scrapped' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '551'
UNION ALL
SELECT
ltap~charg AS InventoryBatchLot,
'Picking Initiated' AS ActivityName,
CONCAT( ltak~bdatu, ltak~bzeit ) AS EventTime,
ltap~matnr AS MaterialNumber,
ltak~bname AS UserName,
ltak~bwart AS MovementType,
ltap~werks AS Plant,
ltap~lgort AS StorageLocation,
ltap~nista AS Quantity,
'' AS MovementReasonCode
FROM ltap
JOIN ltak ON ltak~tanum = ltap~tanum
WHERE ltak~bdatu IN s_budat
AND ltap~werks IN s_werks
AND ltap~charg IS NOT NULL AND ltap~charg <> ''
UNION ALL
SELECT
SUBSTRING( cdhdr~objectid, 5, 18 ) AS InventoryBatchLot, " Object ID for BATCH is MATNR+WERKS+CHARG
'Batch Status Changed' AS ActivityName,
CONCAT( cdhdr~udate, cdhdr~utime ) AS EventTime,
SUBSTRING( cdhdr~objectid, 1, 4 ) AS MaterialNumber,
cdhdr~username AS UserName,
'' AS MovementType,
'' AS Plant,
'' AS StorageLocation,
0 AS Quantity,
'' AS MovementReasonCode
FROM cdhdr
JOIN cdpos ON cdpos~objectclas = cdhdr~objectclas
AND cdpos~objectid = cdhdr~objectid
AND cdpos~changenr = cdhdr~changenr
WHERE cdhdr~udate IN s_budat
AND cdhdr~objectclas = 'BATCH'
AND cdpos~tabname = 'MCH1'
AND cdpos~fname = 'ZUSTD'
INTO TABLE @lt_event_log.
" ====================================================================
" WRITE OUTPUT FILE
" ====================================================================
DATA: lv_string TYPE string.
DATA: lo_conv TYPE REF TO cl_abap_conv_out_ce.
lo_conv = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
OPEN DATASET p_fpath FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'Error opening file.' TYPE 'E'.
RETURN.
ENDIF.
" Write Header
lv_string = 'InventoryBatchLot,ActivityName,EventTime,MaterialNumber,UserName,MovementType,Plant,StorageLocation,Quantity,MovementReasonCode'.
TRANSFER lv_string TO p_fpath.
" Write Data
LOOP AT lt_event_log ASSIGNING FIELD-SYMBOL(<fs_log>).
CONCATENATE
<fs_log>-InventoryBatchLot
<fs_log>-ActivityName
<fs_log>-EventTime
<fs_log>-MaterialNumber
<fs_log>-UserName
<fs_log>-MovementType
<fs_log>-Plant
<fs_log>-StorageLocation
<fs_log>-Quantity
<fs_log>-MovementReasonCode
INTO lv_string
SEPARATED BY ','.
TRANSFER lv_string TO p_fpath.
ENDLOOP.
CLOSE DATASET p_fpath.
WRITE: 'Extraction complete. File written to:', p_fpath. Gotowi do rozpoczęcia?
Skorzystaj z tego szablonu, aby przygotować dane i lepiej poznać proces zarządzania zapasami. Zacznij usprawniać operacje i ograniczać koszty.
Usprawnij zarządzanie zapasami w SAP S/4HANA
Wskaż nieefektywności, skróć czas realizacji o 30% i ogranicz koszty.
Bez karty kredytowej • Konfiguracja zajmuje kilka minut