Template dati per la gestione dei resi e dei rimborsi
Template dati per la gestione dei resi e dei rimborsi
- Attributi consigliati da raccogliere
- Attività chiave da tracciare
- Guida all'estrazione
Attributi di gestione resi e rimborsi
| Nome | Descrizione | ||
|---|---|---|---|
| ID caso di reso ReturnCaseId | L'identificatore univoco della richiesta di reso di un cliente, che collega tutte le attività e i documenti correlati. | ||
| Descrizione L'ID caso di reso funge da chiave primaria per tracciare l'intero ciclo di vita di un processo di reso, dall'avvio alla chiusura. Ogni ID corrisponde a un reso specifico, includendo tutti gli eventi associati come creazione ordine, consegna, ispezione ed elaborazione della nota di credito. Nell'analisi dei processi, questo attributo è fondamentale per costruire la mappa del processo. Permette al sistema di raggruppare i singoli eventi in percorsi end-to-end, abilitando l'analisi delle varianti, dei tempi di ciclo e dei bottleneck per ogni singola istanza di reso. Perché è importante Si tratta dell'identificatore del caso essenziale che collega tutte le fasi del percorso di reso, rendendo possibile l'analisi del flusso del processo end-to-end e delle relative performance. Dove trovare Solitamente è il numero dell'ordine di reso del modulo Sales and Distribution (SD). Si trova nella tabella VBAK (Dati testata documento di vendita), campo VBELN, dove la categoria documento (VBAK-VBTYP) è 'H' per i Resi. Esempi 600001236000045660000789 | |||
| Nome attività ActivityName | Il nome di uno specifico evento di business o fase avvenuta all'interno del processo di reso. | ||
| Descrizione Questo attributo descrive una singola azione o un cambio di stato nel ciclo di vita del reso, come 'Ordine di reso creato', 'Entrata merci registrata' o 'Nota di credito creata'. Queste attività sono i blocchi costitutivi della mappa del processo. Analizzare la sequenza e la frequenza di queste attività aiuta a identificare i percorsi più comuni, le deviazioni e i loop di rework. È fondamentale per capire cosa succede in un caso e in quale ordine, costituendo la base per ogni analisi di Process Mining. Perché è importante Le attività definiscono le fasi del processo. Analizzare la loro sequenza, durata e frequenza è il cuore del Process Mining e rivela come viene effettivamente svolto il lavoro. Dove trovare Derivato dalle modifiche di stato in tabelle come VBUK/VBUP, eventi di creazione documenti (es. VBAK, LIKP, VBRK) o dai log di modifica nelle tabelle CDHDR/CDPOS. Esempi Ordine di reso creatoRicevimento merce registratoNota di Credito CreataPosizione ordine di reso completata | |||
| Timestamp Evento EventTime | La data e l'ora esatte in cui si è verificata l'attività. | ||
| Descrizione Questo timestamp indica il momento esatto in cui è avvenuto un evento di business. Viene registrato per ogni attività del processo, fornendo la sequenza cronologica degli eventi all'interno di un caso. L'Event Time è fondamentale per tutte le analisi temporali, incluso il calcolo dei tempi di ciclo tra le attività, l'identificazione dei bottleneck in cui si perde tempo in attesa e la misurazione della durata totale del caso. Consente l'analisi delle performance e i controlli di conformità rispetto agli accordi sul livello di servizio (SLA). Perché è importante Questo timestamp è essenziale per calcolare tutte le durate, analizzare le performance del processo, identificare i bottleneck e comprendere la cronologia di ogni caso di reso. Dove trovare Ricavato da vari campi di data e ora nelle tabelle SAP. Per gli eventi di creazione, si utilizzano spesso i campi ERDAT ed ERZET (ad es. in VBAK). Per gli eventi di modifica, si consultano UDATE e UTIME nella tabella CDHDR. Esempi 2023-04-15T10:22:05Z2023-04-16T14:01:30Z2023-04-18T09:15:00Z | |||
| Sistema di Origine SourceSystem | Il sistema da cui i dati sono stati estratti. | ||
| Descrizione Questo attributo identifica l'origine dei dati, fondamentale in ambienti con più sistemi. Fornisce contesto e aiuta a garantire il lignaggio e l'integrità dei dati. In fase di analisi, viene utilizzato per segmentare o filtrare i dati quando si combinano processi provenienti da diversi sistemi sorgente. Conferma che gli eventi provengono dall'applicazione prevista, in questo caso SAP ECC. Perché è importante Identifica l'origine dei dati, aspetto fondamentale per la data governance e per analisi che coprono più sistemi aziendali. Dove trovare Questo è un valore statico definito durante l'estrazione dati per identificare la specifica istanza SAP ECC (es. 'ECC_PROD_100'). Esempi SAP_ECC_PRODSAPECC_FINANCE_200 | |||
| Ultimo `Data Update` LastDataUpdate | Il timestamp che indica l'ultima volta che i dati per questo processo sono stati aggiornati. | ||
| Descrizione Questo attributo registra la data e l'ora dell'estrazione o dell'aggiornamento dati più recente. Garantisce trasparenza sulla freschezza delle informazioni analizzate. Nell'analisi, è importante per comprendere quanto siano attuali gli insight. Gli utenti possono vedere quanto sono recenti i dati, il che influisce sulla pertinenza dei risultati, specialmente per il monitoraggio delle operazioni in corso. Perché è importante Indica l'aggiornamento dei dati, assicurando agli utenti di conoscere l'attualità dell'analisi e quando è previsto il prossimo aggiornamento. Dove trovare Questo è un attributo di metadati popolato con il timestamp di esecuzione del job di estrazione dati. Esempi 2023-05-20T02:00:00Z2023-05-21T02:00:00Z | |||
| Canale di reso ReturnChannel | Il canale attraverso il quale è stato avviato il reso, come online, in negozio o tramite call center. | ||
| Descrizione Questo attributo specifica l'origine o il metodo di inserimento della richiesta di reso. Aiuta a distinguere tra resi avviati tramite portale web, in un negozio fisico o tramite il servizio clienti. Segmentare il processo per Canale di Reso è fondamentale per comprendere le differenze operative e l'allocazione delle risorse. Ad esempio, i resi in negozio potrebbero avere tempi di ispezione più rapidi ma passaggi documentali diversi rispetto ai resi online. È una dimensione chiave per la dashboard 'Trend throughput del processo di reso'. Perché è importante Distingue la modalità di apertura del reso, che spesso influisce sul flusso del processo, sulle risorse necessarie e sui tempi di ciclo dei diversi canali. Dove trovare Spesso non è un campo standard in SAP ECC e potrebbe dover essere ricavato da un campo personalizzato (es. in VBAK) o dedotto da altri dati come l'Organizzazione commerciale (VKORG) o il Canale distributivo (VTWEG). Consulti la documentazione SAP ECC per l'implementazione specifica. Esempi Portale OnlineIn negozioCall Center | |||
| Importo effettivo del rimborso ActualRefundAmount | L'importo finale accreditato al cliente, così come registrato nei documenti finanziari. | ||
| Descrizione Questo attributo rappresenta il valore finale confermato del rimborso, elaborato e registrato nel sistema contabile. L'importo può differire da quello richiesto a causa di commissioni di riassortimento, rettifiche basate sulle condizioni dell'articolo o altre policy. È un attributo fondamentale per la dashboard 'Monitoraggio discrepanze importo rimborso'. Confrontandolo con l'importo richiesto, aiuta a identificare problemi sistemici nel calcolo del rimborso e nel processo di approvazione, garantendo la precisione finanziaria. Perché è importante Rappresenta l'esito finanziario finale del reso. Il confronto con l'importo richiesto aiuta a garantire l'accuratezza e a identificare eventuali perdite finanziarie (financial leakage). Dove trovare Ricavato dal documento finanziario associato alla nota di credito. Solitamente si trova nella tabella BSEG (Accounting Document Segment), campo WRBTR (Importo nella valuta del documento), per la relativa registrazione contabile. Esempi 150.0045.001200.75 | |||
| Importo rimborso richiesto RequestedRefundAmount | Il valore atteso del rimborso, solitamente basato sul valore netto degli articoli resi. | ||
| Descrizione Questo attributo rappresenta il valore monetario iniziale del reso, così come inserito nell'ordine di reso. Funge da base per l'analisi finanziaria e la riconciliazione. L'importo viene confrontato con l' 'Importo rimborso effettivo' per tracciare le discrepanze, metrica chiave per la dashboard 'Monitoraggio discrepanze importo rimborso'. Analizzare questo valore aiuta a monitorare l'impatto finanziario dei resi e a identificare potenziali problemi nel calcolo dei prezzi o dei crediti. Perché è importante Stabilisce il valore finanziario iniziale del reso, fondamentale per tracciare le discrepanze e comprendere il valore totale della merce resa. Dove trovare Questo valore è solitamente il valore netto a livello di posizione dell'ordine di reso. Si trova nella tabella VBAP, campo NETWR. Esempi 150.0049,991250.75 | |||
| Motivo del reso ReturnReason | Il codice motivo fornito dal cliente per la restituzione dell'articolo. | ||
| Descrizione Questo attributo indica il motivo del reso del prodotto, utilizzando i codici motivo predefiniti in SAP (es. 'Danneggiato durante il trasporto', 'Articolo errato spedito' o 'Taglia errata'). Si tratta di una dimensione critica per la Root Cause Analysis. Filtrando la mappa del processo o i KPI per Motivo del Reso, gli analisti possono capire se determinati motivi sono associati a tempi di elaborazione più lunghi, tassi di fallimento ispezione più alti o deviazioni specifiche. Questi insight possono guidare miglioramenti nella qualità del prodotto, nella logistica o nei processi di vendita. Perché è importante Spiega il motivo del reso, permettendo l'analisi delle cause radice per ridurre i tassi di reso agendo su qualità del prodotto, spedizione o accuratezza delle descrizioni. Dove trovare Si trova nella tabella delle posizioni dei documenti di vendita VBAP, campo ABGRU (Motivo del rifiuto). Esempi 001 - Prodotto danneggiato002 - Prodotto errato005 - Arrivato in ritardo | |||
| Numero materiale MaterialNumber | L'identificatore univoco del prodotto restituito. | ||
| Descrizione Il Numero Materiale (o SKU) specifica l'articolo esatto coinvolto nel reso, consentendo un'analisi dettagliata a livello di prodotto. Analizzando i resi per Numero Materiale, le aziende possono identificare i prodotti con alti tassi di reso, segno di possibili problemi qualitativi, descrizioni imprecise o difetti di fabbrica. È un dato essenziale per dashboard come 'Impatto dei resi sull'inventario' e per capire come i diversi prodotti si muovono nel processo. Perché è importante Individua quali prodotti vengono resi, mettendo in luce potenziali problemi di controllo qualità o descrizioni non accurate. Dove trovare Si trova nella tabella delle posizioni dei documenti di vendita VBAP, campo MATNR. Esempi RM-1025FG-2050-BACC-5591 | |||
| Operatore incaricato ProcessingAgent | L'ID utente del dipendente che ha eseguito l'attività. | ||
| Descrizione Questo attributo rileva il nome utente della persona responsabile dell'esecuzione di una fase specifica del processo, come la creazione dell'ordine di reso o la registrazione dell'entrata merci. È spesso indicato come utente 'Creato da' o 'Modificato da'. L'analisi per Operatore Incaricato è fondamentale per la gestione delle performance e l'analisi delle risorse. Aiuta a identificare gli operatori più efficienti, coloro che potrebbero necessitare di formazione aggiuntiva e la distribuzione del carico di lavoro nel team. Viene utilizzato in dashboard come 'Performance elaborazione resi per operatore' per confrontare tempi di ciclo e throughput. Perché è importante Traccia il coinvolgimento degli utenti, permettendo l'analisi delle performance del team, la distribuzione del carico di lavoro e l'identificazione di necessità formative o best practice. Dove trovare Solitamente si trova in campi come ERNAM (Creato da) o AENAM (Modificato da) nelle tabelle di testata come VBAK, LIKP, VBRK. Per gli eventi di modifica, corrisponde a USERNAME in CDHDR. Esempi CBURNSDSCRANTONJHALPERT | |||
| Aderenza alla policy dei resi ReturnPolicyAdherence | Un indicatore che segnala se il reso è conforme a tutte le regole e policy aziendali definite. | ||
| Descrizione Questo attributo booleano calcolato indica se un caso di reso ha seguito le policy aziendali standard. La logica può includere il controllo di più condizioni, come l'avvio del reso entro i tempi consentiti, la validità del codice motivo per il prodotto o l'ottenimento dell'approvazione del responsabile per le eccezioni. Questo attributo alimenta la dashboard 'Conformità policy approvazione resi'. Consente la misurazione diretta del tasso di conformità e aiuta a identificare quali policy vengono bypassate più spesso, permettendo miglioramenti mirati o formazione specifica. Perché è importante Misura la conformità alle regole aziendali, aiutando ad applicare le policy in modo coerente e a identificare i casi che richiedono revisioni speciali. Dove trovare Questo è un attributo derivato basato su un set di regole aziendali. Ad esempio: (Data avvio reso - Data acquisto originale) <= 30 giorni E ReturnReason NON È NULL. Esempi truefalse | |||
| Codice Società CompanyCode | L'entità legale o la società responsabile della transazione. | ||
| Descrizione La Società (Company Code) rappresenta un'unità contabile autonoma all'interno di SAP. Tutte le transazioni finanziarie, inclusi resi e rimborsi, sono registrate in una specifica società. Questo attributo è essenziale per il reporting finanziario e per segmentare il processo in organizzazioni multinazionali. L'analisi per Società consente di confrontare le performance del processo di reso tra diverse entità legali all'interno della corporazione. Perché è importante Consente di filtrare e confrontare i processi di reso tra diverse entità legali dell'organizzazione, operazione fondamentale per l'analisi finanziaria. Dove trovare Si trova nella tabella di testata dei documenti di vendita VBAK, campo BUKRS_VF (Società per fatturazione). Esempi 10002000US01 | |||
| Data obiettivo SLA rimborso RefundSLATargetDate | La data entro la quale è prevista l'elaborazione del rimborso in base agli accordi sul livello di servizio (SLA). | ||
| Descrizione Questo attributo definisce la scadenza per il completamento del processo di rimborso per un dato caso di reso. Solitamente viene calcolato in base a regole aziendali, come '5 giorni lavorativi dal ricevimento merce'. Questa data obiettivo è il benchmark rispetto al quale viene misurata la performance reale. È la componente centrale della dashboard 'Conformità SLA elaborazione rimborsi', che consente all'azienda di monitorare il rispetto degli impegni con i clienti e identificare i casi a rischio di violazione degli SLA. Perché è importante Stabilisce l'obiettivo di performance per l'elaborazione dei rimborsi, consentendo all'azienda di misurare la conformità agli SLA e di dare priorità alle pratiche scadute. Dove trovare In genere non è un campo SAP standard e dovrebbe essere derivato in base a regole aziendali. Potrebbe essere calcolato da un campo data chiave (es. data ricezione merci da MKPF) più una durata configurata. Consulti la documentazione SAP ECC o i requisiti aziendali. Esempi 2023-04-25T23:59:59Z2023-04-28T23:59:59Z2023-05-02T23:59:59Z | |||
| Discrepanza importo rimborso RefundAmountDiscrepancy | La differenza calcolata tra l'importo del rimborso effettivo e quello richiesto. | ||
| Descrizione Questa metrica calcolata quantifica la differenza monetaria tra quanto richiesto inizialmente nell'ordine di reso e quanto effettivamente emesso nella nota di credito. Un valore positivo può indicare un rimborso parziale, mentre un valore negativo (insolito) potrebbe indicare un pagamento in eccesso. L'attributo è la misura chiave per la dashboard 'Monitoraggio discrepanze importo rimborso'. Aiuta a identificare e analizzare rapidamente i casi con deviazioni finanziarie dovute a valutazioni delle condizioni dell'articolo, commissioni di riassortimento o errori, garantendo il controllo finanziario e l'aderenza alle policy. Perché è importante Misura direttamente le deviazioni finanziarie nel processo di rimborso, aiutando a identificare la mancata conformità alle policy, errori di elaborazione o perdite finanziarie (leakage). Dove trovare Campo calcolato: ActualRefundAmount - RequestedRefundAmount. Esempi 0.00-4.99-50.00 | |||
| Documento di vendita originale OriginalSalesDocument | Il numero dell'ordine di vendita originale a cui si riferisce il reso. | ||
| Descrizione Questo attributo fornisce un collegamento diretto all'acquisto iniziale del cliente. È un documento di riferimento che connette il reso ai dettagli della transazione originale. Questo link è prezioso per analisi approfondite: permette di indagare perché le vendite di certi ordini generano resi, di verificare prezzi e condizioni originali e di comprendere l'intero ciclo di vita 'dall'ordine al reso'. Aiuta a capire, ad esempio, se i prodotti venduti tramite specifici canali o campagne abbiano tassi di reso più elevati. Perché è importante Collega il reso alla vendita originale, permettendo una visione a 360 gradi della transazione e un'analisi più profonda delle cause radice. Dove trovare Questo riferimento è memorizzato a livello di posizione dell'ordine di reso. Si trova nella tabella VBAP, campo VGBEL (Numero del documento di riferimento). Esempi 100034561000987110012345 | |||
| È Conforme agli SLA IsSLACompliant | Un indicatore che specifica se il rimborso è stato elaborato entro i termini dell'accordo sul livello del servizio (SLA). | ||
| Descrizione Questo attributo booleano calcolato confronta la data effettiva dell'attività 'Rimborso elaborato' con la 'Data obiettivo SLA rimborso'. Risulta vero se il rimborso è stato completato in tempo, falso in caso contrario. Semplifica l'analisi e la reportistica fornendo un esito binario chiaro sulla performance degli SLA per ogni caso. Viene utilizzato per calcolare il tasso globale di 'Conformità SLA elaborazione rimborsi' e permette di isolare e analizzare facilmente i casi non conformi tramite filtri. Perché è importante Fornisce un indicatore binario chiaro sulle performance degli SLA per ogni caso, semplificando il monitoraggio della conformità e la reportistica. Dove trovare Questo è un attributo calcolato. La logica è: EventTime 'Rimborso elaborato' <= RefundSLATargetDate. Esempi truefalse | |||
| ID Cliente CustomerId | L'identificatore univoco del cliente che avvia il reso. | ||
| Descrizione Questo attributo identifica il cliente specifico (il 'Committente' in termini SAP) che effettua il reso. Collega la transazione ai dati anagrafici del cliente. L'analisi per ID Cliente aiuta a individuare i clienti con resi frequenti, che potrebbero segnalare insoddisfazione o un potenziale uso improprio delle policy. Può anche essere incrociata con i dati di segmentazione per capire se determinati gruppi di clienti hanno comportamenti di reso o esperienze di processo differenti. Perché è importante Collega i resi a clienti specifici, permettendo di analizzare il comportamento d'acquisto, identificare chi rende prodotti abitualmente e valutare l'impatto sulle relazioni. Dove trovare Si trova nella tabella di testata dei documenti di vendita VBAK, campo KUNNR (Committente). Esempi CUST-100432CUST-203991CUST-831102 | |||
| Numero nota di credito CreditMemoNumber | L'identificatore univoco del documento di nota di credito emesso per il rimborso. | ||
| Descrizione La Nota di Credito è il documento di fatturazione ufficiale in SAP che formalizza il rimborso da pagare al cliente. Questo numero identifica in modo univoco il documento finanziario. Questo attributo è fondamentale per la riconciliazione finanziaria e per monitorare il processo dal reso operativo al regolamento contabile. Rappresenta una milestone chiave e viene utilizzato per trovare i documenti contabili correlati per attributi come l' 'Importo rimborso effettivo'. Perché è importante Fornisce un collegamento diretto al documento finanziario che autorizza il rimborso al cliente, elemento essenziale per l'audit finanziario e la riconciliazione. Dove trovare La nota di credito è un documento di fatturazione. Il suo numero si trova nella tabella VBRK (Dati testata documento fatturazione), campo VBELN. Il collegamento si trova tramite il flusso documenti dell'ordine di reso. Esempi 900011229000334490005566 | |||
| Stabilimento Plant | L'ubicazione fisica o lo stabilimento in cui l'articolo reso viene ricevuto ed elaborato. | ||
| Descrizione Il Plant (Divisione) in SAP rappresenta un'ubicazione fisica, come un magazzino o un centro di distribuzione. Per i resi, è solitamente il luogo di ricezione e ispezione. L'analisi per Plant aiuta a identificare variazioni di performance tra diverse strutture, evidenziando quali magazzini sono più efficienti nelle ispezioni o hanno una produttività maggiore, supportando la dashboard 'Throughput ed efficienza dell'ispezione articoli'. Perché è importante Identifica il luogo fisico in cui viene elaborato il reso, permettendo di confrontare le performance di diversi magazzini o centri di distribuzione. Dove trovare Si trova a livello di posizione nell'ordine di reso, tabella VBAP, campo WERKS. Esempi PL01WH02DC05 | |||
| Stato ordine di reso ReturnOrderStatus | Lo stato complessivo di elaborazione del caso di ordine di reso. | ||
| Descrizione Questo attributo fornisce un'istantanea dello stato attuale del caso di reso, come 'Aperto', 'In corso' o 'Completato'. Deriva dalla combinazione degli stati a livello di testata o posizione del documento di vendita. In fase di analisi, è utile per filtrare i casi e concentrarsi sui resi attivi o conclusi. Aiuta a monitorare il carico di lavoro complessivo e l'avanzamento dei casi aperti, offrendo un esito di alto livello per ogni percorso di reso. Perché è importante Offre una panoramica di alto livello sulla fase del ciclo di vita in cui si trova un caso, consentendo di filtrare e analizzare i resi aperti, in corso o chiusi. Dove trovare Derivato dai campi di stato nelle tabelle VBUK (stato testata) e VBUP (stato posizione). Ad esempio, VBUK-GBSTK indica lo stato di elaborazione complessivo del documento. Esempi ApertoIn ElaborazioneCompletato | |||
| Tempo di Ciclo End-to-End EndToEndCycleTime | Il tempo totale trascorso dalla prima all'ultima attività di un caso di reso. | ||
| Descrizione Si tratta di una metrica a livello di caso calcolata come la durata tra il primo evento in assoluto (es. 'Ordine di reso creato') e l'evento finale (es. 'Ordine di reso completato' o 'Nota di credito chiusa'). Rappresenta il tempo totale di permanenza di un reso nel processo. È un indicatore chiave (KPI) per l'efficienza complessiva. Viene utilizzato nelle analisi dei trend e nei benchmark per monitorare i miglioramenti nel tempo. Analizzare la distribuzione di questa metrica aiuta a identificare i fattori (come il tipo di prodotto o il motivo del reso) che correlano con tempi di risoluzione più lunghi o più brevi. Perché è importante Misura la durata totale del processo di reso, fornendo un indicatore chiave dell'efficienza complessiva e dell'esperienza cliente. Dove trovare Questa è una metrica calcolata. Corrisponde al timestamp dell'ultima attività del caso meno il timestamp della prima attività. Esempi 5 giorni 4 ore12 giorni 8 ore3 giorni 2 ore | |||
Attività di gestione resi e rimborsi
| Activity | Descrizione | ||
|---|---|---|---|
| Decisione sull'utilizzo effettuata | Dopo l'ispezione, un responsabile della qualità o un ispettore prende una decisione formale sulle condizioni dell'articolo. Questa decisione determina il destino dell'oggetto: rientro a magazzino, rottamazione o riparazione. | ||
| Perché è importante Questa attività è fondamentale per comprendere l'efficienza dell'ispezione e i suoi esiti. La decisione ha un impatto diretto sull'importo del rimborso e sulla gestione dell'inventario. Dove trovare Se si utilizza SAP QM, questo è un evento esplicito catturato nella tabella QAVE (decisione d'impiego). L'ora della decisione è memorizzata in QAVE-VDATUM. Il collegamento alla consegna si trova nella tabella QALS. Acquisisci Utilizzi la data della decisione di utilizzo (VDATUM) dalla tabella QAVE, collegata tramite il lotto di controllo (QALS-PRUEFLOS). Tipo di evento explicit | |||
| Nota di Credito Creata | Viene generato un documento di fatturazione (nota di credito) per autorizzare il credito finanziario al cliente. È il documento contabile ufficiale che formalizza l'importo del rimborso. | ||
| Perché è importante Questa è una milestone finanziaria importante. Analizzare il tempo necessario per creare la nota di credito aiuta a identificare i ritardi nell'elaborazione dei documenti finanziari dopo il ricevimento merce e l'ispezione. Dove trovare Questo è un evento esplicito registrato nella tabella VBRK (Testata documento fatturazione). La data di creazione è VBRK-ERDAT. La nota di credito è collegata all'ordine di reso o alla richiesta di nota credito nel flusso documenti. Acquisisci Utilizzi il timestamp di creazione (ERDAT) dalla tabella VBRK per il relativo documento di fatturazione. Tipo di evento explicit | |||
| Nota di credito registrata in FI | La nota di credito viene rilasciata alla contabilità finanziaria, diventando una registrazione ufficiale di contabilità clienti. Questo passaggio avvia l'effettivo processo di pagamento del rimborso al cliente. | ||
| Perché è importante Questa attività indica il momento in cui il rimborso viene riconosciuto finanziariamente dall'azienda. Eventuali ritardi tra la creazione della nota di credito e la sua registrazione possono rallentare il rimborso effettivo al cliente. Dove trovare Questo è un evento dedotto, identificato quando lo stato di registrazione nella testata del documento fatturazione (VBRK-RFBSK) è aggiornato a 'C' (Il documento di registrazione è stato creato). La data effettiva di creazione del documento contabile è nella tabella BKPF. Acquisisci Identificare il timestamp quando VBRK-RFBSK è impostato su 'C', oppure utilizzare la data di creazione (CPUDT) dal documento contabile BKPF collegato. Tipo di evento inferred | |||
| Ordine di reso completato | Questa attività segna la fine del processo di reso dal punto di vista delle vendite e della distribuzione. Avviene quando tutte le voci dell'ordine di reso sono state completamente elaborate e chiuse. | ||
| Perché è importante Questo è l'evento di fine principale del processo. Misurare il tempo dall' 'Ordine di reso creato' a questa attività fornisce il tempo di ciclo end-to-end per il caso di reso. Dove trovare Questo è un evento dedotto dalle tabelle di stato. Viene rilevato quando lo stato complessivo della testata del documento di vendita (VBUK-GBSTK) viene aggiornato a 'C' (Completamente elaborato). Acquisisci Identificare il timestamp dai documenti di modifica (CDHDR/CDPOS) quando il campo di stato testata VBUK-GBSTK passa a 'C'. Tipo di evento inferred | |||
| Ordine di reso creato | Questa attività segna l'avvio del processo di reso quando un cliente richiede di restituire un prodotto. Viene rilevata quando viene creato un nuovo documento di vendita di tipo 'Reso' (es. RE) in SAP ECC. | ||
| Perché è importante Questo è l'evento di inizio principale per il processo di reso. Analizzare il tempo tra questa attività e le altre aiuta a misurare il tempo di ciclo totale e a identificare i ritardi iniziali di elaborazione. Dove trovare Questo è un evento esplicito registrato nella tabella VBAK (Testata documento di vendita). Il timestamp di creazione è memorizzato in VBAK-ERDAT e VBAK-ERZET per il relativo numero di documento (VBAK-VBELN) con tipo d'ordine VBAK-AUART = 'RE'. Acquisisci Utilizzi il timestamp di creazione (ERDAT, ERZET) dalla tabella VBAK per i documenti di vendita di tipo 'RE'. Tipo di evento explicit | |||
| Ricevimento merce registrato | Questa attività avviene quando l'articolo fisico restituito viene ricevuto al magazzino o centro di elaborazione. Viene rilevata dalla registrazione di un documento di movimento merci a fronte della consegna del reso. | ||
| Perché è importante Un traguardo fondamentale che indica che l'azienda ha preso possesso dell'articolo reso. È il punto di partenza per l'ispezione fisica e influisce sulla precisione dell'inventario. Dove trovare Questo evento può essere dedotto dallo stato del movimento merci della posizione di consegna reso nella tabella VBUP (es. WBSTA = 'C'). Il timestamp esatto si trova nella testata del documento materiale (MKPF-BUDAT) per la relativa entrata merci. Acquisisci Individuare la data di registrazione (BUDAT) dalla tabella MKPF per il documento materiale collegato alla consegna del reso. Tipo di evento inferred | |||
| Blocco ordine di reso rimosso | Rappresenta l'approvazione della richiesta di reso, che consente di passare alla fase successiva. Solitamente viene rilevata da una modifica dello stato del documento o dalla rimozione di un blocco di consegna o fatturazione. | ||
| Perché è importante Questa attività è una milestone critica di approvazione. Misurare il tempo necessario per raggiungere questa fase aiuta a identificare i bottleneck nel processo di autorizzazione e approvazione del reso. Dove trovare Questo è un evento dedotto dai log di modifica del documento di vendita. Verifichi le tabelle CDHDR e CDPOS per le modifiche ai campi di blocco in VBAK o VBAP, o ai campi di stato in VBUK/VBUP. Acquisisci Identificare il timestamp dalle tabelle dei documenti di modifica (CDHDR/CDPOS) quando viene rimosso uno stato di blocco pertinente. Tipo di evento inferred | |||
| Consegna di reso creata | Viene generato un documento di consegna per gestire la ricezione fisica della merce resa. Questo evento segna l'inizio del processo logistico del reso. | ||
| Perché è importante Monitora il passaggio dall'elaborazione amministrativa alla logistica fisica. Eventuali ritardi in questa fase possono influire sulla pianificazione del magazzino e sul tempo di ciclo totale del reso. Dove trovare Questo è un evento esplicito registrato nella tabella LIKP (Testata consegna). Il timestamp di creazione si trova in LIKP-ERDAT. Il collegamento all'ordine di reso sorgente si trova nella tabella LIPS (LIPS-VGBEL). Acquisisci Utilizzi il timestamp di creazione (ERDAT) dalla tabella LIKP per la consegna associata all'ordine di reso. Tipo di evento explicit | |||
| Nota di credito chiusa | La partita aperta di credito nella contabilità clienti viene chiusa, solitamente tramite un pagamento in uscita al cliente. Questo evento segna la chiusura finanziaria finale del rimborso. | ||
| Perché è importante Questa attività conferma l'evento di uscita di cassa e completa la parte finanziaria del processo. Rappresenta la vera conclusione del percorso di rimborso dal punto di vista del cliente. Dove trovare Questo è un evento esplicito dal modulo FI. La data di chiusura del documento contabile è memorizzata nella tabella BSEG (BSEG-AUGDT) per la relativa posizione del cliente. Acquisisci Utilizzi la data di chiusura (AUGDT) dalla tabella BSEG o BSAD per il documento contabile collegato alla nota di credito. Tipo di evento explicit | |||
| Posizione ordine di reso completata | Una singola riga dell'ordine di reso viene contrassegnata come completamente elaborata. Solitamente accade quando tutti i documenti logistici e finanziari correlati sono stati completati. | ||
| Perché è importante Il tracciamento a livello di singola posizione aiuta a identificare quali prodotti o motivi di reso causino i ritardi maggiori, offrendo una visione più granulare del completamento del processo. Dove trovare Questo è un evento dedotto dalle tabelle di stato. Viene rilevato quando lo stato complessivo della posizione del documento di vendita (VBUP-GBSTK) viene aggiornato a 'C' (Completamente elaborato). Acquisisci Identificare il timestamp dai documenti di modifica (CDHDR/CDPOS) quando il campo di stato posizione VBUP-GBSTK passa a 'C'. Tipo di evento inferred | |||
| Posizione ordine di reso rifiutata | Una specifica voce dell'ordine di reso viene rifiutata, durante la revisione iniziale o dopo l'ispezione. Ciò significa che non seguiranno altre fasi, come il rimborso, per questo articolo. | ||
| Perché è importante Analizzare i rifiuti aiuta a identificare le richieste non valide e a migliorare la comunicazione delle policy ai clienti. È un percorso chiave che non porta al rimborso. Dove trovare Questo è un evento dedotto. Solitamente viene rilevato dall'impostazione di un codice 'Motivo di rifiuto' univoco per la posizione nella tabella VBAP (VBAP-ABGRU). Il timestamp deve essere ricavato dai log di modifica. Acquisisci Identificare il timestamp dai documenti di modifica (CDHDR/CDPOS) quando il campo VBAP-ABGRU viene popolato per un articolo reso. Tipo di evento inferred | |||
| Richiesta nota di credito creata | Viene creata una richiesta di nota di credito per documentare formalmente la necessità di un rimborso. In molte configurazioni, l'ordine di reso stesso funge da richiesta di nota di credito. | ||
| Perché è importante Questo è l'avvio formale della parte di liquidazione finanziaria del processo di reso. Funge da trigger per le successive approvazioni finanziarie e la creazione dei documenti. Dove trovare Può essere un evento esplicito in VBAK per un documento di vendita di tipo 'Richiesta nota credito' (es. CR), oppure lo stesso evento di 'Ordine di reso creato' se il tipo d'ordine è configurato per la fatturazione relativa all'ordine. Acquisisci Utilizzi il timestamp di creazione (ERDAT) da VBAK per il tipo documento 'CR', oppure riutilizzi l'evento di creazione dell'ordine di reso. Tipo di evento explicit | |||
Guide all'Estrazione
Fasi
- Creare il programma ABAP: Utilizzi la transazione
SE38per creare un nuovo programma eseguibile, ad esempioZ_PM_RETURN_EXTRACTION. Inserisca un titolo descrittivo e lo salvi come oggetto locale o in un pacchetto di sviluppo. - Definire la schermata di selezione: Nel programma, definisca una schermata di selezione per filtrare i dati. I filtri chiave includono l'intervallo di date di creazione dei resi (
S_ERDAT), il tipo di documento di vendita (S_AUART, es. 'RE') e la società (P_BUKRS). - Definire le strutture dati: Crei una struttura locale corrispondente al formato dell'event log richiesto. La struttura deve includere i campi
ReturnCaseId,ActivityName,EventTime,SourceSystem,LastDataUpdate,ProcessingAgent,ReturnReasone gli altri attributi necessari. - Implementare la logica di selezione: Scriva la logica ABAP per estrarre i dati delle 12 attività richieste. Dovrà interrogare diverse tabelle SAP (VBAK, VBAP, LIKP, VBRK, BKPF, CDHDR e CDPOS). Utilizzi la tabella del flusso documenti (VBFA) per collegare consegne e note di credito all'ordine di reso originale.
- Estrarre 'Return Order Created': Selezioni i record dalle tabelle
VBAKeVBAPin base ai criteri della schermata di selezione. Il numero del documento di vendita (VBAK-VBELN) fungerà daReturnCaseId. - Estrarre modifiche di stato ed eventi chiave: Per attività come 'Return Order Block Removed' o 'Return Order Item Rejected', interroghi le tabelle dei documenti di modifica (
CDHDR,CDPOS) o i campi di stato in tabelle comeVBAP(ABGRU). Per le attività logistiche e finanziarie, utilizzi tabelle comeLIKP,MKPF,VBRKeBKPF, usandoVBFAper il collegamento ai resi. - Popolare la tabella dell'event log: Per ogni attività recuperata, crei un record in una tabella interna definita con la struttura dell'event log. Mappi i dati dalle tabelle SAP (es. mappi
VBAK-ERNAMsuProcessingAgenteVBAK-ERDAT/VBAK-ERZETsuEventTime). - Combinare i dati delle attività: Si assicuri che ogni istruzione SELECT aggiunga i risultati alla tabella interna principale. Questo creerà la struttura file piatta finale in cui ogni riga rappresenta un evento.
- Gestire timestamp e info di sistema: Utilizzi i campi di sistema
SY-DATUMeSY-UZEITper popolare il timestampLastDataUpdateper ogni riga. UsiSY-SYSIDperSourceSystem. - Implementare la funzionalità di output: Aggiunga la visualizzazione dei risultati in una griglia ALV (SAP List Viewer) per l'analisi online tramite moduli funzione come
REUSE_ALV_GRID_DISPLAY. Preveda l'opzione per scaricare la tabella interna in formato CSV o file di testo sul PC locale. - Eseguire ed esportare: Lanci il programma via
SE38. Inserisca i criteri di selezione ed esegua. Una volta visualizzati i dati, usi la funzione di esportazione per salvare il file dell'event log. Il formato finale dovrà essere compatibile con ProcessMind (solitamente CSV con riga di intestazione).
Configurazione
- Intervallo di date: Nella schermata di selezione, indichi un intervallo di date per la creazione dell'ordine di reso. Per un'analisi iniziale, consigliamo un periodo di 3-6 mesi per bilanciare volume di dati e profondità dell'analisi.
- Tipo di documento di reso: Filtri per lo specifico tipo di documento di vendita utilizzato per i resi nel Suo sistema (ad esempio, 'RE' per i Resi o 'CR' per le richieste di nota di credito). Si tratta di un filtro fondamentale per isolare il processo corretto. Inserisca questi valori nell'opzione di selezione
S_AUART. - Società (Company Code): Specifichi il codice della società (
P_BUKRS) per limitare i dati a una specifica entità legale, operazione essenziale in ambienti multi-societari. - Prerequisiti: L'utente che esegue il programma deve essere autorizzato alla transazione
SE38(esecuzione programmi) e avere accesso alle tabelle SD, MM e FI sottostanti (es. VBAK, LIKP, VBRK, BKPF, CDHDR). Per lo sviluppo è necessario un ruolo di sviluppatore ABAP. - Performance: Con set di dati molto ampi che coprono più anni, il programma potrebbe richiedere tempi di esecuzione prolungati. Valuti di eseguirlo come job in background (
SM36) e di scrivere l'output nel file system dell'application server invece di visualizzarlo online.
a Query di Esempio 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( ). Fasi
- Prerequisiti: Si assicuri di avere un utente database con accesso in lettura alle tabelle SAP ECC necessarie (moduli SD, MM e FI). Dovrà disporre di un client SQL come DBeaver, SAP HANA Studio o Oracle SQL Developer.
- Identificare le specifiche di sistema: Prima di avviare la query, individui i tipi di documento usati per i resi nella Sua azienda. Sostituisca il segnaposto
[YOUR_RETURN_ORDER_TYPES]con i valori reali (es. 'RE'). - Preparare la query: Copi la query SQL completa fornita nella sezione 'query' nel Suo client SQL.
- Configurare i parametri: Individui la Common Table Expression (CTE) chiamata
BaseReturnOrdersall'inizio della query. Modifichi la clausolaWHEREper definire l'intervallo temporale sostituendo[START_DATE]e[END_DATE]. Aggiorni la lista dei tipi di ordine e, se necessario, filtri per società (BUKRS_VF). - Eseguire la query: Lanci la query sul database SAP ECC. I tempi variano in base al periodo selezionato e alla dimensione del DB.
- Revisione dei dati: Al termine, controlli l'output. Verifichi che le colonne
ReturnCaseId,ActivityNameeEventTimesiano popolate e che i dati coprano diverse attività. - Esportazione in CSV: Esporti i risultati in un file CSV dal Suo client SQL, usando la codifica UTF-8 per preservare correttamente i caratteri.
- Preparazione per il caricamento: Apra il file CSV e verifichi che le intestazioni delle colonne corrispondano esattamente agli attributi richiesti (
ReturnCaseId,ActivityName,EventTime, ecc.). - Caricamento finale: Carichi il file CSV pulito sulla piattaforma ProcessMind per iniziare l'analisi.
Configurazione
- Tipi di documento di reso: La query deve essere configurata con gli specifici tipi di documento di vendita che rappresentano gli ordini di reso nel Suo sistema SAP. Sostituisca il segnaposto
[YOUR_RETURN_ORDER_TYPES](es. 'RE' o codici 'Z' personalizzati). - Intervallo di date: È fondamentale definire un intervallo temporale adeguato. Per l'analisi iniziale si consiglia un estratto di 3-6 mesi. Utilizzi i segnaposto
[START_DATE]e[END_DATE]nel formato 'YYYYMMDD'. - Società (Company Code): Se l'organizzazione gestisce più codici società, è necessario filtrare i dati per un'analisi mirata. Può aggiungere un filtro come
VBAK.BUKRS_VF = '[YOUR_COMPANY_CODE]'nella CTE iniziale. - Dialetto del database: La query utilizza funzioni SQL standard. Tuttavia, le conversioni di data e ora (come
TO_TIMESTAMP) e la concatenazione di stringhe (CONCAT) potrebbero richiedere piccoli aggiustamenti di sintassi a seconda del database in uso (es. Oracle, HANA, DB2). - Autorizzazioni necessarie: L'utente del database deve avere accesso in lettura alle tabelle chiave: VBAK, VBAP, VBFA, LIKP, LIPS, VBRK, VBRP, MKPF, MSEG, BKPF, BSAD, QALS, QAVE, CDHDR e CDPOS.
a Query di Esempio 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;