Szablon danych do planowania produkcji
Szablon danych do planowania produkcji
- Zalecane atrybuty do zebrania
- Działania do śledzenia
- Praktyczne wskazówki dotyczące wyodrębniania danych
Atrybuty planowania produkcji
| Nazwa | Opis | ||
|---|---|---|---|
| Czas zdarzenia EventTime | Dokładny znacznik czasu wskazujący, kiedy wystąpiła czynność. | ||
| Opis Czas zdarzenia określa datę i godzinę wykonania danej czynności lub zapisania statusu w systemie. Ten znacznik czasu jest podstawą analizy procesu w ujęciu czasowym, w tym obliczania czasu cyklu, czasu oczekiwania i całkowitego czasu trwania procesu. Dokładne znaczniki czasu są niezbędne do prawidłowego ustalenia kolejności zdarzeń i analizy wyników. Pozwalają mierzyć czas między czynnościami, wykrywać opóźnienia oraz oceniać realizację harmonogramów i umów SLA. W planowaniu produkcji pomagają ustalić, ile trwa każdy etap planowania i realizacji. Dlaczego to ważne Atrybut ten określa chronologiczną kolejność zdarzeń, niezbędną do obliczania czasu trwania, analizy wyników i wykrywania wąskich gardeł. Skąd pobrać Wartość jest wyliczana na podstawie różnych pól daty i godziny powiązanych z transakcjami i zmianami statusów, takich jak BUDAT (data księgowania) z dokumentów materiałowych lub znaczniki czasu zmian z CDHDR. Przykłady 2023-04-15T10:05:30Z2023-04-15T14:22:00Z2023-04-18T08:59:11Z2023-04-20T16:45:00Z | |||
| Nazwa czynności ActivityName | Nazwa zdarzenia biznesowego lub systemowego, które wystąpiło w określonym momencie w ramach zlecenia produkcyjnego. | ||
| Opis Nazwa czynności opisuje konkretny krok lub zmianę statusu w procesie planowania produkcji. Zdarzenia te są pobierane z dzienników zmian, aktualizacji statusów i zapisów transakcji w SAP ECC PP. Obejmują ważne etapy, takie jak „Utworzono zlecenie produkcyjne”, „Sprawdzono dostępność materiałów” czy „Zaksięgowano przyjęcie wyrobu”. Ten atrybut stanowi podstawę mapy procesu. Pozwala analitykom wizualizować kolejność zdarzeń, wykrywać warianty procesu oraz identyfikować wąskie gardła i pętle poprawek. Jasne i odpowiednio szczegółowe nazwy czynności pomagają zbudować dokładny model procesu, który odzwierciedla rzeczywisty przebieg operacji. Dlaczego to ważne Określa kroki na mapie procesu, dzięki czemu można wizualizować, analizować i rozumieć przebieg produkcji. Skąd pobrać Dane pochodzą z różnych źródeł, w tym ze zmian statusów w tabelach JEST/JSTO, dzienników transakcji oraz dokumentów zmian w CDHDR/CDPOS. Przykłady Zwolniono zlecenie produkcyjneZaksięgowano wydanie materiałówZarejestrowano potwierdzenie końcoweZlecenie zamknięte technicznie | |||
| Zlecenie produkcyjne ProductionOrder | Unikalny identyfikator zlecenia produkcyjnego, który służy jako główny identyfikator przypadku w procesie planowania i realizacji produkcji. | ||
| Opis Numer zlecenia produkcyjnego to unikalny klucz alfanumeryczny przypisywany każdemu zleceniu produkcyjnemu w SAP ECC PP. Jest głównym obiektem łączącym wszystkie powiązane czynności, od utworzenia i planowania po realizację i końcowe rozliczenie. W process mining ten atrybut służy do grupowania wszystkich zdarzeń dotyczących jednego cyklu produkcyjnego. Umożliwia analizę całego cyklu życia zlecenia, śledzenie postępów, pomiar czasu realizacji i wykrywanie odstępstw od standardowego przebiegu. Analiza według numeru zlecenia produkcyjnego pokazuje, jak realizowane są poszczególne zlecenia. Dlaczego to ważne To podstawowy identyfikator łączący wszystkie powiązane zdarzenia procesu. Umożliwia odtworzenie i analizę przebiegu każdego zlecenia produkcyjnego od początku do końca. Skąd pobrać Ten atrybut znajduje się w tabeli SAP AUFK, w polu AUFNR. Przykłady 1000345100034610003471000348 | |||
| Ostatnia aktualizacja danych LastDataUpdate | Znacznik czasu wskazujący, kiedy dane dotyczące tego zdarzenia zostały ostatnio odświeżone lub pobrane. | ||
| Opis Ten atrybut zapisuje datę i godzinę pobrania danych z systemu źródłowego do narzędzia process mining. Nie opisuje zdarzenia biznesowego, lecz jest technicznym znacznikiem czasu używanym do zarządzania danymi. Służy przede wszystkim do sprawdzania aktualności danych oraz informowania administratorów i analityków, jak świeże są analizowane informacje. Jest niezbędny do potwierdzenia, że analiza procesu opiera się na aktualnych danych, zwłaszcza podczas monitorowania bieżących operacji. Dlaczego to ważne Potwierdza aktualność danych, dzięki czemu analizy opierają się na najnowszych dostępnych informacjach. Skąd pobrać Wartość jest zwykle generowana i zapisywana przez narzędzie lub skrypt ETL podczas wczytywania danych. Przykłady 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| System źródłowy SourceSystem | Wskazuje system, z którego pobrano dane. | ||
| Opis Ten atrybut określa system źródłowy rekordu, na przykład nazwę lub identyfikator konkretnej instancji SAP ECC. W organizacjach korzystających z kilku systemów ERP lub łączących starsze i nowoczesne platformy pole to ma znaczenie dla śledzenia pochodzenia danych i ich interpretacji. Podczas analizy umożliwia filtrowanie procesów według systemu źródłowego. Przydaje się do porównywania wyników procesów w różnych systemach lub wyodrębniania danych podczas konsolidacji informacji z wielu systemów. Dlaczego to ważne Dostarcza ważnych informacji o pochodzeniu danych, szczególnie w środowiskach z wieloma instancjami SAP lub zintegrowanymi systemami. Skąd pobrać Zwykle dodawany podczas ekstrakcji danych, często na podstawie identyfikatora systemu SAP (SY-SYSID). Przykłady ECC_PROD_100S4H_FIN_200ECC_DE | |||
| Ilość dostarczona DeliveredQuantity | Rzeczywista ilość produktu, która została wytworzona i przyjęta do zapasów. | ||
| Opis Ilość dostarczona, nazywana również ilością przyjęcia wyrobu, to łączna ilość wyrobu gotowego potwierdzona jako wyprodukowana w ramach danego zlecenia. Wartość jest aktualizowana po wystąpieniu zdarzenia „Zaksięgowano przyjęcie wyrobu”. Ten atrybut uzupełnia ilość planowaną i jest niezbędny do obliczenia KPI „Odchylenie ilości planowanej od rzeczywistej”. Określa rzeczywistą wielkość produkcji i pozwala wykrywać różnice wynikające z braków, strat uzysku lub innych problemów produkcyjnych. Porównanie ilości dostarczonych między zakładami, produktami lub okresami wskazuje obszary, w których występują problemy z wydajnością. Dlaczego to ważne Mierzy rzeczywistą produkcję i umożliwia bezpośrednie porównanie jej z planem w celu oceny wyników. Skąd pobrać Wartość znajduje się w tabeli SAP AFPO, w polu WEMNG (ilość przyjętych wyrobów). Przykłady 984950751255 | |||
| Ilość planowana PlannedQuantity | Łączna ilość produktu zaplanowana do wytworzenia w ramach zlecenia. | ||
| Opis Ilość planowana określa docelową produkcję dla zlecenia, ustaloną na etapie planowania. Stanowi punkt odniesienia przy pomiarze rzeczywistej produkcji. Ten atrybut jest podstawą KPI dotyczących wyników produkcji i zgodności z harmonogramem, takich jak „Odchylenie ilości planowanej od rzeczywistej”. Pomaga ocenić dokładność planowania produkcji i wykrywać powtarzające się problemy związane z nadprodukcją lub niedoborem produkcji. Analiza tej wartości pokazuje, na ile realizacja produkcji odpowiada pierwotnym założeniom. Dlaczego to ważne Ten atrybut stanowi punkt odniesienia przy pomiarze odchyleń produkcji i ocenie dokładności planowania. Skąd pobrać Wartość znajduje się w tabeli SAP AFKO, w polu GAMNG (łączna ilość zlecenia). Przykłady 1005000751250 | |||
| Kod produktu ProductCode | Unikalny identyfikator wytwarzanego materiału lub produktu. | ||
| Opis Kod produktu, nazywany również numerem materiału, identyfikuje produkt, który ma powstać w ramach zlecenia produkcyjnego. To podstawowy element danych głównych, łączący planowanie produkcji z zarządzaniem zapasami, sprzedażą i kalkulacją kosztów. W process mining filtrowanie lub grupowanie danych według kodu produktu ma zasadnicze znaczenie dla analizy procesów produkcyjnych dotyczących konkretnych produktów. Pozwala odpowiedzieć na pytania: „Które produkty mają najdłuższy czas realizacji?” lub „Czy w przypadku niektórych produktów częściej występują problemy z jakością lub opóźnienia w dostawach materiałów?”. Taka analiza wspiera zarządzanie portfelem produktów i wskazuje możliwości standaryzacji lub usprawnienia produkcji określonych materiałów. Dlaczego to ważne Umożliwia analizę procesu dla poszczególnych produktów i pokazuje, które materiały wiążą się z nieefektywnością, opóźnieniami lub wysokimi kosztami. Skąd pobrać Ten atrybut znajduje się w tabeli SAP AFPO, w polu MATNR. Przykłady FG-123RM-45AHALB-7890CHEM-22 | |||
| Rzeczywista data rozpoczęcia ActualStartDate | Znacznik czasu pierwszej zarejestrowanej czynności produkcyjnej, oznaczający faktyczne rozpoczęcie realizacji. | ||
| Opis Rzeczywista data rozpoczęcia to znacznik czasu pierwszego zdarzenia oznaczającego rozpoczęcie fizycznych prac produkcyjnych. Zwykle jest ustalana na podstawie pierwszego potwierdzenia produkcji lub pierwszego wydania surowców na zlecenie. Ten wyliczany atrybut jest niezbędny do analizy zgodności z harmonogramem. Określa rzeczywisty moment rozpoczęcia, który można porównać z planowaną datą rozpoczęcia i wykorzystać do dokładnego obliczenia odchylenia. Różnica między planowaną a rzeczywistą datą rozpoczęcia pomaga wykrywać opóźnienia przed rozpoczęciem produkcji, związane z przygotowaniem materiałów, ustawieniem maszyn lub dostępnością zasobów. Dlaczego to ważne Określa faktyczny początek realizacji produkcji, co pozwala dokładnie obliczyć opóźnienie rozpoczęcia i całkowity czas realizacji produkcji. Skąd pobrać Wartość jest wyliczana z dziennika zdarzeń przez znalezienie najwcześniejszego znacznika czasu określonych czynności realizacyjnych, takich jak „Zarejestrowano pierwsze potwierdzenie” lub „Zaksięgowano wydanie materiałów”, dla każdego zlecenia produkcyjnego. Przykłady 2023-05-11T08:30:00Z2023-06-22T14:00:00Z2023-07-02T09:15:00Z | |||
| Rzeczywista data zakończenia ActualEndDate | Znacznik czasu ostatniej czynności produkcyjnej, oznaczający faktyczne zakończenie zlecenia. | ||
| Opis Rzeczywista data zakończenia to znacznik czasu zdarzenia oznaczającego zakończenie wszystkich prac produkcyjnych w ramach zlecenia. Zwykle jest ustalana na podstawie zdarzenia „Zarejestrowano potwierdzenie końcowe” lub ostatniego zdarzenia „Zaksięgowano przyjęcie wyrobu”. Ten atrybut jest niezbędny do pomiaru całkowitego czasu cyklu produkcyjnego i analizy zgodności z harmonogramem. Porównanie rzeczywistej daty zakończenia z planowaną datą zakończenia pokazuje, czy zlecenie zrealizowano terminowo. Czas między rzeczywistą datą rozpoczęcia a rzeczywistą datą zakończenia określa faktyczny czas realizacji produkcji. Dlaczego to ważne Oznacza zakończenie produkcji i pozwala dokładnie mierzyć terminowość dostaw oraz całkowity czas realizacji. Skąd pobrać Wyznaczana na podstawie dziennika zdarzeń przez znalezienie najpóźniejszego znacznika czasu dla działań kończących, takich jak „Zarejestrowano potwierdzenie końcowe” lub „Zaksięgowano przyjęcie towaru”. Przykłady 2023-05-14T16:00:00Z2023-06-29T11:30:00Z2023-07-05T17:00:00Z | |||
| Zakład produkcyjny ProductionPlant | Zakład lub lokalizacja, w której realizowane jest zlecenie produkcyjne. | ||
| Opis Zakład produkcyjny to jednostka organizacyjna w SAP reprezentująca miejsce prowadzenia produkcji. Jest przypisywany do każdego zlecenia produkcyjnego i określa, gdzie fizycznie będą wykonywane prace. Analiza procesu według zakładu produkcyjnego pozwala porównywać wyniki różnych lokalizacji. Pomaga ustalić, które zakłady działają sprawniej, gdzie częściej występują opóźnienia lub braki materiałów oraz gdzie warto upowszechnić dobre praktyki. To podstawowy wymiar analizy przyczyn źródłowych na dashboardach dotyczących przepustowości i wykorzystania zasobów. Dlaczego to ważne Umożliwia porównywanie wyników różnych zakładów produkcyjnych oraz wykrywanie problemów i dobrych praktyk charakterystycznych dla poszczególnych lokalizacji. Skąd pobrać Ten atrybut jest zapisany w tabeli SAP AUFK, w polu WERKS. Przykłady 100017102000DE01 | |||
| Dostępność materiałów MaterialAvailabilityStatus | Informuje, czy dostępne są wszystkie komponenty wymagane do realizacji zlecenia produkcyjnego. | ||
| Opis Status dostępności materiałów wskazuje, czy można rozpocząć produkcję. System ustala go na podstawie kontroli dostępności wszystkich komponentów wymaganych do realizacji zlecenia. Status „Dostępne” oznacza, że produkcja może przebiegać bez opóźnień związanych z materiałami, a „Niedobór” wskazuje na problem. Ten atrybut jest niezbędny w dashboardzie „Analiza wpływu niedoborów materiałów”. Analizując czas oczekiwania zleceń z powodu niedoboru materiałów, można określić wpływ problemów w łańcuchu dostaw na harmonogram produkcji. Ułatwia to identyfikację nierzetelnych dostawców i komponentów, które często powodują opóźnienia. Dlaczego to ważne Bezpośrednio wskazuje opóźnienia spowodowane niedoborem materiałów, który często jest istotną przyczyną odchyleń od harmonogramu produkcji. Skąd pobrać Nie jest to pojedyncze pole zapisane w systemie. Wartość wynika z kontroli dostępności (kontroli ATP). Wyniki są często widoczne w transakcji CO02 lub podczas zbiorczej kontroli dostępności COHV. Sam status, na przykład MACM (materiał zarezerwowany), może być rejestrowany. Należy sprawdzić dokumentację SAP ECC PP. Przykłady DostępneNiedobórCzęściowo dostępneNie sprawdzono | |||
| Grupa planistów PlannerGroup | Grupa planistów MRP lub planistów produkcji odpowiedzialna za zlecenie. | ||
| Opis Grupa planistów to element struktury organizacyjnej obejmujący osoby odpowiedzialne za planowanie i zarządzanie określonym zestawem materiałów lub zleceń produkcyjnych. Przypisywanie zleceń do grup planistów ułatwia podział pracy i określenie odpowiedzialności. W process mining ten atrybut pozwala analizować wyniki pracy poszczególnych zespołów planistycznych. Można dzięki niemu odpowiedzieć na pytania: „Która grupa planistów najczęściej odnotowuje odchylenia od harmonogramu?” lub „Czy czas realizacji różni się w zależności od grupy zarządzającej zleceniami?”. Takie informacje pomagają równoważyć obciążenie pracą i określać potrzeby szkoleniowe. Dlaczego to ważne Umożliwia analizę wyników pracy według zespołu odpowiedzialnego za planowanie, co pomaga wykryć różnice w skuteczności planowania i obciążeniu pracą. Skąd pobrać Jest to kontroler MRP, zapisany w tabeli SAP AFKO w polu DISPO. Przykłady 001002P01P02 | |||
| Odchylenie ilościowe QuantityVariance | Różnica między planowaną ilością produkcji a faktycznie dostarczoną ilością. | ||
| Opis Odchylenie ilościowe to obliczana miara pokazująca różnicę między produkcją a pierwotnym planem. Oblicza się je jako „Dostarczona ilość” minus „Planowana ilość”. Wartość dodatnia oznacza nadprodukcję, a ujemna niedobór produkcji lub straty uzysku. Ten atrybut jest niezbędny w dashboardzie „Planowana a rzeczywista produkcja” oraz powiązanym z nim KPI. Analiza odchylenia pomaga wykryć problemy z uzyskiem produkcji, poziomem braków lub błędami wprowadzania danych. Pokazuje bezpośrednio, na ile proces produkcyjny pozwala osiągnąć założone cele. Dlaczego to ważne Pozwala określić zgodność produkcji z planem i wskazać potencjalne problemy z uzyskiem, brakami lub kontrolą procesu. Skąd pobrać Pole obliczane: 'DeliveredQuantity' - 'PlannedQuantity'. Przykłady -2-5005 | |||
| Odpowiedzialny użytkownik ResponsibleUser | Identyfikator użytkownika, który utworzył zlecenie produkcyjne lub ostatnio je zmienił. | ||
| Opis Odpowiedzialny użytkownik to konto SAP powiązane z ważnymi zdarzeniami w cyklu życia zlecenia produkcyjnego, takimi jak jego utworzenie lub zwolnienie. Zapewnia to możliwość ustalenia, kto wykonał daną czynność, i prześledzenia jej w systemie. W process mining ten atrybut służy do analizy różnic w przebiegu procesu wynikających ze sposobu pracy użytkowników. Pomaga wskazać osoby, które mogą potrzebować dodatkowego szkolenia lub stosują niestandardowe procedury. Ułatwia też analizę zasobów, pokazując podział pracy między użytkowników. Dlaczego to ważne Łączy działania w procesie z konkretnymi osobami, umożliwiając analizę wyników pracy na poziomie użytkownika i zwiększając rozliczalność. Skąd pobrać Użytkownik, który utworzył zlecenie, jest zapisany w AUFK-ERNAM. Użytkownik, który ostatnio je zmienił, znajduje się w AUFK-AENAM. Dokumenty zmian (CDHDR-USERNAME) zawierają historię użytkowników wprowadzających poszczególne zmiany. Przykłady JSMITHPROD_PLANNER1BATCH_USERAMILLER | |||
| Planowana data rozpoczęcia PlannedStartDate | Zaplanowana data rozpoczęcia produkcji w ramach zlecenia. | ||
| Opis Planowana data rozpoczęcia to parametr harmonogramu ustalany podczas planowania i harmonogramowania produkcji. Określa docelowy termin rozpoczęcia prac produkcyjnych dla danego zlecenia. Ten atrybut jest niezbędny do pomiaru zgodności z harmonogramem. Porównanie planowanej daty rozpoczęcia z rzeczywistym czasem rozpoczęcia produkcji, na przykład znacznikiem czasu czynności „Zarejestrowano pierwsze potwierdzenie”, pozwala wykrywać opóźnienia. Analiza ich przyczyn to jedno z głównych zastosowań process mining w tym obszarze. Dlaczego to ważne Stanowi punkt odniesienia przy pomiarze zgodności z harmonogramem i wykrywaniu opóźnień w rozpoczęciu produkcji. Skąd pobrać Jest to podstawowa data rozpoczęcia, zapisana w tabeli SAP AFKO, w polu GSTRP. Przykłady 2023-05-102023-06-222023-07-01 | |||
| Planowana data zakończenia PlannedEndDate | Zaplanowana data zakończenia produkcji w ramach zlecenia. | ||
| Opis Planowana data zakończenia to docelowy termin realizacji zlecenia produkcyjnego, ustalany podczas planowania harmonogramu. Określa oczekiwany czas zakończenia wszystkich prac produkcyjnych, w tym potwierdzeń końcowych i przyjęcia wyrobu. Ta data jest niezbędna do obliczenia KPI „Wskaźnik realizacji harmonogramu”. Porównanie planowanej daty zakończenia z rzeczywistym czasem zakończenia, na przykład znacznikiem czasu zdarzenia „Zaksięgowano przyjęcie wyrobu” lub „Zarejestrowano potwierdzenie końcowe”, pokazuje, czy zlecenia są realizowane terminowo. Analiza pomaga ocenić wiarygodność harmonogramów produkcji i wykryć przyczyny opóźnionych dostaw. Dlaczego to ważne To punkt odniesienia przy ocenie, czy zlecenia produkcyjne są realizowane terminowo. Ma bezpośredni wpływ na zadowolenie klientów i wiarygodność planowania. Skąd pobrać Jest to podstawowa data zakończenia, zapisana w tabeli SAP AFKO, w polu GLTRP. Przykłady 2023-05-152023-06-282023-07-05 | |||
| Priorytet produkcji ProductionPriority | Klasyfikacja określająca pilność lub priorytet zlecenia produkcyjnego. | ||
| Opis Priorytet produkcji określa względne znaczenie zlecenia produkcyjnego. Dzięki temu planiści produkcji i pracownicy hali mogą ustalać kolejność zadań, aby pilne zlecenia szybciej przechodziły przez proces. Analiza tego atrybutu pozwala ocenić skuteczność systemu priorytetów. Porównując czas realizacji zleceń o wysokim i niskim priorytecie, można sprawdzić, czy pilne zlecenia rzeczywiście są obsługiwane szybciej. Jeśli tak się nie dzieje, przyczyną mogą być problemy z komunikacją, przydziałem zasobów lub przebiegiem realizacji. Dlaczego to ważne Pomaga ocenić skuteczność zarządzania priorytetami i sprawdzić, czy pilne zlecenia są realizowane szybciej niż standardowe. Skąd pobrać Często nie jest to standardowe pole w nagłówku zlecenia produkcyjnego. Może być polem niestandardowym, wynikać z priorytetu zlecenia sprzedaży lub należeć do systemu klasyfikacji. Należy sprawdzić dokumentację SAP ECC PP lub konfigurację systemu. Przykłady WysokiŚredniNiskiPilny | |||
| Status realizacji zgodnie z harmonogramem ScheduleAdherenceStatus | Informacja, czy zlecenie produkcyjne zostało zakończone do planowanej daty końcowej. | ||
| Opis Status realizacji zgodnie z harmonogramem to obliczany atrybut logiczny lub kategoryczny, który pozwala szybko ocenić terminowość. Wyznacza się go przez porównanie „Rzeczywistej daty zakończenia” z „Planowaną datą zakończenia”. Jeśli zlecenie zakończono w planowanym terminie lub wcześniej, otrzymuje status „Terminowo”. W przeciwnym razie status to „Z opóźnieniem”. Ten atrybut ułatwia analizę i prezentację danych na dashboardach. Pozwala szybko filtrować i agregować zlecenia, aby obliczyć KPI „Realizacja zgodnie z harmonogramem” oraz wskazać główne przyczyny opóźnień, takie jak konkretne produkty, zakłady lub niedobory materiałów. Dlaczego to ważne Ułatwia analizę wyników przez podział zleceń na „Terminowo” i „Z opóźnieniem”, dzięki czemu można łatwo mierzyć i raportować terminowość realizacji harmonogramu. Skąd pobrać Pole obliczane: IF('ActualEndDate' <= 'PlannedEndDate', 'On-Time', 'Late'). Przykłady TerminowoZ opóźnieniem | |||
| Status zlecenia produkcyjnego ProductionOrderStatus | Bieżący status realizacji zlecenia produkcyjnego, na przykład utworzone, zwolnione lub technicznie zakończone. | ||
| Opis Status zlecenia produkcyjnego wskazuje jego bieżący etap realizacji. SAP używa kodów statusu do zarządzania przebiegiem zlecenia, na przykład CRTD (utworzone), REL (zwolnione), CNF (potwierdzone), DLV (dostarczone) i TECO (technicznie zakończone). Analiza czasu spędzonego w poszczególnych statusach jest ważnym elementem process mining w produkcji. Pozwala ustalić, jak długo zlecenia czekają na zwolnienie po utworzeniu i jak długo pozostają w stanie częściowej realizacji. Śledzenie zmian statusu jako działań daje ogólny obraz przebiegu procesu. Dlaczego to ważne Pokazuje postęp zlecenia i pomaga wykryć wąskie gardła, w których zlecenia zatrzymują się na dłuższy czas. Skąd pobrać Informacje o statusie są przechowywane w tabelach JEST i JSTO, powiązanych z numerem obiektu zlecenia (AUFK-OBJNR). Opisy statusów znajdują się w tabeli TJ02T. Do odczytu statusu często służą moduły funkcyjne, takie jak STATUS_TEXT_EDIT. Przykłady CRTD (utworzone)REL (zwolnione)DLV (dostarczone)TECO (technicznie zakończone) | |||
Działania w procesie planowania produkcji
| Działanie | Opis | ||
|---|---|---|---|
| Utworzono zlecenie produkcyjne | To zdarzenie oznacza utworzenie nowego zlecenia produkcyjnego, zwykle w wyniku uruchomienia planowania lub ręcznego wprowadzenia danych. Jest rejestrowane, gdy nowy rekord zlecenia zostaje zapisany w systemie i otrzymuje status „CRTD” (utworzone). | ||
| Dlaczego to ważne To początek każdego przypadku zlecenia produkcyjnego. Analiza czasu od tego zdarzenia do zwolnienia zlecenia pomaga wykryć opóźnienia w planowaniu przedprodukcyjnym i przygotowaniu administracyjnym. Skąd pobrać Zdarzenie jest rejestrowane na podstawie daty utworzenia zlecenia produkcyjnego (AUFK-ERDAT) i godziny (AUFK-ERZET). Zlecenie otrzymuje status systemowy „CRTD” (I0001), zapisywany w tabelach JEST i JCDS powiązanych z numerem obiektu zlecenia (AUFK-OBJNR). Rejestrowanie Śledź znacznik czasu utworzenia oraz przypisanie statusu „CRTD”. Typ zdarzenia explicit | |||
| Zaksięgowano przyjęcie wyrobu | To zdarzenie rejestruje przyjęcie wyrobu gotowego ze zlecenia produkcyjnego do zapasów. Oznacza, że wyprodukowany towar jest już dostępny do wysyłki lub dalszego przetwarzania. | ||
| Dlaczego to ważne To ważny etap zakończenia, oznaczający końcowy wynik procesu produkcji. Czas od zwolnienia zlecenia do przyjęcia wyrobu określa całkowity czas realizacji produkcji. Skąd pobrać Zdarzenie jest rejestrowane jako dokument materiałowy w tabelach MKPF/MSEG z typem ruchu, zwykle „101”, i numerem zlecenia produkcyjnego. Zlecenie otrzymuje również status systemowy „DLV” (I0012, dostarczone). Rejestrowanie Zapisz datę księgowania dokumentu materiałowego z typem ruchu „101” lub znacznik czasu zmiany statusu na „DLV”. Typ zdarzenia explicit | |||
| Zarejestrowano pierwsze potwierdzenie | To zdarzenie oznacza rozpoczęcie faktycznej pracy produkcyjnej nad zleceniem. Jest rejestrowane po wprowadzeniu do systemu pierwszego potwierdzenia czasu dla dowolnej operacji w zleceniu produkcyjnym. | ||
| Dlaczego to ważne Ta czynność wskazuje rzeczywisty czas rozpoczęcia produkcji. Jest to niezbędne do pomiaru zgodności z harmonogramem i wykrywania opóźnień między przydzieleniem zasobów a rozpoczęciem pracy. Skąd pobrać Zdarzenie można ustalić, znajdując najwcześniejszą datę księgowania (AFRU-BUDAT) spośród wszystkich potwierdzeń zlecenia w tabeli AFRU. Pierwszy wpis oznacza rozpoczęcie produkcji. Rejestrowanie Znajdź pierwszy rekord potwierdzenia dla zlecenia na podstawie daty księgowania w tabeli AFRU. Typ zdarzenia inferred | |||
| Zarejestrowano potwierdzenie końcowe | Ta czynność oznacza, że z perspektywy hali produkcyjnej zakończono wszystkie operacje zlecenia. Jest oznaczana końcowym potwierdzeniem ostatniej operacji. | ||
| Dlaczego to ważne Ten etap oznacza koniec fizycznych prac produkcyjnych. Czas od pierwszego do końcowego potwierdzenia odpowiada rzeczywistemu czasowi realizacji produkcji. Skąd pobrać Zdarzenie jest rejestrowane po ustawieniu statusu systemowego „CNF” (I0009, potwierdzone). Zwykle wywołuje je końcowe potwierdzenie w tabeli AFRU (AFRU-AUERU = „X”). Zmiana statusu jest zapisywana w JCDS. Rejestrowanie Ustal znacznik czasu ustawienia statusu „CNF” lub znajdź ostatni rekord potwierdzenia w AFRU. Typ zdarzenia explicit | |||
| Zlecenie zamknięte technicznie | To administracyjny etap zamknięcia zlecenia produkcyjnego z punktu widzenia logistyki. Uniemożliwia dalsze ruchy materiałowe i potwierdzenia oraz pozwala rozliczyć koszty. | ||
| Dlaczego to ważne To ostateczny koniec cyklu życia zlecenia w logistyce. Analiza tego zdarzenia pomaga ustalić całkowity czas procesu, łącznie z zadaniami administracyjnymi po zakończeniu produkcji. Skąd pobrać Zdarzenie jest rejestrowane, gdy zlecenie otrzymuje status systemowy „TECO” (I0045, zamknięte technicznie). Zmiana wraz ze znacznikiem czasu jest zapisywana w tabeli JCDS. Rejestrowanie Ustal w tabeli JCDS znacznik czasu, w którym status „TECO” staje się aktywny dla zlecenia. Typ zdarzenia explicit | |||
| Zwolniono zlecenie produkcyjne | To zdarzenie oznacza formalne zatwierdzenie i zwolnienie zlecenia produkcyjnego do realizacji. Po zwolnieniu aktywują się rezerwacje materiałów, a produkcja może rozpocząć się od pobrania materiałów i rejestrowania potwierdzeń. | ||
| Dlaczego to ważne To ważny etap przejścia od planowania do realizacji. Czas między utworzeniem a zwolnieniem zlecenia jest istotnym wskaźnikiem sprawności planowania. Skąd pobrać Zdarzenie jest rejestrowane, gdy zlecenie produkcyjne otrzymuje status systemowy „REL” (I0002). Zmiana wraz ze znacznikiem czasu jest zapisywana w tabeli JCDS i powiązana z numerem obiektu zlecenia (AUFK-OBJNR). Rejestrowanie Ustal znacznik czasu, w którym status „REL” staje się aktywny dla zlecenia. Typ zdarzenia explicit | |||
| Anulowano zlecenie | To zdarzenie oznacza anulowanie zlecenia produkcyjnego przed jego zakończeniem. Zwykle polega na ustawieniu określonego statusu lub flagi usunięcia, co uniemożliwia dalsze przetwarzanie. | ||
| Dlaczego to ważne To niepożądany wynik, który warto śledzić. Analiza anulowanych zleceń może ujawnić problemy z prognozowaniem popytu, dokładnością planowania lub zarządzaniem danymi podstawowymi. Skąd pobrać Zdarzenie można ustalić na podstawie przypisania statusu „DLFL” (I0076, flaga usunięcia) lub określonego statusu „Anulowane”, jeśli został skonfigurowany. Zmiana wraz ze znacznikiem czasu jest zapisywana w tabeli JCDS. Rejestrowanie Ustal znacznik czasu ustawienia flagi usunięcia („DLFL”) lub statusu anulowania zlecenia. Typ zdarzenia inferred | |||
| Rozliczono zlecenie | Oznacza finansowe rozliczenie zlecenia produkcyjnego, w ramach którego zgromadzone koszty są przypisywane do odpowiednich obiektów kosztowych. Z perspektywy controllingu jest to ostatni etap cyklu życia zlecenia. | ||
| Dlaczego to ważne Choć jest to czynność finansowa, opóźnienia w rozliczeniu mogą wskazywać na problemy z raportowaniem kosztów lub dokładnością danych zlecenia. Oznacza faktyczne zamknięcie finansowe procesu produkcji. Skąd pobrać Zdarzenie można ustalić, gdy saldo zlecenia wynosi zero albo gdy po statusie systemowym „SETC” (I0076, utworzono regułę rozliczeniową) pojawiają się dzienniki przebiegu rozliczenia. Samo rozliczenie jest zapisywane w tabelach controllingu, takich jak COSP i COSS. Rejestrowanie Ustal zdarzenie na podstawie dokumentów rozliczeniowych powiązanych ze zleceniem w tabelach CO lub aktywacji statusu „SETC”. Typ zdarzenia inferred | |||
| Sprawdzono dostępność materiałów | Oznacza sprawdzenie, czy dostępne są wszystkie komponenty wymagane do realizacji zlecenia produkcyjnego. Może to być kontrola automatyczna po utworzeniu lub zwolnieniu zlecenia albo działanie uruchomione ręcznie. | ||
| Dlaczego to ważne Ta czynność pomaga zrozumieć opóźnienia spowodowane brakiem materiałów. Częste kontrole lub długi czas oczekiwania na dostępność materiałów mogą wskazywać na problemy w łańcuchu dostaw lub zarządzaniu zapasami. Skąd pobrać System ustawia status, taki jak „MACM” (materiał zarezerwowany) lub „MSPT” (brak materiału). Wykonanie kontroli można ustalić na podstawie znacznika czasu zmiany statusu w tabelach JEST/JCDS. Wyniki są widoczne w nagłówku zlecenia. Rejestrowanie Ustal na podstawie znaczników czasu zmian statusu związanych z dostępnością materiałów, takich jak „MACM” lub „MSPT”. Typ zdarzenia inferred | |||
| Zaksięgowano wydanie materiałów | Ta czynność oznacza pobranie komponentów z zapasów na potrzeby zlecenia produkcyjnego. Potwierdza, że wymagane surowce lub półprodukty przygotowano do produkcji. | ||
| Dlaczego to ważne To zdarzenie oznacza rozpoczęcie zużycia materiałów. Opóźnienie między zwolnieniem zlecenia a wydaniem materiałów może wskazywać na problemy z logistyką magazynową, przygotowaniem materiałów lub dokładnością danych o zapasach. Skąd pobrać Zdarzenie jest rejestrowane jako dokument materiałowy w tabelach MKPF (nagłówek) i MSEG (pozycja), z typem ruchu, zwykle „261”, i numerem zlecenia produkcyjnego (MSEG-AUFNR). Rejestrowanie Zapisz datę księgowania (MKPF-BUDAT) dokumentów materiałowych z typem ruchu „261” powiązanych ze zleceniem. Typ zdarzenia explicit | |||
| Zarejestrowano potwierdzenie pośrednie | Oznacza aktualizację postępu realizacji zlecenia produkcyjnego przez częściowe potwierdzenie operacji. Jest to częste w przypadku długotrwałych zleceń, których postęp trzeba śledzić przed zakończeniem. | ||
| Dlaczego to ważne Analiza potwierdzeń pośrednich pomaga monitorować postęp długich cykli produkcyjnych i wykrywać wąskie gardła w samym procesie produkcji, a nie tylko na jego początku lub końcu. Skąd pobrać Zdarzenie jest rejestrowane na podstawie rekordów potwierdzeń w tabeli AFRU, które nie są oznaczone jako potwierdzenie końcowe. Każdy wpis zawiera datę (AFRU-BUDAT) i godzinę księgowania. Rejestrowanie Wyodrębnij z tabeli AFRU wszystkie rekordy potwierdzeń, które nie są oznaczone jako końcowe potwierdzenie operacji. Typ zdarzenia explicit | |||
| Zmieniono dane zlecenia | To zdarzenie rejestruje istotne zmiany wprowadzone w zleceniu produkcyjnym po jego utworzeniu, na przykład zmianę planowanej ilości, dat lub BOM. System zapisuje te zmiany na potrzeby audytu. | ||
| Dlaczego to ważne Śledzenie zmian pomaga wykryć niestabilność procesu i częste ponowne planowanie. Duża liczba zmian może wskazywać na niedokładne planowanie początkowe, zmienny popyt lub błędy w danych. Skąd pobrać Zmiany ważnych pól w tabelach takich jak AFKO (nagłówek zlecenia) i AFPO (pozycja zlecenia) są zapisywane w tabelach dokumentów zmian CDHDR (nagłówek) i CDPOS (pozycja). Każdą istotną zmianę można wyodrębnić jako czynność. Rejestrowanie Wyodrębnij wpisy dziennika zmian z tabel CDHDR i CDPOS dla klasy obiektów zleceń produkcyjnych. Typ zdarzenia explicit | |||
Instrukcje wyodrębniania danych
Kroki
- Utwórz InfoSet w SAP Query: Użyj kodu transakcji
SQ02. Utwórz nowy InfoSet, na przykładZPP_EVENTLOG. Wybierz źródło danych „Połączenie tabel z użyciem tabeli bazowej”. Jako początkową tabelę bazową wybierzAUFK(dane podstawowe zlecenia). - Połącz wymagane tabele: Dodaj do InfoSet następujące tabele. System może zaproponować połączenia, ale należy sprawdzić, czy są poprawne:
AUFKzAFKO(dane nagłówka zleceń PP):AUFK-AUFNR = AFKO-AUFNRAUFKzJEST(statusy poszczególnych obiektów):AUFK-OBJNR = JEST-OBJNRJESTzJCDS(dokumenty zmian statusów systemowych i użytkownika):JEST-OBJNR = JCDS-OBJNRANDJEST-STAT = JCDS-STAT. Uwaga: to połączenie służy do odczytu historii zmian statusu.AUFKzAFRU(potwierdzenia realizacji zlecenia):AUFK-AUFNR = AFRU-AUFNRAUFKzMSEG(pozycje dokumentu materiałowego):AUFK-AUFNR = MSEG-AUFNRMSEGzMKPF(nagłówek dokumentu materiałowego):MSEG-MBLNR = MKPF-MBLNRANDMSEG-MJAHR = MKPF-MJAHR
- Zdefiniuj grupy pól: Przeciągnij wymagane pola z tabel źródłowych do grup pól. Uwzględnij wszystkie pola potrzebne w końcowym zapytaniu, takie jak
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATEiMKPF-BUDAT. - Dodaj pola niestandardowe i kod: W InfoSet przejdź do karty „Dodatki”. Zdefiniuj pola niestandardowe
ActivityName,EventTime,SourceSystemiLastDataUpdate, a następnie napisz kod ABAP, który wypełni je zgodnie z logiką opisaną w sekcji zapytania. Kod powinien przechodzić przez zmiany statusów, potwierdzenia i dokumenty materiałowe, aby utworzyć osobny rekord dla każdego zdarzenia biznesowego. To najbardziej złożony etap, ponieważ dane tabelaryczne są przekształcane w dziennik zdarzeń w sekcjach kodu InfoSet. - Wygeneruj i zapisz InfoSet: Po skonfigurowaniu połączeń, pól i kodu niestandardowego zapisz i wygeneruj InfoSet.
- Utwórz zapytanie SAP Query: Użyj kodu transakcji
SQ01. Utwórz nowe zapytanie, na przykładZPP_EVENTS, na podstawie InfoSet utworzonego w poprzednich krokach. - Skonfiguruj układ zapytania: W projektancie zapytania zdefiniuj pola ekranu wyboru. Warto uwzględnić numer zlecenia produkcyjnego
AUFNR, zakładWERKS, typ zleceniaAUARToraz zakres dat utworzenia zleceniaAUFK-ERDAT. - Zdefiniuj listę wyników: Wybierz pola wyświetlane w raporcie. Lista powinna dokładnie odpowiadać kolumnom wymaganym w dzienniku zdarzeń, w tym polom niestandardowym, takim jak
ActivityNameiEventTime. - Uruchom zapytanie: Wykonaj zapytanie z wybranymi kryteriami, na przykład dla zleceń produkcyjnych z ostatnich 3–6 miesięcy.
- Wyeksportuj dane: Po wyświetleniu wyników wyeksportuj listę. Najczęściej używanym i niezawodnym formatem jest „Arkusz kalkulacyjny” lub „Plik lokalny” z danymi rozdzielonymi tabulatorami albo w formacie CSV.
- Przygotuj dane dla ProcessMind: Otwórz wyeksportowany plik w arkuszu kalkulacyjnym. Sprawdź, czy nagłówki kolumn odpowiadają wymaganym atrybutom (
ProductionOrder,ActivityName,EventTimeitd.) oraz czy format daty i godziny wEventTimejest spójny i zgodny z wymaganiami, na przykład YYYY-MM-DD HH:MI:SS. Zapisz plik jako CSV, aby można go było przesłać.
Konfiguracja
- Połączenia InfoSet: Ta metoda opiera się na złożonym InfoSet, który łączy tabele nagłówków, statusów, potwierdzeń i ruchów materiałowych. Główne połączenia to
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUorazAUFK->MSEG->MKPF. Nieprawidłowe lub nieefektywne połączenia mogą obniżyć wydajność albo zniekształcić dane. - Kryteria wyboru: Należy określić zakres danych, który nie przeciąży systemu. Na ekranie początkowym zapytania warto uwzględnić następujące pola wyboru:
- Zakład produkcyjny (
AUFK-WERKS) - Typ zlecenia produkcyjnego (
AUFK-AUART) - Data utworzenia zlecenia (
AUFK-ERDAT): zalecamy pobieranie danych z okresu 3–6 miesięcy, aby ograniczyć wielkość zbioru.
- Zakład produkcyjny (
- Statusy systemowe: Rozpoznawanie zdarzeń, takich jak „Utworzone”, „Zwolnione”, „Technicznie zakończone” i „Anulowane”, zależy od konkretnych kodów statusu systemowego, na przykład I0001, I0002, I0045 i I0047. Zwykle są one standardowe w systemach SAP, ale należy je zweryfikować.
- Rodzaje ruchu materiałowego: Zdarzenia takie jak „Wydanie towaru” i „Przyjęcie towaru” są identyfikowane na podstawie odpowiednich rodzajów ruchu materiałowego (
MSEG-BWART), zwykle „261” i „101”. Należy sprawdzić, czy te wartości są zgodne z konfiguracją organizacji. - Uprawnienia: Użytkownik uruchamiający zapytanie musi mieć uprawnienia do transakcji
SQ01,SQ02iSQ03, a także dostęp do wyświetlania danych we wszystkich używanych tabelach (AUFK, AFKO, JEST, JCDS, AFRU, MSEG, MKPF).
Przykładowe zapytanie abap
/*
The following ABAP-style SQL script represents the complete logic required to build the event log.
This logic must be implemented within the code sections of the SQ02 InfoSet, as a direct SQL query of this nature is not run.
Each SELECT block corresponds to a specific business activity.
*/
-- 1. Production Order Created
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Created' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0001' AND JCDS.INACT = ''
UNION ALL
-- 2. Material Availability Checked (using 'Material shortage' status as an indicator)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Material Availability Checked' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0033' AND JCDS.INACT = '' -- I0033 is MSPT (Material Shortage)
UNION ALL
-- 3. Production Order Released
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Released' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0002' AND JCDS.INACT = ''
UNION ALL
-- 4. Order Data Changed (using last change date as a proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Data Changed' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime, -- Time is not available in AUFK
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.AEDAT IS NOT NULL AND AUFK.AEDAT > AUFK.ERDAT
UNION ALL
-- 5. Goods Issue Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Issue Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '261'
UNION ALL
-- 6. First Confirmation Recorded
SELECT
CONF.ProductionOrder,
'First Confirmation Recorded' AS ActivityName,
CONF.EventTime,
CONF.ProductionPlant,
CONF.ProductCode,
CONF.PlannedQuantity,
CONF.DeliveredQuantity,
CONF.ActualStartDate,
CONF.ActualEndDate,
CONF.SourceSystem,
CONF.LastDataUpdate
FROM (
SELECT
AUFK.AUFNR AS ProductionOrder,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
ROW_NUMBER() OVER(PARTITION BY AUFK.AUFNR ORDER BY AFRU.BUDAT, AFRU.ERFZEIT) as rn
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
) AS CONF
WHERE CONF.rn = 1
UNION ALL
-- 7. Intermediate Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Intermediate Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'T' -- T = Partial Confirmation
UNION ALL
-- 8. Final Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Final Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'E' -- E = Final Confirmation
UNION ALL
-- 9. Goods Receipt Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Receipt Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '101'
UNION ALL
-- 10. Order Technically Completed
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Technically Completed' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0045' AND JCDS.INACT = ''
UNION ALL
-- 11. Order Settlement Ran (using 'Closed' status as proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Settlement Ran' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0046' AND JCDS.INACT = '' -- I0046 is CLSD (Closed)
UNION ALL
-- 12. Order Cancellation Set
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0047' AND JCDS.INACT = '' -- I0047 is CNF (Confirmed), use I0076 for Canceled. Recorrecting. Use Deletion Flag instead.
-- Corrected Logic for Cancellation:
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.LOEKZ = 'X'; Kroki
- Uzyskaj dostęp do bazy danych: Zdobądź dane logowania z uprawnieniami tylko do odczytu do bazowej bazy danych SAP ECC. Potrzebne będą adres serwera, port, nazwa bazy danych, nazwa użytkownika i hasło. Dostęp należy uzgodnić z zespołami SAP Basis i administracji bazą danych.
- Ustal schemat SAP: Określ schemat bazy danych, w którym przechowywane są tabele SAP. Często jest to
SAPSR3lub inna nazwa zależna od systemu. W zapytaniu zastąp symbol zastępczy[Your SAP Schema]właściwą wartością. - Przygotuj zapytanie SQL: Skopiuj całe zapytanie SQL z sekcji
query. Służy ono do wyodrębnienia wskazanych działań do jednego dziennika zdarzeń. - Skonfiguruj parametry zapytania: Przed uruchomieniem zmień symbole zastępcze w zapytaniu. Ustaw
[Start Date]i[End Date], aby określić zakres czasu wyodrębniania danych. Warto też filtrować dane według zakładu produkcyjnego (WERKS) lub typu zlecenia (AUART), aby ograniczyć ich ilość. - Połącz się z bazą i uruchom zapytanie: Użyj standardowego klienta SQL, takiego jak DBeaver lub SAP HANA Studio, albo własnego skryptu w Pythonie lub Javie. Połącz się z bazą SAP, korzystając z danych logowania uzyskanych w kroku 1.
- Wykonaj zapytanie: Wklej skonfigurowane zapytanie SQL do klienta i uruchom je. W zależności od zakresu dat i wielkości systemu wykonanie może potrwać kilka minut.
- Sprawdź wstępne wyniki: Po zakończeniu zapytania przejrzyj kilkaset pierwszych wierszy. Sprawdź, czy kolumny takie jak
ProductionOrder,ActivityNameiEventTimesą prawidłowo wypełnione i zawierają sensowne dane. - Wyeksportuj dane do CSV: Wyeksportuj cały zestaw wyników z klienta SQL do pliku CSV. Upewnij się, że plik jest zapisany w kodowaniu UTF-8, aby uniknąć problemów ze znakami.
- Przygotuj plik CSV do przesłania: Otwórz plik CSV i sprawdź, czy nagłówki kolumn odpowiadają wymaganym atrybutom (
ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdateitd.). Upewnij się, że kolumnaEventTimema spójny format, na przykładYYYY-MM-DD HH:MI:SS. - Prześlij dane do ProcessMind: Przygotowany plik CSV można teraz przesłać na platformę ProcessMind do analizy.
Konfiguracja
- Schemat bazy danych: Określ schemat SAP, w którym znajdują się tabele planowania produkcji. W zapytaniu zastąp symbol zastępczy
[Your SAP Schema]właściwą nazwą dla danego środowiska, na przykładSAPSR3. - Zakres dat: Filtrowanie według zakresu dat ma zasadnicze znaczenie dla wydajności. Zapytanie filtruje dane według daty utworzenia zlecenia (
AUFK.ERDAT). Zalecamy rozpoczęcie od niedawnego okresu 3–6 miesięcy, aby ograniczyć ilość danych. - Typ zlecenia produkcyjnego: Aby zawęzić analizę, filtruj zapytanie według typu zlecenia produkcyjnego (
AUFK.AUART). Pozwala to uwzględnić lub wykluczyć określone typy, takie jak standardowe zlecenia produkcyjne, zlecenia procesowe lub zlecenia naprawcze. - Zakład produkcyjny: Zdecydowanie zalecamy filtrowanie według jednego lub kilku zakładów produkcyjnych (
AFKO.WERKS). Jednoczesne pobieranie danych ze wszystkich zakładów może wymagać dużych zasobów. - Dostęp do bazy danych: Ta metoda wymaga konta z co najmniej uprawnieniami do odczytu następujących tabel:
AUFK,AFKO,JCDS,JEST,AFRU,MSEG,MKPF. Bezpośredni dostęp do bazy danych nie jest standardowo dostępny dla wszystkich użytkowników SAP i wymaga specjalnych uprawnień.
Przykładowe zapytanie sql
WITH Orders AS (
SELECT
aufk.AUFNR AS ProductionOrder,
afko.WERKS AS ProductionPlant,
afko.PLNBEZ AS ProductCode,
afko.GAMNG AS PlannedQuantity,
afko.GMEIN AS PlannedUnit,
afko.GEMNG AS DeliveredQuantity,
CASE
WHEN afko.GSTRI = '00000000' THEN NULL
ELSE TO_TIMESTAMP(afko.GSTRI || afko.GSUZI, 'YYYYMMDDHH24MISS')
END AS ActualStartDate,
CASE
WHEN afko.GETRI = '00000000' THEN NULL
ELSE TO_TIMESTAMP(afko.GETRI || afko.GEUZI, 'YYYYMMDDHH24MISS')
END AS ActualEndDate,
aufk.OBJNR,
aufk.ERDAT AS CreationDate,
aufk.ERFAS AS CreationTime
FROM
"[Your SAP Schema]".AUFK aufk
JOIN
"[Your SAP Schema]".AFKO afko ON aufk.AUFNR = afko.AUFNR
WHERE
aufk.AUTYP = '10' -- Filter for Production Orders
AND aufk.ERDAT BETWEEN '[Start Date]' AND '[End Date]'
-- AND afko.WERKS IN ('[Your Plant]', '[Another Plant]') -- Optional: Filter by Plant
-- AND aufk.AUART IN ('[Your Order Type]') -- Optional: Filter by Order Type
),
Confirmations AS (
SELECT
o.ProductionOrder,
a.RUECK AS ConfirmationNumber,
a.RMZHL AS ConfirmationCounter,
TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') AS EventTime,
a.AUERU AS IsFinalConfirmation,
ROW_NUMBER() OVER(PARTITION BY o.ProductionOrder ORDER BY TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') ASC) as rn_asc,
ROW_NUMBER() OVER(PARTITION BY o.ProductionOrder ORDER BY TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') DESC) as rn_desc
FROM
Orders o
JOIN
"[Your SAP Schema]".AFRU a ON o.ProductionOrder = a.AUFNR
)
-- 1. Production Order Created
SELECT
o.ProductionOrder,
'Production Order Created' AS ActivityName,
TO_TIMESTAMP(o.CreationDate || o.CreationTime, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
UNION ALL
-- 2. Material Availability Checked (using 'Material Committed' status as proxy)
SELECT
o.ProductionOrder,
'Material Availability Checked' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0006' AND jcds.INACT != 'X'
UNION ALL
-- 3. Production Order Released
SELECT
o.ProductionOrder,
'Production Order Released' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0002' AND jcds.INACT != 'X'
UNION ALL
-- 4. Order Data Changed
SELECT
o.ProductionOrder,
'Order Data Changed' AS ActivityName,
TO_TIMESTAMP(aufk.AEDAT || aufk.AEZEIT, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".AUFK aufk ON o.ProductionOrder = aufk.AUFNR
WHERE aufk.AEDAT > o.CreationDate
UNION ALL
-- 5. Goods Issue Posted
SELECT
o.ProductionOrder,
'Goods Issue Posted' AS ActivityName,
TO_TIMESTAMP(mkpf.CPUDT || mkpf.CPUTM, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".MSEG mseg ON o.ProductionOrder = mseg.AUFNR
JOIN "[Your SAP Schema]".MKPF mkpf ON mseg.MBLNR = mkpf.MBLNR AND mseg.MJAHR = mkpf.MJAHR
WHERE mseg.BWART = '261'
UNION ALL
-- 6. First Confirmation Recorded
SELECT
c.ProductionOrder,
'First Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.rn_asc = 1
UNION ALL
-- 7. Intermediate Confirmation Recorded
SELECT
c.ProductionOrder,
'Intermediate Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.rn_asc > 1 AND c.IsFinalConfirmation IS NULL
UNION ALL
-- 8. Final Confirmation Recorded
SELECT
c.ProductionOrder,
'Final Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.IsFinalConfirmation = 'X'
UNION ALL
-- 9. Goods Receipt Posted
SELECT
o.ProductionOrder,
'Goods Receipt Posted' AS ActivityName,
TO_TIMESTAMP(mkpf.CPUDT || mkpf.CPUTM, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".MSEG mseg ON o.ProductionOrder = mseg.AUFNR
JOIN "[Your SAP Schema]".MKPF mkpf ON mseg.MBLNR = mkpf.MBLNR AND mseg.MJAHR = mkpf.MJAHR
WHERE mseg.BWART = '101'
UNION ALL
-- 10. Order Technically Completed
SELECT
o.ProductionOrder,
'Order Technically Completed' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0045' AND jcds.INACT != 'X'
UNION ALL
-- 11. Order Settlement Ran
SELECT
o.ProductionOrder,
'Order Settlement Ran' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0046' AND jcds.INACT != 'X'
UNION ALL
-- 12. Order Cancellation Set
SELECT
o.ProductionOrder,
'Order Cancellation Set' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTime, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0076' AND jcds.INACT != 'X'; Kroki
- Potwierdź dostępność danych SAP ECC PP dotyczących przetwarzania zleceń produkcyjnych, potwierdzeń, gospodarki zapasami i controllingu. Sprawdź, czy użytkownik ekstrakcji ma uprawnienia do odczytu wymaganych tabel aplikacji i uruchamiania własnych raportów ABAP.
- W ABAP Workbench, na przykład w transakcji SE38 lub SE80, utwórz dedykowany raport wykonywalny, np. [Nazwa własnego raportu]. Dodaj ekran wyboru z obowiązkowymi parametrami daty, takimi jak [Data początkowa] i [Data końcowa], oraz opcjonalnymi filtrami: [Kod spółki], [Zakład produkcyjny], [Typ zlecenia], [Materiał] i [Zlecenie produkcyjne].
- Odczytaj dane nagłówka zlecenia produkcyjnego i dane podstawowe z AUFK oraz tabel zleceń produkcyjnych skonfigurowanych w systemie SAP ECC. Użyj JCDS i odpowiedniej konfiguracji statusów, aby zidentyfikować jawne zmiany statusu, w tym CRTD, zwolnienie, techniczne zakończenie i statusy związane z anulowaniem. Nie zakładaj, że kod statusu oznacza zdarzenie, jeśli historia statusów nie zawiera zmiany z oznaczeniem czasu.
- Odczytaj wyniki kontroli dostępności materiałów z danych kontroli dostępności zlecenia produkcyjnego skonfigurowanych w systemie. Jeśli wynik kontroli nie jest zapisywany w tabeli, którą można wiarygodnie powiązać ze zleceniem i znacznikiem czasu, zaimplementuj skonfigurowane rozszerzenie SAP, dziennik aplikacji lub źródło audytowe zatwierdzone przez zespół SAP. Nie wnioskuj o przeprowadzeniu kontroli wyłącznie na podstawie utworzenia lub zwolnienia zlecenia.
- Odczytaj historię zmian zlecenia z skonfigurowanych obiektów dokumentów zmian zleceń produkcyjnych i powiązanych z nimi tabel dokumentów zmian. Pobieraj tylko istotne zmiany, takie jak ilość planowana, daty, BOM, marszruta lub inne pola zatwierdzone przez właściciela procesu. Jako EventTime użyj znacznika czasu dokumentu zmiany.
- Odczytaj księgowania wydania i przyjęcia materiałów ze skonfigurowanych w systemie danych dokumentów materiałowych gospodarki zapasami. Powiąż księgowania ze zleceniem produkcyjnym za pomocą odwołania do zlecenia dostępnego w danych dokumentu materiałowego. Klasyfikuj pobrania komponentów jako Goods Issue Posted, a przyjęcia wyrobów gotowych jako Goods Receipt Posted. Jeśli są dostępne, użyj daty i godziny księgowania.
- Odczytaj dane potwierdzeń ze skonfigurowanego źródła potwierdzeń produkcyjnych. Sortuj potwierdzenia według zlecenia produkcyjnego i znacznika czasu potwierdzenia. Dla pierwszego potwierdzenia utwórz zdarzenie First Confirmation Recorded, dla kwalifikujących się potwierdzeń pośrednich, które nie są końcowe, Intermediate Confirmation Recorded, a dla potwierdzenia jawnie oznaczonego jako końcowe lub wskazanego jako końcowe przez skonfigurowaną logikę zakończenia potwierdzeń, Final Confirmation Recorded. Nie uznawaj ostatniego wiersza zwróconego przez dowolne zapytanie za potwierdzenie końcowe.
- Odczytaj dane wykonania rozliczenia ze skonfigurowanego źródła rozliczeń controllingu. Utwórz zdarzenie Order Settlement Ran tylko wtedy, gdy rekord wykonania rozliczenia, dokument rozliczeniowy lub zatwierdzona historia statusów rozliczenia zawiera jawny znacznik czasu powiązany ze zleceniem produkcyjnym.
- Utwórz wewnętrzny wiersz zdarzenia dla każdej wyodrębnionej czynności. Wypełnij pola ProductionOrder, ActivityName, EventTime, SourceSystem, LastDataUpdate, ProductionPlant, ProductCode, PlannedQuantity, DeliveredQuantity, ActualStartDate i ActualEndDate. Stosuj spójną konwersję znaczników czasu i zachowaj strefę czasową systemu źródłowego. Jeśli istnieją odpowiednie zdarzenia, ustaw ActualStartDate na znacznik czasu pierwszego potwierdzenia, a ActualEndDate na znacznik czasu potwierdzenia końcowego.
- Sortuj wiersze zdarzeń według ProductionOrder i EventTime, a przy jednakowych znacznikach czasu stosuj deterministyczne sortowanie dodatkowe. Usuwaj wyłącznie dokładne duplikaty rekordów źródłowych, nie zaś prawidłowo powtarzające się zdarzenia. Sprawdź, czy schemat wynikowy obejmuje wszystkie dwanaście wymaganych nazw czynności i czy każdy wygenerowany wiersz zawiera identyfikator sprawy, nazwę czynności oraz znacznik czasu zdarzenia.
- Zapisz wynik w pliku na serwerze aplikacji, korzystając z zatwierdzonego interfejsu plikowego ABAP i skonfigurowanej ścieżki logicznej. Użyj separatora i kodowania tekstu uzgodnionych z konfiguracją pobierania danych przez ProcessMind. Dodaj wiersz nagłówka, ujmuj w cudzysłów wartości zawierające separatory i stosuj spójny format znaczników czasu, najlepiej YYYY-MM-DDThh:mm:ss.
- Pobierz plik zgodnie z zatwierdzoną procedurą transferu plików SAP, sprawdź go niezależnie i prześlij do ProcessMind jako dziennik zdarzeń. Ustaw ProductionOrder jako identyfikator sprawy, ActivityName jako czynność, a EventTime jako znacznik czasu zdarzenia. Potwierdź, że ProcessMind odczytuje wiersze bez zmian i nie ma wnioskować o brakujących czynnościach.
Konfiguracja
- Zakres dat: Na potrzeby wstępnej analizy użyj kroczącego okna ekstrakcji obejmującego od trzech do sześciu miesięcy. Rozszerz zakres dopiero po ocenie wydajności i ilości danych. Uwzględnij okres wsteczny, aby objąć zlecenia utworzone przed datą początkową, ale aktywne w analizowanym okresie.
- Filtry wyboru: Udostępnij filtry [Kod spółki], [Zakład produkcyjny], [Typ zlecenia], [Materiał], [Zlecenie produkcyjne], statusu zlecenia oraz daty utworzenia lub zmiany. Skonfiguruj dokładne pola zgodnie z wdrożeniem SAP ECC, ponieważ dostępność pól zlecenia produkcyjnego może się różnić w zależności od wersji i dostosowań.
- Zakres zdarzeń: Wyodrębnij wszystkie dwanaście wymaganych czynności jako jawne wiersze zdarzeń: Production Order Created, Material Availability Checked, Production Order Released, Order Data Changed, Goods Issue Posted, First Confirmation Recorded, Intermediate Confirmation Recorded, Final Confirmation Recorded, Goods Receipt Posted, Order Technically Completed, Order Settlement Ran i Order Cancellation Set.
- Zasady dotyczące znaczników czasu: W pierwszej kolejności używaj daty i godziny zdarzenia ze źródła. Jeśli dostępna jest tylko data, udokumentuj mniejszą precyzję i stosuj spójną, skonfigurowaną godzinę zamiast podawać zmyśloną dokładną godzinę. Przekonwertuj wszystkie znaczniki czasu na strefę czasową wymaganą przez ProcessMind.
- Obsługa statusów: W przypadku zdarzeń statusowych korzystaj z historii statusów zawierającej znaczniki czasu. Mapowanie wewnętrznych wartości statusów na czynności biznesowe skonfiguruj na podstawie ustawień statusów systemowych i po zatwierdzeniu przez właściciela procesu.
- Kontrole dostępności: Skonfiguruj zatwierdzone źródło danych o wykonaniu kontroli dostępności. Nie twórz wiersza Material Availability Checked na podstawie utworzenia lub zwolnienia zlecenia, rezerwacji ani pomyślnego wydania materiałów, chyba że zatwierdzone przez firmę źródło jawnie rejestruje tę kontrolę.
- Obsługa potwierdzeń: Skonfiguruj reguły rozróżniające pierwsze, pośrednie i końcowe potwierdzenia. Potwierdzenie można uznać za końcowe tylko wtedy, gdy źródło jawnie je tak oznacza albo skonfigurowana logika potwierdzeń SAP wskazuje zakończenie.
- Ilości: W miarę możliwości zachowaj źródłową jednostkę miary. Jeśli ilości są agregowane, udokumentuj, czy agregacja odbywa się według zlecenia, materiału, ruchu, potwierdzenia czy zdarzenia. DeliveredQuantity powinno oznaczać zaksięgowane przyjęcia wyrobów gotowych, a nie tylko potwierdzony uzysk, chyba że właściciel procesu zatwierdzi taką interpretację.
- LastDataUpdate: Wypełniaj to pole znacznikiem czasu uruchomienia ekstrakcji albo odświeżenia źródła. W każdym wierszu danego uruchomienia stosuj tę samą, udokumentowaną zasadę.
- Wydajność: Ogranicz zakres wyboru, pobieraj tylko wymagane pola, przetwarzaj dane w pakietach, filtruj po stronie bazy danych, unikaj zagnieżdżonych odczytów bazy w dużych pętlach, a indeksy twórz lub wykorzystuj wyłącznie po zatwierdzeniu przez administrację baz danych SAP. Jeśli zużycie pamięci stanowi problem, zapisuj wyniki stopniowo.
- Plik wynikowy: Skonfiguruj katalog serwera aplikacji, nazwę pliku logicznego, separator, kodowanie, format dziesiętny, format znaczników czasu i sposób zapisu nagłówka zgodnie ze specyfikacją przesyłania do ProcessMind. Nie umieszczaj danych uwierzytelniających w raporcie ani pliku wynikowym.
- Wymagania wstępne: Potwierdź, że odpowiednie funkcje SAP ECC PP, gospodarka zapasami, potwierdzenia, zarządzanie statusami zleceń produkcyjnych i dane rozliczeń controllingu są aktywne. Przed uruchomieniem należy przyznać wymagane uprawnienia, zatwierdzić prace programistyczne i transport, zapewnić dostęp do plików na serwerze aplikacji oraz dostęp do pobierania danych przez ProcessMind.
- Konfiguracja zależna od systemu: Nazwy tabel i pól, kody statusów, obiekty dokumentów zmian, źródła potwierdzeń, kontroli dostępności i rozliczeń należy potwierdzić w docelowym systemie SAP ECC. Jeśli wdrożenie nie udostępnia standardowego, wiarygodnego źródła, użyj [Skonfiguruj zgodnie z systemem].
Przykładowe zapytanie abap
REPORT [Your custom report name].
* This executable ABAP report is a complete extraction framework for the twelve required activities.
* Replace only the marked system-specific source sections, selection parameters, and file configuration.
* Confirm every table and field against the target SAP ECC system before activation.
PARAMETERS p_from TYPE sydatum OBLIGATORY.
PARAMETERS p_to TYPE sydatum OBLIGATORY.
PARAMETERS p_file TYPE string OBLIGATORY DEFAULT '[Application server file path]'.
PARAMETERS p_src TYPE string OBLIGATORY DEFAULT '[SAP ECC system identifier]'.
SELECT-OPTIONS s_werks FOR [Production plant field].
SELECT-OPTIONS s_aufnr FOR [Production order field].
SELECT-OPTIONS s_auart FOR [Production order type field].
SELECT-OPTIONS s_bukrs FOR [Company code field].
TYPES: BEGIN OF ty_event,
productionorder TYPE string,
activityname TYPE string,
eventtime TYPE string,
sourcesystem TYPE string,
lastdataupdate TYPE string,
productionplant TYPE string,
productcode TYPE string,
plannedquantity TYPE string,
deliveredquantity TYPE string,
actualstartdate TYPE string,
actualenddate TYPE string,
END OF ty_event.
DATA gt_events TYPE STANDARD TABLE OF ty_event WITH EMPTY KEY.
DATA gs_event TYPE ty_event.
DATA gv_update_timestamp TYPE string.
DATA gv_line TYPE string.
GET TIME STAMP FIELD DATA(gv_update_ts).
gv_update_timestamp = |{ gv_update_ts TIMESTAMP = ISO }|.
* Production Order Created
SELECT [Production order field], [Production plant field], [Product field], [Planned quantity field], [Creation date field], [Creation time field]
FROM [Production order header table]
INTO TABLE @DATA(lt_created)
WHERE [Creation date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks
AND [Production order type field] IN @s_auart
AND [Company code field] IN @s_bukrs.
LOOP AT lt_created ASSIGNING FIELD-SYMBOL(<created>).
CLEAR gs_event.
gs_event-productionorder = |{ <created>-[Production order field] }|.
gs_event-activityname = 'Production Order Created'.
gs_event-eventtime = |{ <created>-[Creation date field] } { <created>-[Creation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <created>-[Production plant field] }|.
gs_event-productcode = |{ <created>-[Product field] }|.
gs_event-plannedquantity = |{ <created>-[Planned quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Material Availability Checked
SELECT [Production order field], [Production plant field], [Product field], [Availability check date field], [Availability check time field]
FROM [Availability check source table]
INTO TABLE @DATA(lt_availability)
WHERE [Availability check date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_availability ASSIGNING FIELD-SYMBOL(<availability>).
CLEAR gs_event.
gs_event-productionorder = |{ <availability>-[Production order field] }|.
gs_event-activityname = 'Material Availability Checked'.
gs_event-eventtime = |{ <availability>-[Availability check date field] } { <availability>-[Availability check time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <availability>-[Production plant field] }|.
gs_event-productcode = |{ <availability>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Production Order Released
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field], [Planned quantity field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_released)
WHERE [Status field] = '[Released status code]'
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_released ASSIGNING FIELD-SYMBOL(<released>).
CLEAR gs_event.
gs_event-productionorder = |{ <released>-[Production order field] }|.
gs_event-activityname = 'Production Order Released'.
gs_event-eventtime = |{ <released>-[Status change date field] } { <released>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <released>-[Production plant field] }|.
gs_event-productcode = |{ <released>-[Product field] }|.
gs_event-plannedquantity = |{ <released>-[Planned quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Data Changed
SELECT [Production order field], [Change date field], [Change time field], [Production plant field], [Product field], [Changed field name]
FROM [Production order change document source table]
INTO TABLE @DATA(lt_changed)
WHERE [Change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Changed field name] IN ('[Planned quantity field]', '[Basic start date field]', '[Basic finish date field]', '[BOM field]', '[Routing field]').
LOOP AT lt_changed ASSIGNING FIELD-SYMBOL(<changed>).
CLEAR gs_event.
gs_event-productionorder = |{ <changed>-[Production order field] }|.
gs_event-activityname = 'Order Data Changed'.
gs_event-eventtime = |{ <changed>-[Change date field] } { <changed>-[Change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <changed>-[Production plant field] }|.
gs_event-productcode = |{ <changed>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Goods Issue Posted
SELECT [Production order field], [Posting date field], [Posting time field], [Production plant field], [Product field], [Quantity field]
FROM [Material document item source table]
INTO TABLE @DATA(lt_gi)
WHERE [Movement type field] IN ('[Goods issue movement type 1]', '[Goods issue movement type 2]')
AND [Posting date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_gi ASSIGNING FIELD-SYMBOL(<gi>).
CLEAR gs_event.
gs_event-productionorder = |{ <gi>-[Production order field] }|.
gs_event-activityname = 'Goods Issue Posted'.
gs_event-eventtime = |{ <gi>-[Posting date field] } { <gi>-[Posting time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <gi>-[Production plant field] }|.
gs_event-productcode = |{ <gi>-[Product field] }|.
gs_event-deliveredquantity = |{ <gi>-[Quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* First Confirmation Recorded
SELECT [Production order field], [Confirmation date field], [Confirmation time field], [Production plant field], [Product field], [Confirmed quantity field]
FROM [Production confirmation source table]
INTO TABLE @DATA(lt_confirmations)
WHERE [Confirmation date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
SORT lt_confirmations BY [Production order field] [Confirmation date field] [Confirmation time field].
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<confirmation>) GROUP BY <confirmation>-[Production order field] ASSIGNING FIELD-SYMBOL(<confirmation_group>).
LOOP AT GROUP <confirmation_group> ASSIGNING FIELD-SYMBOL(<first_confirmation>).
CLEAR gs_event.
gs_event-productionorder = |{ <first_confirmation>-[Production order field] }|.
gs_event-activityname = 'First Confirmation Recorded'.
gs_event-eventtime = |{ <first_confirmation>-[Confirmation date field] } { <first_confirmation>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <first_confirmation>-[Production plant field] }|.
gs_event-productcode = |{ <first_confirmation>-[Product field] }|.
gs_event-actualstartdate = gs_event-eventtime.
APPEND gs_event TO gt_events.
EXIT.
ENDLOOP.
ENDLOOP.
* Intermediate Confirmation Recorded
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<intermediate>) GROUP BY <intermediate>-[Production order field] ASSIGNING FIELD-SYMBOL(<intermediate_group>).
DATA(lv_intermediate_index) = 0.
DATA(lv_intermediate_count) = GROUP SIZE.
LOOP AT GROUP <intermediate_group> ASSIGNING FIELD-SYMBOL(<intermediate_row>).
lv_intermediate_index = lv_intermediate_index + 1.
IF lv_intermediate_index < lv_intermediate_count AND <intermediate_row>-[Final confirmation indicator field] <> '[Final confirmation value]'.
CLEAR gs_event.
gs_event-productionorder = |{ <intermediate_row>-[Production order field] }|.
gs_event-activityname = 'Intermediate Confirmation Recorded'.
gs_event-eventtime = |{ <intermediate_row>-[Confirmation date field] } { <intermediate_row>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <intermediate_row>-[Production plant field] }|.
gs_event-productcode = |{ <intermediate_row>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDIF.
ENDLOOP.
ENDLOOP.
* Final Confirmation Recorded
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<final>) WHERE [Final confirmation indicator field] = '[Final confirmation value]'.
CLEAR gs_event.
gs_event-productionorder = |{ <final>-[Production order field] }|.
gs_event-activityname = 'Final Confirmation Recorded'.
gs_event-eventtime = |{ <final>-[Confirmation date field] } { <final>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <final>-[Production plant field] }|.
gs_event-productcode = |{ <final>-[Product field] }|.
gs_event-actualenddate = gs_event-eventtime.
APPEND gs_event TO gt_events.
ENDLOOP.
* Goods Receipt Posted
SELECT [Production order field], [Posting date field], [Posting time field], [Production plant field], [Product field], [Quantity field]
FROM [Material document item source table]
INTO TABLE @DATA(lt_gr)
WHERE [Movement type field] IN ('[Goods receipt movement type 1]', '[Goods receipt movement type 2]')
AND [Posting date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_gr ASSIGNING FIELD-SYMBOL(<gr>).
CLEAR gs_event.
gs_event-productionorder = |{ <gr>-[Production order field] }|.
gs_event-activityname = 'Goods Receipt Posted'.
gs_event-eventtime = |{ <gr>-[Posting date field] } { <gr>-[Posting time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <gr>-[Production plant field] }|.
gs_event-productcode = |{ <gr>-[Product field] }|.
gs_event-deliveredquantity = |{ <gr>-[Quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Technically Completed
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_teco)
WHERE [Status field] = '[Technically completed status code]'
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_teco ASSIGNING FIELD-SYMBOL(<teco>).
CLEAR gs_event.
gs_event-productionorder = |{ <teco>-[Production order field] }|.
gs_event-activityname = 'Order Technically Completed'.
gs_event-eventtime = |{ <teco>-[Status change date field] } { <teco>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <teco>-[Production plant field] }|.
gs_event-productcode = |{ <teco>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Settlement Ran
SELECT [Production order field], [Settlement date field], [Settlement time field], [Production plant field], [Product field]
FROM [Order settlement source table]
INTO TABLE @DATA(lt_settlement)
WHERE [Settlement date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_settlement ASSIGNING FIELD-SYMBOL(<settlement>).
CLEAR gs_event.
gs_event-productionorder = |{ <settlement>-[Production order field] }|.
gs_event-activityname = 'Order Settlement Ran'.
gs_event-eventtime = |{ <settlement>-[Settlement date field] } { <settlement>-[Settlement time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <settlement>-[Production plant field] }|.
gs_event-productcode = |{ <settlement>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Cancellation Set
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_cancelled)
WHERE [Status field] IN ('[Cancellation status code]', '[Deletion status code]')
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_cancelled ASSIGNING FIELD-SYMBOL(<cancelled>).
CLEAR gs_event.
gs_event-productionorder = |{ <cancelled>-[Production order field] }|.
gs_event-activityname = 'Order Cancellation Set'.
gs_event-eventtime = |{ <cancelled>-[Status change date field] } { <cancelled>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <cancelled>-[Production plant field] }|.
gs_event-productcode = |{ <cancelled>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
SORT gt_events BY productionorder eventtime activityname.
DELETE ADJACENT DUPLICATES FROM gt_events COMPARING productionorder activityname eventtime productionplant productcode.
OPEN DATASET p_file FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'The application server output file could not be opened' TYPE 'E'.
ENDIF.
TRANSFER 'ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate,ProductionPlant,ProductCode,PlannedQuantity,DeliveredQuantity,ActualStartDate,ActualEndDate' TO p_file.
LOOP AT gt_events INTO gs_event.
gv_line = |{ gs_event-productionorder },{ gs_event-activityname },{ gs_event-eventtime },{ gs_event-sourcesystem },{ gs_event-lastdataupdate },{ gs_event-productionplant },{ gs_event-productcode },{ gs_event-plannedquantity },{ gs_event-deliveredquantity },{ gs_event-actualstartdate },{ gs_event-actualenddate }|.
TRANSFER gv_line TO p_file.
ENDLOOP.
CLOSE DATASET p_file.
MESSAGE |Event log written to { p_file }| TYPE 'S'. Jak zacząć?
Skorzystaj z tego szablonu, aby przygotować dane i rozpocząć optymalizację procesu planowania produkcji. Poznaj proces na podstawie danych i usprawnij operacje.
Usprawnij planowanie produkcji i zwiększ efektywność
Wykryj nieefektywności, skróć czas realizacji o 30% i osiągaj cele.
Nie trzeba podawać danych karty płatniczej. Zacznij usprawniać proces już dziś.