Szablon danych do zarządzania transportem
Szablon danych do zarządzania transportem
- Zalecane atrybuty do zebrania
- Najważniejsze czynności do śledzenia
- Wskazówki dotyczące wyodrębniania danych z SAP Transportation Management
Atrybuty zarządzania transportem
| Nazwa | Opis | ||
|---|---|---|---|
| Czas zdarzenia EventTime | Znacznik czasu określający, kiedy wystąpiło konkretne działanie lub zdarzenie. | ||
| Opis Czas zdarzenia podaje dokładną datę i godzinę każdego działania w procesie transportowym. Te dane czasowe są niezbędne do obliczania czasu realizacji, czasu trwania i oczekiwania między etapami procesu. W analizie atrybut ten służy do prawidłowego uporządkowania zdarzeń, utworzenia chronologicznego dziennika i przeprowadzenia analiz efektywności opartych na czasie. Pomaga wykrywać opóźnienia, mierzyć sprawność procesu i oceniać wyniki w odniesieniu do harmonogramów lub umów o gwarantowanym poziomie usług. Dlaczego to ważne Znacznik czasu pozwala uporządkować zdarzenia chronologicznie i obliczyć wskaźniki efektywności, takie jak czas realizacji i terminowość dostaw. Skąd pobrać Dane pochodzą z tabel modułu obsługi zdarzeń w SAP TM, takich jak /SAPTRX/EH_EVMSG, w których zapisywane są znaczniki czasu zgłoszonych zdarzeń. Przykłady 2023-04-15T10:00:00Z2023-04-16T14:30:00Z2023-04-20T09:15:00Z | |||
| Nazwa działania ActivityName | Nazwa konkretnego zdarzenia biznesowego lub etapu, który wystąpił w procesie transportowym. | ||
| Opis Nazwa działania opisuje pojedyncze zadanie lub etap w cyklu życia przesyłki, na przykład „Shipment Planned”, „Goods Picked Up” lub „Goods Delivered”. Działania te tworzą węzły na mapie procesu wygenerowanej na podstawie danych. Analiza kolejności i częstotliwości działań pomaga ustalić standardowy przebieg procesu, wykryć odstępstwa, wąskie gardła i pętle poprawek. To podstawa odkrywania procesów i sprawdzania zgodności w zarządzaniu transportem. Dlaczego to ważne Ten atrybut określa etapy procesu transportowego i umożliwia wizualizację oraz analizę przebiegu przesyłki od początku do końca. Skąd pobrać Atrybut ten zwykle określa się na podstawie kodów zdarzeń lub zmian statusu rejestrowanych przez moduł śledzenia realizacji w SAP TM. Dane mogą pochodzić z tabel zapisujących zmiany statusu obiektów biznesowych lub z komunikatów o konkretnych zdarzeniach. Przykłady Zaplanowano przesyłkęPrzypisano przewoźnikaOdebrano towaryDostarczono towaryOtrzymano potwierdzenie dostawy | |||
| Przesyłka ShipmentId | Unikalny identyfikator pojedynczego przewozu towarów, który stanowi główną sprawę analizowaną w procesie. | ||
| Opis Shipment ID to podstawowy identyfikator, który łączy wszystkie powiązane działania i zdarzenia transportowe. Oznacza pojedynczy proces transportowy od początku do końca, od pierwszego zgłoszenia po potwierdzenie dostawy i płatność. W process mining ten atrybut służy do utworzenia widoku sprawy, który pozwala analitykom prześledzić pełny przebieg każdej przesyłki. Umożliwia analizę wariantów procesu, czasów realizacji i wyników dla poszczególnych przesyłek, zapewniając pełny obraz efektywności transportu. Dlaczego to ważne To podstawowy identyfikator sprawy, który łączy wszystkie zdarzenia i dane z konkretnym zleceniem transportowym. Jest niezbędny do analizy procesu od początku do końca. Skąd pobrać Ten identyfikator to numer Freight Order lub Freight Booking w SAP TM. Można go znaleźć w tabelach takich jak /SCMTMS/D_TORROT i /SCMTMS/D_TRQROT. Przykłady 610000432161000056786100009876 | |||
| Czas zakończenia EndTime | Znacznik czasu określający, kiedy zakończono konkretne działanie. | ||
| Opis StartTime wskazuje początek zdarzenia, a EndTime jego zakończenie. Jest to szczególnie przydatne w przypadku działań trwających przez określony czas, takich jak „Customs Clearance” lub „Goods Loading”. Różnica między EndTime a StartTime oznacza czas realizacji danego działania. W analizie process mining dostępność czasu rozpoczęcia i zakończenia pozwala dokładniej mierzyć czas trwania działań oraz oddzielić czas pracy od czasu oczekiwania. Dzięki temu można ustalić, gdzie dokładnie występują nieefektywności: podczas wykonywania zadania czy przy przekazywaniu go dalej. Dlaczego to ważne Umożliwia dokładne obliczenie czasu realizacji działania i odróżnienie czasu aktywnej pracy od oczekiwania między zdarzeniami. Skąd pobrać Podobnie jak StartTime, dane te pochodzą z tabel modułu obsługi zdarzeń. Mogą odpowiadać osobnemu zdarzeniu „completed” dla danego działania. Przykłady 2023-04-15T11:30:00Z2023-04-16T15:00:00Z2023-04-20T09:45:00Z | |||
| Czy dostawa była terminowa IsOnTimeDelivery | Wartość logiczna wskazująca, czy towary dostarczono w wymaganym terminie lub wcześniej. | ||
| Opis To obliczany atrybut, który porównuje znacznik czasu czynności „Dostarczenie towarów” z „Wymaganą datą dostawy”. Przyjmuje wartość true, jeśli dostawa nastąpiła w terminie lub wcześniej, a false, jeśli była opóźniona. Atrybut ten upraszcza analizę wyników, przypisując każdej przesyłce jednoznaczny wynik: terminowo lub z opóźnieniem. Stanowi podstawę dashboardu terminowości dostaw i powiązanego z nim KPI. Ułatwia filtrowanie opóźnionych przesyłek i analizę przyczyn słabych wyników. Dlaczego to ważne Bezpośrednio mierzy dotrzymywanie terminów dostaw i ułatwia obliczanie oraz prezentowanie KPI terminowości dostaw. Skąd pobrać Atrybut ten nie jest zapisany w SAP TM. Należy go obliczyć podczas transformacji danych, porównując znacznik czasu rzeczywistego zdarzenia dostawy z wymaganą datą dostawy. Przykłady truefalse | |||
| Łączny koszt transportu TotalFreightCost | Łączny koszt przesyłki obliczony przez system lub wykazany na fakturze. | ||
| Opis Łączny koszt transportu pokazuje finansowy wpływ przesyłki. Może to być koszt obliczony przez system zarządzania transportem albo ostateczna kwota z faktury przewoźnika po rozliczeniu. Atrybut ten pozwala uwzględnić koszty w analizie procesu. Analitycy mogą wskazać najdroższe warianty procesu, obliczyć koszt opóźnień lub zmian trasy oraz porównać opłacalność różnych przewoźników i rodzajów transportu. To podstawowa miara w dashboardach dotyczących wydatków transportowych i analizy kosztu obsługi. Dlaczego to ważne Uwzględnia koszty w analizie procesu, umożliwiając analizę wydatków na transport, kosztu pojedynczej przesyłki i finansowych skutków nieefektywności procesu. Skąd pobrać Dane pochodzą z dokumentu Freight Settlement w SAP TM, po obliczeniu opłat. Można je znaleźć między innymi w tabeli /SCMTMS/D_SFIRHD. Przykłady 250.751200.005430.50 | |||
| Nazwa przewoźnika CarrierName | Nazwa przewoźnika lub dostawcy usług logistycznych przypisanego do przesyłki. | ||
| Opis Nazwa przewoźnika wskazuje firmę odpowiedzialną za fizyczny transport towarów. To ważny wymiar analizy wyników, ponieważ przewoźnicy mogą różnić się jakością usług, kosztami i niezawodnością. W process mining ten atrybut służy do segmentowania i porównywania wyników poszczególnych przewoźników. Umożliwia tworzenie kart wyników przewoźników, monitorowanie terminowości dostaw, porównywanie kosztów oraz wskazywanie przewoźników najczęściej powiązanych z opóźnieniami lub sporami. Takie informacje pomagają w strategicznym zarządzaniu przewoźnikami i zakupach. Dlaczego to ważne Umożliwia porównywanie wyników różnych przewoźników, co pomaga lepiej dobierać przewoźników oraz kontrolować koszty i poziom usług. Skąd pobrać Informacje te są zapisane w dokumencie Freight Order lub Freight Booking. Powiązanie odbywa się za pomocą funkcji partnera biznesowego przypisanej przewoźnikowi. Przykłady DHL ExpressFedEx FreightMaersk LineUnion Pacific Railroad | |||
| Rodzaj transportu ModeOfTransport | Sposób transportu przesyłki, na przykład drogowy, kolejowy, lotniczy lub morski. | ||
| Opis Atrybut określa rodzaj transportu. Poszczególne rodzaje różnią się kosztami, czasem przewozu i złożonością procesu. Na przykład międzynarodowy transport lotniczy może obejmować odprawę celną, której nie ma w przypadku krajowego transportu całopojazdowego. Analiza procesów według rodzaju transportu pozwala dostosować działania usprawniające do konkretnych potrzeb. Jest też niezbędna do analizy kosztów, zwłaszcza przy porównywaniu transportu premium, na przykład ekspresowego transportu lotniczego, ze standardowymi i tańszymi rozwiązaniami. Taki podział pomaga zrozumieć i kontrolować wydatki na transport. Dlaczego to ważne Umożliwia analizę kosztów, czasu i różnic w przebiegu procesu zależnie od rodzaju transportu. Pomaga optymalizować koszty i ustalić, jak często wykorzystywany jest transport premium. Skąd pobrać To ważne pole w dokumencie Freight Order lub Freight Booking, często oznaczone jako Transportation Mode lub MOT. Przykłady 01 (drogowy)02 (kolejowy)04 (lotniczy)05 (morski) | |||
| Wymagana data dostawy RequestedDeliveryDate | Data i godzina dostawy wskazane przez klienta lub określone w zleceniu sprzedaży. | ||
| Opis Wymagana data dostawy to termin docelowy dla czynności „Dostarczenie towarów”. Stanowi podstawę pomiaru terminowości dostaw. Ta data jest niezbędna do obliczenia KPI „Wskaźnik terminowych dostaw”. Porównanie rzeczywistego znacznika czasu dostawy z wymaganą datą pozwala ustalić, czy dotrzymano uzgodnionego poziomu usług. Analiza odchyleń pomaga wykryć powtarzające się przyczyny opóźnień, takie jak problemy z pracą przewoźnika, opóźnienia w planowaniu lub przestoje związane z odprawą celną. Dlaczego to ważne To punkt odniesienia przy pomiarze terminowości dostaw, ważnego KPI wpływającego na zadowolenie klientów i sprawność operacyjną. Skąd pobrać Data ta jest zwykle przenoszona z poprzedzającego zlecenia sprzedaży lub zlecenia transportu zapasów w SAP ERP. Jest zapisana w polach daty i godziny Freight Unit lub Freight Order. Przykłady 2023-05-20T17:00:00Z2023-06-01T12:00:00Z2023-06-15T23:59:59Z | |||
| Czy zgłoszono spór IsDisputed | Wartość logiczna wskazująca, czy faktura za transport przesyłki była przedmiotem sporu. | ||
| Opis Ta obliczana wartość wskazuje przesyłki powiązane ze sporem dotyczącym rozliczenia transportu. Przyjmuje wartość true, jeśli utworzono spór, a false w przeciwnym razie. Można ją wyznaczyć na podstawie obecności czynności „Utworzenie sporu dotyczącego transportu” lub niepustej wartości pola „Przyczyna sporu”. Atrybut ten upraszcza analizę procesu rozliczania transportu. Ułatwia obliczenie KPI dotyczącego odsetka rozbieżności w rozliczeniach transportowych oraz filtrowanie przesyłek objętych sporem. Analitycy mogą następnie sprawdzić, co je łączy, na przykład przewoźników, trasy lub rodzaje opłat, aby ustalić przyczyny błędów w rozliczeniach. Dlaczego to ważne Ułatwia wykrywanie problemów z rozliczeniami transportowymi, szybkie obliczanie odsetka sporów i analizę przyczyn błędów na fakturach. Skąd pobrać Atrybut ten nie jest zapisany w SAP TM. Należy go obliczyć na podstawie istnienia sprawy sporu powiązanej z dokumentem Freight Settlement. Przykłady truefalse | |||
| Kraj nadania OriginCountry | Kraj, z którego rozpoczyna się transport przesyłki. | ||
| Opis Atrybut wskazuje kraj, w którym rozpoczyna się transport. Jest określany na podstawie adresu początkowego miejsca odbioru. Analiza procesu według kraju nadania pomaga wykrywać regionalne różnice w wynikach, kosztach i złożoności. Może wskazać kraje, w których odprawa celna trwa dłużej, koszty przewoźników są wyższe lub częściej występują opóźnienia. Taki podział geograficzny jest niezbędny do zarządzania globalnym łańcuchem dostaw i dostosowywania strategii logistycznych do poszczególnych regionów. Dlaczego to ważne Umożliwia geograficzną analizę wyników przesyłek i pomaga wykrywać regionalne wąskie gardła, czynniki wpływające na koszty oraz różnice w przebiegu procesu. Skąd pobrać To część danych adresowych lokalizacji źródłowej pierwszego przystanku w Freight Order. Przykłady DEUSCNMX | |||
| Kraj przeznaczenia DestinationCountry | Kraj, do którego dostarczana jest przesyłka. | ||
| Opis Atrybut wskazuje kraj docelowy przesyłki na podstawie adresu ostatniego miejsca dostawy. Podobnie jak analiza według kraju nadania, analiza według kraju przeznaczenia pomaga zrozumieć regionalne wyzwania logistyczne. Może ujawnić, do których krajów dostawy najczęściej się opóźniają lub gdzie koszty dostawy na ostatnim odcinku są wyższe. Informacje te pomagają optymalizować sieć, ustalać realistyczne terminy dostaw i zarządzać zgodnością z przepisami handlu międzynarodowego. Dlaczego to ważne Umożliwia analizę wyników procesu według miejsca dostawy i pomaga wykrywać problemy w konkretnych regionach, urzędach celnych lub wśród przewoźników obsługujących ostatni odcinek trasy. Skąd pobrać To część danych adresowych lokalizacji docelowej ostatniego przystanku w Freight Order. Przykłady FRCAGBJP | |||
| Nazwa użytkownika UserName | Identyfikator lub nazwa użytkownika, który wykonał dane działanie. | ||
| Opis Ten atrybut wskazuje pracownika lub użytkownika odpowiedzialnego za wykonanie działania ręcznego, takiego jak „Shipment Planned” lub „Invoice Verified”. Łączy etapy procesu z osobami lub zespołami, które je wykonały. Analiza działań według użytkownika pomaga ocenić rozkład obciążenia pracą, ustalić potrzeby szkoleniowe i rozpoznać osoby osiągające najlepsze wyniki. Jest również ważna dla zgodności i audytu, ponieważ pokazuje, kto wykonał dane działanie i kiedy. Pozwala też wykryć różnice w sposobie wykonywania tego samego zadania przez poszczególnych użytkowników. Dlaczego to ważne Przypisuje ręczne etapy procesu do konkretnych użytkowników, umożliwiając analizę obciążenia pracą, indywidualnych wyników i potrzeb szkoleniowych. Skąd pobrać Zwykle znajdują się w tabelach dziennika zmian lub nagłówka dokumentu transportowego, na przykład w polach „Utworzył” lub „Zmienił” (np. ERNAM, AENAM). Przykłady CB998030SMITHJPLANNER_EU | |||
| Ostatnia aktualizacja danych LastDataUpdate | Znacznik czasu ostatniego pobrania lub odświeżenia danych w zbiorze używanym do analizy process mining. | ||
| Opis Ten atrybut informuje, jak aktualne są analizowane dane. Wskazuje datę i godzinę ostatniego pobrania danych z systemów źródłowych, takich jak SAP TM, do narzędzia process mining. To ważny element metadanych każdego dashboardu i analizy, ponieważ pozwala ocenić aktualność wniosków. Użytkownicy mogą sprawdzić, czy widzą informacje bieżące, czy dane z wcześniejszego okresu. Ma to znaczenie przy podejmowaniu decyzji we właściwym czasie. Dlaczego to ważne Informuje o aktualności danych i pozwala ocenić, jak bieżąca jest analiza. Skąd pobrać Atrybut ten jest zwykle generowany i zapisywany przez narzędzie ETL (Extract, Transform, Load) lub potok danych podczas ich wczytywania. Przykłady 2023-10-27T08:00:00Z2023-10-26T08:00:00Z | |||
| Planowana data odbioru ScheduledPickupDate | Planowana data i godzina odbioru towarów przez przewoźnika z miejsca wysyłki. | ||
| Opis Planowana data odbioru to uzgodniony termin rozpoczęcia fizycznego transportu. Jest ważnym punktem kontrolnym na etapie realizacji przesyłki. Atrybut ten służy do monitorowania terminowości pierwszego odcinka trasy. Porównanie planowanej godziny odbioru z rzeczywistym znacznikiem czasu zdarzenia „Odbiór towarów” pozwala obliczyć opóźnienia. Ułatwia to ocenę terminowości i niezawodności zarówno miejsca wysyłki, jak i przewoźnika. Dlaczego to ważne Stanowi punkt odniesienia przy pomiarze terminowości odbioru i pomaga wykrywać opóźnienia już na początku fizycznego transportu przesyłki. Skąd pobrać To planowana data i godzina zapisana w sekwencji przystanków Freight Order w SAP TM. Przykłady 2023-05-18T09:00:00Z2023-05-30T14:00:00Z2023-06-12T10:30:00Z | |||
| Przyczyna opóźnienia DelayReason | Kod lub opis wyjaśniający przyczynę opóźnienia przesyłki. | ||
| Opis Atrybut „Przyczyna opóźnienia” określa powód odstępstwa od planu, na przykład „Złe warunki pogodowe”, „Zatrzymanie przez urząd celny” lub „Opóźnienie przewoźnika”. Informacje te są często zgłaszane ręcznie lub przekazywane przez przewoźnika w komunikacie o zdarzeniu. Atrybut ten pomaga ustalić przyczyny problemów. Dzięki niemu można nie tylko stwierdzić, że przesyłka dotarła z opóźnieniem, ale też dowiedzieć się, dlaczego tak się stało. Klasyfikowanie i zliczanie przyczyn opóźnień pozwala wykrywać powtarzające się problemy i skupić działania usprawniające na obszarach o największym wpływie, na przykład na poprawie komunikacji z przewoźnikami lub wyborze tras omijających zatory. Dlaczego to ważne Wyjaśnia przyczyny opóźnień przesyłek i ułatwia analizę ich źródeł, ograniczanie wyjątków oraz poprawę terminowości dostaw. Skąd pobrać Informację tę można zapisać jako kod zdarzenia i przyczynę w ramach obsługi zdarzeń SAP TM, gdy zostanie zgłoszone zdarzenie „Opóźniony przyjazd/wyjazd”. Przykłady WEATHER_DELAYCUSTOMS_INSPECTIONPORT_CONGESTIONMECHANICAL_FAILURE | |||
| Przyczyna sporu DisputeReason | Powód podany przy zakwestionowaniu faktury za transport. | ||
| Opis Jeśli faktura przewoźnika różni się od oczekiwanego kosztu obliczonego w SAP TM, tworzony jest spór. Ten atrybut określa przyczynę rozbieżności, na przykład „Nieprawidłowa stawka”, „Zduplikowana faktura” lub „Niezaakceptowana opłata dodatkowa”. Analiza przyczyn sporów jest niezbędna w dashboardzie dotyczącym błędów i sporów w rozliczeniach transportowych. Pomaga ustalić źródła nieprawidłowości na fakturach, takie jak błędy w danych podstawowych, pomyłki przewoźnika lub problemy operacyjne. Dzięki tym informacjom można podjąć konkretne działania, by ograniczyć liczbę sporów, przyspieszyć płatności i zmniejszyć nakład pracy administracyjnej. Dlaczego to ważne Wskazuje przyczyny błędów w rozliczeniach transportowych i pomaga ograniczyć spory dotyczące faktur oraz usprawnić proces rozliczeń. Skąd pobrać Informacje te są zapisywane w sprawie zarządzania sporami powiązanej z dokumentem Freight Settlement. Przykłady Niezgodność stawkiNieprawidłowa wagaNiezaakceptowana opłata za przestójZduplikowana faktura | |||
| Status przesyłki ShipmentStatus | Bieżący ogólny status przesyłki w chwili wyodrębnienia danych. | ||
| Opis Status przesyłki pokazuje, na jakim etapie cyklu życia znajduje się przesyłka, na przykład „W planowaniu”, „W realizacji”, „Dostarczona” lub „Anulowana”. Wskazuje ostatni znany stan sprawy. Atrybut ten ułatwia filtrowanie i analizę przesyłek według wyniku. Analityk może na przykład uwzględnić tylko dostarczone przesyłki, aby zmierzyć czas realizacji od początku do końca, albo przeanalizować wyłącznie anulowane przesyłki, by ustalić przyczyny anulowania. Status dostarcza ważnego kontekstu do interpretacji przebiegu procesu. Dlaczego to ważne Pokazuje ogólny wynik dla każdej przesyłki, umożliwiając filtrowanie i analizę przesyłek dostarczonych, anulowanych lub będących w drodze. Skąd pobrać To pole ogólnego statusu w nagłówku dokumentu Freight Order lub Freight Booking w SAP TM. Przykłady W planowaniuGotowa do transportuW realizacjiZrealizowanaAnulowana | |||
| System źródłowy SourceSystem | System, z którego pochodzą dane o zdarzeniu. | ||
| Opis Ten atrybut wskazuje system źródłowy, który wygenerował dane, na przykład SAP TM, SAP ERP lub zewnętrzny portal przewoźnika. Informuje o pochodzeniu danych i pomaga zrozumieć, w jaki sposób są one przekazywane między systemami. W złożonym środowisku znajomość systemu źródłowego jest niezbędna do weryfikacji danych, rozwiązywania problemów z integracją i ustalenia, jak poszczególne systemy wpływają na cały proces. Pozwala na przykład odróżnić zdarzenie zgłoszone przez system wewnętrzny od zdarzenia przekazanego przez zewnętrznego dostawcę usług logistycznych. Dlaczego to ważne Wskazuje pochodzenie danych, co pomaga w zarządzaniu danymi, rozwiązywaniu problemów i zrozumieniu przebiegu procesu w wielu systemach. Skąd pobrać Informacje te są często zapisane w dzienniku systemowym. Można je też ustalić na podstawie interfejsu lub użytkownika, który utworzył wpis. Przykłady SAP_TM_P01SAP_ERP_E01PORTAL_PRZEWOZNIKA_XYZ | |||
Czynności w zarządzaniu transportem
| Działanie | Opis | ||
|---|---|---|---|
| Anulowano przesyłkę | To zdarzenie oznacza anulowanie przesyłki po jej zgłoszeniu lub zaplanowaniu. Kończy proces, który nie przechodzi do etapu realizacji. | ||
| Dlaczego to ważne Śledzenie anulowanych przesyłek pomaga ustalić przyczyny przerwania procesu, takie jak zmiany zapotrzebowania klienta lub błędy w planowaniu. Wysoki odsetek anulowań może wskazywać na problemy z obsługą zamówień lub planowaniem. Skąd pobrać Zdarzenie można wywnioskować ze zmiany statusu cyklu życia Forwarding Order lub Freight Order na „Cancelled”. Znacznik czasu tej zmiany określa czas zdarzenia. Rejestrowanie Zarejestruj znacznik czasu ustawienia statusu cyklu życia dokumentu na „Cancelled”. Typ zdarzenia inferred | |||
| Dostarczono towary | To zdarzenie oznacza dotarcie przesyłki do miejsca docelowego i zakończenie transportu. Jest rejestrowane, gdy przewoźnik zgłasza rozładunek towarów w lokalizacji odbiorcy. | ||
| Dlaczego to ważne To najważniejszy etap przy pomiarze terminowości dostaw i zadowolenia klientów. Zwykle uruchamia również procesy fakturowania i rozliczeń. Skąd pobrać Zdarzenie jest rejestrowane w SAP TM jako „Arrival at Destination” lub „Unloading End” i aktualizuje status realizacji Freight Order. Dane często pochodzą od przewoźnika. Rejestrowanie Użyj znacznika czasu zgłoszonego zdarzenia realizacji „Arrival at Destination” dla ostatniego punktu trasy Freight Order. Typ zdarzenia explicit | |||
| Odebrano towary | To zdarzenie oznacza rozpoczęcie fizycznego transportu towarów. Jest rejestrowane, gdy przewoźnik zgłasza załadunek i wyjazd z lokalizacji nadawcy. | ||
| Dlaczego to ważne To ważny etap realizacji, który oznacza rozpoczęcie przewozu. Ma zasadnicze znaczenie dla monitorowania terminowości i zapewnienia aktualnych informacji o przesyłce. Skąd pobrać Zdarzenie jest zwykle rejestrowane w SAP Event Management, zintegrowanym z SAP TM, jako zdarzenie „Departure” lub „Loading End”. Aktualizuje ono status realizacji Freight Order. Może być również zapisane bezpośrednio w Freight Order. Rejestrowanie Użyj znacznika czasu zgłoszonego zdarzenia realizacji „Departure” dla lokalizacji początkowej Freight Order. Typ zdarzenia explicit | |||
| Otrzymano potwierdzenie dostawy | To zdarzenie następuje po otrzymaniu od przewoźnika podpisanego dokumentu Proof of Delivery (POD) i zarejestrowaniu go w systemie. Potwierdza przyjęcie towarów przez odbiorcę. | ||
| Dlaczego to ważne Otrzymanie POD jest warunkiem wystawienia faktury klientowi i rozliczenia kosztów transportu z przewoźnikiem. Opóźnienia na tym etapie bezpośrednio wydłużają cykl konwersji gotówki. Skąd pobrać Zdarzenie można zwykle wywnioskować ze zmiany statusu Freight Order, na przykład ustawienia statusu POD na „Received”. Znacznik czasu zmiany statusu określa czas zdarzenia. Rejestrowanie Zarejestruj znacznik czasu zmiany statusu Proof of Delivery w Freight Order na „Received”. Typ zdarzenia inferred | |||
| Otrzymano zgłoszenie transportowe | To zdarzenie rozpoczyna proces transportowy i oznacza utworzenie zapotrzebowania na transport. W SAP TM jest ono zwykle rejestrowane jako utworzenie Forwarding Order (FWO) lub Order-based Transportation Requirement (OTR). | ||
| Dlaczego to ważne To główne zdarzenie rozpoczynające proces obsługi przesyłki od początku do końca. Czas od tego zdarzenia do zakończenia planowania jest ważnym miernikiem efektywności planowania. Skąd pobrać Zdarzenie jest rejestrowane podczas tworzenia Forwarding Order (typ dokumentu FWO) lub innego dokumentu zapotrzebowania na transport. Jako czas zdarzenia służy znacznik czasu utworzenia w tabeli nagłówkowej, takiej jak /SCMTMS/D_TORROT. Rejestrowanie Zarejestruj datę i godzinę utworzenia dokumentu Forwarding Order lub Transportation Requirement. Typ zdarzenia explicit | |||
| Przypisano przewoźnika | To zdarzenie oznacza wybór i przypisanie do przesyłki konkretnego dostawcy usług transportowych, czyli przewoźnika. Może do tego dojść ręcznie, w wyniku automatycznego planowania lub w ramach przetargu. | ||
| Dlaczego to ważne Przypisanie przewoźnika to ważny etap przed potwierdzeniem i realizacją przesyłki. Śledzenie tego zdarzenia pomaga analizować wybór przewoźników i terminowość rezerwacji. Skąd pobrać Zdarzenie jest rejestrowane po wypełnieniu pola przewoźnika (partnera o roli „Carrier”) w dokumencie Freight Order lub Freight Booking. W przypadku przetargu następuje to w chwili przyznania Freight Request for Quotation. Rejestrowanie Ustal znacznik czasu pierwszego wpisania lub potwierdzenia funkcji partnera przewoźnika w dokumencie Freight Order. Typ zdarzenia inferred | |||
| Utworzono rozliczenie transportu | To zdarzenie oznacza utworzenie dokumentu Freight Settlement Document (FSD), który oblicza koszty transportu należne przewoźnikowi. Jest to podstawowy dokument wykorzystywany do naliczania rezerw i weryfikacji faktur. | ||
| Dlaczego to ważne To początek etapu rozliczeń finansowych w procesie transportowym. Analiza czasu od dostawy do utworzenia rozliczenia pomaga wykryć wąskie gardła w obsłudze finansowej. Skąd pobrać To jawne zdarzenie rejestrowane podczas tworzenia Freight Settlement Document. Znacznik czasu utworzenia znajduje się w tabeli nagłówkowej tego dokumentu, /SCMTMS/D_SFIRHD. Rejestrowanie Użyj daty i godziny utworzenia Freight Settlement Document. Typ zdarzenia explicit | |||
| Zaplanowano przesyłkę | To zdarzenie oznacza, że zapotrzebowania na transport zostały połączone w konkretny plan przewozu. Jest rejestrowane po utworzeniu i zapisaniu Freight Order (transport drogowy lub kolejowy) albo Freight Booking (transport morski lub lotniczy), zawierającego planowaną trasę i zasoby. | ||
| Dlaczego to ważne Zakończenie tego etapu umożliwia rozpoczęcie realizacji transportu. Czas od zgłoszenia do tego zdarzenia jest ważnym KPI efektywności planowania. Skąd pobrać Zdarzenie odpowiada utworzeniu dokumentu Freight Order lub Freight Booking. Można je również wywnioskować ze zmiany statusu dokumentu, na przykład ustawienia statusu planowania na „Planned”. Dane nagłówkowe znajdują się zwykle w tabeli /SCMTMS/D_TORROT. Rejestrowanie Użyj znacznika czasu utworzenia dokumentu Freight Order lub Freight Booking. Typ zdarzenia explicit | |||
| Zrealizowano płatność | To ostatnie zdarzenie potwierdza zapłatę przewoźnikowi za usługi transportowe. Zwykle następuje w połączonym systemie ERP po otrzymaniu zweryfikowanej faktury z SAP TM. | ||
| Dlaczego to ważne To faktyczny koniec całego procesu transportowego. Zdarzenie jest niezbędne do pomiaru łącznego czasu procesu i KPI dotyczących terminowości płatności. Skąd pobrać Informacje te znajdują się w systemie ERP, na przykład S/4HANA Finance. Można je powiązać z Freight Settlement Document za pomocą numeru faktury. Aktualizacja statusu może być przesyłana z powrotem do SAP TM albo dane można pobrać z tabel ERP, takich jak BKPF i BSEG. Rejestrowanie Pobierz z systemu ERP datę rozliczenia płatności i powiąż ją z przesyłką za pomocą numeru referencyjnego faktury. Typ zdarzenia explicit | |||
| Przewoźnik potwierdził przesyłkę | To zdarzenie oznacza, że przewoźnik zgodził się zrealizować transport zgodnie z planem. Potwierdzenie jest zwykle otrzymywane przez komunikat EDI, aktualizację w portalu przewoźnika lub wpis ręczny, który zmienia status Freight Order. | ||
| Dlaczego to ważne Potwierdzenie przewoźnika oznacza zobowiązanie do realizacji planu i zmniejsza niepewność. Opóźnienie w jego otrzymaniu może zagrozić całemu harmonogramowi przesyłki. Skąd pobrać Zdarzenie można wywnioskować ze zmiany pola statusu potwierdzenia w dokumencie Freight Order lub Freight Booking. W zarządzaniu statusami dokumentu zostanie ustawiona konkretna wartość, na przykład „Confirmed”. Rejestrowanie Śledź zmiany pól statusu potwierdzenia w dokumencie Freight Order. Typ zdarzenia inferred | |||
| Utworzono spór dotyczący frachtu | To zdarzenie oznacza wykrycie rozbieżności między fakturą przewoźnika a kosztami obliczonymi w Freight Settlement Document. Rozpoczyna workflow rozstrzygania sporu. | ||
| Dlaczego to ważne Spory opóźniają płatności dla przewoźników i wymagają pracy administracyjnej. Śledzenie tego zdarzenia pomaga ustalić przyczyny nieprawidłowości na fakturach, takie jak błędne stawki lub dodatkowe opłaty. Skąd pobrać Zdarzenie można wywnioskować ze zmiany statusu Freight Settlement Document na „Dispute”. Może mu również towarzyszyć utworzenie osobnego dokumentu sprawy spornej. Rejestrowanie Zarejestruj znacznik czasu ustawienia statusu sporu w Freight Settlement Document. Typ zdarzenia inferred | |||
| Zakończono odprawę celną | To zdarzenie oznacza, że organy celne zatwierdziły przesyłkę i może ona kontynuować transport. Jest to ważny etap logistyki międzynarodowej, ponieważ usuwa potencjalne wąskie gardło. | ||
| Dlaczego to ważne Odprawa celna często powoduje znaczne opóźnienia w globalnych łańcuchach dostaw. Śledzenie czasu jej trwania i odsetka pomyślnie zakończonych odpraw pomaga skrócić czas transportu międzynarodowego. Skąd pobrać Zdarzenie jest rejestrowane jako zdarzenie realizacji „Customs Clearance”, zwykle zgłaszane przez agencję celną lub zewnętrznego dostawcę informacji o przesyłkach, a następnie zapisywane w danych śledzenia realizacji Freight Order. Rejestrowanie Użyj znacznika czasu zgłoszonego zdarzenia realizacji „Customs Clearance” powiązanego z Freight Order. Typ zdarzenia explicit | |||
| Złożono zgłoszenie celne | W przypadku przesyłek międzynarodowych to zdarzenie oznacza przekazanie wymaganych dokumentów celnych odpowiednim organom. Jest to warunek uzyskania zgody na wywóz lub przywóz towarów. | ||
| Dlaczego to ważne Terminowe składanie zgłoszeń celnych pomaga uniknąć opóźnień na granicach. Monitorowanie tego zdarzenia pozwala ocenić sprawność obsługi celnej. Skąd pobrać Zdarzenie można zarejestrować jako konkretne zdarzenie realizacji zgłoszone przez agencję celną albo wywnioskować ze zmiany statusu w zintegrowanym systemie obsługi celnej, takim jak SAP GTS. Odpowiednia aktualizacja pojawia się w Freight Order. Rejestrowanie Zarejestruj znacznik czasu zdarzenia realizacji „Customs Declaration Filed” lub odpowiadającej mu zmiany statusu. Typ zdarzenia explicit | |||
| Zmieniono trasę przesyłki | To zdarzenie oznacza nieplanowaną zmianę trasy lub harmonogramu przesyłki po jej potwierdzeniu. Przyczyną mogą być zakłócenia, prośby klienta lub problemy logistyczne. | ||
| Dlaczego to ważne Zmiana trasy często zwiększa koszty i powoduje opóźnienia. Ustalenie, jak często i z jakich powodów zmienia się trasy, pomaga poprawić dokładność planowania i stabilność operacji. Skąd pobrać Zdarzenie można wywnioskować na podstawie istotnych zmian etapów, lokalizacji lub dat w Freight Order po rozpoczęciu realizacji. W tym celu można analizować dokumenty zmian w tabelach CDHDR i CDPOS. Rejestrowanie Wykryj zmiany kluczowych pól trasy w dokumencie Freight Order, które nastąpiły po zdarzeniu „Shipment Confirmed by Carrier”. Typ zdarzenia inferred | |||
| Zweryfikowano fakturę | To zdarzenie oznacza pomyślne uzgodnienie faktury przewoźnika z Freight Settlement Document i zatwierdzenie jej do płatności. Jest to ostatni etap przed rozpoczęciem płatności w systemie ERP. | ||
| Dlaczego to ważne To zdarzenie kończy kontrolę i weryfikację kosztów transportu. Opóźnienia na tym etapie mogą prowadzić do nieterminowych płatności dla przewoźników i pogorszenia relacji. Skąd pobrać Zdarzenie można wywnioskować ze zmiany statusu Freight Settlement Document, na przykład na „Ready for Accrual” lub „Transferred for Posting”, co oznacza przekazanie dokumentu do systemu ERP w celu realizacji płatności. Rejestrowanie Śledź znacznik czasu zmiany statusu cyklu życia FSD, która oznacza gotowość do płatności lub zaksięgowanie dokumentu. Typ zdarzenia inferred | |||
Przewodniki dotyczące wyodrębniania danych
Kroki
- Znajdźcie i aktywujcie interfejsy API widoków CDS: Zalogujcie się do systemu SAP S/4HANA. Użyjcie transakcji
/IWFND/MAINT_SERVICE, aby sprawdzić, czy aktywne są wymagane usługi OData dla podstawowych widoków CDS. Sprawdźcie przede wszystkim usługi powiązane z I_TransportationOrder, C_TranspOrdExecutionEvent, I_ForwardingOrder i I_FreightSettlementDocument. Jeśli nie są aktywne, poproście administratora SAP o dodanie i aktywowanie ich w systemie backendowym. - Skonfigurujcie połączenie z API: Poproście administratora SAP o podstawowy adres URL usług OData. Skonfigurujcie aplikację kliencką, na przykład skrypt Python korzystający z biblioteki requests, komercyjne narzędzie ETL lub Postman, aby połączyć się z API. Należy skonfigurować uwierzytelnianie, zwykle Basic Authentication (nazwa użytkownika i hasło) albo bezpieczniejsze OAuth 2.0.
- Określcie zakres ekstrakcji: Ustalcie, jakie dane mają zostać pobrane. Wybierzcie zakres dat, na przykład ostatnie 6 miesięcy. Wskażcie jednostki organizacyjne, według których będą filtrowane dane, takie jak kod spółki, oraz typy dokumentów, na przykład typ zlecenia transportowego. Dzięki temu dane będą odpowiadać analizowanemu procesowi.
- Przygotujcie podstawowe zapytanie o przesyłki: Zacznijcie od zapytania do widoku CDS I_TransportationOrder. Jest to główny widok dotyczący przesyłek, nazywanych również zleceniami transportowymi lub rezerwacjami frachtu. Użyjcie parametru OData
$select, aby wybrać potrzebne kolumny, w tym zalecane atrybuty, takie jak CarrierName, ModeOfTransport i RequestedDeliveryDate. Zastosujcie$filter, aby ograniczyć dane według dat i pozostałych kryteriów zakresu. - Pobierzcie zdarzenia realizacji i transportu: Użyjcie widoku CDS C_TranspOrdExecutionEvent, aby pobrać najważniejsze zdarzenia logistyczne. Odfiltrujcie wartości
EventCodeodpowiadające takim czynnościom jak „Towar odebrany” (DEPARTURE) i „Towar dostarczony” (ARRIVAL_AT_DESTINATION). Połączcie te dane z podstawowymi danymi o przesyłkach za pomocą identyfikatora UUID TransportationOrder. - Pobierzcie powiązane obiekty biznesowe: Aby odtworzyć cały proces, należy pobrać dane z innych powiązanych widoków CDS. Odpytajcie I_ForwardingOrder, aby uwzględnić czynność „Otrzymano zlecenie transportowe”, oraz I_FreightSettlementDocument w celu pobrania zdarzeń finansowych, takich jak „Utworzono rozliczenie frachtu”, „Utworzono spór dotyczący frachtu” i „Zweryfikowano fakturę”.
- Wyodrębnijcie czynności na podstawie statusów: Wiele czynności nie jest rejestrowanych jako osobne zdarzenia, lecz jako zmiany statusu głównego dokumentu. W przypadku czynności takich jak „Przypisano przewoźnika”, „Przewoźnik potwierdził przesyłkę” i „Anulowano przesyłkę” odpytajcie widok I_TransportationOrder i użyjcie pola
LastChangeDateTimepowiązanego z odpowiednim polem statusu jako czasu zdarzenia. Wymaga to dokładnego przyporządkowania kodów statusu do czynności biznesowych. - Połączcie i przekształćcie dane: Zbierzcie dane ze wszystkich źródeł w jednym dzienniku zdarzeń. Dla każdej wyodrębnionej czynności utwórzcie wiersz z wymaganymi kolumnami: ShipmentId, ActivityName i EventTime. Upewnijcie się, że każdy wiersz dotyczący danej przesyłki zawiera wszystkie zalecane atrybuty z podstawowego zapytania. Ten etap odpowiada koncepcyjnie operacji SQL
UNION ALL. - Uwzględnijcie złożone zdarzenia i dane zewnętrzne: Dane dotyczące czynności takich jak „Odprawiono przesyłkę celną” lub „Przetworzono płatność” mogą znajdować się w określonych polach albo systemach zewnętrznych. W przedstawionej logice zapytania użyto standardowych pól jako przybliżenia. Może być konieczne rozszerzenie zapytania o widoki CDS dotyczące odpraw celnych lub powiązanie z osobną ekstrakcją z ERP, aby pobrać dane o płatnościach na podstawie numeru dokumentu rozliczenia frachtu.
- Przygotujcie dane dla ProcessMind: Zapiszcie końcowy, połączony zbiór danych w pliku CSV. Nagłówki kolumn muszą odpowiadać wymaganiom importu. Na przykład w ustawieniach narzędzia przypiszcie kolumnę
ShipmentIddo polaCaseId. Sprawdźcie, czy znaczniki czasu mają spójny format, najlepiej UTC (YYYY-MM-DDTHH:MM:SSZ).
Konfiguracja
- Podstawowe widoki CDS: Ekstrakcja opiera się głównie na widokach I_TransportationOrder (zlecenia frachtowe), C_TranspOrdExecutionEvent (zdarzenia realizacji), I_ForwardingOrder (zlecenia transportowe) i I_FreightSettlementDocument (rozliczenia).
- Filtrowanie według zakresu dat: Filtr dat jest niezbędny do ograniczenia ilości danych. Użyjcie pola
CreationDateTimew widoku I_TransportationOrder alboActualBusinessDateTimew C_TranspOrdExecutionEvent. Do wstępnej analizy zaleca się zakres od 3 do 6 miesięcy. - Filtrowanie według typu dokumentu: Aby zawęzić analizę, filtrujcie dane według typów dokumentów za pomocą pola
TransportationOrderType. Pozwala to rozdzielić różne scenariusze logistyczne, na przykład standardowe wysyłki wychodzące i przesunięcia zapasów. - Filtry organizacyjne: W razie potrzeby filtrujcie dane według
PurchasingOrganizationlub innych pól organizacyjnych, aby ograniczyć je do konkretnej jednostki biznesowej lub regionu. - Stronicowanie API: W przypadku dużych zbiorów danych użyjcie parametrów OData
$topi$skip, aby pobierać dane mniejszymi partiami. Ogranicza to ryzyko przekroczenia limitu czasu API i zmniejsza zużycie pamięci po stronie klienta. Często sprawdza się rozmiar strony od 1 000 do 5 000 wierszy. - Wymagania wstępne: Użytkownik lub konto usługi wykonujące ekstrakcję musi mieć uprawnienia do bazowych usług OData (obiekt autoryzacji S_SERVICE) oraz danych biznesowych w widokach CDS. Odpowiednie usługi muszą być aktywowane w SAP Gateway (
/IWFND/MAINT_SERVICE).
Przykładowe zapytanie sql
WITH Shipments AS (
SELECT
TransportationOrder AS ShipmentId,
CarrierName,
TranspOrdExecutionBlockRsnCode,
TransportationMode AS ModeOfTransport,
ShippingType AS ShipmentType,
CreationDateTime AS ShipmentCreationTime,
LastChangeDateTime,
LifeCycleStatus,
ConfirmationStatus,
OverallExecutionStatus,
DeliveryOverallStatus,
PlannedDepDateTimeReqByCust AS RequestedDeliveryDate,
TotalChargesAmountInTransacCrcy AS TotalFreightCost
FROM I_TransportationOrder
WHERE
CreationDateTime >= '[START_DATE]' AND CreationDateTime <= '[END_DATE]'
-- AND TransportationOrderType IN ('[Your_Type_1]', '[Your_Type_2]')
)
SELECT
fwo.PurchasingDocument AS ShipmentId,
'Transportation Request Received' AS ActivityName,
fwo.CreationDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM I_ForwardingOrder AS fwo
LEFT JOIN Shipments s ON fwo.PurchasingDocument = s.ShipmentId
WHERE fwo.CreationDateTime >= '[START_DATE]' AND fwo.CreationDateTime <= '[END_DATE]'
UNION ALL
SELECT
s.ShipmentId,
'Shipment Planned' AS ActivityName,
s.ShipmentCreationTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
UNION ALL
SELECT
s.ShipmentId,
'Carrier Assigned' AS ActivityName,
s.LastChangeDateTime AS EventTime, -- Best approximation using last change time
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.CarrierName IS NOT NULL
UNION ALL
SELECT
s.ShipmentId,
'Shipment Confirmed By Carrier' AS ActivityName,
s.LastChangeDateTime AS EventTime, -- Best approximation using last change time
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.ConfirmationStatus = 'C' -- 'Confirmed'
UNION ALL
SELECT
s.ShipmentId,
'Goods Picked Up' AS ActivityName,
evt.ActualBusinessDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM C_TranspOrdExecutionEvent AS evt
JOIN Shipments s ON evt.TransportationOrder = s.ShipmentId
WHERE evt.EventCode = 'DEPARTURE'
UNION ALL
SELECT
s.ShipmentId,
'Customs Declaration Filed' AS ActivityName,
s.LastChangeDateTime AS EventTime, -- Approximation based on status change
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.CustomsRelevance IS NOT NULL -- This is a proxy, system config dependent
UNION ALL
SELECT
s.ShipmentId,
'Customs Cleared' AS ActivityName,
s.LastChangeDateTime AS EventTime, -- Approximation based on status change
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.CustomsOverallStatus = '4' -- 'Customs Cleared'
UNION ALL
SELECT
s.ShipmentId,
'Shipment Rerouted' AS ActivityName,
s.LastChangeDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.TranspOrdExecutionBlockRsnCode = '[Your Rerouting Reason Code]'
UNION ALL
SELECT
s.ShipmentId,
'Goods Delivered' AS ActivityName,
evt.ActualBusinessDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM C_TranspOrdExecutionEvent AS evt
JOIN Shipments s ON evt.TransportationOrder = s.ShipmentId
WHERE evt.EventCode = 'ARRIVAL_AT_DESTINATION'
UNION ALL
SELECT
s.ShipmentId,
'Proof Of Delivery Received' AS ActivityName,
s.LastChangeDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.DeliveryOverallStatus = 'C' -- 'POD Received'
UNION ALL
SELECT
fsd.SourceDocument AS ShipmentId,
'Freight Settlement Created' AS ActivityName,
fsd.CreationDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
fsd.TotalAmount AS TotalFreightCost
FROM I_FreightSettlementDocument AS fsd
JOIN Shipments s ON fsd.SourceDocument = s.ShipmentId
UNION ALL
SELECT
fsd.SourceDocument AS ShipmentId,
'Freight Dispute Created' AS ActivityName,
fsd.LastChangeDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
fsd.TotalAmount AS TotalFreightCost
FROM I_FreightSettlementDocument AS fsd
JOIN Shipments s ON fsd.SourceDocument = s.ShipmentId
WHERE fsd.DisputeStatus = '1' -- 'In Dispute'
UNION ALL
SELECT
fsd.SourceDocument AS ShipmentId,
'Invoice Verified' AS ActivityName,
fsd.LastChangeDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
fsd.TotalAmount AS TotalFreightCost
FROM I_FreightSettlementDocument AS fsd
JOIN Shipments s ON fsd.SourceDocument = s.ShipmentId
WHERE fsd.OverallLifeCycleStatus = '06' -- 'Posted for Accruals'
UNION ALL
SELECT
s.ShipmentId,
'Shipment Cancelled' AS ActivityName,
s.LastChangeDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.LifeCycleStatus = 'X' -- 'Cancelled'
UNION ALL
SELECT
fsd.SourceDocument AS ShipmentId,
'Payment Processed' AS ActivityName,
fsd.LastChangeDateTime AS EventTime, -- Approximation, actual payment is in ERP
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
fsd.TotalAmount AS TotalFreightCost
FROM I_FreightSettlementDocument AS fsd
JOIN Shipments s ON fsd.SourceDocument = s.ShipmentId
WHERE fsd.InvoiceProcessingStatus = 'C' -- 'Completely Invoiced' Kroki
- Potwierdźcie, że zatwierdzony klient SQL, widok bazy danych lub usługa ekstrakcji zapewnia bezpośredni dostęp do odczytu schematu SAP TM HANA. Uzyskajcie ciąg połączenia, dane uwierzytelniające, nazwę schematu i uprawnienia wymagane do odczytu odpowiednich tabel SAP TM. Nie odpytujcie bezpośrednio systemu produkcyjnego bez wymaganych zgód dotyczących bezpieczeństwa i zmian.
- Sprawdźcie fizyczne nazwy tabel i kolumn w swoim systemie. Poniższe zapytanie wykorzystuje tabele /SCMTMS/D_TORROT i /SCMTMS/D_TOSTOP jako główne źródła, ale dane o statusach, partnerach, datach, kosztach, odprawach celnych, dokumentach i płatnościach mogą znajdować się w dodatkowych tabelach lub rozszerzeniach, zależnie od wersji i wdrożenia SAP TM. Zastępujcie wyłącznie udokumentowane symbole zastępcze, po sprawdzeniu ich w katalogu systemowym i modelu danych.
- Określcie okres ekstrakcji za pomocą pól [Start timestamp] i [End timestamp]. Do wstępnej analizy zwykle wystarcza okres od trzech do sześciu miesięcy. Wybierzcie dłuższy okres dopiero po sprawdzeniu wydajności zapytania i czasu przechowywania historii zdarzeń.
- Ustalcie identyfikator sprawy dla przesyłki. W zapytaniu jako identyfikator przesyłki wykorzystano TOR_ID z tabeli /SCMTMS/D_TORROT. Jeśli wdrożenie korzysta z innego stabilnego identyfikatora, zastąpcie nim identyfikator sprawy we wszystkich częściach zapytania dotyczących czynności. Jeśli to możliwe, zachowajcie pierwotny identyfikator dokumentu jako dodatkowy atrybut audytowy.
- Przypiszcie każdą czynność biznesową do jawnego warunku źródłowego. ProcessMind odczytuje dziennik zdarzeń bez zmian, dlatego zapytanie tworzy osobny wiersz dla każdej wyodrębnionej czynności. Nie wywnioskuje etapów na podstawie kolejności dokumentów, brakujących znaczników czasu ani zmian statusu.
- Zweryfikujcie przyporządkowanie statusów i znaczników czasu z planistami transportu oraz właścicielami procesów biznesowych. W szczególności potwierdźcie wartości oznaczające utworzenie zlecenia, planowanie, przypisanie przewoźnika, potwierdzenie przez przewoźnika, odbiór, zgłoszenie celne, odprawę celną, zmianę trasy, dostawę, otrzymanie potwierdzenia dostawy (POD), rozliczenie frachtu, spór, weryfikację faktury, anulowanie i płatność.
- Uruchomcie zapytanie w zatwierdzonym kliencie SQL. Sprawdźcie, czy wynik zawiera jeden wiersz na zdarzenie, niepusty ShipmentId, niepusty ActivityName i prawidłowy EventTime. Zwróćcie uwagę na duplikaty wynikające ze złączeń jeden-do-wielu. W razie potrzeby poprawcie przyporządkowanie źródeł lub logikę agregacji.
- Uzupełnijcie wynik o zalecane atrybuty, jeśli odpowiednie pola źródłowe są dostępne. Zapytanie zawiera przykładowe symbole zastępcze dla pól, których nazw nie można bezpiecznie określić bez metadanych konkretnego systemu. Zastępujcie je wyłącznie zweryfikowanymi kolumnami lub zatwierdzonymi widokami.
- Zastosujcie końcowe reguły jakości danych. Usuńcie wiersze bez identyfikatora sprawy lub znacznika czasu zdarzenia, ujednolićcie strefę czasową, zachowajcie źródłowe znaczniki czasu na potrzeby audytu i sprawdźcie, czy EndTime nie jest wcześniejszy niż EventTime. Nie twórzcie sztucznych zdarzeń dla brakujących rekordów źródłowych.
- Wyeksportujcie wynik jako plik CSV w kodowaniu UTF-8 lub innym obsługiwanym przez ProcessMind formacie tabelarycznym. Użyjcie dokładnie wymaganych nazw kolumn: ShipmentId, ActivityName i EventTime. Jeśli zawierają dane, uwzględnijcie EndTime i zalecane atrybuty. Prześlijcie plik lub połączcie zatwierdzony wynik zapytania z ProcessMind, a następnie sprawdźcie, czy pola identyfikatora sprawy Shipment i nazwy czynności zostały prawidłowo przypisane.
Konfiguracja
- Podstawowe tabele źródłowe: Użyjcie /SCMTMS/D_TORROT jako źródła głównych danych o zleceniach transportowych lub frachtowych oraz /SCMTMS/D_TOSTOP jako źródła danych o przystankach i etapach. Przed wdrożeniem zweryfikujcie wszystkie dodatkowe obiekty źródłowe w docelowym systemie SAP TM.
- Identyfikator sprawy: Użyjcie stabilnego identyfikatora przesyłki lub zlecenia frachtowego. W przykładowym zapytaniu ShipmentId odpowiada TOR_ID. Sprawdźcie, czy identyfikator pozostaje niezmienny na etapach planowania, realizacji, rozliczenia i rejestrowania płatności w ERP.
- Przyporządkowanie czynności: Skonfigurujcie jawne warunki źródłowe dla wszystkich 15 wymaganych czynności. Każda czynność musi zostać zapisana jako osobny wiersz dziennika zdarzeń. ProcessMind nie wyprowadza czynności z innych wierszy.
- Zakres dat: Zacznijcie od historii obejmującej trzy do sześciu miesięcy. W każdym fragmencie zapytania dodajcie warunki dotyczące EventTime możliwie wcześnie. Przy ładowaniu przyrostowym używajcie kontrolowanego punktu kontrolnego i niewielkiego nakładania się okresów, aby uwzględnić późne aktualizacje.
- Filtry biznesowe: Skonfigurujcie filtry dotyczące kodu spółki, organizacji zakupowej, organizacji sprzedaży, typu dokumentu, rodzaju transportu, przewoźnika, zakładu, lokalizacji i statusu, zgodnie z wdrożeniem. Jeśli odpowiednie pole nie zostało zweryfikowane, użyjcie symbolu zastępczego, takiego jak [Company code filter].
- Obsługa znaczników czasu: Przekształćcie źródłowe znaczniki czasu do jednej strefy czasowej. Jeśli źródło przechowuje datę i godzinę w osobnych polach, połączcie je za pomocą konwersji właściwej dla danej wersji HANA. Jeśli wymagają tego zasady audytu, zachowajcie oryginalny znacznik czasu ze źródła.
- Zalecane atrybuty: Uzupełnijcie CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost i IsOnTimeDelivery na podstawie zweryfikowanych pól źródłowych lub zatwierdzonych widoków obliczeniowych. Jeśli źródło nie zawiera wiarygodnej wartości, pozostawcie pole puste.
- Wydajność: Ograniczcie zakres dat, wybierajcie tylko wymagane kolumny, filtrujcie dane przed złączeniami, unikajcie skanowania całych tabel bez ograniczeń i sprawdźcie plan wykonania HANA. W przypadku dużych zbiorów danych użyjcie warunków uwzględniających partycje, ekstrakcji przyrostowej, tabel pośrednich lub zatwierdzonego widoku obliczeniowego.
- Kontrola duplikatów: Złączenia jeden-do-wielu mogą zwrócić kilka wierszy dla jednej czynności. Użyjcie zweryfikowanego identyfikatora zdarzenia, klucza dokumentu źródłowego lub deterministycznej reguły agregacji. Nie usuwajcie duplikatów arbitralnie, ponieważ można w ten sposób pominąć prawidłowo powtarzające się zdarzenia.
- Wymagania wstępne: Wymagane uprawnienia do bazy danych, dostęp do danych SAP TM i powiązanych danych ERP lub rozliczeniowych, zatwierdzone narzędzia ekstrakcji oraz potwierdzenie, że odpowiednie moduły SAP TM, integracje i rozszerzenia niestandardowe są aktywne.
- Przyporządkowanie zależne od systemu: Kody statusów, role partnerów, etapy odprawy celnej, statusy rozliczeń, faktur i płatności różnią się w zależności od wersji i konfiguracji. Przechowujcie przyporządkowania w kontrolowanym dokumencie konfiguracyjnym i testujcie je po aktualizacjach.
Przykładowe zapytanie sql
WITH
base_tor AS (
SELECT
r.TOR_ID AS ShipmentId,
r.TOR_ID AS SourceDocumentId,
r.CREATED_AT AS RequestEventTime,
r.CREATED_AT AS PlannedEventTime,
r.CREATED_AT AS CarrierAssignedEventTime,
r.CREATED_AT AS CarrierConfirmedEventTime,
r.CREATED_AT AS PickupEventTime,
r.CREATED_AT AS CustomsFiledEventTime,
r.CREATED_AT AS CustomsClearedEventTime,
r.CREATED_AT AS ReroutedEventTime,
r.CREATED_AT AS DeliveredEventTime,
r.CREATED_AT AS PodReceivedEventTime,
r.CREATED_AT AS SettlementCreatedEventTime,
r.CREATED_AT AS DisputeCreatedEventTime,
r.CREATED_AT AS InvoiceVerifiedEventTime,
r.CREATED_AT AS CancelledEventTime,
r.CREATED_AT AS PaymentProcessedEventTime,
r.CREATED_AT AS EndTime,
CAST(NULL AS NVARCHAR(255)) AS CarrierName,
CAST(NULL AS TIMESTAMP) AS RequestedDeliveryDate,
CAST(NULL AS NVARCHAR(50)) AS ModeOfTransport,
CAST(NULL AS DECIMAL(19, 2)) AS TotalFreightCost,
CAST(NULL AS NVARCHAR(5)) AS IsOnTimeDelivery
FROM "/SCMTMS/D_TORROT" r
WHERE r.CREATED_AT >= TO_TIMESTAMP('[Start timestamp]')
AND r.CREATED_AT < TO_TIMESTAMP('[End timestamp]')
AND ('[Company code filter]' = '[Company code filter]' OR r.TOR_ID IS NOT NULL)
),
stop_data AS (
SELECT
s.TOR_ID AS ShipmentId,
MIN(s.STOP_SEQ) AS FirstStopSequence,
MAX(s.STOP_SEQ) AS LastStopSequence
FROM "/SCMTMS/D_TOSTOP" s
GROUP BY s.TOR_ID
),
source_data AS (
SELECT
b.ShipmentId,
b.SourceDocumentId,
b.RequestEventTime,
b.PlannedEventTime,
b.CarrierAssignedEventTime,
b.CarrierConfirmedEventTime,
b.PickupEventTime,
b.CustomsFiledEventTime,
b.CustomsClearedEventTime,
b.ReroutedEventTime,
b.DeliveredEventTime,
b.PodReceivedEventTime,
b.SettlementCreatedEventTime,
b.DisputeCreatedEventTime,
b.InvoiceVerifiedEventTime,
b.CancelledEventTime,
b.PaymentProcessedEventTime,
b.EndTime,
b.CarrierName,
b.RequestedDeliveryDate,
b.ModeOfTransport,
b.TotalFreightCost,
CASE
WHEN b.DeliveredEventTime IS NOT NULL
AND b.RequestedDeliveryDate IS NOT NULL
AND b.DeliveredEventTime <= b.RequestedDeliveryDate THEN 'true'
WHEN b.DeliveredEventTime IS NOT NULL
AND b.RequestedDeliveryDate IS NOT NULL THEN 'false'
ELSE NULL
END AS IsOnTimeDelivery
FROM base_tor b
LEFT JOIN stop_data s
ON s.ShipmentId = b.ShipmentId
),
event_log AS (
SELECT ShipmentId, 'Transportation Request Received' AS ActivityName, RequestEventTime AS EventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE RequestEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Shipment Planned', PlannedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE PlannedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Carrier Assigned', CarrierAssignedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CarrierAssignedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Shipment Confirmed By Carrier', CarrierConfirmedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CarrierConfirmedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Goods Picked Up', PickupEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE PickupEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Customs Declaration Filed', CustomsFiledEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CustomsFiledEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Customs Cleared', CustomsClearedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CustomsClearedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Shipment Rerouted', ReroutedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE ReroutedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Goods Delivered', DeliveredEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE DeliveredEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Proof Of Delivery Received', PodReceivedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE PodReceivedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Freight Settlement Created', SettlementCreatedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE SettlementCreatedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Freight Dispute Created', DisputeCreatedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE DisputeCreatedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Invoice Verified', InvoiceVerifiedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE InvoiceVerifiedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Shipment Cancelled', CancelledEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CancelledEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Payment Processed', PaymentProcessedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE PaymentProcessedEventTime IS NOT NULL
)
SELECT
ShipmentId,
ActivityName,
EventTime,
EndTime,
CarrierName,
RequestedDeliveryDate,
ModeOfTransport,
TotalFreightCost,
IsOnTimeDelivery,
SourceDocumentId
FROM event_log
WHERE ShipmentId IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY ShipmentId, EventTime, ActivityName; Kroki
- Określcie wymagane dane: Najpierw potwierdźcie dokładną logikę dla każdej z 15 wymaganych czynności i wszystkich atrybutów. Oznacza to przypisanie każdej czynności do określonych zmian statusu, zdarzeń utworzenia lub powiązań między dokumentami w systemie SAP TM. Na przykład ustalcie, który status realizacji dokładnie oznacza „Towar odebrany”.
- Otwórzcie środowisko programistyczne ABAP: Zalogujcie się do SAP GUI i otwórzcie edytor ABAP za pomocą transakcji
SE38. Wpiszcie nazwę nowego programu, na przykładZTM_PROCESS_EXTRACT, i kliknijcie „Utwórz”. Podajcie tytuł i ustawcie typ programu na „Program wykonywalny”. - Utwórzcie ekran wyboru: Zdefiniujcie ekran wyboru widoczny dla użytkowników. Powinien zawierać parametry filtrowania danych, takie jak zakres dat utworzenia zlecenia frachtowego (
SO_CREDT), oraz opcje wyboru typów dokumentów (SO_TYPE) lub przewoźników (SO_CARR). - Zdefiniujcie strukturę danych wyjściowych: Utwórzcie strukturę tabeli wewnętrznej zgodną z wymaganym formatem dziennika zdarzeń. Powinna zawierać pola
ShipmentId,ActivityName,EventTime,EndTime,CarrierName,RequestedDeliveryDate,ModeOfTransport,TotalFreightCostiIsOnTimeDelivery. - Zaimplementujcie logikę wyboru danych: Napiszcie główną logikę ABAP, która pobierze dane dla każdej z 15 czynności. Zwykle wymaga to odpytywania kilku tabel SAP TM. Zacznijcie od pobrania głównych dokumentów przesyłek, takich jak zlecenia frachtowe, z określonego zakresu dat.
- Pobierzcie zdarzenia planowania i realizacji: Dla każdego wybranego dokumentu przesyłki, na przykład zlecenia frachtowego, odpytajcie powiązane tabele i obiekty biznesowe, aby znaleźć znaczniki czasu różnych zdarzeń. Użyjcie tabeli
/SCMTMS/D_TORROTdo pobrania informacji o utworzeniu zlecenia frachtowego („Zaplanowano przesyłkę”), przypisaniu przewoźnika („Przypisano przewoźnika”) i zmianach statusu realizacji odpowiadających czynnościom „Towar odebrany” i „Towar dostarczony”. Utworzenie poprzedzającego zlecenia spedycyjnego (/SCMTMS/D_TRQROT) może oznaczać czynność „Otrzymano zlecenie transportowe”. - Pobierzcie potwierdzenie przewoźnika i zmianę trasy: Odpytajcie tabele statusów lub dokumenty zmian (CDHDR/CDPOS) powiązane ze zleceniem frachtowym, aby ustalić, kiedy ustawiono status
CONFIRMATION. Oznacza on czynność „Przewoźnik potwierdził przesyłkę”. Podobnie wyszukajcie istotne zmiany informacji o trasie, aby zarejestrować czynność „Zmieniono trasę przesyłki”. - Pobierzcie zdarzenia celne: Jeśli używacie SAP Global Trade Services (GTS) lub podobnego modułu, zdarzenia celne („Złożono zgłoszenie celne”, „Odprawiono przesyłkę celną”) są często rejestrowane w powiązanych dokumentach. Logika powinna odczytać przepływ dokumentów (
/SCMTMS/D_TORDOC) zlecenia frachtowego, aby znaleźć powiązane dokumenty oraz daty ich utworzenia lub zmiany statusu. - Pobierzcie zdarzenia rozliczeń i sporów: Odpytajcie tabelę nagłówków dokumentów rozliczenia frachtu (
/SCMTMS/D_SFIRHD) oraz powiązane pozycje i statusy, aby zarejestrować czynności „Utworzono rozliczenie frachtu”, „Utworzono spór dotyczący frachtu” i „Zweryfikowano fakturę”. Powiążcie je z pierwotnymShipmentId. - Połączcie dane: Dla każdego znalezionego zdarzenia utwórzcie rekord w końcowej tabeli wewnętrznej. W polu
ActivityNamewpiszcie odpowiednią czynność, wEventTimeznacznik czasu zdarzenia, a wShipmentIdidentyfikator zlecenia frachtowego lub rezerwacji frachtu. Pozostałe atrybuty uzupełnijcie danymi z dokumentów źródłowych. - Przygotujcie i wyeksportujcie plik: Po uzupełnieniu końcowej tabeli wewnętrznej zapiszcie dane w pliku płaskim. Użyjcie poleceń
OPEN DATASET,LOOP AT... TRANSFER...iCLOSE DATASET, aby zapisać zawartość tabeli wewnętrznej do pliku CSV lub TXT na serwerze aplikacji SAP. Plik można znaleźć za pomocą transakcji AL11. - Zaplanujcie ekstrakcję i pobierzcie plik: Program ABAP można zaplanować jako zadanie w tle (transakcja SM36), aby automatycznie pobierał dane. Wygenerowany plik można pobrać z serwera aplikacji na komputer lokalny za pomocą transakcji
CG3Y, a następnie przesłać do ProcessMind.
Konfiguracja
- Zakres dat: Ekran wyboru powinien wymagać podania zakresu dat utworzenia głównego dokumentu transportowego, na przykład zlecenia frachtowego. Do wstępnej analizy zaleca się zakres od 3 do 6 miesięcy. Pozwala to uzyskać reprezentatywny zbiór danych bez nadmiernego wydłużania czasu wykonania.
- Filtr typu dokumentu: Udostępnijcie filtr typu dokumentu transportowego, na przykład zlecenia frachtowego lub rezerwacji frachtu. Jest on niezbędny, aby skupić analizę na określonych procesach, takich jak transport drogowy lub morski.
- Filtr przewoźnika: Umożliwcie filtrowanie według przewoźnika. Ułatwi to analizę wyników poszczególnych partnerów logistycznych.
- Filtry organizacyjne: Dodajcie filtry dotyczące odpowiednich jednostek organizacyjnych, takich jak organizacja zakupowa lub kod spółki, aby ograniczyć ekstrakcję do wybranych obszarów działalności.
- Optymalizacja wydajności: W przypadku dużych zbiorów danych kod ABAP powinien używać indeksowanych pól bazy danych w klauzulach
WHERE, unikać zagnieżdżonych pętli, jeśli to możliwe, i pobierać z bazy tylko niezbędne pola, aby ograniczyć zużycie pamięci. - Wymagania wstępne: Użytkownik uruchamiający raport musi mieć uprawnienia do wykonywania programów ABAP. Programista potrzebuje uprawnienia
S_DEVELOP. Sam program wymaga uprawnień do dostępu do systemu plików na serwerze aplikacji (obiektS_DATASET) oraz dostępu do odpowiednich tabel bazy danych TM i obiektów BOPF.
Przykładowe zapytanie abap
REPORT ztm_process_extract.
*&---------------------------------------------------------------------*
*& Data Structures
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_s_event_log,
shipmentid TYPE /scmtms/tor_id,
activityname TYPE string,
eventtime TYPE timestamp,
endtime TYPE timestamp,
carriername TYPE string,
requesteddeliverydate TYPE timestamp,
modeoftransport TYPE /scmtms/mot,
totalfreightcost TYPE /scmtms/chargeable_weight,
isontimedelivery TYPE abap_bool,
END OF ty_s_event_log.
DATA: lt_event_log TYPE TABLE OF ty_s_event_log.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS: so_credt FOR sy-datum OBLIGATORY.
SELECT-OPTIONS: so_torid FOR /scmtms/d_torrot-tor_id.
SELECT-OPTIONS: so_carr FOR /scmtms/d_torrot-lsp_id.
*&---------------------------------------------------------------------*
*& Main Logic
*&---------------------------------------------------------------------*
START-OF-SELECTION.
DATA: ls_event_log TYPE ty_s_event_log.
" Select base data: Freight Orders (Shipments)
SELECT tor_id, tor_cat, lsp_id, mot_code, cretd_tst, btd_tstmp_end
FROM /scmtms/d_torrot
INTO TABLE @DATA(lt_tor_root)
WHERE CAST( cretd_tst AS DATS ) IN @so_credt
AND tor_id IN @so_torid
AND lsp_id IN @so_carr.
IF lt_tor_root IS INITIAL.
MESSAGE 'No data found for the given selection.' TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
" Loop through each shipment to build the event log
LOOP AT lt_tor_root INTO DATA(ls_tor_root).
" 1. Transportation Request Received (Approximation from FWO creation)
SELECT SINGLE created_at_utc FROM /scmtms/d_trqrot
WHERE db_key IN ( SELECT trq_root_key FROM /scmtms/d_tordoc
WHERE parent_key = @ls_tor_root-db_key AND bo_node_cat = 'TRQ_ROOT' )
INTO @DATA(lv_trq_created_ts).
IF sy-subrc = 0.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Transportation Request Received'.
ls_event_log-eventtime = lv_trq_created_ts.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 2. Shipment Planned
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Shipment Planned'.
ls_event_log-eventtime = ls_tor_root-cretd_tst.
APPEND ls_event_log TO lt_event_log.
" 3. Carrier Assigned
IF ls_tor_root-lsp_id IS NOT INITIAL.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Carrier Assigned'.
ls_event_log-eventtime = ls_tor_root-cretd_tst. " Approximated with creation time
APPEND ls_event_log TO lt_event_log.
ENDIF.
" Get statuses from /SCMTMS/D_TORSTA
SELECT status, tstmp FROM /scmtms/d_torsta
INTO TABLE @DATA(lt_statuses)
WHERE parent_key = @ls_tor_root-db_key.
" 4. Shipment Confirmed By Carrier
READ TABLE lt_statuses WITH KEY status = 'CONFIRMED' INTO DATA(ls_conf_status).
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Shipment Confirmed By Carrier'.
ls_event_log-eventtime = ls_conf_status-tstmp.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 5. Goods Picked Up
READ TABLE lt_statuses WITH KEY status = 'LOADING_END' INTO DATA(ls_pickup_status). " Example status
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Goods Picked Up'.
ls_event_log-eventtime = ls_pickup_status-tstmp.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 6. Customs Declaration Filed (Placeholder logic)
" 7. Customs Cleared (Placeholder logic)
" 8. Shipment Rerouted (Placeholder logic, needs change documents)
" 9. Goods Delivered
READ TABLE lt_statuses WITH KEY status = 'UNLOADING_END' INTO DATA(ls_delivery_status). " Example status
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Goods Delivered'.
ls_event_log-eventtime = ls_delivery_status-tstmp.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 10. Proof Of Delivery Received
READ TABLE lt_statuses WITH KEY status = 'POD_RECEIVED' INTO DATA(ls_pod_status). " Example status
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Proof Of Delivery Received'.
ls_event_log-eventtime = ls_pod_status-tstmp.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 11. Freight Settlement Created
SELECT SINGLE created_at_utc FROM /scmtms/d_sfirhd
WHERE db_key IN ( SELECT sfir_root_key FROM /scmtms/d_tordoc
WHERE parent_key = @ls_tor_root-db_key AND bo_node_cat = 'SFIR_ROOT' )
INTO @DATA(lv_fsd_created_ts).
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Freight Settlement Created'.
ls_event_log-eventtime = lv_fsd_created_ts.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 12. Freight Dispute Created (Needs logic based on dispute status in SFIR)
" 13. Invoice Verified (Needs logic based on invoice status in SFIR)
" 14. Shipment Cancelled
READ TABLE lt_statuses WITH KEY status = 'CANCELLED' INTO DATA(ls_cancel_status).
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Shipment Cancelled'.
ls_event_log-eventtime = ls_cancel_status-tstmp.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 15. Payment Processed (Data is typically in the ERP system, not TM)
ENDLOOP.
" Final step: Write lt_event_log to a file on the application server
DATA(lv_filepath) = '/usr/sap/trans/[YourInstance]/[YourFileName].csv'.
OPEN DATASET lv_filepath FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc = 0.
" Write header
DATA(lv_header) = 'ShipmentId,ActivityName,EventTime'.
TRANSFER lv_header TO lv_filepath.
" Write data
LOOP AT lt_event_log INTO ls_event_log.
DATA(lv_line) = |{ ls_event_log-shipmentid },{ ls_event_log-activityname },{ ls_event_log-eventtime }|.
TRANSFER lv_line TO lv_filepath.
ENDLOOP.
CLOSE DATASET lv_filepath.
ELSE.
MESSAGE 'Error opening file on application server.' TYPE 'E'.
ENDIF.
ENDFOR. Gotowi do rozpoczęcia?
Skorzystajcie z tego szablonu, aby rozpocząć analizę procesów transportowych i szybciej realizować dostawy niższym kosztem. Już dziś sprawdźcie, co kryje się w danych.
Usuńcie wąskie gardła w zarządzaniu transportem
Znajdźcie nieefektywne działania, zoptymalizujcie trasy i skróćcie czas realizacji o 30%.
Karta kredytowa nie jest wymagana. Konfiguracja zajmuje kilka minut.