Szablon danych do planowania produkcji
Szablon danych do planowania produkcji
- Zalecane atrybuty do analizy planowania produkcji
- Najważniejsze działania w planowaniu produkcji do śledzenia
- Szczegółowe wskazówki dotyczące pobierania danych z SAP S/4HANA
Atrybuty planowania produkcji
| Nazwa | Opis | ||
|---|---|---|---|
| Czas rozpoczęcia StartTime | Znacznik czasu wskazujący, kiedy rozpoczęła się dana czynność lub zdarzenie. | ||
| Opis Ten atrybut zawiera datę i godzinę każdego zarejestrowanego zdarzenia w procesie produkcji. Stanowi podstawę wszystkich analiz procesu opartych na czasie. Czas rozpoczęcia jest niezbędny do obliczania odstępów między czynnościami, pomiaru całkowitego czasu cyklu zlecenia produkcyjnego i analizy momentu wystąpienia zdarzeń. Pozwala wykrywać wąskie gardła i czasy oczekiwania oraz oceniać zgodność z harmonogramem przez porównanie rzeczywistych znaczników czasu z planowanymi datami. Dlaczego to ważne Określa chronologię zdarzeń, umożliwiając analizę wyników procesu, czasu jego trwania i wąskich gardeł. Skąd pobrać Te dane znajdują się zwykle w tabelach dokumentów zmian (CDHDR/CDPOS) dla zmian statusu, tabelach potwierdzeń (AFRU) dla etapów realizacji oraz tabelach nagłówkowych (AFKO) dla dat utworzenia. Przykłady 2023-10-26T09:00:00Z2023-10-26T14:30:00Z2023-10-27T08:15:00Z | |||
| Czynność Activity | Nazwa konkretnego zdarzenia lub zadania, które wystąpiło w danym momencie procesu planowania produkcji. | ||
| Opis Ten atrybut rejestruje poszczególne etapy i kamienie milowe w cyklu życia zlecenia produkcyjnego. Przykłady: „Utworzono zlecenie produkcyjne”, „Sprawdzono dostępność materiałów”, „Rozpoczęto produkcję” i „Zlecenie rozliczono finansowo”. Każda czynność odpowiada konkretnemu działaniu lub zmianie statusu zapisanej w systemie. Analiza kolejności i częstotliwości tych czynności stanowi podstawę process mining. Pozwala zobrazować przebieg procesu, wykryć odstępstwa od standardowej procedury oraz wskazać czynności powodujące opóźnienia lub wymagające częstych poprawek, takie jak „Skorygowano plan produkcji”. Dlaczego to ważne Określa etapy procesu, dzięki czemu można odkryć i zobrazować rzeczywisty przebieg produkcji oraz jego warianty. Skąd pobrać Dane pochodzą ze zmian statusów w tabelach takich jak JEST i JCDS, użytych kodów transakcji (np. CO01 przy tworzeniu zlecenia) lub konkretnych rekordów potwierdzeń w AFRU. Przykłady Utworzono zlecenie produkcyjneZwolniono zlecenie produkcyjneRozpoczęto produkcjęWprowadzono potwierdzenie końcoweZaksięgowano przyjęcie wyrobu | |||
| Zlecenie produkcyjne ProductionOrder | Unikalny identyfikator zlecenia produkcyjnego, używany jako główny identyfikator sprawy w procesie planowania produkcji. | ||
| Opis Numer zlecenia produkcyjnego to unikalny klucz generowany przez SAP S/4HANA, który służy do zarządzania wszystkimi działaniami związanymi z wytworzeniem określonej ilości produktu i ich śledzenia. Łączy powiązane zdarzenia, od planowania i zwolnienia zlecenia po realizację i końcowe rozliczenie. W process mining ten atrybut pozwala grupować powiązane zdarzenia w jedną instancję procesu od początku do końca. Analiza według numeru zlecenia produkcyjnego umożliwia pomiar KPI, takich jak czas cyklu i zgodność z harmonogramem, a także wskazanie wąskich gardeł wpływających na konkretne serie produkcyjne. Dlaczego to ważne To podstawowy atrybut łączący wszystkie etapy procesu. Umożliwia analizę całego cyklu życia produkcji na poziomie sprawy, od początku do końca. Skąd pobrać Jest to numer zlecenia produkcyjnego, zwykle dostępny w tabelach SAP, takich jak AFKO (pole AUFNR) i AFPO. Przykłady 100056710008341001299 | |||
| Data ostatniej aktualizacji danych LastDataUpdate | Znacznik czasu wskazujący, kiedy dane zostały ostatnio odświeżone lub pobrane z systemu źródłowego. | ||
| Opis Ten atrybut zapisuje datę i godzinę ostatniego pobrania danych. To ważne metadane, które informują o aktualności analizowanych danych. Znajomość czasu ostatniej aktualizacji jest niezbędna do prawidłowej interpretacji analizy. Pozwala ustalić, czy wyświetlane są informacje bieżące, czy migawka danych z określonego momentu. Ma to wpływ na aktualność wniosków i decyzji podejmowanych na ich podstawie. Dlaczego to ważne Informuje o aktualności danych, co ma znaczenie przy podejmowaniu trafnych i adekwatnych decyzji biznesowych. Skąd pobrać Ten znacznik czasu jest generowany i dodawany podczas procesu pobierania, przekształcania i ładowania danych (ETL). Przykłady 2024-05-21T02:00:00Z2024-05-22T02:00:00Z2024-05-23T02:00:00Z | |||
| System źródłowy SourceSystem | System, z którego pobrano dane dotyczące planowania produkcji. | ||
| Opis Ten atrybut wskazuje źródło danych, co ma znaczenie w środowiskach z wieloma zintegrowanymi systemami. W tym procesie będzie to zwykle konkretna instancja SAP S/4HANA. W szerszym kontekście analizy danych znajomość systemu źródłowego pomaga zadbać o ich integralność i właściwie interpretować dane połączone z różnych źródeł. To podstawowe metadane potrzebne do zarządzania danymi i śledzenia ich pochodzenia. Dlaczego to ważne Dostarcza metadanych potrzebnych do zarządzania danymi i pozwala jasno określić pochodzenie oraz kontekst danych o procesie. Skąd pobrać Zwykle jest to stała wartość dodawana podczas pobierania danych, która identyfikuje klienta SAP S/4HANA i identyfikator systemu (SID). Przykłady S4P_100S4H_PRD_200S4Q_300 | |||
| Numer materiału MaterialNumber | Unikalny identyfikator produktu wytwarzanego w ramach zlecenia produkcyjnego. | ||
| Opis Numer materiału określa produkt, który ma powstać w ramach zlecenia produkcyjnego. Łączy proces produkcji z danymi podstawowymi materiału, w tym z jego zestawieniem materiałowym (BOM) i marszrutą. Analiza według numeru materiału pozwala sprawdzić, czy w przypadku niektórych produktów częściej występują opóźnienia, poprawki lub braki materiałowe. Ułatwia to usprawnianie procesu dla konkretnych produktów, na przykład przez zmianę parametrów planowania lub poprawę zaopatrzenia w określone komponenty. Dlaczego to ważne Umożliwia filtrowanie i analizę według wytwarzanego produktu, co pomaga wykryć nieefektywności i wąskie gardła dotyczące konkretnych produktów. Skąd pobrać Dane znajdują się w tabeli pozycji zlecenia produkcyjnego AFPO (pole MATNR). Przykłady RM-1001FG-2050SA-3100-B | |||
| Planowana data zakończenia PlannedEndDate | Planowana data zakończenia zlecenia produkcyjnego, określona w pierwotnym harmonogramie. | ||
| Opis Planowana data zakończenia to termin, do którego powinny zakończyć się wszystkie działania produkcyjne objęte zleceniem. Ustala się ją na etapie harmonogramowania produkcji. Ten atrybut jest niezbędny do pomiaru zgodności z harmonogramem. Porównanie planowanej daty zakończenia z rzeczywistym czasem zakończenia pozwala obliczyć KPI dotyczący realizacji harmonogramu produkcji i wskazać opóźnione zlecenia. Analiza ta pomaga poprawić dokładność planowania i zadowolenie klientów. Dlaczego to ważne Stanowi punkt odniesienia przy pomiarze zgodności z harmonogramem i pozwala ocenić dokładność planowania oraz sprawność realizacji. Skąd pobrać Dane znajdują się w tabeli nagłówkowej zlecenia produkcyjnego AFKO (pole GLTRP). Przykłady 2023-11-152023-12-012024-01-20 | |||
| Stanowisko robocze WorkCenter | Konkretna maszyna, grupa maszyn lub obszar montażowy odpowiedzialny za wykonanie operacji. | ||
| Opis Stanowisko robocze to jednostka operacyjna w zakładzie, w której wykonywany jest etap produkcji. Może to być pojedyncza maszyna, linia produkcyjna lub grupa pracowników. Analiza danych procesu według stanowiska roboczego pomaga wykrywać ograniczenia mocy produkcyjnych i lepiej przydzielać zasoby. Pozwala ustalić, które stanowiska są przeciążone lub niewykorzystane oraz gdzie najczęściej dochodzi do opóźnień podczas realizacji produkcji. Dane te są potrzebne do dashboardu „Identyfikacja wąskich gardeł mocy produkcyjnych”. Dlaczego to ważne Pomaga wskazać konkretne maszyny lub linie produkcyjne będące wąskimi gardłami, co umożliwia ukierunkowane usprawnienia w zakresie mocy produkcyjnych i wykorzystania zasobów. Skąd pobrać Dane znajdują się w danych operacji zlecenia produkcyjnego, w tabeli AFVC (pole ARBPL). Przykłady WC-ASSEMBLY-01WC-MILLING-05WC-PACKING | |||
| Status zlecenia OrderStatus | Bieżący status realizacji zlecenia produkcyjnego, na przykład utworzone, zwolnione lub technicznie zakończone. | ||
| Opis Status zlecenia określa jego ogólny etap w cyklu życia. Podsumowuje różne statusy systemowe i użytkownika przypisane do zlecenia. Typowe statusy to CRTD (utworzone), REL (zwolnione), CNF (potwierdzone), TECO (technicznie zakończone) i CLSD (zamknięte). Analiza bieżącego statusu zleceń pomaga zrozumieć stan prac w toku. W process mining śledzenie zmian tych statusów w czasie pozwala utworzyć dziennik czynności i szczegółowo przeanalizować przebieg procesu oraz czas spędzony na każdym etapie. Dlaczego to ważne Pokazuje ogólny etap cyklu życia zlecenia i stanowi podstawę do odtworzenia kolejności czynności na potrzeby process mining. Skąd pobrać Status pochodzi z tabeli JEST i jest powiązany z numerem obiektu w AFKO (pole OBJNR). Przykłady CRTDRELTECOCLSD | |||
| Zakład Plant | Zakład produkcyjny lub lokalizacja, w której realizowane jest zlecenie produkcyjne. | ||
| Opis Zakład to jednostka organizacyjna w SAP, która reprezentuje miejsce produkcji. Każde zlecenie produkcyjne jest przypisane do konkretnego zakładu, w którym odbywa się produkcja. Ten atrybut ma znaczenie przy porównywaniu różnych lokalizacji produkcyjnych. Podział danych o procesie według zakładu pozwala porównywać wyniki, wykrywać problemy i dobre praktyki charakterystyczne dla danej lokalizacji oraz analizować różnice regionalne w efektywności, zdolnościach produkcyjnych i przestrzeganiu standardów. Dlaczego to ważne Umożliwia porównanie wyników różnych zakładów produkcyjnych, co pomaga wskazać i upowszechniać dobre praktyki oraz rozwiązywać problemy charakterystyczne dla danej lokalizacji. Skąd pobrać Dane znajdują się w tabeli nagłówkowej zlecenia produkcyjnego AFKO (pole DWERK). Przykłady 100017102000 | |||
| Czas zakończenia EndTime | Znacznik czasu wskazujący, kiedy zakończyła się dana czynność lub zdarzenie. | ||
| Opis Ten atrybut zawiera datę i godzinę zakończenia każdego zarejestrowanego zdarzenia. W połączeniu z czasem rozpoczęcia pozwala określić czas trwania czynności. Czas zakończenia jest niezbędny do dokładnego obliczania czasu przetwarzania poszczególnych czynności. Dane te służą do analizy wykorzystania mocy produkcyjnych i zasobów. Pomagają odróżnić czas aktywnej pracy od przestojów i oczekiwania, co ułatwia dokładniejsze wykrywanie wąskich gardeł. Dlaczego to ważne Pozwala dokładnie obliczać czas trwania czynności, co jest niezbędne do analizy efektywności wykorzystania zasobów i wykrywania wąskich gardeł w procesie. Skąd pobrać Dla etapów realizacji dane znajdują się w tabelach potwierdzeń (AFRU). W przypadku innych zdarzeń czas zakończenia może być taki sam jak czas rozpoczęcia, jeśli zdarzenie jest chwilowe. Przykłady 2023-10-26T09:45:00Z2023-10-26T15:00:00Z2023-10-27T10:30:00Z | |||
| Czy wystąpiły poprawki IsRework | Flaga informująca, czy w ramach zlecenia produkcyjnego wykonywano poprawki lub istotnie zmieniano plan po rozpoczęciu produkcji. | ||
| Opis Ten atrybut logiczny służy do wskazywania zleceń produkcyjnych, w których po rozpoczęciu produkcji podjęto działania naprawcze lub zmieniono plan. Może go ustawić jawna czynność naprawcza albo zdarzenie „Skorygowano plan produkcji” występujące po zdarzeniu „Rozpoczęto produkcję”. Flaga jest potrzebna do obliczania KPI dotyczącego odsetka zleceń wymagających poprawek oraz do dashboardu „Poprawki i zmiany w produkcji”. Ułatwia filtrowanie i analizę problematycznych spraw, pomagając ustalić przyczyny problemów jakościowych lub odstępstw od procesu, które prowadzą do kosztownych poprawek. Dlaczego to ważne Pozwala wyodrębnić zlecenia wymagające poprawek i ukierunkować analizę na ograniczenie problemów jakościowych, odstępstw od procesu oraz związanych z nimi kosztów. Skąd pobrać Pole wyliczane. Przyjmuje wartość true, jeśli w ramach tej samej sprawy czynność „Skorygowano plan produkcji” wystąpi po czynności „Rozpoczęto produkcję” albo użyto określonego typu zlecenia naprawczego. Przykłady truefalse | |||
| Czy zlecenie zakończono terminowo IsOnTime | Flaga informująca, czy zlecenie produkcyjne zakończono w planowanym terminie lub wcześniej. | ||
| Opis Ten wyliczany atrybut logiczny mierzy zgodność z harmonogramem przez porównanie rzeczywistej daty zakończenia z planowaną datą zakończenia. Dla każdego zlecenia jasno wskazuje, czy zakończono je terminowo. Atrybut ten stanowi podstawę KPI dotyczącego realizacji harmonogramu produkcji. Ułatwia podział zleceń na zakończone terminowo i opóźnione, a także wskazywanie cech i ścieżek procesu często powiązanych z opóźnieniami. Dlaczego to ważne Zapewnia prostą i czytelną miarę zgodności z harmonogramem dla każdego zlecenia, ułatwiając analizę przyczyn opóźnień. Skąd pobrać Pole wyliczane. Przyjmuje wartość true, jeśli znacznik czasu czynności „Zlecenie technicznie zakończone” jest wcześniejszy niż planowana data zakończenia lub jej równy. Przykłady truefalse | |||
| Planowana data rozpoczęcia PlannedStartDate | Planowana data rozpoczęcia zlecenia produkcyjnego, określona w pierwotnym harmonogramie. | ||
| Opis Planowana data rozpoczęcia to termin, w którym powinny rozpocząć się działania produkcyjne objęte zleceniem. Jest jednym z wyników procesu harmonogramowania. Ten atrybut stanowi punkt odniesienia przy analizie zgodności z harmonogramem. Porównanie planowanej daty rozpoczęcia z rzeczywistym czasem rozpoczęcia pomaga wykryć opóźnienia na początkowych etapach, na przykład przy przygotowaniu materiałów lub zwolnieniu zlecenia. Mogą one wpłynąć na cały harmonogram produkcji. Dlaczego to ważne Stanowi punkt odniesienia przy ocenie terminowości rozpoczęcia i pomaga wykrywać opóźnienia na etapach poprzedzających produkcję, takich jak zwolnienie zlecenia i zapewnienie dostępności materiałów. Skąd pobrać Dane znajdują się w tabeli nagłówkowej zlecenia produkcyjnego AFKO (pole GSTRP). Przykłady 2023-11-102023-11-252024-01-15 | |||
| Potwierdzona ilość TotalConfirmedQuantity | Łączna ilość materiału, której wytworzenie potwierdzono dla zlecenia. | ||
| Opis Ten atrybut przedstawia łączną ilość wyrobów gotowych lub półproduktów zgłoszoną w potwierdzeniach produkcji. Pokazuje postęp realizacji zlecenia w stosunku do planowanej ilości. Porównanie potwierdzonej ilości z ilością planowaną pomaga monitorować postęp produkcji oraz wykrywać problemy z uzyskiem i rozbieżności. To podstawowa miara produkcji wykorzystywana w różnych obliczeniach wyników, między innymi przy ustalaniu poziomu braków i efektywności. Dlaczego to ważne Pokazuje rzeczywistą produkcję zrealizowaną w ramach zlecenia. Jest niezbędna do monitorowania postępu, obliczania uzysku i wykrywania rozbieżności. Skąd pobrać Wartość sumowana z rekordów potwierdzeń w AFRU (pole LMNGA, ilość uzysku). Przykłady 9801000501200 | |||
| Priorytet produkcji ProductionPriority | Kod lub wartość przypisana do zlecenia produkcyjnego, określająca jego pilność lub znaczenie. | ||
| Opis Planiści i osoby układające harmonogram wykorzystują priorytet produkcji do ustalania kolejności zleceń, zwłaszcza gdy zasoby są ograniczone. Zlecenia o wyższym priorytecie powinny być realizowane przed zleceniami o niższym priorytecie. Analiza tego atrybutu pozwala sprawdzić, czy przypisane priorytety są uwzględniane na hali produkcyjnej. Dashboard „Zgodność kolejności produkcji z priorytetami” porównuje kolejność realizacji z przypisanymi priorytetami i wskazuje rozbieżności. Dzięki temu można poprawić dyscyplinę harmonogramowania i lepiej powiązać planowanie z realizacją. Dlaczego to ważne Pomaga sprawdzić, czy harmonogram produkcji uwzględnia priorytety biznesowe i czy pilne zlecenia są przyspieszane zgodnie z założeniami. Skąd pobrać Często jest to pole niestandardowe lub wartość wyliczana na podstawie innych parametrów zlecenia. Konkretne miejsce przechowywania zależy od konfiguracji. Przykłady WysokiŚredniNiski15 | |||
| Status dostępności materiałów MaterialAvailabilityStatus | Informuje, czy dostępne są wszystkie materiały wymagane do realizacji zlecenia produkcyjnego. | ||
| Opis Ten status pokazuje wynik sprawdzenia dostępności materiałów dla zlecenia produkcyjnego. Może informować, że wszystkie materiały są dostępne, brakuje części z nich albo sprawdzenie nie zostało wykonane. Status „brak materiałów” może zapowiadać opóźnienia. Ten atrybut jest potrzebny do dashboardu „Analiza wpływu braków materiałowych”. Pozwala oszacować opóźnienia spowodowane niedostępnością materiałów przez powiązanie statusu braku z czasem między zwolnieniem zlecenia a rozpoczęciem produkcji. Poprawa tego wskaźnika pomaga usprawnić przebieg produkcji. Dlaczego to ważne Bezpośrednio wyjaśnia opóźnienia między zwolnieniem zlecenia a rozpoczęciem produkcji i pomaga oszacować wpływ problemów z zaopatrzeniem na produkcję. Skąd pobrać Jest to status, często wyliczany na podstawie łącznego statusu komponentów materiałowych. Można go znaleźć w statusach systemowych w tabeli JEST, na przykład jako „MSPT” (brak materiałów). Przykłady DostępneBrak materiałówNie sprawdzono | |||
| Typ zlecenia OrderType | Klasyfikacja zlecenia produkcyjnego, która określa jego przeznaczenie i sposób obsługi. | ||
| Opis Typ zlecenia to element konfiguracji SAP PP, który określa sposób obsługi zlecenia produkcyjnego w systemie. Decyduje o zakresach numeracji, wyborze danych podstawowych, parametrach kalkulacji kosztów i regułach rozliczania. Przykłady to standardowe zlecenia produkcyjne, zlecenia naprawcze i zlecenia prototypowe. Analiza procesu według typu zlecenia pozwala porównywać wyniki i przebieg różnych rodzajów produkcji. Może wykazać, czy zlecenia naprawcze trwają znacznie dłużej albo czy określone typy częściej wymagają korekt planu. Takie informacje pomagają ukierunkować działania usprawniające proces. Dlaczego to ważne Pozwala podzielić analizę według celu biznesowego zlecenia i porównać produkcję standardową, naprawy oraz inne rodzaje procesów. Skąd pobrać Dane znajdują się w tabeli nagłówkowej zlecenia produkcyjnego AFKO (pole AUART). Przykłady PP01PP03ZP01 | |||
| Użytkownik User | Identyfikator systemowy użytkownika, który utworzył, zmienił lub potwierdził zdarzenie dotyczące zlecenia produkcyjnego. | ||
| Opis Ten atrybut zawiera identyfikator użytkownika SAP powiązanego z konkretną transakcją lub zmianą statusu, na przykład zwolnieniem zlecenia albo wprowadzeniem potwierdzenia. Umożliwia śledzenie działań wykonanych w systemie. Analiza czynności według użytkownika pomaga ocenić rozkład obciążenia pracą, określić potrzeby szkoleniowe i sprawdzić zgodność z procedurami. Może na przykład wykazać, czy niektórzy użytkownicy często zmieniają plany albo czy opóźnienia dotyczą konkretnych zespołów. Dlaczego to ważne Pozwala przypisać odpowiedzialność oraz analizować obciążenie pracą, działania poszczególnych użytkowników i potrzeby szkoleniowe. Skąd pobrać Dane znajdują się zwykle w nagłówkach dokumentów zmian (CDHDR, pole UNAME) lub rekordach potwierdzeń (AFRU, pole PERNR z numerem pracownika). Przykłady CB9980000021JSMITHPLANNER01 | |||
Działania w planowaniu produkcji
| Działanie | Opis | ||
|---|---|---|---|
| Rozpoczęto produkcję | Oznacza rozpoczęcie fizycznych prac produkcyjnych w ramach zlecenia. Zdarzenie zazwyczaj można wywnioskować z pierwszego potwierdzenia z hali produkcyjnej lub pierwszego pobrania komponentów dla zlecenia. | ||
| Dlaczego to ważne Ta czynność oznacza przejście od planowania do realizacji. Jest niezbędna do oceny zgodności z harmonogramem przez porównanie rzeczywistej daty rozpoczęcia z datą planowaną. Skąd pobrać Jest to zdarzenie wywnioskowane. Zazwyczaj ustala się je na podstawie najwcześniejszego znacznika czasu księgowania ruchu materiałowego (tabela MSEG, typ ruchu 261) lub potwierdzenia czasu (tabela AFRU) powiązanego ze zleceniem. Rejestrowanie Najwcześniejszy znacznik czasu z AFRU (potwierdzenia) lub MSEG (ruchy materiałowe) dla zlecenia. Typ zdarzenia inferred | |||
| Utworzono zlecenie produkcyjne | Zlecenie produkcyjne zostaje utworzone w systemie jako formalne polecenie wyprodukowania określonej ilości produktu. Zdarzenie jest rejestrowane, gdy użytkownik zapisuje nowe zlecenie, nadając mu początkowy status CRTD (Created). | ||
| Dlaczego to ważne To początek cyklu życia zlecenia produkcyjnego. Analiza czasu od utworzenia do zwolnienia pomaga wykryć opóźnienia administracyjne lub planistyczne, zanim produkcja zostanie formalnie zaplanowana. Skąd pobrać Zdarzenie jest rejestrowane w tabeli AUFK (dane podstawowe zlecenia) wraz z datą utworzenia (ERDAT). Status utworzenia (CRTD) jest zapisywany w tabelach JEST i JCDS, powiązanych z numerem obiektu zlecenia (OBJNR). Rejestrowanie Znacznik czasu z AUFK-ERDAT lub dziennika zmian statusu na „CRTD” w JCDS. Typ zdarzenia explicit | |||
| Wprowadzono potwierdzenie końcowe | Ta czynność oznacza potwierdzenie ostatniej operacji w marszrucie zlecenia produkcyjnego. Wskazuje, że wszystkie zaplanowane etapy produkcji zostały zakończone na hali. | ||
| Dlaczego to ważne Potwierdzenie końcowe to ważny etap oznaczający zakończenie fizycznych prac produkcyjnych. Często służy jako dokładniejszy punkt końcowy pomiaru czasu cyklu na hali, przed przyjęciem wyrobu do magazynu. Skąd pobrać Zdarzenie można wywnioskować z danych potwierdzeń w tabeli AFRU. Jest to rekord potwierdzenia ostatniej sekwencji operacji (AFVC-VPLNR), w którym ustawiono wskaźnik potwierdzenia końcowego (AFRUD-AUERU). Rejestrowanie Znajdź w AFRU potwierdzenie ostatniej operacji z ustawionym wskaźnikiem potwierdzenia końcowego. Typ zdarzenia inferred | |||
| Zaksięgowano przyjęcie wyrobu | To zdarzenie rejestruje przyjęcie gotowego produktu z linii produkcyjnej do zapasów. Formalnie zwiększa stan magazynowy wyprodukowanego materiału. | ||
| Dlaczego to ważne To ważny etap oznaczający zakończenie produkcji. Często uznaje się go za koniec cyklu produkcyjnego przy pomiarze terminowości dostaw i całkowitego czasu realizacji. Skąd pobrać To jawne księgowanie finansowe rejestrowane w tabelach dokumentów materiałowych MSEG (poziom pozycji) i MKPF (poziom nagłówka), zazwyczaj z typem ruchu 101. Dokumenty te są powiązane ze zleceniem produkcyjnym. Rejestrowanie Znajdź w MSEG dokument materiałowy powiązany ze zleceniem, z typem ruchu 101. Typ zdarzenia explicit | |||
| Zlecenie technicznie zakończone | To administracyjny etap zamknięcia, który uniemożliwia dalsze zmiany logistyczne w zleceniu, takie jak ruchy materiałowe lub potwierdzenia. Z punktu widzenia logistyki zlecenie uznaje się za zakończone. | ||
| Dlaczego to ważne Status TECO oznacza definitywny koniec procesu produkcyjnego i jest niezbędny do obliczenia całkowitego czasu cyklu zlecenia. Wskazuje, że wszystkie działania logistyczne zostały zakończone, a zlecenie można rozliczyć finansowo. Skąd pobrać Zdarzenie jest wywoływane przez użytkownika, który ustawia status TECO (Technically Completed). Zmiana statusu wraz ze znacznikiem czasu jest rejestrowana w tabeli JCDS. Rejestrowanie Znacznik czasu zmiany statusu na „TECO” w tabeli JCDS. Typ zdarzenia inferred | |||
| Zmieniono plan produkcji | Oznacza istotną zmianę zlecenia produkcyjnego po jego zwolnieniu, na przykład zmianę ilości, terminów lub zestawienia materiałowego. Zdarzenie wykrywa się na podstawie analizy dokumentów zmian. | ||
| Dlaczego to ważne Częste zmiany mogą świadczyć o niestabilnym planowaniu lub zmiennym popycie. Ta czynność stanowi podstawę KPI dotyczącego częstotliwości zmian planu produkcji i pomaga wykrywać źródła zmienności procesu. Skąd pobrać Zdarzenie można wywnioskować z dzienników zmian zapisanych w tabelach CDHDR (nagłówek dokumentu zmiany) i CDPOS (pozycje dokumentu zmiany) dla obiektu zlecenia produkcyjnego (AUFK lub AFPO). Zmiany wprowadzone po dacie zwolnienia uznaje się za korekty. Rejestrowanie Wykryj zmiany kluczowych pól, na przykład ilości i terminów, w CDHDR/CDPOS po zwolnieniu zlecenia. Typ zdarzenia inferred | |||
| Zwolniono zlecenie produkcyjne | To ważny etap, na którym zlecenie produkcyjne zostaje zatwierdzone i udostępnione do realizacji na hali produkcyjnej. Zwolnienie umożliwia rozpoczęcie pobierania materiałów, potwierdzania operacji i innych czynności związanych z realizacją. | ||
| Dlaczego to ważne To zdarzenie oznacza formalne rozpoczęcie realizacji zlecenia i jest ważnym punktem pomiaru czasu realizacji. Czas od utworzenia do zwolnienia to istotny KPI efektywności przygotowania produkcji. Skąd pobrać Zwolnienie jest uruchamiane przez użytkownika lub zadanie systemowe, co powoduje nadanie statusu REL. Zmiana statusu wraz ze znacznikiem czasu jest zapisywana w tabeli JCDS. Data zwolnienia jest często przechowywana również w AFKO-FTRMI. Rejestrowanie Znacznik czasu zmiany statusu na „REL” w tabeli JCDS. Typ zdarzenia inferred | |||
| Anulowano zlecenie produkcyjne | Oznacza anulowanie zlecenia produkcyjnego przed jego zakończeniem. Jest to alternatywny, nieudany koniec procesu. | ||
| Dlaczego to ważne Analiza anulowanych zleceń może ujawnić problemy z planowaniem popytu, danymi podstawowymi lub procesem sprzedaży. Wysoki odsetek anulowań może wskazywać na problemy systemowe, które wymagają rozwiązania. Skąd pobrać Zdarzenie można wywnioskować z ustawienia statusu systemowego CACL (Cancellation) w tabeli JCDS. Anulowanie może również oznaczać flaga usunięcia (AUFK-LOEKZ). Rejestrowanie Znacznik czasu zmiany statusu na „CACL” w JCDS lub ustawienia flagi usunięcia w AUFK. Typ zdarzenia inferred | |||
| Sprawdzono dostępność materiałów | Oznacza sprawdzenie przez system lub użytkownika, czy wszystkie wymagane komponenty są dostępne w odpowiedniej ilości i na czas. Zwykle jest to automatyczna kontrola przy utworzeniu lub zwolnieniu zlecenia albo kontrola ręczna, która aktualizuje jego status. | ||
| Dlaczego to ważne Wczesne wykrycie braków materiałów ma zasadnicze znaczenie dla planowania z wyprzedzeniem. Śledzenie tej czynności pomaga ocenić, jak dostępność materiałów wpływa na możliwość zwolnienia zleceń i terminowego rozpoczęcia produkcji. Skąd pobrać Zdarzenie można wywnioskować ze statusu zlecenia. Status MACM (Material committed) lub zmiana daty dostępności materiałów (AFKO-MSERF) wskazuje, że przeprowadzono kontrolę. Dostępność można również wywnioskować z braku statusu niedoboru materiałów (MSPT). Rejestrowanie Zdarzenie można wywnioskować ze zmian statusu związanych z rezerwacją materiałów lub z wykonania transakcji COMAC. Typ zdarzenia inferred | |||
| Wprowadzono potwierdzenie produkcji | Oznacza zarejestrowanie postępu konkretnej operacji w ramach zlecenia produkcyjnego. Obejmuje zapisanie wyprodukowanej ilości, braków i czasu pracy w gnieździe roboczym. | ||
| Dlaczego to ważne Potwierdzenia zapewniają bieżący wgląd w postęp prac na hali produkcyjnej i są niezbędne do śledzenia statusu produkcji. Analiza ich częstotliwości i czasu pomaga monitorować przepływ oraz wykrywać opóźnienia między operacjami. Skąd pobrać Każde potwierdzenie jest jawnie rejestrowane w tabeli AFRU (potwierdzenia wykonania zlecenia) wraz ze znacznikiem czasu (BUDAT, UZEIT) i szczegółami operacji. Rejestrowanie Zapisane jako dokument w tabeli AFRU. Typ zdarzenia explicit | |||
| Wystąpił brak materiałów | To zdarzenie oznacza, że brak co najmniej jednego wymaganego komponentu wpłynął na produkcję lub ją zatrzymał. System ustawia odpowiedni status zlecenia. | ||
| Dlaczego to ważne Śledzenie braków materiałów jest niezbędne do analizy ich wpływu na produkcję. Pomaga określić opóźnienia spowodowane problemami w łańcuchu dostaw i usprawnić planowanie materiałów. Skąd pobrać Zdarzenie można wywnioskować z aktywacji statusu „MSPT” (Material shortage) dla zlecenia produkcyjnego. Znacznik czasu zmiany statusu znajduje się w tabeli JCDS. Rejestrowanie Znacznik czasu zmiany statusu na „MSPT” w tabeli JCDS. Typ zdarzenia inferred | |||
| Wystąpił nieplanowany przestój | To obliczane zdarzenie oznacza dłuższy przestój podczas realizacji produkcji. Nie jest rejestrowane bezpośrednio przez system. Wykrywa się je na podstawie długich przerw między kolejnymi potwierdzeniami produkcji. | ||
| Dlaczego to ważne Pomaga monitorować nieplanowane zakłócenia, takie jak awarie maszyn lub problemy z jakością. Wykrywanie częstych lub długich przestojów jest ważne dla stabilności pracy na hali i zwiększenia przepustowości. Skąd pobrać Zdarzenie oblicza się na podstawie znaczników czasu kolejnych działań „Wprowadzono potwierdzenie produkcji” z tabeli AFRU. Przerwę dłuższą niż ustalony próg oznacza się jako nieplanowany przestój. Rejestrowanie Oblicz różnicę czasu między kolejnymi znacznikami czasu potwierdzeń (AFRU-BUDAT/UZEIT). Typ zdarzenia calculated | |||
| Zaplanowano zapotrzebowanie na zdolności produkcyjne | Czynność obejmuje zaplanowanie operacji zlecenia produkcyjnego i sprawdzenie dostępności zdolności produkcyjnych w wymaganych gniazdach roboczych. System ocenia obciążenie gniazd, a jeśli skonfigurowano odpowiednie ustawienia, wyrównuje je i ustala terminy produkcji. | ||
| Dlaczego to ważne Ten etap pozwala sprawdzić, czy harmonogram produkcji jest wykonalny. Analiza czasu jego trwania i wyników pomaga wykryć ograniczenia zdolności produkcyjnych i dokładniej planować zasoby. Skąd pobrać Zdarzenie zazwyczaj można wywnioskować ze statusu systemowego wskazującego, że zlecenie zostało zaplanowane, na przykład SETC (Scheduling carried out). O zakończeniu czynności świadczy również uzupełnienie planowanych dat rozpoczęcia i zakończenia (AUFK-GSTRP, AUFK-GLTRP). Rejestrowanie Zdarzenie można wywnioskować z uzupełnienia planowanych dat w AUFK/AFKO lub statusu związanego z harmonogramowaniem w JEST. Typ zdarzenia inferred | |||
| Zlecenie zamknięte finansowo | Ostatni etap zamknięcia, w którym zlecenie zostaje rozliczone i nie można już dokonywać kolejnych księgowań finansowych. Oznacza to koniec cyklu życia zlecenia z punktu widzenia kontrolingu i księgowości. | ||
| Dlaczego to ważne Choć ta czynność często wykracza poza zakres samej analizy produkcji, zapewnia pełny obraz procesu. Pozwala analizować czas między zakończeniem działań logistycznych (TECO) a zamknięciem finansowym. Skąd pobrać Zdarzenie jest wywoływane przez użytkownika, który ustawia status CLSD (Closed). Zmiana statusu wraz ze znacznikiem czasu jest rejestrowana w tabeli JCDS. Rejestrowanie Znacznik czasu zmiany statusu na „CLSD” w tabeli JCDS. Typ zdarzenia inferred | |||
Instrukcje pobierania danych
Kroki
- Weryfikacja wymagań wstępnych: Należy mieć konto użytkownika w SAP S/4HANA z odpowiednimi uprawnieniami do wymaganych widoków Core Data Services (CDS). Są to widoki
I_ProductionOrder,I_ProdOrdConfirmation,I_MaterialDocumentItem,I_ObjectStatusiI_ChangeDocument. Potrzebne jest również środowisko do wykonywania zapytań SQL połączone z bazą SAP HANA, na przykład SAP HANA Studio, DBeaver lub zewnętrzne narzędzie ETL. - Ustalenie szczegółów systemu: Zapiszcie identyfikator systemu źródłowego, który zostanie użyty w atrybucie
SourceSystem. To zdefiniowana przez Państwa nazwa wskazująca źródło danych, na przykładS4H_PROD. - Ustawienie parametrów pobierania: Przed uruchomieniem zapytania określcie najważniejsze parametry, w tym daty początkową i końcową okresu pobierania oraz filtry, takie jak
PlantlubProductionOrderType, które ograniczą zakres danych. - Przygotowanie zapytania SQL: Skopiujcie całe zapytanie SQL z sekcji
querydo wybranego klienta SQL lub narzędzia do pobierania danych. - Uzupełnienie wartości zastępczych: Zastąpcie wartości zastępcze w zapytaniu własnymi parametrami. Dotyczy to
_StartDate,_EndDatei identyfikatora systemu źródłowego. Dostosujcie próg dla zdarzeniaUnplanned Halt Occurred(np.'24:00:00') do specyfiki działalności. - Uruchomienie zapytania pobierającego dane: Uruchomcie skonfigurowany skrypt SQL na bazie systemu SAP S/4HANA. W przypadku dużych zbiorów obejmujących długi okres warto pobierać dane mniejszymi partiami, na przykład miesiąc po miesiącu, aby uniknąć problemów z wydajnością.
- Wstępny przegląd danych: Po zakończeniu zapytania sprawdźcie pobrane wyniki. Skontrolujcie liczbę wierszy, obecność wszystkich kolumn oraz to, czy kolumna
Activityzawiera różne oczekiwane zdarzenia. - Weryfikacja danych: Wykonajcie dokładniejszą kontrolę zgodnie z instrukcjami w sekcji
validationSteps. Porównajcie kilka zleceń produkcyjnych z ich danymi w systemie SAP, korzystając z transakcjiCO03, aby potwierdzić poprawność wyodrębnionego dziennika zdarzeń. - Eksport do CSV: Wyeksportujcie końcowy zestaw wyników do pliku CSV. Ustawcie kodowanie UTF-8, aby uniknąć problemów z wyświetlaniem znaków.
- Przygotowanie do przesłania: Sprawdźcie, czy nagłówki kolumn w pliku CSV odpowiadają wymaganym nazwom atrybutów:
ProductionOrder,Activity,StartTime,SourceSystemiLastDataUpdate. Przed przesłaniem upewnijcie się, że kolumnaStartTimezawiera znaczniki czasu w standardowym formacie, na przykład ISO 8601 (YYYY-MM-DDTHH:MM:SS).
Konfiguracja
- Podstawowe widoki CDS: Pobieranie danych opiera się głównie na standardowych widokach CDS, które przedstawiają tabele SAP w uporządkowany sposób z perspektywy biznesowej. Najważniejsze widoki to:
I_ProductionOrder: dane nagłówka i zdarzenia utworzenia zlecenia.I_ProdOrdConfirmation: potwierdzenia wszystkich operacji.I_MaterialDocumentItem: ruchy materiałowe, takie jak wydania i przyjęcia.I_ObjectStatus: zmiany statusu zlecenia produkcyjnego.I_ChangeDocumenti powiązane widoki: zmiany najważniejszych pól zlecenia.
- Filtrowanie według zakresu dat: Aby kontrolować ilość danych, należy zastosować filtr zakresu dat. W podanym zapytaniu użyto daty utworzenia zlecenia produkcyjnego (
CreationDate). Do wstępnej analizy zwykle wystarcza zakres od 3 do 6 miesięcy. - Najważniejsze filtry biznesowe: Zbiór danych można dodatkowo zawęzić za pomocą atrybutów organizacyjnych lub danych podstawowych. Często stosowane filtry to:
Plant: analiza wybranego zakładu produkcyjnego.ProductionOrderType: analiza zleceń produkcji standardowej, przeróbek lub innych typów.CompanyCode: ograniczenie danych do wybranej jednostki prawnej.
- Próg nieplanowanego przestoju: Zapytanie zawiera logikę wykrywania zdarzeń
Unplanned Halt Occurred. Wymaga ona określenia progu czasowego, który wyznacza istotną przerwę między operacjami. Wartość należy ustalić na podstawie typowego czasu cyklu produkcyjnego i zasad obowiązujących w firmie. - Wymagane uprawnienia: Użytkownik SAP uruchamiający zapytanie musi mieć uprawnienia do wyświetlania wszystkich widoków CDS i powiązanych z nimi tabel. Brak uprawnień może spowodować zwrócenie pustego lub niepełnego zestawu wyników.
Przykładowe zapytanie sql
WITH BaseOrders AS (
SELECT
ProductionOrder,
Material AS MaterialNumber,
ProductionPlant AS Plant,
CreationDate,
CreationTime,
BasicEndDate AS PlannedEndDate,
TechnicalCompletionDate,
LastChangeDateTime
FROM I_ProductionOrder
-- P_CreationDateFrom and P_CreationDateTo are placeholders for your date range
WHERE CreationDate BETWEEN '[_StartDate]' AND '[_EndDate]'
-- Add other filters as needed, for example:
-- AND ProductionPlant IN ('[Your_Plant_1]', '[Your_Plant_2]')
-- AND ProductionOrderType = '[Your_Order_Type]'
)
SELECT
bo.ProductionOrder,
'Production Order Created' AS Activity,
TO_TIMESTAMP(bo.CreationDate || ' ' || LPAD(bo.CreationTime, 6, '0'), 'YYYYMMDD HH24MISS') AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
'CRTD' AS OrderStatus
FROM BaseOrders bo
UNION ALL
-- System status changes like Released, Technically Completed, Closed, Cancelled, Material Shortage
SELECT
os.ObjectInternalID AS ProductionOrder,
CASE os.SystemStatus
WHEN 'I0002' THEN 'Production Order Released'
WHEN 'I0043' THEN 'Material Availability Checked' -- Status: MACM (Material committed)
WHEN 'I0045' THEN 'Order Technically Completed'
WHEN 'I0046' THEN 'Order Financially Closed'
WHEN 'I0047' THEN 'Production Order Cancelled'
WHEN 'I0010' THEN 'Material Shortage Occurred' -- Status: MSPT (Material shortage)
END AS Activity,
os.StatusChangeDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
os.SystemStatus AS OrderStatus
FROM I_ObjectStatus AS os
JOIN BaseOrders AS bo ON os.ObjectInternalID = bo.ProductionOrder
WHERE os.SystemStatus IN ('I0002', 'I0043', 'I0045', 'I0046', 'I0047', 'I0010') AND os.StatusIsInactive = ''
UNION ALL
-- Production Started, inferred from the first goods issue or first confirmation
SELECT
s.ProductionOrder,
'Production Started' AS Activity,
s.StartEventTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
s.MaterialNumber,
s.Plant,
NULL AS WorkCenter,
s.PlannedEndDate,
NULL AS OrderStatus
FROM (
SELECT
bo.ProductionOrder,
bo.MaterialNumber,
bo.Plant,
bo.PlannedEndDate,
MIN(COALESCE(gm.PostingTime, cf.ConfirmationDateTime)) AS StartEventTime,
ROW_NUMBER() OVER(PARTITION BY bo.ProductionOrder ORDER BY MIN(COALESCE(gm.PostingTime, cf.ConfirmationDateTime))) as rn
FROM BaseOrders bo
LEFT JOIN I_MaterialDocumentItem gm ON bo.ProductionOrder = gm.ProductionOrder AND gm.GoodsMovementType IN ('261', '262') -- Goods Issue
LEFT JOIN I_ProdOrdConfirmation cf ON bo.ProductionOrder = cf.ProductionOrder
WHERE gm.ProductionOrder IS NOT NULL OR cf.ProductionOrder IS NOT NULL
GROUP BY bo.ProductionOrder, bo.MaterialNumber, bo.Plant, bo.PlannedEndDate
) s
WHERE s.rn = 1
UNION ALL
-- Production Confirmation Entered (for each confirmation)
SELECT
cf.ProductionOrder,
'Production Confirmation Entered' AS Activity,
cf.ConfirmationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
cf.WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
UNION ALL
-- Final Confirmation Entered
SELECT
cf.ProductionOrder,
'Final Confirmation Entered' AS Activity,
cf.ConfirmationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
cf.WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
WHERE cf.IsFinalConfirmation = 'X'
UNION ALL
-- Unplanned Halt Occurred (derived from gaps between confirmations)
SELECT
ProductionOrder,
'Unplanned Halt Occurred' AS Activity,
PreviousConfirmationTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
MaterialNumber,
Plant,
WorkCenter,
PlannedEndDate,
NULL AS OrderStatus
FROM (
SELECT
cf.ProductionOrder,
bo.MaterialNumber,
bo.Plant,
bo.PlannedEndDate,
cf.WorkCenter,
cf.ConfirmationDateTime,
LAG(cf.ConfirmationDateTime, 1) OVER (PARTITION BY cf.ProductionOrder ORDER BY cf.ConfirmationDateTime) AS PreviousConfirmationTime,
(SECONDS_BETWEEN(LAG(cf.ConfirmationDateTime, 1) OVER (PARTITION BY cf.ProductionOrder ORDER BY cf.ConfirmationDateTime), cf.ConfirmationDateTime) / 3600.0) as HoursDiff
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
) AS gaps
WHERE gaps.HoursDiff > 24 -- Configurable threshold in hours, e.g. 24 hours
UNION ALL
-- Goods Receipt Posted
SELECT
gm.ProductionOrder,
'Goods Receipt Posted' AS Activity,
gm.PostingTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_MaterialDocumentItem gm
JOIN BaseOrders bo ON gm.ProductionOrder = bo.ProductionOrder
WHERE gm.GoodsMovementType = '101'
UNION ALL
-- Capacity Requirements Planned (using Release event as a proxy)
SELECT
os.ObjectInternalID AS ProductionOrder,
'Capacity Requirements Planned' AS Activity,
os.StatusChangeDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
os.SystemStatus AS OrderStatus
FROM I_ObjectStatus AS os
JOIN BaseOrders AS bo ON os.ObjectInternalID = bo.ProductionOrder
WHERE os.SystemStatus = 'I0002' AND os.StatusIsInactive = '' -- Status 'REL' (Released)
UNION ALL
-- Production Plan Adjusted
SELECT
ch.ObjectValue AS ProductionOrder,
'Production Plan Adjusted' AS Activity,
ch.CreationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL as WorkCenter,
bo.PlannedEndDate,
NULL as OrderStatus
FROM I_ChangeDocument AS ch
JOIN BaseOrders bo ON ch.ObjectValue = bo.ProductionOrder
WHERE ch.ChangeDocumentObject = 'PRODORDER'
-- Monitoring changes in key fields like Total Quantity (GAMNG) or Basic Finish Date (GLTRP)
AND ch.FieldName IN ('GAMNG', 'GLTRP')
GROUP BY ch.ObjectValue, ch.CreationDateTime, bo.MaterialNumber, bo.Plant, bo.PlannedEndDate Kroki
- Potwierdźcie, że dostępny jest bezpośredni dostęp do odczytu schematu SAP HANA zawierającego dane zleceń produkcyjnych. Ustalcie właściciela schematu, sposób obsługi klienta, format znaczników czasu i model uprawnień. Użyjcie SAP HANA Database Explorer lub zatwierdzonego klienta SQL. Przed przygotowaniem zapytania sprawdźcie wersję SAP S/4HANA i aktywowany zakres planowania produkcji.
- Skonfigurujcie parametry połączenia, dane logowania, nazwę schematu, wartość klienta, daty początkową i końcową pobierania oraz filtry dotyczące firmy. Zapytanie korzysta z tabel AUFK, AFPO, JEST i JCDS, a także odwołuje się do AFKO, AFVC, AFRU, RESB, MSEG, CDHDR i CDPOS. Przed uruchomieniem sprawdźcie dostępność tych obiektów i definicje ich pól w swoim systemie. Mogą występować rozszerzenia, widoki zgodności oraz różnice między wersjami.
- Uruchomcie zapytanie w SAP HANA Database Explorer lub zatwierdzonym narzędziu do wykonywania zapytań SQL. Tworzy ono osobny wiersz dla każdego jawnie pobieranego działania, a następnie łączy wiersze za pomocą UNION ALL. ProcessMind nie wyznacza zdarzeń na podstawie innych danych.
- Sprawdźcie dane źródłowe i w razie potrzeby dostosujcie oznaczone wyrażenia zależne od konfiguracji systemu. W szczególności zweryfikujcie kody statusów dotyczące dostępności materiałów, planowania zdolności produkcyjnych, technicznego zakończenia, zamknięcia finansowego i anulowania. Sprawdźcie też, jakiego obiektu i nazw pól dokumentu zmian użyć do wykrywania korekt planu produkcji.
- Zweryfikujcie konwersję znaczników czasu i filtrowanie według klienta. W systemach SAP daty i godziny mogą być zapisane w osobnych polach. Niektóre instalacje używają czasu UTC, a inne czasu lokalnego zakładu lub systemu. Upewnijcie się, że wartości
StartTimemają spójną strefę czasową, a nieprawidłowe lub początkowe daty SAP są wykluczone. - Wyeksportujcie wyniki do pliku płaskiego obsługiwanego przez ProcessMind, najlepiej CSV lub tekstowego pliku rozdzielanego w kodowaniu UTF-8. Zachowajcie dokładne nazwy kolumn: ProductionOrder, Activity, StartTime, SourceSystem, LastDataUpdate, MaterialNumber, Plant, WorkCenter, PlannedEndDate i OrderStatus.
- Posortujcie wyeksportowane wiersze według ProductionOrder i StartTime. Jeśli proces przesyłania danych na to pozwala, dodajcie deterministyczne sortowanie pomocnicze dla identycznych znaczników czasu. Zachowajcie osobny wiersz dla każdego zdarzenia, również dla powtarzających się potwierdzeń i zmian statusu, jeśli odpowiadają odrębnym rekordom źródłowym.
- Prześlijcie plik do ProcessMind i przypiszcie ProductionOrder jako identyfikator case, Activity jako działanie, a StartTime jako znacznik czasu zdarzenia. Pozostałe kolumny przypiszcie jako atrybuty zdarzenia lub case zgodnie z konfiguracją importu ProcessMind. Sprawdźcie, czy zachowano wszystkie 14 etykiet działań w dokładnej postaci wygenerowanej przez zapytanie.
Konfiguracja
- Zakres dat: Zacznijcie od ruchomego okresu obejmującego od trzech do sześciu miesięcy. Do wstępnych testów wybierzcie krótszy okres, a rozszerzcie go dopiero po sprawdzeniu liczby wierszy i wydajności zapytania.
- Parametry pobierania: Zastąpcie [Your schema name], [Your client], [Extraction start date], [Extraction end date] i [Your source system name] wartościami z własnego środowiska. Filtry dotyczące firmy stosujcie dopiero po sprawdzeniu odpowiednich pól organizacyjnych i ich wartości.
- Konfiguracja statusów: Zweryfikujcie dokładne kody statusów SAP i identyfikatory obiektów statusu używane w systemie dla CRTD, zwolnienia, dostępności materiałów, planowania zdolności produkcyjnych, technicznego zakończenia, zamknięcia finansowego i anulowania. Profile statusów i własne rozszerzenia mogą zmieniać dostępne kody.
- Dokumenty zmian: Sprawdźcie obiekt dokumentu zmian zlecenia produkcyjnego, nazwy tabel i pól oraz formaty wartości używane dla ilości, dat, BOM i marszruty. Zapytanie traktuje pasujące rekordy CDHDR i CDPOS jako potwierdzenie korekty planu.
- Obsługa znaczników czasu: Ujednolićcie strefę czasową wszystkich znaczników czasu ze źródeł. Sprawdźcie, czy pola daty i godziny są rozdzielone, czy znaczniki czasu są lokalne czy podane w UTC oraz jak zapisywane są daty początkowe.
- Wydajność: Ograniczcie pobieranie według daty utworzenia zlecenia lub innej indeksowanej daty zlecenia produkcyjnego, filtrujcie według klienta, wybierajcie tylko potrzebne kolumny i uruchamiajcie zapytanie w odpowiednim oknie raportowym. Duże zbiory pobierajcie miesiącami lub według zakresów zleceń, zapisując wyniki przyrostowo.
- Obiekty bazy danych: Sprawdźcie, czy tabele AUFK, AFPO, JEST, JCDS, AFKO, AFVC, AFRU, RESB, MSEG, CDHDR i CDPOS są dostępne i można je odczytywać w wybranym schemacie. Jeśli w używanej wersji systemu widok lub pole się różni, zastąpcie je odpowiednim zatwierdzonym obiektem.
- Uprawnienia: Wymagany jest dostęp do odczytu wybranego schematu i obiektów SAP HANA oraz uprawnienie do wykonywania zapytań SQL. Zgodnie z firmowymi zasadami zarządzania mogą być też wymagane uprawnienia do aplikacji SAP.
- Zakres funkcjonalny: Dane dotyczące planowania i realizacji produkcji, ruchów magazynowych, historii statusów i dokumentów zmian muszą być dostępne dla wybranego okresu. Zarchiwizowane lub usunięte rekordy nie zostaną zwrócone.
- Mapowanie w ProcessMind: Przypiszcie ProductionOrder jako identyfikator case, Activity jako działanie, a StartTime jako znacznik czasu zdarzenia. ProcessMind nie wyznaczy brakujących działań na podstawie atrybutów.
Przykładowe zapytanie sql
WITH
params AS (
SELECT
'[Your client]' AS mandt,
TO_DATE('[Extraction start date]', 'YYYY-MM-DD') AS date_from,
TO_DATE('[Extraction end date]', 'YYYY-MM-DD') AS date_to,
'[Your source system name]' AS source_system,
CURRENT_UTCTIMESTAMP AS last_data_update
FROM DUMMY
),
orders AS (
SELECT
a.mandt,
LTRIM(a.aufnr, '0') AS production_order,
a.aufnr AS production_order_raw,
a.erdat AS order_created_date,
a.erfzeit AS order_created_time,
a.auart AS order_type,
a.werks AS plant,
a.objnr AS object_number,
a.ktext AS order_text,
p.matnr AS material_number,
p.psmng AS planned_quantity,
p.wemng AS delivered_quantity,
k.gstrp AS planned_start_date,
k.gltrp AS planned_end_date,
k.ftrmi AS release_date,
k.ftrmp AS release_time,
k.gamng AS total_order_quantity,
k.plnbez AS header_material_number,
k.plnty AS task_list_type,
k.plnnr AS task_list_group,
k.plnal AS task_list_group_counter
FROM [Your schema name].AUFK a
LEFT JOIN [Your schema name].AFPO p
ON p.mandt = a.mandt
AND p.aufnr = a.aufnr
LEFT JOIN [Your schema name].AFKO k
ON k.mandt = a.mandt
AND k.aufnr = a.aufnr
CROSS JOIN params x
WHERE a.mandt = x.mandt
AND a.erdat >= x.date_from
AND a.erdat < ADD_DAYS(x.date_to, 1)
),
status_history AS (
SELECT
o.*,
j.stat,
j.inact,
j.chgnr,
j.udate AS status_date,
j.utime AS status_time,
c.usnam AS status_user,
c.chind AS status_change_indicator
FROM orders o
INNER JOIN [Your schema name].JEST j
ON j.mandt = o.mandt
AND j.objnr = o.object_number
LEFT JOIN [Your schema name].JCDS c
ON c.mandt = j.mandt
AND c.objnr = j.objnr
AND c.stat = j.stat
AND c.chgnr = j.chgnr
WHERE COALESCE(j.inact, '') <> 'X'
),
operations AS (
SELECT
o.production_order,
o.mandt,
v.vornr,
v.arbid,
v.steus,
v.ltxa1,
v.aufpl,
v.aplzl,
cr.name1 AS work_center
FROM orders o
LEFT JOIN [Your schema name].AFVC v
ON v.mandt = o.mandt
AND v.aufpl = (SELECT MAX(k2.aufpl) FROM [Your schema name].AFKO k2 WHERE k2.mandt = o.mandt AND k2.aufnr = o.production_order_raw)
LEFT JOIN [Your schema name].CRHD cr
ON cr.mandt = v.mandt
AND cr.objty = 'A'
AND cr.objid = v.arbid
),
confirmations AS (
SELECT
o.production_order,
o.mandt,
r.rmzhl,
r.vornr,
r.budat AS confirmation_date,
r.ersda AS entry_date,
r.erzet AS entry_time,
r.ism01,
r.ism02,
r.ism03,
r.ism04,
r.ism05,
r.ism06,
r.xmnga,
r.stzhl,
r.stzhl AS reversal_counter,
r.lmnga AS confirmed_quantity,
r.xmnge AS scrap_quantity,
r.aufpl,
r.aplzl,
op.work_center
FROM orders o
INNER JOIN [Your schema name].AFRU r
ON r.mandt = o.mandt
AND r.aufnr = o.production_order_raw
LEFT JOIN operations op
ON op.production_order = o.production_order
AND op.mandt = r.mandt
AND op.vornr = r.vornr
),
first_confirmation AS (
SELECT production_order, MIN(TO_TIMESTAMP(TO_VARCHAR(entry_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(entry_time), 6, '0'), 'YYYYMMDDHH24MISS')) AS start_time
FROM confirmations
GROUP BY production_order
),
last_confirmation AS (
SELECT production_order, MAX(TO_TIMESTAMP(TO_VARCHAR(entry_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(entry_time), 6, '0'), 'YYYYMMDDHH24MISS')) AS final_time
FROM confirmations
GROUP BY production_order
),
first_goods_issue AS (
SELECT
o.production_order,
MIN(TO_TIMESTAMP(TO_VARCHAR(m.budat_mkpf, 'YYYYMMDD') || LPAD(TO_VARCHAR(m.cputm_mkpf), 6, '0'), 'YYYYMMDDHH24MISS')) AS start_time
FROM orders o
INNER JOIN [Your schema name].MSEG m
ON m.mandt = o.mandt
AND m.aufnr = o.production_order_raw
AND m.bwart IN ('261', '262')
GROUP BY o.production_order
),
first_receipt AS (
SELECT
o.production_order,
MIN(TO_TIMESTAMP(TO_VARCHAR(m.budat_mkpf, 'YYYYMMDD') || LPAD(TO_VARCHAR(m.cputm_mkpf), 6, '0'), 'YYYYMMDDHH24MISS')) AS receipt_time
FROM orders o
INNER JOIN [Your schema name].MSEG m
ON m.mandt = o.mandt
AND m.aufnr = o.production_order_raw
AND m.bwart IN ('101', '102')
GROUP BY o.production_order
),
plan_changes AS (
SELECT
o.production_order,
MIN(TO_TIMESTAMP(TO_VARCHAR(h.udate, 'YYYYMMDD') || LPAD(TO_VARCHAR(h.utime), 6, '0'), 'YYYYMMDDHH24MISS')) AS adjustment_time
FROM orders o
INNER JOIN [Your schema name].CDHDR h
ON h.mandant = o.mandt
AND h.objectid = o.production_order_raw
INNER JOIN [Your schema name].CDPOS p
ON p.mandant = h.mandant
AND p.objectclas = h.objectclas
AND p.objectid = h.objectid
AND p.changenr = h.changenr
WHERE h.objectclas IN ('ORDER', 'PP_ORDER')
AND p.tabname IN ('AFKO', 'AFPO', 'AFVC', 'RESB')
AND p.fname IN ('GAMNG', 'PSMNG', 'GSTRP', 'GLTRP', 'MATNR', 'BDMNG', 'VORNR')
GROUP BY o.production_order
),
status_times AS (
SELECT
production_order,
MIN(CASE WHEN stat IN ('I0001', 'CRTD') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS created_status_time,
MIN(CASE WHEN stat IN ('I0002', 'REL') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS released_time,
MIN(CASE WHEN stat IN ('I0003', 'MATC', 'MANC') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS material_available_time,
MIN(CASE WHEN stat IN ('I0004', 'CAPC', 'CAPA') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS capacity_planned_time,
MIN(CASE WHEN stat IN ('I0045', 'TECO') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS technically_completed_time,
MIN(CASE WHEN stat IN ('I0046', 'CLSD') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS financially_closed_time,
MIN(CASE WHEN stat IN ('I0076', 'DLFL', 'CANC') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS cancelled_time
FROM status_history
GROUP BY production_order
),
material_shortages AS (
SELECT
o.production_order,
MIN(TO_TIMESTAMP(TO_VARCHAR(j.status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(j.status_time), 6, '0'), 'YYYYMMDDHH24MISS')) AS shortage_time
FROM status_history j
INNER JOIN orders o
ON o.production_order = j.production_order
WHERE j.stat IN ('I0042', 'MANC', 'MSHT')
GROUP BY o.production_order
),
capacity_times AS (
SELECT
production_order,
MIN(COALESCE(released_time, created_status_time)) AS capacity_time
FROM status_times
GROUP BY production_order
),
base_attributes AS (
SELECT
o.production_order,
o.material_number,
o.plant,
COALESCE(op.work_center, '') AS work_center,
o.planned_end_date,
COALESCE(st.stat, '') AS current_status
FROM orders o
LEFT JOIN status_history st
ON st.production_order = o.production_order
AND st.inact = ''
LEFT JOIN operations op
ON op.production_order = o.production_order
AND op.vornr = (SELECT MIN(op2.vornr) FROM operations op2 WHERE op2.production_order = o.production_order)
),
events AS (
SELECT o.production_order, 'Production Order Created' AS activity, COALESCE(st.created_status_time, TO_TIMESTAMP(TO_VARCHAR(o.order_created_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(o.order_created_time), 6, '0'), 'YYYYMMDDHH24MISS')) AS start_time FROM orders o LEFT JOIN status_times st ON st.production_order = o.production_order
UNION ALL
SELECT production_order, 'Material Availability Checked', material_available_time FROM status_times WHERE material_available_time IS NOT NULL
UNION ALL
SELECT production_order, 'Capacity Requirements Planned', capacity_time FROM capacity_times WHERE capacity_time IS NOT NULL
UNION ALL
SELECT production_order, 'Production Order Released', released_time FROM status_times WHERE released_time IS NOT NULL
UNION ALL
SELECT o.production_order, 'Production Started', LEAST(COALESCE(fc.start_time, TO_TIMESTAMP('99991231235959', 'YYYYMMDDHH24MISS')), COALESCE(fg.start_time, TO_TIMESTAMP('99991231235959', 'YYYYMMDDHH24MISS'))) FROM orders o LEFT JOIN first_confirmation fc ON fc.production_order = o.production_order LEFT JOIN first_goods_issue fg ON fg.production_order = o.production_order WHERE fc.start_time IS NOT NULL OR fg.start_time IS NOT NULL
UNION ALL
SELECT production_order, 'Production Confirmation Entered', TO_TIMESTAMP(TO_VARCHAR(entry_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(entry_time), 6, '0'), 'YYYYMMDDHH24MISS') FROM confirmations
UNION ALL
SELECT production_order, 'Material Shortage Occurred', shortage_time FROM material_shortages WHERE shortage_time IS NOT NULL
UNION ALL
SELECT production_order, 'Production Plan Adjusted', adjustment_time FROM plan_changes WHERE adjustment_time IS NOT NULL
UNION ALL
SELECT c.production_order, 'Unplanned Halt Occurred', ADD_SECONDS(c.confirmation_time, 1) FROM (SELECT production_order, TO_TIMESTAMP(TO_VARCHAR(entry_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(entry_time), 6, '0'), 'YYYYMMDDHH24MISS') AS confirmation_time, LEAD(TO_TIMESTAMP(TO_VARCHAR(entry_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(entry_time), 6, '0'), 'YYYYMMDDHH24MISS')) OVER (PARTITION BY production_order ORDER BY entry_date, entry_time, rmzhl) AS next_confirmation_time FROM confirmations) c WHERE c.next_confirmation_time IS NOT NULL AND SECONDS_BETWEEN(c.confirmation_time, c.next_confirmation_time) >= 86400
UNION ALL
SELECT production_order, 'Final Confirmation Entered', final_time FROM last_confirmation WHERE final_time IS NOT NULL
UNION ALL
SELECT production_order, 'Goods Receipt Posted', receipt_time FROM first_receipt WHERE receipt_time IS NOT NULL
UNION ALL
SELECT production_order, 'Order Technically Completed', technically_completed_time FROM status_times WHERE technically_completed_time IS NOT NULL
UNION ALL
SELECT production_order, 'Order Financially Closed', financially_closed_time FROM status_times WHERE financially_closed_time IS NOT NULL
UNION ALL
SELECT production_order, 'Production Order Cancelled', cancelled_time FROM status_times WHERE cancelled_time IS NOT NULL
)
SELECT
e.production_order AS "ProductionOrder",
e.activity AS "Activity",
e.start_time AS "StartTime",
p.source_system AS "SourceSystem",
p.last_data_update AS "LastDataUpdate",
b.material_number AS "MaterialNumber",
b.plant AS "Plant",
NULLIF(b.work_center, '') AS "WorkCenter",
b.planned_end_date AS "PlannedEndDate",
b.current_status AS "OrderStatus"
FROM events e
INNER JOIN base_attributes b
ON b.production_order = e.production_order
CROSS JOIN params p
WHERE e.start_time IS NOT NULL
ORDER BY e.production_order, e.start_time, e.activity; Gotowi do rozpoczęcia?
Zróbcie pierwszy krok w kierunku sprawniejszego planowania produkcji. Przygotujcie dane za pomocą tego szablonu i wykorzystajcie je do znalezienia możliwości optymalizacji.
Zacznijcie optymalizować planowanie produkcji już dziś
Wykryjcie i wyeliminujcie wąskie gardła, skracając cykl produkcyjny o 30%.
Nie trzeba podawać danych karty płatniczej