Il Suo Template dei dati per Order to Cash, elaborazione degli ordini di vendita
Il Suo Template dei dati per Order to Cash, elaborazione degli ordini di vendita
- Attributi consigliati da raccogliere
- Attività chiave da monitorare
- Indicazioni per l'estrazione da SAP ECC
Attributi dell’elaborazione degli ordini di vendita da Order to Cash
| Nome | Descrizione | ||
|---|---|---|---|
| Ordine cliente SalesOrder | L'identificativo univoco di un documento di ordine cliente, che funge da Case ID principale per monitorare l'intero processo Order-to-Cash. | ||
| Descrizione L'ordine cliente è il documento centrale del processo di vendita e rappresenta la richiesta del cliente relativa a merci o servizi. Contiene tutte le informazioni necessarie per elaborare la richiesta del cliente dall'inizio alla fine. Nel Process Mining, questo attributo viene utilizzato come Case ID. Ogni numero di ordine cliente univoco rappresenta un'istanza di processo end-to-end. Analizzare i processi per ordine cliente consente di monitorare l'intero ciclo di vita, misurare i tempi ciclo e individuare le variazioni per ciascun ordine del cliente. Perché è importante È la chiave essenziale per collegare tutte le attività e gli eventi correlati, consentendo un'analisi end-to-end completa del percorso di ogni ordine cliente. Dove reperirlo Si trova nella tabella dei dati di testata del documento di vendita (VBAK), nel campo VBELN. Esempi 900001234590000123469000012347 | |||
| Attività Activity | Il nome di una specifica fase o di uno specifico evento aziendale che si è verificato nel processo dell'ordine cliente. | ||
| Descrizione Questo attributo descrive una singola fase del processo Order-to-Cash, come 'Ordine cliente creato', 'Consegna creata' o 'Pagamento ricevuto'. Queste attività sono gli elementi costitutivi utilizzati per ricostruire il flusso del processo per ogni ordine cliente. L'analisi della sequenza e della tempistica di queste attività costituisce il nucleo del Process Mining. Consente di visualizzare la mappa del processo, individuare i colli di bottiglia, scoprire le varianti del processo e verificare la Conformità rispetto a un modello standard. Le attività derivano in genere da una combinazione di eventi di creazione dei documenti, modifiche di stato o specifici codici transazione registrati nel sistema. Perché è importante Le attività costituiscono l'ossatura della mappa del processo e consentono di visualizzare e analizzare il flusso del processo, le deviazioni e i colli di bottiglia. Dove reperirlo Si tratta di un attributo derivato, generalmente generato durante l'estrazione dei dati associando i codici transazione SAP (T-Code), le modifiche dello stato dei documenti, ad esempio nelle tabelle VBUK e VBUP, o i log dei documenti di modifica, nelle tabelle CDHDR e CDPOS, a nomi di attività intuitivi. Esempi Ordine di vendita creatoConsegna creataUscita merciFattura creataPagamento ricevuto | |||
| Ora di inizio StartTime | Il timestamp che indica quando è iniziata un'attività o un evento. | ||
| Descrizione L'ora di inizio, nota anche come timestamp dell'evento, registra la data e l'ora precise in cui si è verificata una specifica attività. Ad esempio, indica quando è stato creato un ordine cliente, quando sono state registrate le uscite merci o quando è stata registrata una fattura. Questo timestamp è fondamentale per tutte le analisi temporali nel Process Mining. Viene utilizzato per calcolare i tempi ciclo tra le attività, misurare la durata complessiva di un caso e individuare ritardi o colli di bottiglia. Timestamp accurati sono essenziali per i Dashboard di analisi delle prestazioni, ad esempio quelli che monitorano le consegne puntuali o i tempi di evasione. Perché è importante È un attributo fondamentale per calcolare tutte le metriche di prestazione, come tempi ciclo e durate, essenziali per individuare i colli di bottiglia. Dove reperirlo Si tratta di un attributo composito, generalmente derivato dalla combinazione di un campo data, ad esempio ERDAT, e di un campo ora, ad esempio ERZET, provenienti da diverse tabelle SAP come VBAK (ordine cliente), LIKP (consegna) e VBRK (fattura). Esempi 2023-04-15T09:00:12Z2023-04-16T14:30:00Z2023-04-20T11:22:45Z | |||
| Sistema di origine SourceSystem | Identifica il sistema di origine dal quale sono stati estratti i dati. | ||
| Descrizione Questo attributo specifica il sistema di origine, ad esempio il nome di una specifica istanza SAP ECC o il numero di un client. Fornisce il contesto dei dati, soprattutto negli ambienti con più sistemi di produzione o con dati provenienti da sistemi legacy. Nell'analisi viene utilizzato per filtrare o segmentare i dati in base alla loro origine. È particolarmente utile per confrontare i processi tra sistemi diversi o durante i progetti di migrazione, così da garantire l'integrità e la coerenza dei dati. Perché è importante Fornisce un contesto essenziale, soprattutto nei paesaggi con più sistemi, consentendo di confrontare i processi e mantenendo chiara la provenienza dei dati. Dove reperirlo Questo valore viene generalmente aggiunto durante l'estrazione dei dati ed è spesso un valore statico che rappresenta il SAP System ID (SAPSID) o il client (MANDT). Esempi ECC_PROD_800SAP_ERP_EU1ECC_QAS_300 | |||
| Ultimo aggiornamento dei dati LastDataUpdate | Timestamp che indica quando i dati di questo record sono stati aggiornati per l'ultima volta dal sistema di origine. | ||
| Descrizione Questo attributo registra la data e l'ora dell'estrazione o dell'aggiornamento più recente dei dati relativi a un determinato evento o caso. Fornisce trasparenza sull'aggiornamento dei dati analizzati. Nei Dashboard e nei report, queste informazioni sono fondamentali per comprendere la tempestività degli insight. Aiutano a verificare se l'analisi riflette lo stato operativo più recente o se si basa su dati meno aggiornati, gestendo così le aspettative degli utenti sulla loro attualità. Perché è importante Garantisce che gli utenti siano consapevoli dell'aggiornamento dei dati, un aspetto fondamentale per prendere decisioni tempestive e informate sulla base dell'analisi di Process Mining. Dove reperirlo Si tratta di un attributo di metadati valorizzato dallo strumento o dal processo di estrazione dei dati al momento dell'acquisizione. Non è memorizzato nelle tabelle SAP di origine. Esempi 2024-06-10T05:00:00Z2024-06-11T05:00:00Z2024-06-12T05:00:00Z | |||
| Blocco consegna DeliveryBlock | Un codice che indica se un ordine cliente è bloccato per la consegna, impedendo la creazione di un documento di consegna. | ||
| Descrizione Il blocco consegna è uno stato impostato su un ordine cliente, a livello di testata o di riga, per sospendere temporaneamente il processo prima della fase di consegna. I blocchi possono essere impostati manualmente da un utente oppure automaticamente dal sistema, ad esempio a causa del superamento del limite di credito o di dati incompleti. Questo attributo è fondamentale per il Dashboard 'Analisi dei blocchi e delle rilavorazioni degli ordini clienti'. Analizzare frequenza, durata e motivi dei blocchi di consegna aiuta a individuare i principali colli di bottiglia nel processo di evasione. Ridurre questi blocchi è essenziale per migliorare la puntualità delle consegne e il tempo ciclo complessivo. Perché è importante Individua direttamente i colli di bottiglia nel processo di evasione. Analizzare perché e con quale frequenza gli ordini vengono bloccati è fondamentale per migliorare l'efficienza del flusso. Dove reperirlo Si trova nella tabella dei dati di testata del documento di vendita (VBAK), nel campo LIFSK. Esempi 0102Z1 | |||
| Importo netto NetAmount | Il valore totale dell'ordine cliente, al netto di imposte e sconti a livello di testata. | ||
| Descrizione L'importo netto rappresenta il valore monetario dell'ordine cliente. È una metrica finanziaria fondamentale associata a ogni istanza di processo. Questo attributo è essenziale per il Process Mining basato sul valore. Consente di stabilire le priorità delle iniziative di miglioramento concentrandosi sugli ordini di valore elevato. Gli analisti possono correlare i problemi di processo, come ritardi o rilavorazioni, al loro impatto finanziario, contribuendo a costruire un business case più solido per il cambiamento. Ad esempio, può essere utilizzato per analizzare se gli ordini di valore elevato vengono elaborati in modo più o meno efficiente rispetto a quelli di valore ridotto. Perché è importante Consente un'analisi basata sul valore, aiutando a concentrare gli interventi di miglioramento sugli ordini che hanno il maggiore impatto finanziario sull'azienda. Dove reperirlo Si trova nella tabella dei dati di testata del documento di vendita (VBAK), nel campo NETWR. Esempi 1500.0012550.75850.50 | |||
| Motivo di rifiuto RejectionReason | Un codice che indica il motivo per cui una riga dell'ordine cliente è stata rifiutata o annullata. | ||
| Descrizione Il motivo di rifiuto fornisce il contesto per comprendere perché un ordine cliente o una specifica riga non sia stata evasa. Le cause possono includere l'annullamento da parte del cliente, l'indisponibilità del prodotto o altri motivi aziendali. Questo attributo è essenziale per il Dashboard 'Tendenze degli annullamenti degli ordini clienti'. Analizzando i motivi di rifiuto più frequenti, un'azienda può individuare le cause principali delle vendite perse. Queste informazioni possono guidare miglioramenti nella gestione delle scorte, nella strategia di prezzo o nella comunicazione con i clienti, riducendo il tasso di annullamento degli ordini. Perché è importante Fornisce il 'perché' alla base degli annullamenti degli ordini, consentendo un'analisi delle cause principali per ridurre le vendite perse e migliorare l'accuratezza delle previsioni. Dove reperirlo Si trova nella tabella dei dati di riga del documento di vendita (VBAP), nel campo ABGRU. Esempi 0215Z5 | |||
| Numero cliente CustomerNumber | L'identificativo univoco del cliente che ha effettuato l'ordine cliente. | ||
| Descrizione Questo attributo rappresenta il 'committente', ossia il conto cliente principale associato all'ordine cliente. Collega la transazione a uno specifico cliente nei dati anagrafici. L'analisi per numero cliente consente di segmentare il processo per comprendere i comportamenti e le prestazioni specifici dei clienti. Aiuta a rispondere a domande come quali clienti presentano i tempi ciclo più lunghi, i tassi di rilavorazione più elevati o il maggior numero di modifiche agli ordini. È fondamentale per migliorare la gestione delle relazioni con i clienti e i livelli di servizio. Perché è importante Consente un'analisi incentrata sul cliente, aiutando a individuare i problemi di processo che interessano clienti specifici e a misurare le prestazioni relative a ciascun cliente. Dove reperirlo Si trova nella tabella dei dati di testata del documento di vendita (VBAK), nel campo KUNNR. Esempi 100234100567200112 | |||
| Numero materiale MaterialNumber | L'identificativo univoco del prodotto o servizio venduto. | ||
| Descrizione Il numero materiale identifica l'articolo presente in una riga dell'ordine cliente. Poiché un singolo ordine cliente può contenere più materiali, questo attributo viene generalmente analizzato a livello di riga. Analizzare il processo per numero materiale aiuta a individuare i problemi specifici dei prodotti. Può rivelare se determinati prodotti sono associati a tempi di evasione più lunghi, a tassi più elevati di blocco della consegna o a discrepanze nelle fatture più frequenti. È fondamentale per la gestione della catena di approvvigionamento e dei prodotti, così da ottimizzare il processo per le diverse linee di prodotto. Perché è importante Consente un'analisi del processo basata sul prodotto, evidenziando quali prodotti sono associati a inefficienze come ritardi, blocchi o rilavorazioni. Dove reperirlo Si trova nella tabella dei dati di riga del documento di vendita (VBAP), nel campo MATNR. Esempi FG-1001-ARAW-205BSERV-INSTALL | |||
| Organizzazione commerciale SalesOrganization | L'unità organizzativa responsabile della vendita di prodotti o servizi. | ||
| Descrizione Un'organizzazione commerciale è un'entità organizzativa fondamentale in SAP, che struttura l'azienda in base alle sue esigenze di vendita. È responsabile della negoziazione delle condizioni di vendita e della distribuzione di merci e servizi. Nel Process Mining, questo attributo rappresenta una dimensione essenziale per l'analisi. Consente di confrontare le prestazioni, l'efficienza e la Conformità dei processi tra diverse unità commerciali, aree geografiche o divisioni. In questo modo è possibile individuare le best practice nelle organizzazioni più performanti e le aree di miglioramento nelle altre. Perché è importante Consente il benchmarking organizzativo, permettendo di confrontare l'efficienza e la Conformità dei processi tra diverse unità aziendali o aree geografiche. Dove reperirlo Si trova nella tabella dei dati di testata del documento di vendita (VBAK), nel campo VKORG. Esempi 100025003100 | |||
| Utente User | L'ID utente del dipendente che ha creato o modificato per ultimo il documento oppure ha eseguito l'attività. | ||
| Descrizione Questo attributo acquisisce l'ID utente SAP responsabile di un determinato evento del processo. Ad esempio, identifica l'addetto alle vendite che ha creato l'ordine o il personale di magazzino che ha registrato l'uscita merci. Analizzare il processo per utente aiuta a comprendere la distribuzione del carico di lavoro, individuare le esigenze formative e rilevare le differenze nel modo in cui utenti diversi eseguono la stessa attività. È essenziale per i Dashboard incentrati sulle prestazioni delle risorse, sulla Conformità e sull'individuazione degli interventi manuali. Perché è importante Offre visibilità sulle prestazioni e sul carico di lavoro delle risorse, aiuta a individuare le deviazioni del processo specifiche degli utenti ed è fondamentale per l'analisi della Conformità e dell'automazione. Dove reperirlo Si trova in molte tabelle di testata SAP nei campi 'Creato da' (ERNAM) o 'Modificato da' (AENAM), ad esempio in VBAK, LIKP e VBRK. Esempi CBURKEJSMITHRWILLIAMS | |||
| Condizioni di spedizione ShippingConditions | Definisce la strategia generale di spedizione delle merci al cliente. | ||
| Descrizione Le condizioni di spedizione determinano come verrà spedito un ordine, ad esempio con modalità 'Standard', 'Espressa' o 'Ritiro'. Sono concordate con il cliente e influenzano la pianificazione logistica. Questo attributo viene utilizzato nell'analisi 'Efficienza e costi del metodo di spedizione'. Segmentando il processo per condizioni di spedizione, le aziende possono analizzare se determinati metodi sono più soggetti a ritardi o presentano tempi ciclo più lunghi. Questi dati aiutano a ottimizzare la logistica e a gestire le aspettative dei clienti sui tempi di consegna. Perché è importante Consente di analizzare le prestazioni logistiche e di determinare se determinati metodi di spedizione sono correlati a ritardi o a una maggiore efficienza. Dove reperirlo Si trova nella tabella dei dati di testata del documento di vendita (VBAK), nel campo VSBED. Esempi 011020 | |||
| Data di consegna confermata ConfirmedDeliveryDate | La data in cui la consegna delle merci o dei servizi è stata confermata al cliente. | ||
| Descrizione È la data di consegna concordata con il cliente, definita in base alla disponibilità dei materiali e alla pianificazione. Funge da riferimento per misurare le prestazioni di consegna. Questo attributo è alla base del Dashboard 'Prestazioni delle consegne puntuali' e del KPI del tasso di consegna puntuale. Confrontando la data di consegna confermata con la data effettiva di 'Uscita merci', l'analisi può determinare se un ordine è stato consegnato puntualmente, in anticipo o in ritardo. È una misura primaria dell'affidabilità della catena di approvvigionamento e della soddisfazione del cliente. Perché è importante È il riferimento per misurare le prestazioni delle consegne puntuali, un KPI fondamentale per la soddisfazione del cliente e l'efficienza della catena di approvvigionamento. Dove reperirlo Si trova nella tabella delle righe di schedulazione del documento di vendita (VBEP), nel campo EDATU. Esempi 2023-05-102023-06-202023-07-01 | |||
| È consegna puntuale IsOnTimeDelivery | Un flag booleano che indica se le merci sono state spedite entro la data di consegna confermata o prima di essa. | ||
| Descrizione Questo attributo calcolato confronta la data effettiva dell'uscita merci con la 'ConfirmedDeliveryDate' di un ordine cliente. Se la data di uscita merci è uguale o precedente alla data confermata, il valore è true; in caso contrario, è false. Questo attributo semplifica la creazione del Dashboard 'Prestazioni delle consegne puntuali' e il calcolo del KPI del tasso di consegna puntuale. Consente di aggregare e visualizzare facilmente le prestazioni senza dover eseguire confronti tra date al momento dell'elaborazione di ogni analisi o grafico. Offre una misura chiara e immediata dell'affidabilità delle consegne. Perché è importante Fornisce una misura chiara e semplice delle prestazioni di consegna, rendendo agevole il calcolo del KPI complessivo del tasso di consegna puntuale. Dove reperirlo È un attributo calcolato. La logica confronta il timestamp dell'attività 'Uscita merci' con il valore dell'attributo 'ConfirmedDeliveryDate'. Esempi truefalse | |||
| È rilavorazione IsRework | Un flag booleano che indica se un ordine cliente è stato sottoposto a una modifica significativa o a un'attività di rilavorazione dopo la creazione iniziale. | ||
| Descrizione Questo attributo calcolato identifica le istanze di processo che hanno subito una rilavorazione, ad esempio una o più attività 'Ordine cliente modificato'. La logica specifica per determinare cosa costituisca una rilavorazione, come una modifica del prezzo, della quantità o della data di consegna, viene definita durante la configurazione del progetto. Questo attributo è fondamentale per il Dashboard 'Rilavorazioni e frequenza delle modifiche degli ordini clienti' e per il KPI del tasso di rilavorazione degli ordini clienti. Semplifica l'analisi consentendo di filtrare e confrontare direttamente gli ordini che hanno seguito un percorso 'straight-through' con quelli che hanno richiesto modifiche manuali. Aiuta a quantificare l'impatto delle rilavorazioni sui tempi ciclo e sui costi. Perché è importante Quantifica direttamente la frequenza delle rilavorazioni, consentendo di analizzarne le cause e l'impatto sull'efficienza complessiva del processo e sul tempo ciclo. Dove reperirlo È un attributo calcolato derivato dall'event log. La logica verifica la presenza di attività 'Ordine cliente modificato' o di specifici eventi di modifica nelle tabelle CDHDR/CDPOS. Esempi truefalse | |||
| Stato del controllo del credito CreditCheckStatus | Indica lo stato del controllo del credito per il documento di vendita. | ||
| Descrizione Questo attributo mostra l'esito del controllo del credito, automatico o manuale, eseguito su un ordine cliente. Gli stati più comuni includono 'Approvato', 'Rifiutato' o 'Bloccato'. È un attributo fondamentale per il Dashboard 'Analisi del tempo di elaborazione del controllo del credito'. I ritardi o i blocchi nella fase di controllo del credito possono incidere significativamente sul tempo ciclo complessivo di evasione dell'ordine. Analizzare questo stato aiuta a comprendere l'efficienza del processo di gestione del credito e il suo impatto sulla velocità delle vendite. Perché è importante Incide direttamente sulla velocità di elaborazione degli ordini. Analizzare questo stato aiuta a individuare i colli di bottiglia nella gestione del credito che ritardano l'evasione degli ordini. Dove reperirlo Si trova nella tabella dello stato di testata del documento di vendita (VBUK) oppure direttamente in VBAK, nel campo dello stato del credito, ad esempio CMGST. Esempi ABD | |||
Attività dell’elaborazione degli ordini di vendita da Order to Cash
| Attività | Descrizione | ||
|---|---|---|---|
| Fattura creata | Indica la creazione della fattura cliente o del documento di fatturazione. È un evento esplicito che genera un nuovo documento nel sistema e avvia la fase di pagamento del processo. | ||
| Perché è importante Questa è una tappa fondamentale, dalla quale inizia il conteggio del 'tempo ciclo da fattura a pagamento'. I ritardi nella fatturazione incidono direttamente sul flusso di cassa. Dove reperirlo Registrato nella tabella VBRK (Documento di fatturazione: dati di testata) sulla base della data di creazione (ERDAT). Il collegamento all'ordine cliente o alla consegna si trova nella tabella VBFA. Acquisizione Evento basato sul timestamp di creazione (ERDAT) nella tabella VBRK. Tipo di evento explicit | |||
| Ordine confermato | Questa attività indica che l'ordine di vendita ha superato tutti i controlli iniziali ed è confermato per l'evasione. In genere viene dedotta quando l'ordine non è più bloccato e presenta quantità confermate nelle righe di schedulazione. | ||
| Perché è importante Si tratta di una tappa fondamentale che separa l'inserimento dell'ordine dall'evasione. Costituisce il punto di partenza per misurare i tempi di attraversamento dell'evasione e le prestazioni delle consegne puntuali. Dove reperirlo Può essere dedotto quando le righe di schedulazione in VBEP presentano una quantità confermata (BMENG > 0) e l'ordine non è bloccato per la consegna, ad esempio quando VBUK-LIFSK è vuoto. Acquisizione Deducibile dalla conferma della riga di schedulazione (VBEP-BMENG > 0) e dalla rimozione dei blocchi a livello di testata. Tipo di evento inferred | |||
| Ordine di vendita creato | Indica la creazione di un nuovo documento di ordine di vendita. Si tratta di un evento esplicito acquisito quando un utente salva un nuovo ordine, in genere tramite la transazione VA01 in SAP. | ||
| Perché è importante Questo è il principale evento di avvio del processo Order-to-Cash. Analizzarne la tempistica è fondamentale per misurare il tempo complessivo del ciclo e i tassi di acquisizione degli ordini. Dove reperirlo Registrato nella tabella VBAK (dati della testata del documento di vendita) utilizzando la data di creazione (ERDAT) e l'ora (ERZET). Il codice della transazione è memorizzato in VBAK-TCODE. Acquisizione Evento basato sul timestamp di creazione (ERDAT, ERZET) nella tabella VBAK. Tipo di evento explicit | |||
| Pagamento ricevuto | Questo evento indica che il pagamento del cliente è stato ricevuto e associato alla fattura, chiudendo la partita aperta dei crediti verso clienti. È un evento contabile, dedotto dalla compensazione di un documento finanziario. | ||
| Perché è importante È il passaggio finale per trasformare la vendita in disponibilità liquide. Rappresenta il punto conclusivo per misurare il 'tempo ciclo da fattura a pagamento' e il 'tempo ciclo complessivo di evasione dell'ordine cliente'. Dove reperirlo Deducibile dalle informazioni sul documento di compensazione nella tabella BSEG per la partita del cliente. Quando BSEG-AUGBL (documento di compensazione) e BSEG-AUGDT (data di compensazione) sono valorizzati, il pagamento è stato ricevuto. Acquisizione Deducibile dalla valorizzazione della data di compensazione (AUGDT) nella tabella BSEG per la partita dei crediti verso clienti. Tipo di evento inferred | |||
| Riga d'ordine chiusa | Questa attività indica la chiusura definitiva di una riga dell'ordine cliente, a conferma che è stata completamente consegnata, fatturata e considerata conclusa. L'evento è dedotto dallo stato complessivo della riga. | ||
| Perché è importante Rappresenta l'evento di conclusione positiva del processo. Analizzare il momento in cui le righe vengono chiuse aiuta a comprendere la durata end-to-end del processo e a individuare gli ordini che rimangono aperti senza necessità. Dove reperirlo Deducibile dal campo dello stato complessivo nella tabella VBUP (Documento di vendita: stato della riga). Quando VBUP-GBSTA è 'C' (Completamente elaborato), la riga è chiusa. Acquisizione Deducibile dal passaggio a 'C' (Completamente elaborato) dello stato della riga (VBUP-GBSTA). Tipo di evento inferred | |||
| Uscita merci | Un evento critico in cui la proprietà delle merci viene trasferita e queste lasciano ufficialmente il magazzino. Si tratta di una registrazione contabile esplicita che crea un documento materiale e aggiorna le giacenze. | ||
| Perché è importante Questo è l'evento di 'spedizione' e una tappa fondamentale per misurare le consegne puntuali e i tempi di evasione. Attiva gli aggiornamenti contabili e rappresenta un punto di non ritorno nel processo fisico di evasione. Dove reperirlo Creazione di un documento materiale (MKPF/MSEG) con un tipo di movimento di uscita merci, ad esempio 601, collegato al documento di consegna. Acquisizione Creazione di un documento materiale (MKPF/MSEG) con un tipo di movimento di uscita merci, collegato alla consegna. Tipo di evento explicit | |||
| Blocco della consegna impostato | Rappresenta un'azione con cui viene applicato un blocco della consegna all'ordine di vendita, impedendo la creazione di un documento di consegna. Può essere acquisito esplicitamente dai log delle modifiche o dedotto dalle tabelle degli stati. | ||
| Perché è importante Questa attività è direttamente collegata al KPI 'Sales Order Blockage Rate'. Identificare perché e con quale frequenza vengono impostati i blocchi aiuta a individuare le cause dei ritardi nell'evasione. Dove reperirlo Può essere individuato nei log delle modifiche (CDHDR/CDPOS) per il campo VBAK-LIFSK. In alternativa, viene dedotto osservando quando il campo VBAK-LIFSK è valorizzato. Acquisizione Evento proveniente dai documenti di modifica per il campo VBAK-LIFSK o VBAP-LIFSP. Tipo di evento explicit | |||
| Conferma della prova di consegna | Questa attività rappresenta la conferma che il cliente ha ricevuto le merci. Viene registrata quando la prova di consegna viene inserita nel sistema, aggiornando spesso lo stato del documento di consegna. | ||
| Perché è importante Questo evento fornisce la data effettiva di consegna, essenziale per misurare con precisione il 'tasso di consegna puntuale' rispetto alla data promessa. Dove reperirlo Deducibile dall'impostazione su 'C' (Confermato) dello stato della prova di consegna (VBUK-PODAT). La data di conferma è memorizzata in VLPOD-PODAT. Questa funzionalità non è sempre implementata. Acquisizione Deducibile dall'aggiornamento dello stato POD sulla consegna (VBUK-PODAT) o da una voce nella tabella VLPOD. Tipo di evento inferred | |||
| Consegna creata | Questo evento indica la creazione del documento di consegna in uscita, che costituisce l'istruzione al magazzino per avviare le attività di picking e spedizione. Si tratta di un evento esplicito acquisito dal flusso documentale. | ||
| Perché è importante Questo è il primo passaggio del processo di evasione fisica. Il tempo che intercorre tra la conferma dell'ordine e la creazione della consegna indica la rapidità con cui viene avviato il processo logistico. Dove reperirlo Creazione di un record nella tabella LIKP (dati della testata del documento di consegna SD). Il collegamento all'ordine di vendita è mantenuto nella tabella del flusso documentale VBFA. Acquisizione Evento basato sul timestamp di creazione nella tabella LIKP, collegato tramite la tabella VBFA. Tipo di evento explicit | |||
| Controllo del credito eseguito | Indica il completamento del controllo del credito automatico o manuale per il cliente associato all'ordine di vendita. In genere viene dedotto da una modifica dello stato complessivo del credito del documento. | ||
| Perché è importante Il controllo del credito rappresenta spesso un collo di bottiglia critico. Misurare il tempo necessario per questa fase è essenziale per la 'Credit Check Processing Time Analysis' e per accelerare l'elaborazione degli ordini. Dove reperirlo Deducibile dai campi relativi allo stato del credito nella tabella VBUK (documento di vendita: stato della testata). Una modifica in VBUK-CMGST da bloccato a rilasciato indica il completamento di questa attività. Acquisizione Deducibile dalle modifiche al campo dello stato complessivo del credito (VBUK-CMGST). Tipo di evento inferred | |||
| Fattura annullata | Rappresenta lo storno di un documento di fatturazione creato in precedenza. È una transazione esplicita che crea un nuovo documento di annullamento per compensare quello originale. | ||
| Perché è importante Il monitoraggio degli annullamenti delle fatture aiuta a individuare problemi relativi a prezzi, discrepanze di spedizione o errori nei dati. Questo supporta il KPI 'tasso di discrepanza delle fatture'. Dove reperirlo Evento esplicito acquisito tramite la creazione di un documento di fatturazione di annullamento (VBRK-VBTYP = 'N' o 'O'). La fattura originale è indicata in VBRK-SFAKN. Acquisizione Creazione di un documento di annullamento in VBRK, con riferimento alla fattura originale. Tipo di evento explicit | |||
| Ordine annullato | Indica che un ordine cliente è stato annullato prima dell'evasione. In genere, l'evento viene acquisito assegnando un 'motivo di rifiuto' a tutte le righe pertinenti dell'ordine. | ||
| Perché è importante È un punto terminale critico di mancata riuscita che supporta direttamente il KPI 'tasso di annullamento degli ordini'. Comprendere quando e perché gli ordini vengono annullati fornisce indicazioni sui problemi del processo di vendita. Dove reperirlo Deducibile dalla valorizzazione del campo VBAP-ABGRU (motivo di rifiuto) per tutte le righe attive di un ordine cliente. La data della modifica può essere individuata in CDHDR/CDPOS. Acquisizione Deducibile dalla valorizzazione del campo 'Motivo di rifiuto' (VBAP-ABGRU) su tutte le righe. Tipo di evento inferred | |||
| Ordine di vendita modificato | Rappresenta una modifica apportata a un ordine di vendita esistente dopo la sua creazione iniziale. Queste modifiche vengono acquisite in tabelle dedicate ai log delle modifiche (CDHDR, CDPOS) quando vengono alterati campi come quantità, prezzo o date. | ||
| Perché è importante Il monitoraggio delle modifiche aiuta a identificare il rework, l'instabilità del processo e i problemi di qualità dei dati. Un'elevata frequenza di modifiche può indicare problemi nel processo iniziale di inserimento dell'ordine e causare ritardi. Dove reperirlo Recuperato dalle tabelle dei documenti di modifica CDHDR (testata) e CDPOS (posizione) per OBJECTCLAS = 'VERKBELEG'. È possibile identificare il timestamp e il campo modificato. Acquisizione Evento proveniente dalle tabelle dei documenti di modifica (CDHDR, CDPOS) per gli oggetti dei documenti di vendita. Tipo di evento explicit | |||
| Picking completato | Indica che tutti gli articoli della consegna sono stati prelevati fisicamente dal magazzino. Se viene utilizzato Warehouse Management (WM), questo evento può essere dedotto dallo stato dell'Ordine di trasferimento. | ||
| Perché è importante L'analisi del tempo di prelievo contribuisce a ottimizzare le operazioni di magazzino. I ritardi in questa fase incidono direttamente sui tempi complessivi di spedizione e sul ciclo di evasione. Dove reperirlo Deducibile dal passaggio a 'C' (prelievo completato) dello stato di prelievo dell'articolo della consegna nella tabella LIPS-KOSTA. Se WM è attivo, può essere dedotto dalla conferma dell'Ordine di trasferimento (tabelle LTAK/LTAP). Acquisizione Deducibile dalla modifica dello stato di prelievo (LIPS-KOSTA) o dalla conferma dell'Ordine di trasferimento WM. Tipo di evento inferred | |||
Guide all'estrazione
Passaggi
- Sviluppo del programma: utilizzando la transazione SE38 o SE80, crei un nuovo programma ABAP eseguibile. Il programma conterrà tutta la logica di estrazione.
- Definisca la schermata di selezione: nel programma, crei una schermata di selezione per filtrare i dati. Includa parametri per la data di creazione del documento di vendita (VBAK-ERDAT), l'organizzazione vendite (VBAK-VKORG) e il tipo di documento di vendita (VBAK-AUART). In questo modo l'estrazione sarà riutilizzabile e gestibile.
- Dichiarazioni dei dati: definisca le tabelle interne e le strutture necessarie per contenere i dati provenienti dalle varie tabelle SAP, ad esempio VBAK, VBAP, VBFA, CDHDR, CDPOS, VBRK e BSAD. Definisca inoltre la struttura dell'output finale dell'Event Log, in linea con gli attributi richiesti.
- Selezioni gli ordini di vendita di base: scriva l'istruzione SELECT iniziale per recuperare le testate degli ordini di vendita (VBAK) e le posizioni (VBAP) in base ai valori inseriti nella schermata di selezione. Questo costituisce il dataset principale dei casi da analizzare.
- Estragga l'evento 'Creazione': analizzi i record VBAK selezionati. Per ogni record, valorizzi la struttura dell'Event Log con l'attività 'Ordine di vendita creato', utilizzando VBAK-ERDAT e VBAK-ERZET per StartTime.
- Estragga gli eventi del log delle modifiche: selezioni i record da CDHDR e CDPOS in cui OBJECTCLAS è 'VERKBELEG' per gli ordini di vendita selezionati. Analizzi i risultati per identificare modifiche specifiche ai campi. Ad esempio, una modifica a VBAK-LIFSK indica 'Blocco della consegna impostato', mentre una modifica a VBUK-CMGST indica 'Verifica del credito eseguita'. Qualsiasi altra modifica rilevante può essere registrata come 'Ordine di vendita modificato'.
- Estragga i dati del flusso documentale: per gli ordini di vendita selezionati, interroghi la tabella del flusso documentale (VBFA). Questa tabella collega gli ordini di vendita ai documenti successivi, come consegne, movimenti merci e fatture. Selezioni tutti i documenti correlati per l'elaborazione successiva.
- Estragga gli eventi di consegna ed evasione: utilizzando i numeri dei documenti di consegna provenienti da VBFA, interroghi LIKP e LIPS per gli eventi 'Consegna creata'. Interroghi MKPF e MSEG per i documenti di uscita merci (tipo movimento '601') così da acquisire l'evento 'Merci uscite'. Se è attivo Warehouse Management, interroghi LTAK e LTAP per individuare l'ora di conferma dell'ultima posizione dell'ordine di trasferimento e determinare 'Picking completato'. Verifichi lo stato della testata della consegna VBUK-PODAT per 'Prova di consegna confermata'.
- Estragga gli eventi di fatturazione e pagamento: utilizzando i numeri dei documenti di fatturazione provenienti da VBFA, interroghi VBRK e VBRP per acquisire gli eventi 'Fattura creata' e 'Fattura annullata' (quando VBRK-FKSTO = 'X'). Per individuare 'Pagamento ricevuto', colleghi la fattura di VBRK al documento contabile in BKPF, quindi individui il documento di compensazione e la data di compensazione in BSAD.
- Estragga gli eventi basati sullo stato: utilizzi le tabelle degli stati VBUP (stato della posizione) e VBUK (stato della testata) per dedurre gli eventi aziendali. Ad esempio, una posizione è considerata 'Posizione dell'ordine chiusa' quando VBUP-GBSTA è uguale a 'C'. Un ordine è 'Ordine annullato' quando un 'Motivo del rifiuto' (VBAP-ABGRU) è impostato per tutte le posizioni pertinenti.
- Consolidi e formatti: combini tutti gli eventi acquisiti in un'unica tabella interna finale. Si assicuri che tutti gli attributi (SalesOrder, Activity, StartTime, User ecc.) siano valorizzati correttamente per ogni record di evento. Aggiunga i timestamp SourceSystem e LastDataUpdate.
- Generi il file di output: utilizzi il modulo funzione GUI_DOWNLOAD o il metodo cl_gui_frontend_services=>gui_download per esportare la tabella interna finale in un file CSV sul computer locale dell'utente. Si assicuri che il file venga salvato con codifica UTF-8.
Configurazione
- Prerequisiti: autorizzazioni di sviluppo ABAP, ad esempio accesso alla transazione SE38, e permessi di lettura per tutte le tabelle SAP necessarie, incluse VBAK, VBAP, CDHDR, CDPOS, VBFA, LIKP, LIPS, VBRK, VBRP, MKPF, MSEG e BSAD.
- Parametri di selezione: il programma deve includere una schermata di selezione con parametri di filtro. I parametri principali sono:
- Intervallo di date: un intervallo obbligatorio per la creazione degli ordini di vendita (VBAK-ERDAT). Inizi con un periodo recente di 3-6 mesi per mantenere gestibile il dataset.
- Organizzazione vendite: filtri per VBAK-VKORG per concentrare l'analisi su specifiche unità aziendali.
- Tipo di documento di vendita: filtri per VBAK-AUART per includere soltanto i tipi di ordine pertinenti, ad esempio gli ordini standard, ed escludere gli altri, come offerte e resi.
- Considerazioni sulle prestazioni: l'estrazione dalle tabelle dei log delle modifiche (CDHDR, CDPOS) e dal flusso documentale (VBFA) può essere molto lenta con grandi volumi di dati. Il programma dovrebbe essere ottimizzato per utilizzare i campi indicizzati nelle clausole WHERE. Per estrazioni molto grandi, pianifichi l'esecuzione del programma come job in background durante le ore di minore attività, utilizzando la transazione SM36.
- Attivazione del log delle modifiche: questo metodo si basa sulla funzionalità SAP dei documenti di modifica. Verifichi che la registrazione delle modifiche sia abilitata per gli elementi dati principali, ad esempio LIFSK, CMGST e ABGRU. Può verificarlo tramite la transazione SCDO per l'oggetto VERKBELEG.
a Query di esempio abap
REPORT Z_O2C_PM_EXTRACTOR.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
TABLES: vbak.
TYPES: BEGIN OF ty_event_log,
salesorder TYPE vbeln_va,
activity TYPE string,
starttime TYPE string,
sourcesystem TYPE logsys,
lastdataupdate TYPE string,
user TYPE ernam,
customernumber TYPE kunnr,
salesorganization TYPE vkorg,
netamount TYPE netwr,
materialnumber TYPE matnr,
deliveryblock TYPE lifsk,
rejectionreason TYPE abgru,
salesordercycletime TYPE string, " Placeholder for calculation
END OF ty_event_log.
DATA: gt_event_log TYPE TABLE OF ty_event_log.
DATA: gs_event_log TYPE ty_event_log.
DATA: gv_sysid TYPE logsys.
DATA: gv_last_update TYPE string.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_erdat FOR vbak-erdat OBLIGATORY,
s_vkorg FOR vbak-vkorg,
s_auart FOR vbak-auart.
PARAMETERS: p_file TYPE rlgrap-filename OBLIGATORY DEFAULT 'C:\temp\o2c_event_log.csv'.
*&---------------------------------------------------------------------*
*& Main Processing Block
*&---------------------------------------------------------------------*
START-OF-SELECTION.
CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
IMPORTING
own_logical_system = gv_sysid.
CONCATENATE sy-datum sy-uzeit INTO gv_last_update.
PERFORM get_base_data.
PERFORM write_output_file.
*&---------------------------------------------------------------------*
*& Form get_base_data
*&---------------------------------------------------------------------*
FORM get_base_data.
TYPES: BEGIN OF ty_order_item,
vbeln TYPE vbeln_va,
posnr TYPE posnr_va,
erdat TYPE erdat,
erzet TYPE erzet,
ernam TYPE ernam,
kunnr TYPE kunnr,
vkorg TYPE vkorg,
netwr TYPE netwr_ak,
matnr TYPE matnr,
lifsk TYPE lifsk,
abgru TYPE abgru,
END OF ty_order_item.
DATA: lt_order_items TYPE TABLE OF ty_order_item.
SELECT h~vbeln i~posnr h~erdat h~erzet h~ernam h~kunnr h~vkorg h~netwr i~matnr h~lifsk i~abgru
INTO TABLE lt_order_items
FROM vbak AS h
INNER JOIN vbap AS i ON h~vbeln = i~vbeln
WHERE h~erdat IN s_erdat
AND h~vkorg IN s_vkorg
AND h~auart IN s_auart.
CHECK sy-subrc = 0.
DATA(lt_vbeln_range) = VALUE rsdsselopt_t(
FOR <fs_item> IN lt_order_items WHERE ( vbeln = <fs_item>-vbeln )
( sign = 'I' option = 'EQ' low = <fs_item>-vbeln ) ).
SORT lt_vbeln_range BY low.
DELETE ADJACENT DUPLICATES FROM lt_vbeln_range COMPARING low.
PERFORM extract_order_created USING lt_order_items.
PERFORM extract_changes USING lt_vbeln_range lt_order_items.
PERFORM extract_doc_flow_events USING lt_vbeln_range lt_order_items.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form extract_order_created
*&---------------------------------------------------------------------*
FORM extract_order_created USING it_order_items TYPE ANY TABLE.
FIELD-SYMBOLS: <fs_item> TYPE any.
DATA: lt_unique_orders TYPE HASHED TABLE OF vbeln_va WITH UNIQUE KEY table_line.
lt_unique_orders = VALUE #( FOR <order> IN it_order_items ( CONV vbeln_va( <order>-vbeln ) ) ).
LOOP AT it_order_items ASSIGNING <fs_item> WHERE table_line IN lt_unique_orders.
CLEAR gs_event_log.
gs_event_log-salesorder = <fs_item>-vbeln.
gs_event_log-activity = 'Sales Order Created'.
CONCATENATE <fs_item>-erdat <fs_item>-erzet INTO gs_event_log-starttime.
gs_event_log-user = <fs_item>-ernam.
gs_event_log-customernumber = <fs_item>-kunnr.
gs_event_log-salesorganization = <fs_item>-vkorg.
gs_event_log-netamount = <fs_item>-netwr.
APPEND gs_event_log TO gt_event_log.
DELETE lt_unique_orders WHERE table_line = <fs_item>-vbeln.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form extract_changes
*&---------------------------------------------------------------------*
FORM extract_changes USING it_vbeln_range TYPE rsdsselopt_t it_order_items TYPE ANY TABLE.
DATA: lt_cdhdr TYPE TABLE OF cdhdr,
lt_cdpos TYPE TABLE OF cdpos.
SELECT * INTO TABLE lt_cdhdr FROM cdhdr
WHERE objectclas = 'VERKBELEG'
AND objectid IN it_vbeln_range
AND tcode = 'VA02'.
IF sy-subrc = 0.
SELECT * INTO TABLE lt_cdpos FROM cdpos
FOR ALL ENTRIES IN lt_cdhdr
WHERE objectclas = lt_cdhdr-objectclas
AND objectid = lt_cdhdr-objectid
AND changenr = lt_cdhdr-changenr.
ENDIF.
LOOP AT lt_cdhdr ASSIGNING FIELD-SYMBOL(<fs_cdhdr>).
DATA(lv_order_info) = REF #( it_order_items[ vbeln = <fs_cdhdr>-objectid ] ).
IF lv_order_info IS NOT BOUND. CONTINUE. ENDIF.
CLEAR gs_event_log.
gs_event_log-salesorder = <fs_cdhdr>-objectid.
gs_event_log-user = <fs_cdhdr>-username.
CONCATENATE <fs_cdhdr>-udate <fs_cdhdr>-utime INTO gs_event_log-starttime.
gs_event_log-customernumber = lv_order_info->kunnr.
gs_event_log-salesorganization = lv_order_info->vkorg.
gs_event_log-netamount = lv_order_info->netwr.
" Generic Change Event
gs_event_log-activity = 'Sales Order Changed'.
APPEND gs_event_log TO gt_event_log.
LOOP AT lt_cdpos ASSIGNING FIELD-SYMBOL(<fs_cdpos>)
WHERE objectclas = <fs_cdhdr>-objectclas
AND objectid = <fs_cdhdr>-objectid
AND changenr = <fs_cdhdr>-changenr.
CASE <fs_cdpos>-fname.
WHEN 'LIFSK'. " Delivery Block
gs_event_log-activity = 'Delivery Block Set'.
gs_event_log-deliveryblock = <fs_cdpos>-value_new.
APPEND gs_event_log TO gt_event_log.
WHEN 'CMGST'. " Credit Status
IF <fs_cdpos>-value_new = 'B'. " B = Credit Check OK
gs_event_log-activity = 'Credit Check Performed'.
APPEND gs_event_log TO gt_event_log.
ENDIF.
WHEN 'ABGRU'. " Rejection Reason
IF <fs_cdpos>-value_new IS NOT INITIAL.
gs_event_log-activity = 'Order Cancelled'.
gs_event_log-rejectionreason = <fs_cdpos>-value_new.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDCASE.
ENDLOOP.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form extract_doc_flow_events
*&---------------------------------------------------------------------*
FORM extract_doc_flow_events USING it_vbeln_range TYPE rsdsselopt_t it_order_items TYPE ANY TABLE.
DATA: lt_vbfa TYPE TABLE OF vbfa,
lt_vbrk TYPE TABLE OF vbrk,
lt_likp TYPE TABLE OF likp,
lt_mseg TYPE TABLE OF mseg,
lt_bsad TYPE TABLE OF bsad,
lt_vbup TYPE TABLE OF vbup.
SELECT * INTO TABLE lt_vbfa FROM vbfa
WHERE vbelv IN it_vbeln_range
AND ( vbtyp_n = 'J' " Delivery
OR vbtyp_n = 'M' " Invoice
OR vbtyp_n = 'N' " Invoice Cancellation
OR vbtyp_n = 'R' ). " Goods Movement
IF lt_vbfa IS INITIAL. RETURN. ENDIF.
SELECT vbeln, erdat, erzet, ernam, fksto, belnr FROM vbrk INTO TABLE lt_vbrk
FOR ALL ENTRIES IN lt_vbfa
WHERE vbeln = lt_vbfa-vbeln
AND ( lt_vbfa-vbtyp_n = 'M' OR lt_vbfa-vbtyp_n = 'N' ).
SELECT vbeln, erdat, erzet, ernam, podat FROM likp INTO TABLE lt_likp
FOR ALL ENTRIES IN lt_vbfa
WHERE vbeln = lt_vbfa-vbeln AND lt_vbfa-vbtyp_n = 'J'.
SELECT mblnr, mjahr, zeile, bwart, budat, cpuzt, usnam FROM mseg INTO TABLE lt_mseg
FOR ALL ENTRIES IN lt_vbfa
WHERE mblnr = lt_vbfa-vbeln AND mjahr = lt_vbfa-mjahr AND zeile = lt_vbfa-posnn AND lt_vbfa-vbtyp_n = 'R' AND bwart = '601'.
SELECT augdt, belnr, gjahr, kunnr FROM bsad INTO TABLE lt_bsad
FOR ALL ENTRIES IN lt_vbrk
WHERE belnr = lt_vbrk-belnr AND gjahr = SUBSTRING( val = lt_vbrk-erdat len = 4 ).
SELECT vbeln, posnr, gbsta FROM vbup INTO TABLE lt_vbup
FOR ALL ENTRIES IN lt_vbfa
WHERE vbeln = lt_vbfa-vbelv AND posnr = lt_vbfa-posnv.
LOOP AT lt_vbfa ASSIGNING FIELD-SYMBOL(<fs_vbfa>).
DATA(lv_order_info) = REF #( it_order_items[ vbeln = <fs_vbfa>-vbelv ] ).
IF lv_order_info IS NOT BOUND. CONTINUE. ENDIF.
CLEAR gs_event_log.
gs_event_log-salesorder = <fs_vbfa>-vbelv.
gs_event_log-customernumber = lv_order_info->kunnr.
gs_event_log-salesorganization = lv_order_info->vkorg.
gs_event_log-netamount = lv_order_info->netwr.
gs_event_log-materialnumber = lv_order_info->matnr.
CASE <fs_vbfa>-vbtyp_n.
WHEN 'J'. " Delivery
READ TABLE lt_likp ASSIGNING FIELD-SYMBOL(<fs_likp>) WITH KEY vbeln = <fs_vbfa>-vbeln.
IF sy-subrc = 0.
gs_event_log-activity = 'Delivery Created'.
CONCATENATE <fs_likp>-erdat <fs_likp>-erzet INTO gs_event_log-starttime.
gs_event_log-user = <fs_likp>-ernam.
APPEND gs_event_log TO gt_event_log.
" Picking Completed - simplified logic, check status
gs_event_log-activity = 'Picking Completed'. APPEND gs_event_log TO gt_event_log.
" POD Confirmed
IF <fs_likp>-podat IS NOT INITIAL.
gs_event_log-activity = 'Proof Of Delivery Confirmed'.
gs_event_log-starttime = <fs_likp>-podat.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
WHEN 'R'. " Goods Issue
READ TABLE lt_mseg ASSIGNING FIELD-SYMBOL(<fs_mseg>) WITH KEY mblnr = <fs_vbfa>-vbeln mjahr = <fs_vbfa>-mjahr zeile = <fs_vbfa>-posnn.
IF sy-subrc = 0.
gs_event_log-activity = 'Goods Issued'.
CONCATENATE <fs_mseg>-budat <fs_mseg>-cpuzt INTO gs_event_log-starttime.
gs_event_log-user = <fs_mseg>-usnam.
APPEND gs_event_log TO gt_event_log.
ENDIF.
WHEN 'M'. " Invoice
READ TABLE lt_vbrk ASSIGNING FIELD-SYMBOL(<fs_vbrk>) WITH KEY vbeln = <fs_vbfa>-vbeln.
IF sy-subrc = 0.
gs_event_log-activity = 'Invoice Created'.
CONCATENATE <fs_vbrk>-erdat <fs_vbrk>-erzet INTO gs_event_log-starttime.
gs_event_log-user = <fs_vbrk>-ernam.
APPEND gs_event_log TO gt_event_log.
" Payment Received
READ TABLE lt_bsad ASSIGNING FIELD-SYMBOL(<fs_bsad>) WITH KEY belnr = <fs_vbrk>-belnr.
IF sy-subrc = 0 AND <fs_bsad>-augdt IS NOT INITIAL.
gs_event_log-activity = 'Payment Received'.
gs_event_log-starttime = <fs_bsad>-augdt.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
WHEN 'N'. " Invoice Cancellation
READ TABLE lt_vbrk ASSIGNING <fs_vbrk> WITH KEY vbeln = <fs_vbfa>-vbeln.
IF sy-subrc = 0 AND <fs_vbrk>-fksto = 'X'.
gs_event_log-activity = 'Invoice Cancelled'.
CONCATENATE <fs_vbrk>-erdat <fs_vbrk>-erzet INTO gs_event_log-starttime.
gs_event_log-user = <fs_vbrk>-ernam.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDCASE.
ENDLOOP.
" Infer other events from status
LOOP AT lt_vbup ASSIGNING FIELD-SYMBOL(<fs_vbup>).
IF <fs_vbup>-gbsta = 'C'.
DATA(lv_order_info_stat) = REF #( it_order_items[ vbeln = <fs_vbup>-vbeln ] ).
IF lv_order_info_stat IS NOT BOUND. CONTINUE. ENDIF.
gs_event_log-salesorder = <fs_vbup>-vbeln.
gs_event_log-activity = 'Order Item Closed'.
" Timestamp for closed is harder, using current time as placeholder
CONCATENATE sy-datum sy-uzeit INTO gs_event_log-starttime.
gs_event_log-user = sy-uname.
gs_event_log-customernumber = lv_order_info_stat->kunnr.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
" Order Confirmed (Simplified - assumes if not blocked it's confirmed)
LOOP AT it_order_items ASSIGNING FIELD-SYMBOL(<fs_item>).
IF <fs_item>-lifsk IS INITIAL.
gs_event_log-salesorder = <fs_item>-vbeln.
gs_event_log-activity = 'Order Confirmed'.
CONCATENATE <fs_item>-erdat <fs_item>-erzet INTO gs_event_log-starttime.
gs_event_log-user = <fs_item>-ernam.
gs_event_log-customernumber = <fs_item>-kunnr.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form write_output_file
*&---------------------------------------------------------------------*
FORM write_output_file.
DATA: lt_final_output TYPE TABLE OF ty_event_log.
" Add common fields
LOOP AT gt_event_log ASSIGNING FIELD-SYMBOL(<fs_event>).
<fs_event>-sourcesystem = gv_sysid.
<fs_event>-lastdataupdate = gv_last_update.
ENDLOOP.
SORT gt_event_log BY salesorder starttime.
DELETE ADJACENT DUPLICATES FROM gt_event_log COMPARING ALL FIELDS.
lt_final_output = gt_event_log.
DATA: lt_fieldnames TYPE TABLE OF string.
APPEND 'SalesOrder' TO lt_fieldnames.
APPEND 'Activity' TO lt_fieldnames.
APPEND 'StartTime' TO lt_fieldnames.
APPEND 'SourceSystem' TO lt_fieldnames.
APPEND 'LastDataUpdate' TO lt_fieldnames.
APPEND 'User' TO lt_fieldnames.
APPEND 'CustomerNumber' TO lt_fieldnames.
APPEND 'SalesOrganization' TO lt_fieldnames.
APPEND 'NetAmount' TO lt_fieldnames.
APPEND 'MaterialNumber' TO lt_fieldnames.
APPEND 'DeliveryBlock' TO lt_fieldnames.
APPEND 'RejectionReason' TO lt_fieldnames.
APPEND 'SalesOrderCycleTime' TO lt_fieldnames.
DATA(lv_header) = REDUCE string(
INIT s = ''
FOR field IN lt_fieldnames
NEXT s = s && COND #( WHEN s = '' THEN field ELSE |,{ field }| ) ).
DATA: lt_file_content TYPE TABLE OF string.
APPEND lv_header TO lt_file_content.
LOOP AT lt_final_output INTO DATA(ls_output).
DATA(lv_line) = |"{ ls_output-salesorder }","{ ls_output-activity }","{ ls_output-starttime }","{ ls_output-sourcesystem }","{ ls_output-lastdataupdate }","{ ls_output-user }","{ ls_output-customernumber }","{ ls_output-salesorganization }",{ ls_output-netamount },"{ ls_output-materialnumber }","{ ls_output-deliveryblock }","{ ls_output-rejectionreason }","{ ls_output-salesordercycletime }"|.
APPEND lv_line TO lt_file_content.
ENDLOOP.
cl_gui_frontend_services=>gui_download(
EXPORTING
filename = p_file
filetype = 'ASC'
CHANGING
data_tab = lt_file_content ).
ENDFORM. Passaggi
- Prerequisiti: si assicuri di disporre dell'accesso diretto in sola lettura al database SAP ECC sottostante. Avrà bisogno di uno strumento client per database, come DBeaver, SQL Server Management Studio o Oracle SQL Developer, per connettersi ed eseguire le query.
- Ottenga lo script SQL: copi la query SQL completa fornita nella sezione 'query' di questo documento.
- Si connetta al database: apra il client del database e stabilisca una connessione all'istanza del database SAP ECC. Le serviranno l'indirizzo del server, la porta, il nome del database e credenziali di accesso appropriate.
- Configuri la query: incolli lo script SQL in una nuova finestra dell'editor delle query. Individui la sezione di configurazione all'interno della Common Table Expression (CTE) principale denominata SalesOrders. Sostituisca i valori segnaposto per la data iniziale ('{StartDate}'), la data finale ('{EndDate}'), le organizzazioni vendite ('{SalesOrgs}') e i tipi di documento ('{DocTypes}') con i valori effettivi dell'analisi.
- Esegua la query: esegua lo script SQL configurato. A seconda dell'intervallo di date e delle dimensioni del database SAP, il completamento della query potrebbe richiedere diversi minuti.
- Esamini i risultati: al termine dell'esecuzione verrà visualizzato un set di risultati. Verifichi rapidamente che contenga le colonne previste (SalesOrder, Activity, StartTime ecc.) e che vengano restituite righe per diverse attività.
- Esporti i dati: utilizzi la funzione di esportazione del client del database per salvare il set di risultati come file CSV. Assegni al file un nome descrittivo, ad esempio SAP_O2C_Event_Log.csv.
- Formatti per ProcessMind: apra il file CSV in un editor di fogli di calcolo. Verifichi che le intestazioni di colonna corrispondano esattamente agli attributi richiesti, ad esempio SalesOrder, Activity e StartTime. Si assicuri che il formato di data e ora di StartTime e LastDataUpdate sia coerente e supportato da ProcessMind, ad esempio YYYY-MM-DD HH:MI:SS.
- Carichi in ProcessMind: carichi il file CSV finale e formattato nel progetto ProcessMind per l'analisi.
Configurazione
- Intervallo di date: la query utilizza segnaposto ('{StartDate}' e '{EndDate}') per filtrare gli ordini di vendita in base alla data di creazione (VBAK.ERDAT). Un periodo di analisi tipico comprende da 3 a 6 mesi di dati, così da garantire un campione rappresentativo senza sovraccaricare il database.
- Filtro per organizzazione vendite: utilizzi il segnaposto '{SalesOrgs}' per limitare l'estrazione a organizzazioni vendite specifiche, ad esempio '1000' e '2000'. Questo è fondamentale per concentrare l'analisi e migliorare le prestazioni della query.
- Filtro per tipo di documento: utilizzi il segnaposto '{DocTypes}' per selezionare specifici tipi di ordine di vendita, ad esempio 'OR' per l'ordine standard. In questo modo potrà escludere dal flusso principale documenti non pertinenti, come consegne gratuite o resi.
- Identificativo del sistema di origine: il segnaposto codificato '{SourceSystemName}' viene utilizzato per contrassegnare ogni record con il sistema di origine. Deve essere impostato su un nome significativo per la Sua istanza SAP ECC, ad esempio SAP_ECC_PRD.
- Compatibilità del database: la funzione utilizzata per combinare i campi di data e ora, [Your DB-specific timestamp function], è un segnaposto. Deve sostituirla con la funzione corretta per il database specifico, ad esempio TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UZEIT), 'YYYYMMDDHH24MISS') per SAP HANA oppure CAST(CDHDR.UDATE AS DATETIME) + CAST(CDHDR.UZEIT AS DATETIME) per SQL Server.
- Prerequisiti: questo metodo richiede credenziali di database dirette e in sola lettura. L'utente del database deve essere autorizzato ad accedere a tutte le tabelle utilizzate nella query, incluse VBAK, VBAP, VBFA, CDHDR, CDPOS, LIKP, VBRK e BSAD.
a Query di esempio sql
WITH SalesOrders AS (
SELECT VBELN
FROM VBAK
WHERE ERDAT BETWEEN '{StartDate}' AND '{EndDate}' -- Filter by creation date
AND VKORG IN ('{SalesOrgs}') -- Filter by Sales Organization(s)
AND AUART IN ('{DocTypes}') -- Filter by Sales Document Type(s)
)
-- 1. Sales Order Created
SELECT
vbak.VBELN AS "SalesOrder",
'Sales Order Created' AS "Activity",
[Your DB-specific timestamp function](vbak.ERDAT, vbak.ERZET) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
vbak.ERNAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
vbak.LIFSK AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBAK vbak
JOIN SalesOrders so ON vbak.VBELN = so.VBELN
UNION ALL
-- 2. Sales Order Changed
SELECT
cdhdr.OBJECTID AS "SalesOrder",
'Sales Order Changed' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
vbak.LIFSK AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM CDHDR cdhdr
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG' AND cdhdr.TCODE IN ('VA02')
UNION ALL
-- 3. Credit Check Performed (Release)
SELECT
cdhdr.OBJECTID AS "SalesOrder",
'Credit Check Performed' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
vbak.LIFSK AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM CDHDR cdhdr
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG'
AND cdpos.TABNAME = 'VBUK'
AND cdpos.FNAME = 'CMGST'
AND cdpos.VALUE_NEW = 'B' -- Credit status 'Released'
UNION ALL
-- 4. Order Confirmed (Overall status not blocked)
SELECT
cdhdr.OBJECTID AS "SalesOrder",
'Order Confirmed' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM CDHDR cdhdr
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG'
AND cdpos.TABNAME = 'VBUK'
AND cdpos.FNAME = 'GBSTK'
AND cdpos.VALUE_OLD <> 'A' AND cdpos.VALUE_NEW = 'A' -- Status changes to 'Not yet processed'
UNION ALL
-- 5. Delivery Block Set
SELECT
cdhdr.OBJECTID AS "SalesOrder",
'Delivery Block Set' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
cdpos.VALUE_NEW AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM CDHDR cdhdr
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG'
AND cdpos.TABNAME = 'VBAK'
AND cdpos.FNAME = 'LIFSK'
AND cdpos.VALUE_NEW IS NOT NULL AND cdpos.VALUE_NEW <> ''
UNION ALL
-- 6. Delivery Created
SELECT
vbfa.VBELV AS "SalesOrder",
'Delivery Created' AS "Activity",
[Your DB-specific timestamp function](likp.ERDAT, likp.ERZET) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
likp.ERNAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
vbak.LIFSK AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN LIKP likp ON vbfa.VBELN = likp.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'C' AND vbfa.VBTYP_N = 'J'
UNION ALL
-- 7. Picking Completed
SELECT
vbfa.VBELV AS "SalesOrder",
'Picking Completed' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN CDHDR cdhdr ON vbfa.VBELN = cdhdr.OBJECTID
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'C' AND vbfa.VBTYP_N = 'J'
AND cdhdr.OBJECTCLASS = 'LIEFERUNG'
AND cdpos.TABNAME = 'VBUK'
AND cdpos.FNAME = 'PKSTK'
AND cdpos.VALUE_NEW = 'C'
UNION ALL
-- 8. Goods Issued
SELECT
vbfa_gi.VBELV AS "SalesOrder",
'Goods Issued' AS "Activity",
[Your DB-specific timestamp function](mkpf.BUDAT, mkpf.CPUTM) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
mkpf.USNAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa_gi
JOIN SalesOrders so ON vbfa_gi.VBELV = so.VBELN
JOIN MKPF mkpf ON vbfa_gi.VBELN = mkpf.XBLNR -- XBLNR is Reference Document Number
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa_gi.VBTYP_V = 'J' AND vbfa_gi.VBTYP_N = 'R'
UNION ALL
-- 9. Proof Of Delivery Confirmed
SELECT
vbfa.VBELV AS "SalesOrder",
'Proof Of Delivery Confirmed' AS "Activity",
[Your DB-specific timestamp function](likp.PODAT, '000000') AS "StartTime", -- PODAT is only a date
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
likp.AENAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN LIKP likp ON vbfa.VBELN = likp.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'C' AND vbfa.VBTYP_N = 'J' AND likp.PODAT IS NOT NULL AND likp.PODAT <> '00000000'
UNION ALL
-- 10. Invoice Created
SELECT
vbfa.VBELV AS "SalesOrder",
'Invoice Created' AS "Activity",
[Your DB-specific timestamp function](vbrk.ERDAT, vbrk.ERZET) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
vbrk.ERNAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN VBRK vbrk ON vbfa.VBELN = vbrk.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'C' AND vbfa.VBTYP_N = 'M'
UNION ALL
-- 11. Invoice Cancelled
SELECT
vbfa.VBELV AS "SalesOrder",
'Invoice Cancelled' AS "Activity",
[Your DB-specific timestamp function](vbrk.ERDAT, vbrk.ERZET) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
vbrk.ERNAM AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN VBRK vbrk ON vbfa.VBELN = vbrk.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'M' AND vbfa.VBTYP_N = 'N'
UNION ALL
-- 12. Payment Received
SELECT
vbfa.VBELV AS "SalesOrder",
'Payment Received' AS "Activity",
[Your DB-specific timestamp function](bsad.AUGDT, '000000') AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
NULL AS "User", -- Clearing user not readily available here
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
NULL AS "MaterialNumber",
NULL AS "DeliveryBlock",
NULL AS "RejectionReason"
FROM VBFA vbfa
JOIN SalesOrders so ON vbfa.VBELV = so.VBELN
JOIN VBRK vbrk ON vbfa.VBELN = vbrk.VBELN
JOIN BSAD bsad ON vbrk.VBELN = bsad.VBLNR
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE vbfa.VBTYP_V = 'C' AND vbfa.VBTYP_N = 'M'
AND bsad.AUGDT IS NOT NULL AND bsad.AUGDT <> '00000000'
UNION ALL
-- 13. Order Item Closed
SELECT DISTINCT
cdhdr.OBJECTID AS "SalesOrder",
'Order Item Closed' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
vbap.MATNR AS "MaterialNumber",
NULL AS "DeliveryBlock",
vbap.ABGRU AS "RejectionReason"
FROM CDHDR cdhdr
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN VBAP vbap ON cdhdr.OBJECTID = vbap.VBELN AND SUBSTRING(cdpos.TABKEY, 4, 6) = vbap.POSNR
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG'
AND cdpos.TABNAME = 'VBUP'
AND cdpos.FNAME = 'GBSTA'
AND cdpos.VALUE_NEW = 'C' -- Item is completely processed
UNION ALL
-- 14. Order Cancelled
SELECT DISTINCT
cdhdr.OBJECTID AS "SalesOrder",
'Order Cancelled' AS "Activity",
[Your DB-specific timestamp function](cdhdr.UDATE, cdhdr.UZEIT) AS "StartTime",
'{SourceSystemName}' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
cdhdr.USERNAME AS "User",
vbak.KUNNR AS "CustomerNumber",
vbak.VKORG AS "SalesOrganization",
vbak.NETWR AS "NetAmount",
vbap.MATNR AS "MaterialNumber",
NULL AS "DeliveryBlock",
cdpos.VALUE_NEW AS "RejectionReason"
FROM CDHDR cdhdr
JOIN CDPOS cdpos ON cdhdr.CHANGENR = cdpos.CHANGENR
JOIN VBAP vbap ON cdhdr.OBJECTID = vbap.VBELN AND SUBSTRING(cdpos.TABKEY, 4, 6) = vbap.POSNR
JOIN SalesOrders so ON cdhdr.OBJECTID = so.VBELN
JOIN VBAK vbak ON so.VBELN = vbak.VBELN
WHERE cdhdr.OBJECTCLASS = 'VERKBELEG'
AND cdpos.TABNAME = 'VBAP'
AND cdpos.FNAME = 'ABGRU'
AND cdpos.VALUE_NEW IS NOT NULL AND cdpos.VALUE_NEW <> ''; Pronto a iniziare?
Sfrutti tutto il potenziale del processo Order to Cash, elaborazione degli ordini di vendita, utilizzando questo Template dei dati. Inizi oggi il percorso verso una maggiore efficienza e un flusso di cassa più rapido.
Ottimizzi oggi l'elaborazione Order to Cash degli ordini di vendita
Elimini i colli di bottiglia, riduca del 30% il tempo di ciclo e aumenti rapidamente il flusso di cassa.
Non è richiesta alcuna carta di credito. Configuri tutto in pochi minuti.