Szablon danych do analizy obsługi zwrotów i refundacji
Szablon danych do analizy obsługi zwrotów i refundacji
- Zalecane atrybuty do zebrania
- Najważniejsze działania do śledzenia
- Wskazówki dotyczące ekstrakcji danych
Atrybuty procesu obsługi zwrotów i refundacji
| Nazwa | Opis | ||
|---|---|---|---|
| Czas zdarzenia EventTime | Dokładna data i godzina wystąpienia działania. | ||
| Opis Ten znacznik czasu wskazuje dokładny moment wystąpienia zdarzenia biznesowego. Jest rejestrowany dla każdego działania w procesie i określa chronologiczną kolejność zdarzeń w ramach sprawy. Czas zdarzenia jest niezbędny w analizach opartych na czasie. Umożliwia obliczanie czasu między działaniami, wykrywanie wąskich gardeł powodowanych oczekiwaniem oraz mierzenie całkowitego czasu obsługi sprawy. Pozwala też analizować wyniki i sprawdzać zgodność z umowami SLA. Dlaczego to ważne Ten znacznik czasu jest niezbędny do obliczania czasu trwania, analizy wyników procesu, wykrywania wąskich gardeł i odtworzenia przebiegu każdej sprawy zwrotu. Skąd pobrać Dane pochodzą z różnych pól daty i godziny w tabelach SAP. Dla zdarzeń utworzenia są to często pola ERDAT i ERZET (np. w VBAK). Dla zdarzeń zmiany są to pola UDATE i UTIME w tabeli CDHDR. Przykłady 2023-04-15T10:22:05Z2023-04-16T14:01:30Z2023-04-18T09:15:00Z | |||
| Identyfikator sprawy zwrotu ReturnCaseId | Unikalny identyfikator zgłoszenia zwrotu klienta, łączący wszystkie powiązane działania i dokumenty. | ||
| Opis Identyfikator sprawy zwrotu jest głównym kluczem służącym do śledzenia całego procesu, od zgłoszenia po zamknięcie. Każdy identyfikator odpowiada konkretnemu zwrotowi klienta i obejmuje powiązane zdarzenia, takie jak utworzenie zlecenia, dostawa, kontrola i przetwarzanie noty uznaniowej. W analizie procesów ten atrybut stanowi podstawę do utworzenia mapy procesu. Pozwala grupować pojedyncze zdarzenia w pełne przebiegi spraw, a następnie analizować warianty procesu, czas realizacji i wąskie gardła dla każdego zwrotu. Dlaczego to ważne To podstawowy identyfikator sprawy, który łączy wszystkie etapy obsługi zwrotu i umożliwia analizę przebiegu oraz wyników całego procesu. Skąd pobrać Zwykle jest to numer zlecenia zwrotu z modułu sprzedaży i dystrybucji (SD). Znajduje się w tabeli VBAK (Sales Document Header Data), w polu VBELN. Kategoria dokumentu (VBAK-VBTYP) ma wartość „H” dla zwrotów. Przykłady 600001236000045660000789 | |||
| Nazwa działania ActivityName | Nazwa konkretnego zdarzenia biznesowego lub kroku, który wystąpił w procesie zwrotu. | ||
| Opis Ten atrybut opisuje pojedyncze, odrębne działanie lub zmianę statusu w procesie zwrotu, na przykład „Utworzenie zlecenia zwrotu”, „Księgowanie przyjęcia towaru” lub „Utworzenie noty uznaniowej”. Działania te tworzą mapę procesu. Analiza ich kolejności i częstotliwości pomaga wykryć najczęstsze ścieżki procesu, odstępstwa i pętle poprawek. Pozwala zrozumieć, co dzieje się w ramach sprawy i w jakiej kolejności, stanowiąc podstawę analizy process mining. Dlaczego to ważne Działania określają kolejne kroki procesu. Analiza ich kolejności, czasu trwania i częstotliwości stanowi podstawę process mining i pokazuje, jak faktycznie przebiega praca. Skąd pobrać Dane pochodzą ze zmian statusów w tabelach takich jak VBUK/VBUP, zdarzeń utworzenia dokumentów (np. w VBAK, LIKP, VBRK) lub dzienników zmian w tabelach CDHDR/CDPOS. Przykłady Utworzenie zlecenia zwrotuZaksięgowanie przyjęcia towaruUtworzenie noty uznaniowejPozycja zlecenia zwrotu przetworzona | |||
| Data ostatniej aktualizacji danych LastDataUpdate | Znacznik czasu wskazujący, kiedy dane dotyczące tego procesu zostały ostatnio odświeżone. | ||
| Opis Ten atrybut zapisuje datę i godzinę ostatniego wyodrębnienia lub aktualizacji danych. Informuje, jak aktualne są analizowane dane. Ma to znaczenie przy ocenie aktualności wniosków. Można sprawdzić, jak świeże są dane, co wpływa na przydatność wyników, zwłaszcza podczas monitorowania bieżących operacji. Dlaczego to ważne Informuje o aktualności danych, dzięki czemu wiadomo, jak aktualna jest analiza procesu i kiedy można oczekiwać kolejnej aktualizacji. Skąd pobrać To atrybut metadanych uzupełniany znacznikiem czasu wykonania zadania wyodrębniania danych. Przykłady 2023-05-20T02:00:00Z2023-05-21T02:00:00Z | |||
| System źródłowy SourceSystem | System, z którego wyodrębniono dane. | ||
| Opis Ten atrybut wskazuje źródło danych, co ma znaczenie w środowiskach korzystających z wielu systemów. Zapewnia kontekst i pomaga zachować pochodzenie oraz integralność danych. W analizie służy do segmentowania lub filtrowania danych przy łączeniu procesów z różnych systemów źródłowych. Potwierdza, że zdarzenia pochodzą z oczekiwanej aplikacji, w tym przypadku SAP ECC. Dlaczego to ważne Wskazuje źródło danych, co ma znaczenie dla zarządzania danymi i analiz obejmujących wiele systemów przedsiębiorstwa. Skąd pobrać To stała wartość określana podczas wyodrębniania danych, która identyfikuje konkretną instancję SAP ECC (np. „ECC_PROD_100”). Przykłady SAP_ECC_PRODSAPECC_FINANCE_200 | |||
| Kanał zwrotu ReturnChannel | Kanał, za pośrednictwem którego zgłoszono zwrot, na przykład online, w sklepie lub przez call center. | ||
| Opis Ten atrybut określa źródło lub sposób przyjęcia zgłoszenia zwrotu. Pozwala odróżnić zwroty zgłoszone przez portal internetowy, w sklepie stacjonarnym lub za pośrednictwem pracownika obsługi klienta. Podział procesu według kanału zwrotu pomaga zrozumieć różnice w operacjach i zapotrzebowaniu na zasoby. Na przykład zwroty w sklepie mogą być kontrolowane szybciej, ale wymagają innych dokumentów niż zwroty online. To ważny wymiar dashboardu „Trendy przepustowości procesu zwrotów”. Dlaczego to ważne Pokazuje, jak zgłoszono zwrot. Kanał często wpływa na przebieg procesu, zapotrzebowanie na zasoby i czas realizacji. Skąd pobrać To pole często nie występuje standardowo w SAP ECC, dlatego może być konieczne pobranie go z pola niestandardowego (np. w VBAK) lub wywnioskowanie na podstawie innych danych, takich jak organizacja sprzedaży (VKORG) lub kanał dystrybucji (VTWEG). Szczegóły zależą od wdrożenia, dlatego warto sprawdzić dokumentację SAP ECC. Przykłady Portal internetowySklep stacjonarnyCall center | |||
| Numer materiału MaterialNumber | Unikalny identyfikator zwracanego produktu. | ||
| Opis Numer materiału, czyli SKU, wskazuje konkretny produkt objęty zwrotem. Umożliwia szczegółową analizę na poziomie produktu. Analiza zwrotów według numeru materiału pozwala wykryć produkty o wysokim odsetku zwrotów, co może wskazywać na problemy z jakością, nieprecyzyjne opisy lub wady produkcyjne. Atrybut ten jest niezbędny w dashboardach, takich jak „Wpływ zwrotów na zapasy”, i pomaga zrozumieć, jak poszczególne produkty przechodzą przez proces zwrotu. Dlaczego to ważne Wskazuje zwracane produkty i pomaga wykrywać problemy z kontrolą jakości lub nieprecyzyjne opisy produktów. Skąd pobrać Znajduje się w tabeli pozycji dokumentu sprzedaży VBAP, w polu MATNR. Przykłady RM-1025FG-2050-BACC-5591 | |||
| Osoba przetwarzająca ProcessingAgent | Identyfikator użytkownika, który wykonał dane działanie. | ||
| Opis Ten atrybut zapisuje nazwę użytkownika odpowiedzialnego za wykonanie konkretnego kroku procesu, na przykład utworzenie zlecenia zwrotu lub zaksięgowanie przyjęcia towaru. Często jest określany jako użytkownik „Zmienione przez” lub „Utworzone przez”. Analiza według osoby przetwarzającej pomaga oceniać wyniki pracy i wykorzystanie zasobów. Ułatwia wskazanie osób osiągających najlepsze wyniki, pracowników wymagających dodatkowego szkolenia oraz rozkładu obciążenia w zespole. Atrybut jest używany w dashboardach, takich jak „Wyniki obsługi zwrotów przez pracowników”, do porównywania czasu realizacji i przepustowości. Dlaczego to ważne Pozwala śledzić udział użytkowników, analizować wyniki zespołu i rozkład obciążenia oraz wykrywać potrzeby szkoleniowe i dobre praktyki. Skąd pobrać Zwykle znajduje się w polach takich jak ERNAM (utworzył) lub AENAM (zmienił) w tabelach nagłówkowych, np. VBAK, LIKP, VBRK. Dla zdarzeń zmiany jest to pole USERNAME w tabeli CDHDR. Przykłady CBURNSDSCRANTONJHALPERT | |||
| Przyczyna zwrotu ReturnReason | Kod przyczyny podany przez klienta przy zwrocie produktu. | ||
| Opis Ten atrybut wskazuje, dlaczego produkt został zwrócony, na podstawie zdefiniowanych kodów przyczyn w SAP. Przykłady: „Uszkodzony w transporcie”, „Wysłano niewłaściwy produkt” lub „Nie pasuje”. To ważny wymiar analizy przyczyn źródłowych. Filtrowanie mapy procesu lub KPI według przyczyny zwrotu pozwala sprawdzić, czy określone przyczyny wiążą się z dłuższym czasem obsługi, częstszym niezaliczeniem kontroli lub konkretnymi odstępstwami od procesu. Takie wnioski mogą pomóc ulepszyć jakość produktów, logistykę lub procesy sprzedaży. Dlaczego to ważne Wyjaśnia, dlaczego klienci zwracają produkty. Analiza przyczyn źródłowych pomaga ograniczyć liczbę zwrotów przez poprawę jakości produktów, dostaw lub opisów. Skąd pobrać Znajduje się w tabeli pozycji dokumentu sprzedaży VBAP, w polu ABGRU (przyczyna odrzucenia dokumentu sprzedaży). Przykłady 001 - Produkt uszkodzony002 - Niewłaściwy produkt005 - Dostawa zbyt późna | |||
| Rzeczywista kwota zwrotu ActualRefundAmount | Ostateczna kwota uznana na koncie klienta, zaksięgowana w dokumentach finansowych. | ||
| Opis Ten atrybut przedstawia ostateczną, potwierdzoną kwotę zwrotu przetworzoną i zaksięgowaną w systemie księgowym. Może różnić się od kwoty wnioskowanej z powodu opłat za ponowne przyjęcie towaru do magazynu, korekt wynikających ze stanu produktu lub innych zasad. To ważny atrybut dashboardu „Monitorowanie rozbieżności kwot zwrotów”. Porównanie kwoty rzeczywistej z wnioskowaną pomaga wykrywać powtarzające się problemy z obliczaniem i zatwierdzaniem zwrotów oraz dbać o poprawność rozliczeń. Dlaczego to ważne Pokazuje ostateczny wynik finansowy zwrotu. Porównanie z wnioskowaną kwotą pomaga sprawdzić poprawność rozliczenia i wykryć straty finansowe. Skąd pobrać Dane pochodzą z dokumentu finansowego powiązanego z notą uznaniową. Zwykle znajdują się w tabeli BSEG (Accounting Document Segment), w polu WRBTR (kwota w walucie dokumentu), dla odpowiedniego zapisu na koncie księgi głównej. Przykłady 150.0045.001200.75 | |||
| Wnioskowana kwota zwrotu RequestedRefundAmount | Oczekiwana kwota zwrotu, zwykle obliczana na podstawie wartości netto zwracanych produktów. | ||
| Opis Ten atrybut przedstawia początkową wartość pieniężną zwrotu zapisaną w zleceniu zwrotu. Stanowi punkt odniesienia dla analiz i uzgodnień finansowych. Kwota jest porównywana z „Rzeczywistą kwotą zwrotu”, aby wykrywać rozbieżności. To ważny wskaźnik w dashboardzie „Monitorowanie rozbieżności kwot zwrotów”. Analiza pomaga ocenić finansowy wpływ zwrotów i wykryć potencjalne problemy z wyceną lub obliczaniem uznania. Dlaczego to ważne Określa początkową wartość finansową zwrotu, co pomaga śledzić rozbieżności i ustalić łączną wartość zwracanych towarów. Skąd pobrać Zwykle jest to wartość netto na poziomie pozycji zlecenia zwrotu. Znajduje się w tabeli VBAP, w polu NETWR. Przykłady 150.0049.991250.75 | |||
| Docelowa data zwrotu pieniędzy według SLA RefundSLATargetDate | Data, do której zgodnie z umową SLA należy przetworzyć zwrot pieniędzy. | ||
| Opis Ten atrybut określa termin zakończenia procesu zwrotu dla danej sprawy. Zwykle jest obliczany na podstawie reguł biznesowych, na przykład „5 dni roboczych od przyjęcia towaru”. Termin docelowy stanowi punkt odniesienia do oceny rzeczywistych wyników. Jest podstawą dashboardu „Zgodność przetwarzania zwrotów z SLA”, który pomaga monitorować realizację zobowiązań wobec klientów i wykrywać sprawy zagrożone przekroczeniem terminu SLA. Dlaczego to ważne Określa docelowy czas przetwarzania zwrotów, umożliwiając pomiar i raportowanie zgodności z SLA oraz ustalanie priorytetów dla spraw po terminie. Skąd pobrać Zwykle nie jest to standardowe pole SAP, dlatego wartość należy wyliczyć na podstawie reguł biznesowych. Można ją obliczyć, dodając określony czas do daty bazowej, na przykład daty przyjęcia towaru z tabeli MKPF. Szczegóły należy sprawdzić w dokumentacji SAP ECC lub wymaganiach biznesowych. Przykłady 2023-04-25T23:59:59Z2023-04-28T23:59:59Z2023-05-02T23:59:59Z | |||
| Identyfikator klienta CustomerId | Unikalny identyfikator klienta zgłaszającego zwrot. | ||
| Opis Ten atrybut identyfikuje konkretnego klienta zwracającego produkt, określanego w SAP jako „Sold-to Party”. Łączy transakcję zwrotu z danymi podstawowymi klienta. Analiza według identyfikatora klienta pomaga wykrywać klientów często zwracających produkty, co może świadczyć o niezadowoleniu lub nadużywaniu zasad zwrotów. Po połączeniu z danymi segmentacyjnymi klientów pozwala też sprawdzić, czy poszczególne grupy różnią się zachowaniami lub doświadczeniami związanymi ze zwrotami. Dlaczego to ważne Łączy zwroty z konkretnymi klientami, umożliwiając analizę ich zachowań, wykrywanie powtarzających się zwrotów i ocenę wpływu na relacje z klientami. Skąd pobrać Znajduje się w tabeli nagłówka dokumentu sprzedaży VBAK, w polu KUNNR (Sold-to party). Przykłady CUST-100432CUST-203991CUST-831102 | |||
| Kod spółki CompanyCode | Podmiot prawny lub spółka odpowiedzialna za transakcję. | ||
| Opis Kod spółki w SAP oznacza samodzielną jednostkę księgową. Wszystkie transakcje finansowe, w tym zwroty i refundacje, są księgowane w ramach określonego kodu spółki. Atrybut ten jest niezbędny do raportowania finansowego i podziału procesu w organizacjach międzynarodowych lub wielopodmiotowych. Analiza według kodu spółki pozwala porównywać wyniki procesu zwrotów w różnych podmiotach prawnych. Dlaczego to ważne Umożliwia filtrowanie i porównywanie procesów zwrotów w różnych podmiotach prawnych organizacji, co ma znaczenie dla analiz finansowych. Skąd pobrać Znajduje się w tabeli nagłówka dokumentu sprzedaży VBAK, w polu BUKRS_VF (kod spółki dla rozliczeń). Przykłady 10002000US01 | |||
| Numer noty uznaniowej CreditMemoNumber | Unikalny identyfikator dokumentu noty uznaniowej wystawionej w związku ze zwrotem. | ||
| Opis Nota uznaniowa to oficjalny dokument rozliczeniowy w SAP, który formalizuje zwrot należny klientowi. Jej numer jednoznacznie identyfikuje dokument finansowy. Atrybut ten jest niezbędny do uzgodnień finansowych i śledzenia procesu od zwrotu operacyjnego po rozliczenie finansowe. Oznacza ważny etap procesu i pomaga znaleźć powiązane dokumenty księgowe, potrzebne na przykład do ustalenia „Rzeczywistej kwoty zwrotu”. Dlaczego to ważne Zapewnia bezpośrednie powiązanie z dokumentem finansowym zatwierdzającym zwrot dla klienta. Jest niezbędny podczas audytu i uzgodnień finansowych. Skąd pobrać Nota uznaniowa jest dokumentem rozliczeniowym. Jej numer znajduje się w tabeli VBRK (Billing Document: Header Data), w polu VBELN. Powiązanie można znaleźć w przepływie dokumentów zlecenia zwrotu. Przykłady 900011229000334490005566 | |||
| Pierwotny dokument sprzedaży OriginalSalesDocument | Numer pierwotnego zlecenia sprzedaży, którego dotyczy zwrot. | ||
| Opis Ten atrybut bezpośrednio łączy zwrot z pierwotnym zakupem klienta. Jest dokumentem referencyjnym, który wiąże zwrot ze szczegółami pierwotnej transakcji. To powiązanie ułatwia dokładniejszą analizę. Można sprawdzić, dlaczego zwracane są produkty z konkretnych zamówień, zweryfikować pierwotne ceny i warunki oraz prześledzić pełny cykl od zamówienia klienta do zwrotu. Pozwala też ustalić, czy produkty sprzedawane w ramach określonych kampanii lub kanałów są częściej zwracane. Dlaczego to ważne Łączy zwrot z pierwotną sprzedażą, zapewniając pełny obraz transakcji klienta i ułatwiając analizę przyczyn źródłowych. Skąd pobrać To odwołanie jest zapisane na poziomie pozycji zlecenia zwrotu. Znajduje się w tabeli VBAP, w polu VGBEL (numer dokumentu referencyjnego). Przykłady 100034561000987110012345 | |||
| Przestrzeganie zasad zwrotów ReturnPolicyAdherence | Wskaźnik informujący, czy zwrot spełnia wszystkie określone reguły i zasady biznesowe. | ||
| Opis Ten obliczany atrybut logiczny wskazuje, czy sprawa zwrotu przebiegała zgodnie ze standardowymi zasadami firmy. Reguła może uwzględniać kilka warunków, na przykład czy zwrot zgłoszono w dozwolonym terminie, czy kod przyczyny jest prawidłowy dla danego produktu lub czy wyjątek zatwierdził kierownik. Atrybut zasila dashboard „Zgodność zatwierdzania zwrotów z zasadami”. Umożliwia bezpośredni pomiar zgodności i pomaga wykrywać zasady najczęściej pomijane, co pozwala lepiej ukierunkować ulepszanie procesów lub szkolenia. Dlaczego to ważne Mierzy zgodność z regułami biznesowymi, pomagając konsekwentnie stosować zasady i wykrywać sprawy wymagające dodatkowej weryfikacji lub zatwierdzenia. Skąd pobrać To atrybut wyliczany na podstawie zestawu reguł biznesowych. Przykład: (data zgłoszenia zwrotu - data pierwotnego zakupu) <= 30 dni ORAZ ReturnReason IS NOT NULL. Przykłady truefalse | |||
| Rozbieżność między kwotami zwrotu RefundAmountDiscrepancy | Obliczona różnica między rzeczywistą a wnioskowaną kwotą zwrotu. | ||
| Opis Ten obliczany wskaźnik określa różnicę między kwotą pierwotnie wnioskowaną w zleceniu zwrotu a kwotą ostatecznie przyznaną w nocie uznaniowej. Wartość dodatnia może oznaczać częściowy zwrot. Wartość ujemna jest nietypowa, ale może wskazywać na nadpłatę. To główny wskaźnik dashboardu „Monitorowanie rozbieżności kwot zwrotów”. Pomaga szybko wykrywać i analizować sprawy z odchyleniami finansowymi, które mogą wynikać z oceny stanu produktu, opłat za ponowne przyjęcie do magazynu lub błędów. Monitorowanie wskaźnika wspiera kontrolę finansową i przestrzeganie zasad. Dlaczego to ważne Bezpośrednio mierzy odchylenia finansowe w procesie zwrotu i pomaga wykrywać niezgodność z zasadami, błędy w przetwarzaniu lub straty finansowe. Skąd pobrać Pole obliczane: ActualRefundAmount - RequestedRefundAmount. Przykłady 0.00-4.99-50.00 | |||
| Status zlecenia zwrotu ReturnOrderStatus | Ogólny status przetwarzania sprawy zwrotu. | ||
| Opis Ten atrybut pokazuje bieżący stan sprawy zwrotu, na przykład „Otwarte”, „W trakcie” lub „Zakończone”. Jest wyliczany na podstawie statusów nagłówka lub pozycji dokumentu sprzedaży. W analizie pozwala filtrować sprawy i skupić się na zwrotach aktywnych lub zakończonych. Ułatwia monitorowanie obciążenia pracą i postępów w otwartych sprawach oraz pokazuje ogólny wynik każdej obsługi zwrotu. Dlaczego to ważne Pokazuje ogólny etap obsługi sprawy i umożliwia filtrowanie oraz analizę zwrotów otwartych, w trakcie realizacji lub zamkniętych. Skąd pobrać Dane pochodzą z pól statusu w tabelach VBUK (status nagłówka) i VBUP (status pozycji). Na przykład VBUK-GBSTK określa ogólny status przetwarzania dokumentu. Przykłady OtwarteW trakcieZakończone | |||
| Zakład Plant | Fizyczna lokalizacja lub obiekt, w którym przyjmuje się i przetwarza zwrócony produkt. | ||
| Opis Zakład w SAP oznacza fizyczną lokalizację, na przykład magazyn lub centrum dystrybucji, w którym obsługiwane są towary. W procesie zwrotu jest to zwykle miejsce przyjęcia i kontroli produktu. Analiza procesu według zakładu pomaga wykrywać różnice w wynikach poszczególnych obiektów. Może pokazać, które magazyny sprawniej kontrolują produkty lub osiągają większą przepustowość. Wspiera też dashboard „Przepustowość i wydajność kontroli produktów”. Dlaczego to ważne Wskazuje lokalizację obsługującą zwrot i umożliwia porównywanie wyników różnych magazynów lub centrów dystrybucji. Skąd pobrać Znajduje się na poziomie pozycji zlecenia zwrotu, w tabeli VBAP, w polu WERKS. Przykłady PL01WH02DC05 | |||
| Zgodność z SLA IsSLACompliant | Wskaźnik informujący, czy zwrot został przetworzony w terminie określonym w umowie SLA. | ||
| Opis To obliczany atrybut logiczny, który porównuje rzeczywistą datę działania „Przetworzenie zwrotu pieniędzy” z „Docelową datą zwrotu pieniędzy według SLA”. Przyjmuje wartość true, jeśli zwrot zakończono w terminie, a w przeciwnym razie false. Atrybut upraszcza analizę i raportowanie, pokazując jednoznaczny wynik realizacji SLA dla każdej sprawy. Służy do obliczania ogólnego wskaźnika „Zgodność przetwarzania zwrotów z SLA” i filtrowania spraw niezgodnych z ustaleniami. Dlaczego to ważne Zapewnia jednoznaczny wskaźnik realizacji SLA dla każdej sprawy, ułatwiając monitorowanie zgodności i raportowanie. Skąd pobrać To atrybut obliczany według reguły: czas zdarzenia „Przetworzenie zwrotu pieniędzy” <= RefundSLATargetDate. Przykłady truefalse | |||
Działania w procesie obsługi zwrotów i refundacji
| Działanie | Opis | ||
|---|---|---|---|
| Nota uznaniowa zaksięgowana w FI | Nota uznaniowa zostaje przekazana do księgowości finansowej i staje się oficjalnym zapisem na koncie należności. Ten krok uruchamia właściwy proces wypłaty zwrotu klientowi. | ||
| Dlaczego to ważne To działanie oznacza moment, w którym firma ujmuje zwrot w księgach. Opóźnienie między utworzeniem noty uznaniowej a jej zaksięgowaniem może wydłużyć czas oczekiwania klienta na zwrot. Skąd pobrać To zdarzenie wnioskowane, wykrywane po zmianie statusu księgowania w nagłówku dokumentu rozliczeniowego (VBRK-RFBSK) na „C” (utworzono dokument księgowy). Rzeczywista data utworzenia dokumentu księgowego znajduje się w tabeli BKPF. Rejestrowanie Ustal znacznik czasu zmiany pola VBRK-RFBSK na „C” albo użyj daty utworzenia (CPUDT) powiązanego dokumentu księgowego w tabeli BKPF. Typ zdarzenia inferred | |||
| Podjęcie decyzji o sposobie wykorzystania | Po kontroli inżynier jakości lub inspektor formalnie ocenia stan zwracanego produktu. Decyzja określa dalsze postępowanie, na przykład ponowne wprowadzenie do zapasów, złomowanie lub naprawę. | ||
| Dlaczego to ważne Ta czynność pomaga ocenić efektywność kontroli i jej wyniki. Decyzja bezpośrednio wpływa na kwotę refundacji i zarządzanie zapasami. Skąd pobrać Jeśli używany jest SAP QM, jest to jawne zdarzenie zapisane w tabeli QAVE (decyzja o sposobie wykorzystania po kontroli). Data decyzji znajduje się w polu QAVE-VDATUM. Powiązanie z dostawą można znaleźć w tabeli QALS. Rejestrowanie Użyj daty decyzji o sposobie wykorzystania (VDATUM) z tabeli QAVE, powiązanej za pomocą partii kontrolnej (QALS-PRUEFLOS). Typ zdarzenia explicit | |||
| Utworzenie noty uznaniowej | Tworzony jest dokument rozliczeniowy (nota uznaniowa), który zatwierdza zwrot środków klientowi. To oficjalny dokument finansowy określający kwotę zwrotu. | ||
| Dlaczego to ważne To ważny etap finansowy procesu. Analiza czasu potrzebnego na utworzenie noty uznaniowej pomaga wykryć opóźnienia w przetwarzaniu dokumentów finansowych po przyjęciu i kontroli towaru. Skąd pobrać To jawne zdarzenie rejestrowane w tabeli VBRK (Billing Document Header). Data utworzenia znajduje się w polu VBRK-ERDAT. Nota uznaniowa jest powiązana ze zleceniem zwrotu lub wnioskiem o notę uznaniową w przepływie dokumentów. Rejestrowanie Użyj znacznika czasu utworzenia (ERDAT) z tabeli VBRK dla odpowiedniego dokumentu rozliczeniowego. Typ zdarzenia explicit | |||
| Utworzenie zlecenia zwrotu | Ta czynność rozpoczyna proces zwrotu, gdy klient zgłasza chęć zwrócenia produktu. Jest rejestrowana w chwili utworzenia w SAP ECC nowego dokumentu sprzedaży typu „Zwrot” (np. RE). | ||
| Dlaczego to ważne To główne zdarzenie rozpoczynające proces zwrotu. Analiza czasu od tej czynności do kolejnych etapów pozwala zmierzyć całkowity czas realizacji i wykryć początkowe opóźnienia. Skąd pobrać Jest to jawne zdarzenie zapisane w tabeli VBAK (nagłówek dokumentu sprzedaży). Znacznik czasu utworzenia jest przechowywany w polach VBAK-ERDAT i VBAK-ERZET dla danego numeru dokumentu sprzedaży (VBAK-VBELN) o typie zlecenia VBAK-AUART = 'RE'. Rejestrowanie Użyj znacznika czasu utworzenia (ERDAT, ERZET) z tabeli VBAK dla dokumentu sprzedaży typu 'RE'. Typ zdarzenia explicit | |||
| Zaksięgowanie przyjęcia towaru | Ta czynność ma miejsce, gdy zwracany produkt zostaje fizycznie przyjęty w magazynie lub centrum obsługi. Jest rejestrowana przez zaksięgowanie dokumentu ruchu towarów powiązanego z dostawą zwrotną. | ||
| Dlaczego to ważne To ważny etap, który oznacza, że firma przejęła zwracany produkt. Rozpoczyna kontrolę fizyczną i wpływa na prawidłowość ewidencji zapasów. Skąd pobrać Zdarzenie można wywnioskować ze statusu ruchu towarów dla pozycji dostawy zwrotnej w tabeli VBUP (np. WBSTA = 'C'). Dokładny znacznik czasu znajduje się w nagłówku dokumentu materiałowego (MKPF-BUDAT) dla odpowiedniego przyjęcia towaru. Rejestrowanie Pobierz datę księgowania (BUDAT) z tabeli MKPF dla dokumentu materiałowego powiązanego z dostawą zwrotną. Typ zdarzenia inferred | |||
| Zlecenie zwrotu zakończone | To działanie oznacza koniec procesu zwrotu z perspektywy sprzedaży i dystrybucji. Następuje, gdy wszystkie pozycje zlecenia zwrotu zostaną w pełni przetworzone i zamknięte. | ||
| Dlaczego to ważne To główne zdarzenie kończące proces. Czas od „Utworzenie zlecenia zwrotu” do tego działania pokazuje pełny czas realizacji sprawy zwrotu. Skąd pobrać To zdarzenie wnioskowane na podstawie tabel statusów. Jest rejestrowane, gdy ogólny status nagłówka dokumentu sprzedaży (VBUK-GBSTK) zmienia się na „C” (przetworzono w całości). Rejestrowanie Ustal znacznik czasu w dokumentach zmian (CDHDR/CDPOS), gdy status nagłówka VBUK-GBSTK zmienia się na „C”. Typ zdarzenia inferred | |||
| Nota uznaniowa rozliczona | Otwarta pozycja uznaniowa na koncie należności zostaje rozliczona, zwykle przez przelew wychodzący na rzecz klienta. To zdarzenie oznacza ostateczne zamknięcie finansowe zwrotu. | ||
| Dlaczego to ważne To działanie potwierdza wypłatę środków i zamyka finansową część procesu. Z perspektywy klienta oznacza faktyczny koniec obsługi zwrotu. Skąd pobrać To jawne zdarzenie z modułu FI. Data rozliczenia dokumentu księgowego jest zapisana w tabeli BSEG (BSEG-AUGDT) dla odpowiedniej pozycji klienta. Rejestrowanie Użyj daty rozliczenia (AUGDT) z tabeli BSEG lub BSAD dla dokumentu księgowego powiązanego z notą uznaniową. Typ zdarzenia explicit | |||
| Pozycja zlecenia zwrotu odrzucona | Konkretna pozycja zlecenia zwrotu zostaje odrzucona podczas wstępnej weryfikacji lub po kontroli. Oznacza to, że nie będzie dalej przetwarzana, na przykład nie zostanie za nią wypłacony zwrot. | ||
| Dlaczego to ważne Analiza odrzuceń pomaga wykrywać nieuzasadnione wnioski o zwrot i lepiej informować klientów o zasadach. To istotna ścieżka procesu, która nie prowadzi do zwrotu pieniędzy. Skąd pobrać To zdarzenie wnioskowane. Zwykle jest rejestrowane, gdy w tabeli VBAP dla pozycji zostaje ustawiony unikalny kod „Przyczyna odrzucenia” (VBAP-ABGRU). Znacznik czasu należy pobrać z dzienników zmian. Rejestrowanie Ustal znacznik czasu w dokumentach zmian (CDHDR/CDPOS), gdy pole VBAP-ABGRU zostaje wypełnione dla pozycji zwrotu. Typ zdarzenia inferred | |||
| Pozycja zlecenia zwrotu przetworzona | Pojedyncza pozycja zlecenia zwrotu zostaje oznaczona jako w pełni przetworzona. Zwykle następuje to po zakończeniu wszystkich powiązanych z nią działań logistycznych i finansowych. | ||
| Dlaczego to ważne Śledzenie pozycji pozwala ustalić, które produkty lub przyczyny zwrotu powodują najdłuższe opóźnienia. Daje też dokładniejszy obraz zakończenia procesu. Skąd pobrać To zdarzenie wnioskowane na podstawie tabel statusów. Jest rejestrowane, gdy ogólny status pozycji dokumentu sprzedaży (VBUP-GBSTK) zmienia się na „C” (przetworzono w całości). Rejestrowanie Ustal znacznik czasu w dokumentach zmian (CDHDR/CDPOS), gdy status pozycji VBUP-GBSTK zmienia się na „C”. Typ zdarzenia inferred | |||
| Usunięcie blokady zlecenia zwrotu | Oznacza akceptację zgłoszenia zwrotu, która pozwala przejść do kolejnego etapu. Zdarzenie jest zwykle rejestrowane jako zmiana statusu dokumentu lub usunięcie blokady dostawy albo fakturowania. | ||
| Dlaczego to ważne To ważny etap akceptacji. Pomiar czasu potrzebnego na jego osiągnięcie pomaga wykryć wąskie gardła w procesie autoryzacji i akceptacji zwrotu. Skąd pobrać Jest to zdarzenie wywnioskowane na podstawie dzienników zmian dokumentu sprzedaży. Sprawdź tabele CDHDR i CDPOS pod kątem zmian pól blokady w VBAK lub VBAP albo pól statusu w VBUK/VBUP. Rejestrowanie Ustal znacznik czasu usunięcia odpowiedniej blokady na podstawie tabel dokumentów zmian (CDHDR/CDPOS). Typ zdarzenia inferred | |||
| Utworzenie dostawy zwrotnej | Tworzony jest dokument dostawy, który służy do obsługi fizycznego przyjęcia zwracanych produktów. To zdarzenie oznacza rozpoczęcie logistycznej obsługi zwrotu. | ||
| Dlaczego to ważne Pokazuje przejście od obsługi administracyjnej do logistyki fizycznej. Opóźnienia na tym etapie mogą utrudnić planowanie pracy magazynu i wydłużyć cały proces zwrotu. Skąd pobrać Jest to jawne zdarzenie zapisane w tabeli LIKP (nagłówek dostawy). Znacznik czasu utworzenia znajduje się w polu LIKP-ERDAT. Powiązanie z pierwotnym zleceniem zwrotu można znaleźć w tabeli LIPS (LIPS-VGBEL). Rejestrowanie Użyj znacznika czasu utworzenia (ERDAT) z tabeli LIKP dla dostawy powiązanej ze zleceniem zwrotu. Typ zdarzenia explicit | |||
| Utworzenie wniosku o notę uznaniową | Tworzony jest wniosek o notę uznaniową, aby formalnie udokumentować potrzebę zwrotu pieniędzy. W wielu konfiguracjach rolę wniosku o notę uznaniową pełni samo zlecenie zwrotu. | ||
| Dlaczego to ważne To formalny początek finansowego rozliczenia zwrotu. Stanowi podstawę do późniejszych akceptacji finansowych i utworzenia dokumentów. Skąd pobrać Może to być jawne zdarzenie w tabeli VBAK dla dokumentu sprzedaży typu „Wniosek o notę uznaniową” (np. CR) albo to samo zdarzenie co „Utworzenie zlecenia zwrotu”, jeśli typ zlecenia skonfigurowano do fakturowania powiązanego ze zleceniem. Rejestrowanie Użyj znacznika czasu utworzenia (ERDAT) z tabeli VBAK dla dokumentu typu 'CR' albo ponownie wykorzystaj zdarzenie utworzenia zlecenia zwrotu. Typ zdarzenia explicit | |||
Instrukcje ekstrakcji danych
Kroki
- Utwórz program ABAP: Użyj kodu transakcji
SE38, aby utworzyć nowy wykonywalny program ABAP, na przykładZ_PM_RETURN_EXTRACTION. Nadaj mu opisowy tytuł i zapisz jako obiekt lokalny lub w pakiecie programistycznym. - Zdefiniuj ekran wyboru: Zdefiniuj w programie ekran wyboru, który pozwoli filtrować dane. Najważniejsze filtry to zakres dat utworzenia zleceń zwrotu (
S_ERDAT), typ dokumentu sprzedaży dla zwrotów (S_AUART, np. 'RE') oraz kod spółki (P_BUKRS). - Zdefiniuj struktury danych: Utwórz lokalny typ struktury zgodny z wymaganym formatem dziennika zdarzeń. Powinien zawierać pola
ReturnCaseId,ActivityName,EventTime,SourceSystem,LastDataUpdate,ProcessingAgent,ReturnReasonoraz pozostałe wymagane atrybuty. - Zaimplementuj logikę wyboru danych: Napisz główną logikę ABAP, która pobierze dane dla każdej z 12 wymaganych czynności. W tym celu odpytaj tabele SAP, takie jak VBAK, VBAP, LIKP, VBRK, BKPF, CDHDR i CDPOS. Użyj tabeli przepływu dokumentów (VBFA), aby powiązać dokumenty, takie jak dostawy i noty kredytowe, z pierwotnym zleceniem zwrotu.
- Wyodrębnij zdarzenie „Utworzono zlecenie zwrotu”: Wybierz rekordy z tabel
VBAKiVBAPzgodnie z kryteriami określonymi na ekranie wyboru. Numer dokumentu sprzedaży (VBAK-VBELN) będzie pełnił funkcjęReturnCaseId. - Wyodrębnij zmiany statusu i ważne zdarzenia: W przypadku działań takich jak „Usunięto blokadę zlecenia zwrotu” lub „Odrzucono pozycję zlecenia zwrotu” odpytaj tabele dokumentów zmian (
CDHDR,CDPOS) lub pola statusu w tabelach takich jakVBAP(ABGRU). Dane dotyczące kolejnych działań logistycznych i finansowych pobierz z tabel takich jakLIKP,MKPF,VBRKiBKPF. UżyjVBFA, aby powiązać je z początkowym zbiorem zleceń zwrotu. - Wypełnij tabelę dziennika zdarzeń: Dla każdego pobranego działania utwórz rekord w tabeli wewnętrznej zdefiniowanej zgodnie ze strukturą dziennika zdarzeń. Przypisz dane z tabel źródłowych SAP do odpowiednich pól, na przykład
VBAK-ERNAMdoProcessingAgent, aVBAK-ERDATiVBAK-ERZETdoEventTime. - Połącz dane o działaniach: Zadbaj, aby wyniki każdego zapytania SELECT dla danego działania trafiały do jednej głównej tabeli wewnętrznej. W ten sposób powstanie płaski plik, w którym każdy wiersz będzie odpowiadał jednemu zdarzeniu.
- Obsłuż znaczniki czasu i informacje o systemie: Użyj pól systemowych
SY-DATUMiSY-UZEIT, aby wypełnić znacznik czasuLastDataUpdatew każdym wierszu. PoleSY-SYSIDprzypisz doSourceSystem. - Dodaj funkcję wyświetlania wyników: Wyświetl wyniki w siatce ALV (SAP List Viewer) do analizy online, używając modułów funkcyjnych, takich jak
REUSE_ALV_GRID_DISPLAY. Dodaj możliwość pobrania końcowej tabeli wewnętrznej na komputer lokalny w formacie CSV lub zwykłego pliku tekstowego. - Uruchom program i wyeksportuj dane: Uruchom program przez
SE38. Wprowadź kryteria wyboru i wykonaj go. Po wyświetleniu lub przetworzeniu danych użyj funkcji eksportu programu, aby zapisać plik dziennika zdarzeń. Zapisz go w formacie zgodnym z ProcessMind, zwykle jako CSV z wierszem nagłówków.
Konfiguracja
- Zakres dat: Na ekranie wyboru określ zakres dat utworzenia zleceń zwrotu. Do wstępnej analizy zaleca się okres od 3 do 6 miesięcy, aby zachować równowagę między ilością danych a możliwością poznania procesu.
- Typ dokumentu zwrotu: Wybierz typ dokumentu sprzedaży używany w systemie do obsługi zwrotów, na przykład 'RE' dla zwrotów lub 'CR' dla wniosków o notę kredytową. Ten filtr pozwala wyodrębnić właściwy proces. Wprowadź wartości w polu wyboru
S_AUART. - Kod spółki: Określ kod spółki (
P_BUKRS), aby ograniczyć dane do wybranego podmiotu prawnego. Jest to szczególnie ważne w organizacjach obejmujących wiele spółek. - Wymagania wstępne: Użytkownik uruchamiający program musi mieć uprawnienia do transakcji
SE38(uruchamianie programów) oraz dostęp do tabel modułów SD, MM i FI, np. VBAK, LIKP, VBRK, BKPF i CDHDR. Do prac programistycznych potrzebna jest rola programisty ABAP. - Wydajność: Przy bardzo dużych zbiorach obejmujących kilka lat program może działać długo. Warto uruchomić go jako zadanie w tle (
SM36) i zapisać wyniki w systemie plików serwera aplikacji zamiast wyświetlać je online.
Przykładowe zapytanie abap
REPORT Z_PM_RETURN_EXTRACTION.
" =======================================================================
" DATA DECLARATIONS
" =======================================================================
TYPES: BEGIN OF ty_event_log,
returncaseid TYPE vbeln_va,
activityname TYPE string,
eventtime TYPE timestamp,
sourcesystem TYPE sysysid,
lastdataupdate TYPE timestamp,
processingagent TYPE ernam,
returnreason TYPE augru,
materialnumber TYPE matnr,
returnchannel TYPE string, " Placeholder, needs custom logic
requestedrefundamount TYPE netwr,
actualrefundamount TYPE netwr,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log,
ls_event_log TYPE ty_event_log.
DATA: lv_timestamp TYPE timestamp,
lv_last_update TYPE timestamp.
" =======================================================================
" SELECTION SCREEN
" =======================================================================
SELECT-OPTIONS: s_erdat FOR sy-datum OBLIGATORY,
s_auart FOR vbak-auart.
PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY.
" =======================================================================
" MAIN LOGIC
" =======================================================================
START-OF-SELECTION.
" Set static values for the extraction run
GET TIME STAMP FIELD lv_last_update.
" 1. Return Order Created & 6. Credit Memo Request Created
" Note: In many SAP standard processes, the Return Order itself acts as the Credit Memo Request.
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, h~augru, i~matnr, i~netwr
INTO TABLE @DATA(lt_return_orders)
FROM vbak AS h
INNER JOIN vbap AS i ON h~vbeln = i~vbeln
WHERE h~erdat IN @s_erdat
AND h~auart IN @s_auart
AND h~bukrs_vf = @p_bukrs.
LOOP AT lt_return_orders INTO DATA(ls_return_order).
" Activity: Return Order Created
ls_event_log-returncaseid = ls_return_order-vbeln.
ls_event_log-activityname = 'Return Order Created'.
CONVERT DATE ls_return_order-erdat TIME ls_return_order-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_return_order-ernam.
ls_event_log-returnreason = ls_return_order-augru.
ls_event_log-materialnumber = ls_return_order-matnr.
ls_event_log-requestedrefundamount = ls_return_order-netwr.
APPEND ls_event_log TO lt_event_log.
" Activity: Credit Memo Request Created
ls_event_log-activityname = 'Credit Memo Request Created'.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
IF lt_return_orders IS NOT INITIAL.
" 2. Return Order Block Removed (Example for Delivery Block)
SELECT objectid, udate, utime, username
FROM cdhdr
INTO TABLE @DATA(lt_block_changes)
FOR ALL ENTRIES IN @lt_return_orders
WHERE objectclas = 'VERKBELEG'
AND objectid = @lt_return_orders-vbeln
AND tcode = 'VA02'.
IF sy-subrc = 0.
SELECT objectid, fname, value_new
INTO TABLE @DATA(lt_cdpos_block)
FROM cdpos
FOR ALL ENTRIES IN @lt_block_changes
WHERE objectclas = @lt_block_changes-objectclas
AND objectid = @lt_block_changes-objectid
AND changenr = @lt_block_changes-changenr
AND tabname = 'VBAK'
AND fname = 'LIFSK' " Delivery Block field
AND value_new = ''.
LOOP AT lt_cdpos_block INTO DATA(ls_cdpos_block).
READ TABLE lt_block_changes INTO DATA(ls_block_change) WITH KEY objectid = ls_cdpos_block-objectid.
IF sy-subrc = 0.
ls_event_log-returncaseid = ls_cdpos_block-objectid.
ls_event_log-activityname = 'Return Order Block Removed'.
CONVERT DATE ls_block_change-udate TIME ls_block_change-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_block_change-username.
CLEAR: ls_event_log-returnreason, ls_event_log-materialnumber, ls_event_log-requestedrefundamount, ls_event_log-actualrefundamount.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
ENDIF.
" Get subsequent documents from flow
SELECT vbelv, vbtyp_n, vbeln, rfbsk
INTO TABLE @DATA(lt_doc_flow)
FROM vbfa
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbelv = @lt_return_orders-vbeln
AND vbtyp_n IN ('J', 'R', 'M'). " J=Delivery, R=Goods Mvmt, M=Invoice
" 3. Return Delivery Created
SELECT vbeln, erdat, erzet, ernam FROM likp
INTO TABLE @DATA(lt_deliveries)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'J'.
LOOP AT lt_deliveries INTO DATA(ls_delivery).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_del) WITH KEY vbeln = ls_delivery-vbeln.
ls_event_log-returncaseid = ls_doc_flow_del-vbelv.
ls_event_log-activityname = 'Return Delivery Created'.
CONVERT DATE ls_delivery-erdat TIME ls_delivery-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_delivery-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 4. Goods Receipt Posted
SELECT mblnr, mjahr, budat, cputm, usnam FROM mkpf
INTO TABLE @DATA(lt_goods_receipt)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE xblnr = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'R'.
LOOP AT lt_goods_receipt INTO DATA(ls_goods_receipt).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_gr) WITH KEY vbeln = ls_goods_receipt-mblnr.
ls_event_log-returncaseid = ls_doc_flow_gr-vbelv.
ls_event_log-activityname = 'Goods Receipt Posted'.
CONVERT DATE ls_goods_receipt-budat TIME ls_goods_receipt-cputm INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_goods_receipt-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 5. Usage Decision Made (Requires QM Module implementation)
SELECT q~prueflos, q~vdatu, q~vzeit, q~vname
FROM qals AS q
INNER JOIN qave AS v ON q~prueflos = v~prueflos
INTO TABLE @DATA(lt_usage_decisions)
FOR ALL ENTRIES IN @lt_deliveries
WHERE q~kdauf = @lt_deliveries-vbeln.
LOOP AT lt_usage_decisions INTO DATA(ls_ud).
SELECT SINGLE vbelv FROM vbfa INTO @DATA(lv_vbelv_ud) WHERE vbeln = @ls_ud-prueflos.
ls_event_log-returncaseid = lv_vbelv_ud.
ls_event_log-activityname = 'Usage Decision Made'.
CONVERT DATE ls_ud-vdatu TIME ls_ud-vzeit INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_ud-vname.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 7. Credit Memo Created
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, i~netwr, i~vgbel
INTO TABLE @DATA(lt_cred_memos)
FROM vbrk AS h
INNER JOIN vbrp AS i ON h~vbeln = i~vbeln
FOR ALL ENTRIES IN @lt_doc_flow
WHERE h~vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'M'.
LOOP AT lt_cred_memos INTO DATA(ls_cred_memo).
ls_event_log-returncaseid = ls_cred_memo-vgbel.
ls_event_log-activityname = 'Credit Memo Created'.
CONVERT DATE ls_cred_memo-erdat TIME ls_cred_memo-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_cred_memo-ernam.
ls_event_log-actualrefundamount = ls_cred_memo-netwr.
APPEND ls_event_log TO lt_event_log.
" 8. Credit Memo Posted To FI
SELECT SINGLE budat, cputime, usnam FROM bkpf
INTO @DATA(ls_bkpf_post)
WHERE awkey = @ls_cred_memo-vbeln AND awtyp = 'VBRK'.
IF sy-subrc = 0.
ls_event_log-activityname = 'Credit Memo Posted To FI'.
CONVERT DATE ls_bkpf_post-budat TIME ls_bkpf_post-cputime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-processingagent = ls_bkpf_post-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 12. Credit Memo Cleared
SELECT SINGLE augdt FROM bseg
INTO @DATA(lv_augdt)
WHERE bukrs = @p_bukrs
AND belnr = @ls_cred_memo-vbeln
AND augdt IS NOT NULL.
IF sy-subrc = 0 AND lv_augdt IS NOT INITIAL.
ls_event_log-activityname = 'Credit Memo Cleared'.
CONVERT DATE lv_augdt INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
CLEAR: ls_event_log-processingagent.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 9. Return Order Item Completed
SELECT vbeln, erdat, erzet, ernam, abgru FROM vbap
INTO TABLE @DATA(lt_items_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_items_completed INTO DATA(ls_item_completed).
ls_event_log-returncaseid = ls_item_completed-vbeln.
ls_event_log-activityname = 'Return Order Item Completed'.
CONVERT DATE ls_item_completed-erdat TIME ls_item_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 10. Return Order Completed
SELECT vbeln, erdat, erzet, ernam FROM vbak
INTO TABLE @DATA(lt_orders_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_orders_completed INTO DATA(ls_order_completed).
ls_event_log-returncaseid = ls_order_completed-vbeln.
ls_event_log-activityname = 'Return Order Completed'.
CONVERT DATE ls_order_completed-erdat TIME ls_order_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_order_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 11. Return Order Item Rejected
SELECT vbeln, erdat, erzet, ernam FROM vbap
INTO TABLE @DATA(lt_items_rejected)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND abgru IS NOT NULL AND abgru <> ''.
LOOP AT lt_items_rejected INTO DATA(ls_item_rejected).
ls_event_log-returncaseid = ls_item_rejected-vbeln.
ls_event_log-activityname = 'Return Order Item Rejected'.
CONVERT DATE ls_item_rejected-erdat TIME ls_item_rejected-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_rejected-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
ENDIF.
" =======================================================================
" OUTPUT
" =======================================================================
cl_salv_table=>factory(
IMPORTING
r_salv_table = DATA(lo_alv)
CHANGING
t_table = lt_event_log ).
lo_alv->display( ). Kroki
- Wymagania wstępne: Upewnij się, że konto bazy danych ma uprawnienia do odczytu wymaganych tabel SAP ECC. Obejmuje to tabele z modułów sprzedaży i dystrybucji (SD), gospodarki materiałowej (MM) oraz rachunkowości finansowej (FI). Do połączenia z bazą potrzebne będzie odpowiednie narzędzie SQL, takie jak DBeaver, SAP HANA Studio lub Oracle SQL Developer.
- Sprawdź konfigurację systemu: Przed uruchomieniem zapytania ustal, jakie typy dokumentów służą w organizacji do obsługi zwrotów. W zapytaniu znajduje się symbol zastępczy
[YOUR_RETURN_ORDER_TYPES]. Zastąp go właściwymi wartościami, na przykład 'RE' dla standardowych zwrotów. - Przygotuj zapytanie: Skopiuj pełne zapytanie SQL z sekcji „query” do używanego klienta SQL.
- Ustaw parametry: Znajdź wyrażenie Common Table Expression (CTE) o nazwie
BaseReturnOrdersna początku zapytania. Zmień klauzulęWHERE, zastępując[START_DATE]i[END_DATE]wybranym zakresem dat. Zaktualizuj listę typów zleceń zwrotu i w razie potrzeby dodaj filtr kodu spółki (BUKRS_VF). - Uruchom zapytanie: Wykonaj zmodyfikowane zapytanie w bazie SAP ECC. Czas wykonania zależy od wybranego zakresu dat i wielkości bazy.
- Sprawdź surowe dane: Po zakończeniu zapytania sprawdź wyniki. Upewnij się, że kolumny
ReturnCaseId,ActivityNameiEventTimesą wypełnione oraz że dane obejmują wiele działań. - Wyeksportuj dane do CSV: Wyeksportuj cały zestaw wyników z klienta SQL do pliku CSV. Użyj kodowania UTF-8, aby zachować wszystkie znaki.
- Przygotuj plik do przesłania: Otwórz plik CSV i sprawdź, czy nagłówki kolumn dokładnie odpowiadają wymaganym atrybutom, takim jak
ReturnCaseId,ActivityName,EventTime,SourceSystemi inne. Popraw nagłówki, jeśli klient SQL zmienił je podczas eksportu. - Prześlij plik: Prześlij poprawny plik CSV na platformę ProcessMind do analizy.
Konfiguracja
- Typy dokumentów zwrotu: Zapytanie należy skonfigurować z typami dokumentów sprzedaży używanymi w systemie SAP do obsługi zleceń zwrotu. Zastąp symbol zastępczy
[YOUR_RETURN_ORDER_TYPES]właściwymi wartościami. Typowe przykłady to 'RE' lub niestandardowe typy zaczynające się od 'Z'. - Zakres dat: Należy określić odpowiedni zakres dat ekstrakcji. Do wstępnej analizy zwykle zaleca się dane z okresu od 3 do 6 miesięcy. Ustaw zakres, zastępując symbole
[START_DATE]i[END_DATE]datami w formacie 'YYYYMMDD'. - Kod spółki: W organizacjach z wieloma kodami spółek warto ograniczyć dane, aby skupić analizę na wybranym obszarze. W początkowym CTE można dodać filtr, na przykład
VBAK.BUKRS_VF = '[YOUR_COMPANY_CODE]'. - Dialekt bazy danych: Zapytanie korzysta ze standardowych funkcji SQL. Konwersja daty i czasu, na przykład
TO_TIMESTAMP, oraz łączenie ciągów znaków (CONCAT) mogą jednak wymagać drobnych zmian składni zależnie od używanej bazy, np. Oracle, HANA lub DB2. - Wymagane uprawnienia: Konto bazy danych musi mieć uprawnienia do odczytu następujących tabel: VBAK, VBAP, VBFA, LIKP, LIPS, VBRK, VBRP, MKPF, MSEG, BKPF, BSAD, QALS, QAVE, CDHDR i CDPOS.
Przykładowe zapytanie sql
WITH BaseReturnOrders AS (
SELECT
VBAK.VBELN AS ReturnOrderNumber,
VBAP.POSNR AS ReturnOrderItemNumber
FROM VBAK
JOIN VBAP ON VBAK.VBELN = VBAP.VBELN
WHERE VBAK.AUART IN ('[YOUR_RETURN_ORDER_TYPES]') -- e.g., 'RE'
AND VBAK.ERDAT BETWEEN '[START_DATE]' AND '[END_DATE]' -- e.g., '20230101' and '20231231'
)
-- 1. Return Order Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBAK.ERDAT, VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
UNION ALL
-- 2. Return Order Block Removed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Block Removed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAK'
AND CDPOS.FNAME IN ('LIFSK', 'FAKSK')
AND CDPOS.VALUE_NEW = ''
AND CDPOS.VALUE_OLD <> ''
UNION ALL
-- 3. Return Delivery Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Delivery Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(LIKP.ERDAT, LIKP.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
LIKP.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIKP ON VBFA.VBELN = LIKP.VBELN
UNION ALL
-- 4. Goods Receipt Posted
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Goods Receipt Posted' AS "ActivityName",
TO_TIMESTAMP(CONCAT(MKPF.CPUDT, MKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
MKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIPS ON VBFA.VBELN = LIPS.VBELN AND VBFA.POSNN = LIPS.POSNR
JOIN MSEG ON LIPS.VBELN = MSEG.LFBNR AND LIPS.POSNR = MSEG.LFPOS
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART IN ('651', '653', '655') -- Standard returns movement types
UNION ALL
-- 5. Usage Decision Made
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Usage Decision Made' AS "ActivityName",
TO_TIMESTAMP(CONCAT(QAVE.ADAT, QAVE.ATIM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
QAVE.AENAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN QALS ON VBFA.VBELN = QALS.VBELN AND VBFA.POSNN = QALS.POSNR -- Linking inspection lot to delivery item
JOIN QAVE ON QALS.PRUEFLOS = QAVE.PRUEFLOS
UNION ALL
-- 6. Credit Memo Request Created (assumes a separate doc, or can be the return order itself)
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Request Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CMR_VBAK.ERDAT, CMR_VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CMR_VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'K' -- 'K' is Credit Memo Request
JOIN VBAK AS CMR_VBAK ON VBFA.VBELN = CMR_VBAK.VBELN
UNION ALL
-- 7. Credit Memo Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBRK.ERDAT, VBRK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBRK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
WHERE VBRK.FKART IN ('[YOUR_CREDIT_MEMO_TYPES]') -- e.g., 'G2'
UNION ALL
-- 8. Credit Memo Posted To FI
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Posted To FI' AS "ActivityName",
TO_TIMESTAMP(CONCAT(BKPF.CPUDT, BKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
BKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BKPF ON VBRK.VBELN = BKPF.AWKEY AND BKPF.AWTYP = 'VBRK'
UNION ALL
-- 9. Return Order Item Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUP'
AND CDPOS.FNAME = 'GBSTA'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 10. Return Order Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUK'
AND CDPOS.FNAME = 'GBSTK'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 11. Return Order Item Rejected
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Rejected' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
CDPOS.VALUE_NEW AS "ReturnReason", -- Using rejection reason for this specific event
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAP'
AND CDPOS.FNAME = 'ABGRU'
AND CDPOS.VALUE_NEW <> ''
UNION ALL
-- 12. Credit Memo Cleared
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Cleared' AS "ActivityName",
TO_TIMESTAMP(BSAD.AUGDT, 'YYYYMMDD') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CLEAR_DOC.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BSAD ON VBRK.VBELN = BSAD.VBELN
JOIN BKPF AS CLEAR_DOC ON BSAD.AUGBL = CLEAR_DOC.BELNR AND BSAD.BUKRS = CLEAR_DOC.BUKRS AND BSAD.GJAHR_AUGL = CLEAR_DOC.GJAHR; Gotowi do rozpoczęcia?
Skorzystaj z tego szablonu już dziś, aby usprawnić zbieranie danych i lepiej poznać przebieg procesu zwrotów i refundacji.
Usprawnij obsługę zwrotów i refundacji już teraz
Usprawnij obsługę zwrotów w SAP ECC i skróć czas realizacji o 30%. Zacznij już dziś.
Karta kredytowa nie jest wymagana. Konfiguracja zajmuje kilka minut.