Il Suo template dei dati per Order to Cash - Fatturazione ed emissione fatture
Il Suo template dei dati per Order to Cash - Fatturazione ed emissione fatture
- Attributi consigliati per un’analisi completa
- Fasi e traguardi principali del processo da monitorare
- Indicazioni pratiche per estrarre i dati da SAP ECC
Attributi di Order to Cash - Fatturazione ed emissione fatture
| Nome | Descrizione | ||
|---|---|---|---|
| Attività ActivityName | Nome dell’evento aziendale o della fase che si è verificata nel ciclo di vita della fattura. | ||
| Descrizione Questo attributo descrive un’azione specifica o una modifica di stato nel processo di fatturazione, ad esempio «Fattura generata», «Fattura registrata» o «Pagamento del cliente ricevuto». Queste attività sono ricavate concettualmente da diversi eventi di sistema, dalle modifiche di stato dei documenti o dai codici transazione eseguiti dagli utenti. La sequenza delle attività costituisce il flusso del processo, alla base dell’analisi di Process Mining. Esaminando le attività, le organizzazioni possono capire quali fasi vengono eseguite, in quale ordine e con quale frequenza, mettendo a confronto l’esecuzione effettiva del processo con quella prevista. Perché è importante Definisce le fasi nella mappa del processo e permette di visualizzare e analizzare i flussi, le deviazioni e i colli di bottiglia. Dove reperirli È un attributo concettuale ricavato da più fonti, come i codici transazione (CDHDR-TCODE), le modifiche di stato dei documenti (VBUK-FKSTK) e le registrazioni dei documenti contabili. Esempi Fattura generataFattura registrataSollecito di pagamento inviatoFattura compensata | |||
| Numero fattura InvoiceNumber | Identificativo univoco del documento di fatturazione, utilizzato come ID principale del caso nel processo di fatturazione. | ||
| Descrizione Il numero fattura, denominato in SAP numero del documento di fatturazione, identifica in modo univoco ogni fattura. Nel Process Mining funge da ID del caso e raggruppa in un’unica istanza di processo tutte le attività correlate, come creazione, registrazione, invio, pagamento e compensazione. L’analisi dei processi per numero fattura offre una visione completa del ciclo di vita di ogni transazione di fatturazione, dall’avvio al saldo finale. È un elemento essenziale per calcolare indicatori chiave come i giorni medi di incasso (DSO) e il tempo di ciclo complessivo della fattura, fornendo una base chiara per misurare e migliorare i risultati. Perché è importante È la chiave essenziale per seguire l’intero percorso di una fattura e analizzare i tempi di ciclo, i colli di bottiglia e le variazioni di ogni singola transazione di fatturazione. Dove reperirli Tabella SAP ECC: VBRK, campo: VBELN Esempi 90001234900012359000123690001237 | |||
| Ora di inizio EventTime | Data e ora che indicano quando si è verificata una specifica attività o un evento. | ||
| Descrizione L’ora dell’evento registra la data e l’ora esatte di ogni attività nel ciclo di vita della fattura. Questo dato temporale è fondamentale per tutte le analisi basate sul tempo nel Process Mining, compreso il calcolo dei tempi di ciclo, l’individuazione dei colli di bottiglia e il monitoraggio dei risultati del processo rispetto agli accordi sui livelli di servizio. In genere, l’attributo viene creato combinando un campo data, come la data di registrazione (BUDAT), con un campo ora (UZEIT) proveniente da diverse tabelle SAP che registrano le modifiche o la creazione dei documenti. Timestamp accurati sono essenziali per creare un event log affidabile e garantire la validità delle analisi dei risultati. Perché è importante È alla base di tutte le analisi dei risultati e consente di calcolare tempi di ciclo, durate e tempi di attesa tra le fasi del processo. Dove reperirli Ricavato da vari campi di data e ora presenti in più tabelle, ad esempio BKPF (BUDAT, CPUTM), VBRK (ERDAT, ERZET) e tabelle dei log delle modifiche come CDHDR (UDATE, UTIME). Esempi 2023-04-15T10:30:00Z2023-04-16T11:00:00Z2023-05-20T09:00:00Z | |||
| Importo totale fattura TotalInvoiceAmount | Valore netto totale del documento di fatturazione. | ||
| Descrizione Questo attributo rappresenta l’importo netto totale della fattura, al netto delle imposte. È un dato finanziario fondamentale associato al processo di fatturazione. Può essere utilizzato in diverse analisi, ad esempio per suddividere le fatture in base al valore e verificare se seguono flussi di processo diversi. Può inoltre aiutare a stabilire le priorità delle attività di riscossione o a capire perché le fatture di importo elevato richiedono più tempo per essere approvate o pagate. Questo contesto finanziario arricchisce in modo significativo l’analisi del processo. Perché è importante Fornisce un contesto finanziario essenziale e permette di analizzare i processi in base al valore della fattura, ad esempio per verificare se quelle di importo elevato seguono un flusso diverso o richiedono più tempo per essere compensate. Dove reperirli Tabella SAP ECC: VBRK, campo: NETWR Esempi 1500.7525000.00500.0012345.67 | |||
| Nome utente UserName | ID dell’utente che ha eseguito l’attività o creato il documento. | ||
| Descrizione Questo attributo registra l’ID utente SAP responsabile di un evento, ad esempio la creazione di una fattura o la registrazione di un pagamento. È essenziale per analizzare il contributo delle persone al processo. Questi dati permettono di esaminare le differenze nei risultati tra utenti o team, individuare esigenze di formazione e rilevare potenziali problemi di conformità. Consentono inoltre di distinguere le attività manuali svolte dagli utenti dalle fasi automatiche eseguite dal sistema o da utenti batch, distinzione fondamentale per calcolare il livello di automazione. Perché è importante Consente di analizzare i risultati degli utenti e la distribuzione del carico di lavoro, distinguendo le attività manuali da quelle automatiche e supportando le iniziative di automazione ed efficienza. Dove reperirli Tabella SAP ECC: VBRK, campo: ERNAM (Creato da) oppure BKPF, campo: USNAM (Nome utente) oppure CDHDR, campo: USERNAME (Utente). Esempi JSMITHBW_BATCHLROSSIMKUMAR | |||
| Numero cliente CustomerNumber | Numero univoco che identifica il cliente a cui viene emessa la fattura. | ||
| Descrizione Il numero cliente collega una fattura a uno specifico cliente o partner commerciale. Questo attributo è fondamentale per segmentare e analizzare il processo di fatturazione in base alle caratteristiche dei clienti. Gli analisti possono utilizzare questo campo per confrontare i giorni medi di incasso (DSO) tra i clienti, individuare quelli che pagano spesso in ritardo o analizzare il rispetto dei termini di pagamento. Comprendere queste tendenze è essenziale per gestire le relazioni con i clienti e migliorare le strategie di riscossione in base ai diversi segmenti. Perché è importante Consente analisi incentrate sui clienti, aiutando a individuare le abitudini di pagamento, valutare il DSO per cliente e definire strategie di riscossione mirate. Dove reperirli Tabella SAP ECC: VBRK, campo: KUNRG (Pagante) oppure KUNAG (Destinatario della merce). Esempi 100023200541CUST-A487910345 | |||
| Società CompanyCode | Identificativo della persona giuridica che ha emesso la fattura. | ||
| Descrizione In SAP, la società rappresenta un’unità giuridica e contabile indipendente. Tutte le transazioni finanziarie, comprese le fatture, vengono registrate in una società specifica. È un elemento fondamentale dei dati organizzativi. Nel Process Mining, la società consente di analizzare e confrontare i risultati del processo di fatturazione tra le diverse persone giuridiche di un gruppo. In questo modo è possibile individuare le pratiche efficaci adottate da una società e applicarle alle altre, assicurando al contempo che l’analisi rispecchi la struttura organizzativa dell’azienda. Perché è importante Consente di filtrare e confrontare i processi tra diverse persone giuridiche, un aspetto fondamentale per l’analisi finanziaria e il confronto dei risultati tra unità organizzative. Dove reperirli Tabella SAP ECC: VBRK, campo: BUKRS Esempi 10002000US01DE01 | |||
| Tipo di documento di fatturazione BillingDocumentType | Codice che classifica il documento di fatturazione, ad esempio come fattura, nota di credito o nota di debito. | ||
| Descrizione Il tipo di documento di fatturazione classifica le transazioni in categorie distinte in base alla loro finalità aziendale. Ad esempio, «F2» indica una fattura standard al cliente, mentre «G2» identifica una nota di credito. In SAP, questa classificazione viene configurata per definire le modalità di elaborazione dei diversi documenti di fatturazione. Nel Process Mining, questo attributo è essenziale per filtrare e confrontare diversi scenari di fatturazione. Gli analisti possono esaminare separatamente il processo delle fatture standard e quello delle note di credito, per comprenderne i flussi, i tempi di ciclo e le criticità specifici e individuare interventi di miglioramento più mirati. Perché è importante Consente di segmentare e analizzare processi di fatturazione diversi, ad esempio fatture standard e note di credito, che spesso seguono flussi molto differenti. Dove reperirli Tabella SAP ECC: VBRK, campo: FKART Esempi F2G2L2IV | |||
| Codice transazione TransactionCode | Codice transazione SAP utilizzato per eseguire un’attività. | ||
| Descrizione Il codice transazione, o T-Code, è un identificativo univoco di una funzione o di un programma SAP specifico, ad esempio «VF01» per creare un documento di fatturazione. Registrare il T-Code di ogni evento offre una prospettiva tecnica, a livello di sistema, sull’esecuzione del processo. Questa informazione è molto utile per analizzare le cause profonde. Se, ad esempio, si verificano spesso errori, gli analisti possono verificare se viene utilizzato un codice transazione non standard. Il T-Code aiuta anche a ricavare il nome dell’attività e a capire quali funzioni del sistema vengono utilizzate nel processo. Perché è importante Fornisce il contesto tecnico sull’esecuzione di un’attività, consentendo di analizzare le cause profonde delle deviazioni del processo e individuare le azioni non standard degli utenti. Dove reperirli Tabella SAP ECC: CDHDR, campo: TCODE Esempi VF01VF02FB01F-28 | |||
| Data di compensazione ClearingDate | Data in cui è stato ricevuto il pagamento e la fattura è stata compensata nei crediti verso clienti. | ||
| Descrizione La data di compensazione è il giorno in cui una partita aperta, come una fattura, viene contrassegnata come pagata o «compensata» nel sistema finanziario. Indica di fatto quando l’incasso è considerato ricevuto e riconciliato. È una delle date più importanti del ciclo Order to Cash. Segna il termine per il calcolo dei giorni medi di incasso (DSO) e del tempo di ciclo complessivo dalla fattura all’incasso. Analizzando la data di compensazione è possibile misurare l’efficacia del processo di riscossione. Perché è importante Segna la fase finale del ciclo di vita della fattura e costituisce la data di fine per il calcolo del DSO e del tempo di ciclo complessivo; riflette inoltre l’efficienza della riscossione. Dove reperirli Tabella SAP ECC: BSAD, campo: AUGDT Esempi 2023-05-142023-06-012023-06-25 | |||
| Data di registrazione PostingDate | Data in cui il documento viene registrato nei libri contabili. | ||
| Descrizione La data di registrazione determina il periodo fiscale in cui la transazione viene contabilizzata nella contabilità generale. È una data fondamentale per la contabilità e la rendicontazione finanziaria. Eventuali ritardi tra la creazione del documento e la sua registrazione possono indicare inefficienze nella gestione interna dei documenti di fatturazione. Nel Process Mining, la data di registrazione segna una tappa importante nel ciclo di vita della fattura. Il tempo che intercorre tra la generazione e la registrazione della fattura può essere un indicatore chiave dell’efficienza dell’ufficio fatturazione. Perché è importante Segna una tappa finanziaria importante ed è fondamentale per la contabilità. Il tempo che intercorre tra la creazione e la registrazione della fattura è una misura chiave dell’efficienza dell’elaborazione interna. Dove reperirli Tabella SAP ECC: BKPF, campo: BUDAT Esempi 2023-04-152023-04-172023-05-21 | |||
| Data di scadenza della fattura InvoiceDueDate | Data entro cui il cliente dovrebbe effettuare il pagamento. | ||
| Descrizione La data di scadenza della fattura è il termine entro cui deve essere effettuato il pagamento, secondo i termini concordati. È fondamentale per la gestione dei crediti verso clienti e l’avvio delle attività di riscossione. Questo attributo serve a calcolare l’indicatore KPI dei pagamenti puntuali, confrontandolo con la data effettiva del pagamento. L’analisi delle fatture in base alla scadenza aiuta a prevedere i flussi di cassa e a stabilire le priorità di riscossione per i pagamenti imminenti o scaduti. In genere, la data viene ricavata dalla data di riferimento e dai termini di pagamento. Perché è importante È il riferimento per misurare la puntualità dei pagamenti ed è essenziale per gestire i crediti verso clienti e prevedere i flussi di cassa. Dove reperirli Calcolata in base alla data di riferimento (BSEG-ZFBDT) e ai termini di pagamento (BSEG-ZTERM). Non sempre è memorizzata in un campo diretto. Esempi 2023-05-152023-05-302023-06-20 | |||
| Data documento DocumentDate | Data riportata sul documento originale, indicata dal fornitore o da chi lo ha creato. | ||
| Descrizione La data documento è la data di emissione del documento originale. Nella fatturazione, di norma coincide con la data di creazione della fattura e viene spesso utilizzata come base per calcolare la data di scadenza del pagamento. Questa data è essenziale per la rendicontazione finanziaria e per calcolare indicatori chiave come i giorni medi di incasso (DSO). Dal punto di vista del cliente, segna l’inizio del periodo di riscossione. L’analisi delle differenze tra la data documento e la data di registrazione può far emergere ritardi interni nell’elaborazione delle fatture in entrata. Perché è importante È il riferimento per calcolare l’età della fattura e il DSO, e costituisce un dato essenziale per l’analisi finanziaria e dei termini di pagamento. Dove reperirli Tabella SAP ECC: VBRK, campo: FKDAT (Data fattura) Esempi 2023-04-152023-04-162023-05-20 | |||
| È automatizzata IsAutomated | Indicatore che segnala se un’attività è stata eseguita da un utente di sistema o tramite automazione. | ||
| Descrizione Questo attributo calcolato è un indicatore booleano che distingue le attività manuali da quelle automatiche. In genere viene ricavato confrontando l’attributo Nome utente con un elenco di ID noti di utenti di sistema o batch, come «BATCHUSER» o «SAPSYSTEM». L’indicatore è essenziale per misurare il livello di automazione del processo di fatturazione, un obiettivo importante per molte organizzazioni che intendono migliorare l’efficienza e ridurre i costi. L’indicatore KPI del tasso di fatturazione automatizzata viene calcolato direttamente a partire da questo attributo, consentendo di monitorare i progressi delle iniziative di automazione. Perché è importante Supporta direttamente il calcolo del tasso di fatturazione automatizzata e aiuta a misurare l’efficienza del processo e a monitorare l’impatto dei progetti di automazione. Dove reperirli Ricavato dall’attributo Nome utente. La logica potrebbe essere: IF UserName IN ('BATCH', 'SYSTEM', 'RFCUSER') THEN true ELSE false. Esempi truefalse | |||
| È una rilavorazione IsRework | Indicatore che segnala se un’attività è una fase di rilavorazione o correzione. | ||
| Descrizione Questo attributo calcolato individua le attività che comportano una rilavorazione, come «Fattura corretta» o lo storno di documenti. In genere è un indicatore booleano ricavato dal nome dell’attività o dai codici transazione associati a correzioni e annullamenti, come «VF11» per annullare un documento di fatturazione. Nel Process Mining, questo indicatore è prezioso per quantificare la rilavorazione nel processo di fatturazione. Supporta direttamente indicatori KPI come il tasso di correzione delle fatture e aiuta a visualizzare i cicli di rilavorazione nella mappa del processo, mettendo in evidenza inefficienze e problemi di qualità che aumentano i costi operativi e ritardano i pagamenti. Perché è importante Aiuta a quantificare le inefficienze del processo e i problemi di qualità, mostrando quanto impegno è dedicato alla correzione degli errori e supportando direttamente gli indicatori KPI di rilavorazione. Dove reperirli Ricavato dal nome dell’attività o dal codice transazione. Ad esempio: IF ActivityName = 'Invoice Corrected' OR TransactionCode = 'VF11' THEN true ELSE false. Esempi truefalse | |||
| Numero documento di vendita SalesDocumentNumber | Identificativo dell’ordine di vendita originale da cui ha avuto origine la fattura. | ||
| Descrizione Questo attributo collega direttamente la fattura all’ordine di vendita che ha avviato la transazione. Questa tracciabilità è essenziale per un’analisi completa del ciclo Order to Cash. Collegando il processo di fatturazione al processo dell’ordine di vendita che lo precede, le organizzazioni possono analizzare il tempo di ciclo complessivo, dall’ordine del cliente all’incasso. È possibile capire se i ritardi nella fatturazione dipendono da problemi nelle vendite, nell’evasione degli ordini o nell’ufficio fatturazione, ottenendo così una visione più completa del processo. Perché è importante Collega il processo di fatturazione all’ordine di vendita e consente un’analisi completa del ciclo Order to Cash, aiutando a individuare i ritardi tra i reparti. Dove reperirli Tabella SAP ECC: VBRP, campo: VGBEL Esempi 100000451000004610000047 | |||
| Organizzazione commerciale SalesOrganization | Unità organizzativa responsabile della vendita di prodotti o servizi. | ||
| Descrizione In SAP, l’organizzazione commerciale è l’unità organizzativa responsabile della distribuzione di beni e servizi e della negoziazione delle condizioni di vendita. È un campo essenziale per strutturare le attività di vendita e distribuzione. Nel Process Mining, questo attributo consente di analizzare il processo di fatturazione dal punto di vista della struttura commerciale. Permette di confrontare i risultati delle diverse organizzazioni commerciali, individuando le regioni o le linee di business più efficienti nella fatturazione e supportando iniziative per uniformare le pratiche efficaci. Perché è importante Consente di confrontare e analizzare i risultati tra diverse divisioni commerciali o regioni, aiutando a individuare le pratiche efficaci e le aree da migliorare. Dove reperirli Tabella SAP ECC: VBRK, campo: VKORG Esempi 1000NA01EU01AP01 | |||
| Sistema di origine SourceSystem | Identifica il sistema di origine da cui sono stati estratti i dati. | ||
| Descrizione Questo attributo specifica il sistema di registrazione da cui provengono i dati. In un’azienda con più istanze ERP o sistemi integrati, il campo consente di distinguere i dati in base alla fonte. Nel Process Mining è essenziale per convalidare i dati e confrontare i processi tra sistemi o unità organizzative diverse. In genere viene compilato con un valore statico durante l’estrazione dei dati, così da identificare il relativo insieme di dati. Perché è importante Fornisce informazioni sull’origine dei dati, fondamentali negli ambienti con più sistemi per garantirne l’integrità e consentire analisi specifiche per sistema. Dove reperirli In genere è un valore statico aggiunto durante il processo di estrazione, trasformazione e caricamento dei dati (ETL), che identifica la specifica istanza SAP ECC, ad esempio «ECC_PROD_NA». Esempi SAP_ECC_PRODECC_EU_100SAP_US_FIN | |||
| Termini di pagamento PaymentTerms | Condizioni che regolano la conclusione di una vendita, comprese le scadenze di pagamento. | ||
| Descrizione I termini di pagamento definiscono le scadenze, ad esempio «30 giorni netto» o «60 giorni netto». Sono concordati con il cliente e incidono in modo significativo sui flussi di cassa. L’analisi del processo in base ai termini di pagamento può rivelare se determinate condizioni sono associate a cicli di pagamento più lunghi o a una maggiore frequenza di ritardi. Queste informazioni possono aiutare l’azienda a negoziare condizioni più favorevoli con i clienti o ad adeguare la pianificazione finanziaria. I termini di pagamento sono inoltre un dato fondamentale per calcolare la data di scadenza della fattura. Perché è importante Aiuta ad analizzare le abitudini di pagamento dei clienti e l’impatto sui flussi di cassa in base alle condizioni concordate, fornendo indicazioni utili per ottimizzare gli accordi commerciali. Dove reperirli Tabella SAP ECC: VBRK, campo: ZTERM Esempi Z030Z060Z001 | |||
| Ultimo aggiornamento dei dati LastDataUpdate | Data e ora dell’ultimo aggiornamento o dell’ultima estrazione dei dati dal sistema di origine. | ||
| Descrizione Questo attributo indica quando i dati sono stati aggiornati l’ultima volta dal sistema di origine. Fornisce un contesto essenziale per l’analisi, aiutando a capire quanto siano aggiornati i dati visualizzati. Nelle Dashboard e nei report, questo timestamp informa gli stakeholder sull’attualità dei dati e consente di chiarire quali transazioni recenti potrebbero non essere ancora visibili. In genere viene generato al termine del processo di estrazione dei dati. Perché è importante Indica quanto sono aggiornati i dati, un’informazione essenziale per prendere decisioni operative basate sull’analisi. Dove reperirli Generato e memorizzato durante il processo di estrazione, trasformazione e caricamento dei dati (ETL). Esempi 2023-10-27T02:00:00Z2023-10-28T02:00:00Z | |||
| Valuta Currency | Codice della valuta degli importi indicati nella fattura. | ||
| Descrizione Questo attributo indica la valuta della transazione, ad esempio USD, EUR o JPY. Fornisce il contesto necessario per interpretare tutti i valori monetari, come l’importo totale della fattura. Quando si analizzano dati provenienti da un’organizzazione multinazionale, il campo della valuta è essenziale per interpretare e convertire correttamente gli importi. Consente di produrre report coerenti e impedisce di aggregare importi senza un’adeguata conversione valutaria, che porterebbe a un’analisi finanziaria errata. Perché è importante Fornisce il contesto necessario per interpretare tutti i valori monetari e garantisce l’accuratezza dell’analisi finanziaria, soprattutto in presenza di più valute. Dove reperirli Tabella SAP ECC: VBRK, campo: WAERK Esempi USDEURGBPJPY | |||
Attività di Order to Cash - Fatturazione ed emissione fatture
| Attività | Descrizione | ||
|---|---|---|---|
| Fattura compensata | Stato finale di una fattura pagata correttamente, che indica che la partita aperta è stata chiusa con il pagamento corrispondente o con una nota di credito. La fattura si considera saldata integralmente. | ||
| Perché è importante Segna il completamento del ciclo Order to Cash per una fattura. È l’evento finale principale per misurare il tempo medio complessivo del ciclo di fatturazione. Dove reperirli Si verifica quando i campi del documento di compensazione (AUGBL) e della data di compensazione (AUGDT) vengono compilati per la riga della fattura nella tabella BSEG. Acquisizione L’evento si verifica nella data di compensazione (AUGDT) registrata nella tabella BSEG per la riga della fattura. Tipo di evento explicit | |||
| Fattura generata | Indica la creazione del documento di fatturazione nel sistema. L’evento viene acquisito quando viene creata una nuova registrazione nella tabella di intestazione dei documenti contabili (BKPF) con un tipo documento specifico per le fatture. | ||
| Perché è importante È il punto di partenza dell’intero processo di fatturazione. Analizzare il tempo trascorso da questo evento consente di misurare il tempo di ciclo di creazione della fattura e costituisce la base per calcolare i Giorni medi di incasso (DSO). Dove reperirli Registrato nella tabella BKPF. L’evento è identificato dalla data di creazione (CPUDT) e dall’ora (CPUTM) di uno specifico numero documento (BELNR). Il tipo documento (BLART) indica che si tratta di una fattura. Acquisizione Dalla data e ora di creazione (CPUDT) nella tabella BKPF del documento di fatturazione. Tipo di evento explicit | |||
| Fattura inviata al cliente | Indica che la fattura è stata inviata al cliente tramite un canale di output definito, come la stampa, l’e-mail o l’EDI. In genere, l’evento viene acquisito dai log del sistema di gestione degli output. | ||
| Perché è importante È una tappa fondamentale che avvia il conteggio dei termini di pagamento del cliente. Eventuali ritardi incidono direttamente sulla data prevista per il pagamento e sull’efficienza del recupero crediti. Dove reperirli Può essere dedotto dalla data e dall’ora di elaborazione nella tabella degli stati dei messaggi (NAST), per il tipo di output corrispondente alla fattura. Acquisizione Dedotto da una registrazione nella tabella NAST con stato di elaborazione «1» (elaborato correttamente). Tipo di evento inferred | |||
| Fattura registrata | La fattura viene registrata ufficialmente nel sottoconto clienti e nel libro mastro generale. Da questo momento è giuridicamente vincolante e rappresenta il debito del cliente. | ||
| Perché è importante È una tappa fondamentale che avvia ufficialmente il conteggio dei tempi di incasso. Il tempo che intercorre tra la generazione e la registrazione può rivelare ritardi nell’elaborazione interna che incidono sui flussi di cassa. Dove reperirli Registrato nella tabella BKPF. L’evento è identificato dalla data di registrazione (BUDAT) del numero documento (BELNR). Per i documenti parcheggiati, corrisponde al momento in cui vengono convertiti in documenti registrati. Acquisizione Dalla data di registrazione (BUDAT) nella tabella BKPF del documento di fatturazione. Tipo di evento explicit | |||
| Pagamento del cliente ricevuto | Il pagamento del cliente è stato ricevuto e registrato nel sistema come incasso o deposito bancario. Viene creato un documento di pagamento separato, non ancora abbinato alla fattura specifica. | ||
| Perché è importante È una tappa fondamentale del ciclo di conversione della liquidità. Il tempo che intercorre tra l’invio della fattura e la ricezione del pagamento costituisce una componente primaria dei Giorni medi di incasso (DSO). Dove reperirli Registrato come nuovo documento nelle tabelle BKPF e BSEG, in genere con un tipo documento che indica un pagamento del cliente, come «DZ». L’evento è identificato dalla data di registrazione (BUDAT). Acquisizione Dalla data di registrazione del documento di pagamento del cliente nella tabella BKPF. Tipo di evento explicit | |||
| Contestazione creata | È stata registrata una contestazione formale relativa alla fattura, in genere a seguito di un reclamo del cliente. L’evento viene registrato nel sistema SAP Dispute Management. | ||
| Perché è importante Individua le fatture a rischio di ritardo nel pagamento e mette in luce i problemi alla base dell’insoddisfazione del cliente. Segna l’inizio di un importante processo di gestione delle eccezioni. Dove reperirli Acquisito alla creazione di una pratica nella tabella delle contestazioni (UDM_CASE), collegata al documento contabile della fattura. Acquisizione Registrato quando un utente crea una pratica di contestazione tramite la transazione UDM_DISPUTE. Tipo di evento explicit | |||
| Data di scadenza della fattura raggiunta | Evento calcolato che indica il giorno in cui il pagamento della fattura è ufficialmente dovuto in base alle condizioni di pagamento. Non corrisponde a un’attività svolta da un utente o da un sistema, ma a un momento rilevante nel tempo. | ||
| Perché è importante È essenziale per analizzare i comportamenti di pagamento e la conformità. Costituisce la base di riferimento per distinguere i pagamenti puntuali da quelli in ritardo e calcolare il KPI relativo ai pagamenti puntuali. Dove reperirli Derivato confrontando la data corrente con la data di scadenza netta. La data di scadenza si trova nel campo BSEG-ZFBDT oppure si calcola a partire dalla data di riferimento e dalle condizioni di pagamento. Acquisizione Confrontare la data di sistema con il campo della data di scadenza netta nella riga della fattura (BSEG). Tipo di evento calculated | |||
| Fattura approvata | Indica l’approvazione formale della fattura, che ne consente la registrazione o l’invio al cliente. Spesso si deduce dalla conversione di un documento parcheggiato in un documento registrato. | ||
| Perché è importante Consente di monitorare il flusso di lavoro di approvazione interna, una fonte frequente di colli di bottiglia. L’analisi di questa attività aiuta a supportare la Dashboard di analisi dei flussi di approvazione delle fatture, individuando gli approvatori che causano rallentamenti. Dove reperirli Può essere dedotto dal passaggio di un documento dallo stato parcheggiato (in VBKPF) a quello registrato (in BKPF). Se viene utilizzato un sistema di flusso di lavoro, l’evento potrebbe invece essere registrato esplicitamente nei relativi log. Acquisizione Confrontare la data di creazione del documento parcheggiato (VBKPF) con la data di registrazione del documento definitivo (BKPF). Tipo di evento inferred | |||
| Fattura corretta | Indica un’attività di rilavorazione: la fattura iniziale è risultata errata ed è stata successivamente stornata. L’evento viene rilevato individuando i documenti di storno collegati alla fattura originale. | ||
| Perché è importante Mette in evidenza inefficienze di processo e problemi di qualità. Un numero elevato di correzioni segnala problemi nei dati di vendita o di fatturazione a monte e contribuisce all’analisi della Dashboard sulle rilavorazioni e sugli errori delle fatture. Dove reperirli Individuato cercando un documento di storno in cui BKPF-STBLG rimanda al documento originale. L’evento corrisponde alla creazione del documento di storno. Acquisizione Registrato alla creazione di un documento di storno, ad esempio tramite FB08. Tipo di evento explicit | |||
| Fattura parcheggiata | Il documento di fatturazione è stato salvato in stato provvisorio, senza essere registrato nel libro mastro generale. Questa modalità viene spesso utilizzata quando le informazioni sono incomplete o devono essere verificate prima della registrazione definitiva. | ||
| Perché è importante Consente di monitorare i passaggi precedenti alla registrazione e gli eventuali ritardi. Una permanenza prolungata nello stato parcheggiato può indicare problemi di qualità dei dati o colli di bottiglia nel processo di preapprovazione. Dove reperirli I documenti parcheggiati sono archiviati nella tabella VBKPF. L’attività è indicata dalla creazione di un documento in questa tabella, successivamente registrato. Acquisizione Registrato al salvataggio di un documento parcheggiato tramite una transazione come FV70. Tipo di evento explicit | |||
| Fattura stralciata | Stato finale alternativo in cui la fattura è considerata inesigibile e l’importo residuo viene compensato con un conto per crediti inesigibili. La fattura viene chiusa senza che il cliente abbia effettuato un pagamento. | ||
| Perché è importante Indica un esito negativo del processo e una perdita di ricavi. Monitorare questi eventi aiuta ad analizzare le cause dei crediti inesigibili e a migliorare le politiche di gestione del credito. Dove reperirli Dedotto dall’analisi della transazione di compensazione della fattura. Se il documento di compensazione registra un addebito su uno specifico conto di contabilità generale per crediti inesigibili, la fattura è considerata stralciata. Acquisizione Dedotto quando la transazione di compensazione comporta una registrazione su un conto di contabilità generale designato per i crediti inesigibili. Tipo di evento inferred | |||
| Pagamento abbinato alla fattura | Il pagamento ricevuto dal cliente è stato abbinato alla specifica fattura aperta e assegnato alla partita da compensare. Questa fase di riconciliazione collega il pagamento al debito. | ||
| Perché è importante Questa attività è fondamentale per misurare il tempo di ciclo di registrazione degli incassi. I ritardi nell’abbinamento degli incassi possono rappresentare in modo inesatto la situazione reale dei crediti verso clienti e nascondere la liquidità disponibile. Dove reperirli Dedotto dalla transazione di compensazione, ad esempio F-32, che compila i campi di compensazione nella riga della fattura. La data dell’evento corrisponde alla data di compensazione. Acquisizione Dedotto dalla compilazione della data di compensazione (AUGDT) nella tabella delle righe della fattura (BSEG). Tipo di evento inferred | |||
| Sollecito di pagamento inviato | Il sistema ha generato e inviato al cliente un avviso di sollecito o un promemoria di pagamento per una fattura scaduta. L’evento viene acquisito dai log dello storico dei solleciti. | ||
| Perché è importante Aiuta a valutare l’efficacia della strategia di recupero crediti. Analizzare il tempo che intercorre tra il sollecito e la ricezione del pagamento è fondamentale per il KPI di efficacia dei solleciti. Dove reperirli Registrato nelle tabelle dei dati di sollecito, in particolare MHNK (intestazione dei dati di sollecito) e MHND (righe dei dati di sollecito), generate dall’esecuzione dei solleciti (transazione F150). Acquisizione Registrato quando viene eseguita una procedura di sollecito (F150) per la partita scaduta. Tipo di evento explicit | |||
Guide all’estrazione
Passaggi
- Acceda all’editor ABAP: acceda al sistema SAP ECC. Apra l’editor ABAP utilizzando il codice transazione
SE38. - Crei il programma: inserisca un nome per il nuovo programma nel campo Programma, ad esempio
Z_PM_O2C_INVOICE_EXTRACT, e selezioni il pulsante Crea. Inserisca un titolo descrittivo e imposti il tipo di programma su 'Programma eseguibile'. - Definisca la schermata di selezione: nel codice sorgente del programma, definisca i parametri della schermata di selezione, che consentono agli utenti di filtrare i dati da estrarre. Tra i parametri principali figurano l’intervallo delle date di creazione del documento (
S_ERDAT), il codice società (S_BUKRS) e il tipo di documento di fatturazione (S_VBTYP). - Definisca le strutture dei dati: dichiari una struttura di tabella interna che conterrà i dati finali dell’Event Log. La struttura deve includere i campi
InvoiceNumber,ActivityName,EventTimee attributi consigliati comeUserName,BillingDocumentType,CustomerNumber,CompanyCodeeTotalInvoiceAmount. - Implementi la logica di selezione dei dati: scriva la logica ABAP principale per selezionare i dati. Per prima cosa, selezioni i documenti di fatturazione principali dalle tabelle
VBRKeBKPFin base ai valori inseriti nella schermata di selezione. Li memorizzi in una tabella interna temporanea. - Estragga le attività: esegua un ciclo sull’elenco iniziale dei documenti di fatturazione. Per ciascun documento, esegua selezioni successive da diverse tabelle per individuare le 13 attività richieste. Ad esempio, interroghi la tabella
NASTper gli eventi 'Fattura inviata al cliente',BSEGper le informazioni di compensazione ('Fattura compensata', 'Pagamento registrato') eMHNKper i dati dei solleciti ('Sollecito di pagamento inviato'). - Crei la tabella dell’Event Log: per ogni attività individuata nel passaggio precedente, inserisca un nuovo record nella tabella interna finale dell’Event Log. Verifichi che
InvoiceNumber,ActivityName,EventTimee gli altri attributi siano associati correttamente ai campi delle tabelle di origine. - Scriva sul server applicativo: al termine del ciclo, una volta popolata la tabella interna finale dell’Event Log, utilizzi le istruzioni
OPEN DATASET,LOOP AT... TRANSFEReCLOSE DATASETper scriverne il contenuto in un file semplice sul server applicativo SAP. Specifichi un percorso logico accessibile. - Recuperi il file: utilizzi il codice transazione
AL11per accedere alle directory del server applicativo e individuare il file generato. Si coordini con il team SAP Basis per scaricare il file dal server sul computer locale o in una posizione di rete condivisa. - Verifichi il formato finale: apra il file scaricato e confermi che sia un file CSV con una riga di intestazione. Verifichi che sia salvato con codifica UTF-8, necessaria per la compatibilità con il caricamento in ProcessMind.
Configurazione
- Prerequisiti: accesso per creare ed eseguire programmi ABAP (transazione SE38). Autorizzazione alla lettura delle tabelle FI e SD, tra cui
VBRK,VBRP,BKPF,BSEG,NAST,MHNKeUDM_CASE_ATTR00(per la gestione delle contestazioni). - Selezione dell’intervallo di date: il programma deve prevedere un parametro obbligatorio per l’intervallo di date, in genere basato sulla data di creazione del documento (
ERDATin VBRK/BKPF). Per la prima estrazione, si consiglia un intervallo di 3-6 mesi, così da mantenere gestibile il volume dei dati. - Filtri principali: applichi sempre un filtro per codice società (
CompanyCode,BUKRS) per limitare l’ambito dell’estrazione. È inoltre fortemente consigliato filtrare per tipo di documento di fatturazione (VBTYPin VBRK) o tipo di documento contabile (BLARTin BKPF), includendo solo i tipi di fattura pertinenti, ad esempio 'RV' per le fatture contabili standard ed escludendo note di credito e altri documenti. - Considerazioni sulle prestazioni: per grandi volumi di dati relativi a periodi superiori a qualche mese, è opportuno eseguire il programma come processo in background per evitare timeout della sessione. La logica ABAP dovrebbe utilizzare letture indicizzate delle tabelle ed evitare cicli annidati con selezioni dal database al loro interno. È preferibile selezionare prima i dati nelle tabelle interne e poi elaborarli.
- Configurazione del file di output: il codice ABAP deve specificare il percorso del file di output sul server applicativo e il delimitatore del file CSV, in genere una virgola o un punto e virgola. Verifichi che il percorso corrisponda a una directory configurata a livello globale e accessibile.
Query di esempio abap
REPORT Z_PM_O2C_INVOICE_EXTRACT.
*&---------------------------------------------------------------------*
*& Tables
*&---------------------------------------------------------------------*
TABLES: VBRK, BKPF.
*&---------------------------------------------------------------------*
*& Type Definitions for Event Log Output
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
invoicenumber TYPE vbrk-vbeln,
activityname TYPE string,
eventtime TYPE timestamp,
username TYPE xubname,
billingdocumenttype TYPE vbrk-vbtyp,
customernumber TYPE vbrk-kunnr,
companycode TYPE vbrk-bukrs,
totalinvoiceamount TYPE vbrk-netwr,
END OF ty_event_log.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
DATA: gt_event_log TYPE TABLE OF ty_event_log,
gs_event_log TYPE ty_event_log.
DATA: BEGIN OF gs_invoice,
vbeln TYPE vbrk-vbeln, " SD Doc (Invoice)
awkey TYPE bkpf-awkey, " Accounting Doc Reference Key
bukrs TYPE vbrk-bukrs, " Company Code
kunnr TYPE vbrk-kunnr, " Customer
vbtyp TYPE vbrk-vbtyp, " SD Doc Type
netwr TYPE vbrk-netwr, " Net Value
waerk TYPE vbrk-waerk, " Currency
fkdat TYPE vbrk-fkdat, " Billing Date
erdat TYPE vbrk-erdat, " Creation Date
erzet TYPE vbrk-erzet, " Creation Time
ernam TYPE vbrk-ernam, " Creator
belnr TYPE bkpf-belnr, " Acct Doc
gjahr TYPE bkpf-gjahr, " Fiscal Year
cpudt TYPE bkpf-cpudt, " Acct Doc Entry Date
cputm TYPE bkpf-cputm, " Acct Doc Entry Time
usnam TYPE bkpf-usnam, " Acct Doc User
stblg TYPE bkpf-stblg, " Reversal Doc
END OF gs_invoice.
DATA: gt_invoices LIKE TABLE OF gs_invoice.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_erdat FOR vbrk-erdat OBLIGATORY,
s_bukrs FOR vbrk-bukrs OBLIGATORY,
s_vbtyp FOR vbrk-vbtyp.
PARAMETERS: p_path TYPE string DEFAULT '/usr/sap/trans/tmp/invoice_extract.csv' OBLIGATORY.
*&---------------------------------------------------------------------*
*& Main Processing Block
*&---------------------------------------------------------------------*
START-OF-SELECTION.
" 1. Select base set of invoices
SELECT vbrk~vbeln, vbrk~bukrs, vbrk~kunnr, vbrk~vbtyp, vbrk~netwr, vbrk~waerk,
vbrk~fkdat, vbrk~erdat, vbrk~erzet, vbrk~ernam,
bkpf~belnr, bkpf~gjahr, bkpf~cpudt, bkpf~cputm, bkpf~usnam, bkpf~stblg, bkpf~awkey
INTO CORRESPONDING FIELDS OF TABLE gt_invoices
FROM vbrk
INNER JOIN bkpf ON bkpf~awkey = vbrk~vbeln AND bkpf~awtyp = 'VBRK'
WHERE vbrk~erdat IN s_erdat
AND vbrk~bukrs IN s_bukrs
AND vbrk~vbtyp IN s_vbtyp.
IF gt_invoices IS INITIAL.
MESSAGE 'No invoices found for the selected criteria.' TYPE 'I'.
RETURN.
ENDIF.
LOOP AT gt_invoices INTO gs_invoice.
CLEAR gs_event_log.
gs_event_log-invoicenumber = gs_invoice-vbeln.
gs_event_log-billingdocumenttype = gs_invoice-vbtyp.
gs_event_log-customernumber = gs_invoice-kunnr.
gs_event_log-companycode = gs_invoice-bukrs.
gs_event_log-totalinvoiceamount = gs_invoice-netwr.
" Activity: Invoice Generated (using accounting doc creation)
gs_event_log-activityname = 'Invoice Generated'.
gs_event_log-username = gs_invoice-usnam.
CONCATENATE gs_invoice-cpudt gs_invoice-cputm INTO DATA(lv_ts_gen).
CONVERT DATE gs_invoice-cpudt TIME gs_invoice-cputm INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Posted (same as generated for non-parked docs)
gs_event_log-activityname = 'Invoice Posted'.
gs_event_log-username = gs_invoice-usnam.
CONVERT DATE gs_invoice-cpudt TIME gs_invoice-cputm INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Approved (inferred by posting)
gs_event_log-activityname = 'Invoice Approved'.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Sent To Customer
SELECT SINGLE addat, aduhr FROM nast
INTO (DATA(lv_nast_date), DATA(lv_nast_time))
WHERE kappl = 'V3' AND objky = gs_invoice-vbeln AND vszst > '0'.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Sent To Customer'.
gs_event_log-username = sy-uname.
CONVERT DATE lv_nast_date TIME lv_nast_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Corrected / Reversed
IF gs_invoice-stblg IS NOT INITIAL.
SELECT SINGLE cpudt, cputm, usnam FROM bkpf
INTO (DATA(lv_rev_date), DATA(lv_rev_time), DATA(lv_rev_user))
WHERE belnr = gs_invoice-stblg AND gjahr = gs_invoice-gjahr.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Corrected'.
gs_event_log-username = lv_rev_user.
CONVERT DATE lv_rev_date TIME lv_rev_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
" Activity: Payment Applied, Cleared, Due Date, Written Off (from BSEG)
SELECT SINGLE augdt, augbl, zfBDT, hkont FROM bseg
INTO (DATA(lv_augdt), DATA(lv_augbl), DATA(lv_zfbdt), DATA(lv_hkont))
WHERE bukrs = gs_invoice-bukrs
AND belnr = gs_invoice-belnr
AND gjahr = gs_invoice-gjahr
AND koart = 'D'. " Customer line
IF sy-subrc = 0.
" Due Date Reached (Calculated event)
IF lv_zfbdt IS NOT INITIAL.
gs_event_log-activityname = 'Invoice Due Date Reached'.
gs_event_log-username = 'System'.
CONVERT DATE lv_zfbdt INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Cleared, Applied, Write-Off
IF lv_augdt IS NOT INITIAL.
SELECT SINGLE usnam, cpudt, cputm, blart FROM bkpf
INTO (DATA(lv_clear_user), DATA(lv_clear_date), DATA(lv_clear_time), DATA(lv_clear_type))
WHERE belnr = lv_augbl AND bukrs = gs_invoice-bukrs.
IF sy-subrc = 0.
gs_event_log-username = lv_clear_user.
CONVERT DATE lv_clear_date TIME lv_clear_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
IF lv_clear_type = 'DZ'. " Standard Customer Payment
gs_event_log-activityname = 'Customer Payment Received'. APPEND gs_event_log TO gt_event_log.
gs_event_log-activityname = 'Payment Applied To Invoice'. APPEND gs_event_log TO gt_event_log.
gs_event_log-activityname = 'Invoice Cleared'. APPEND gs_event_log TO gt_event_log.
ELSE. " Assuming other clearing doc types could be write-offs
gs_event_log-activityname = 'Invoice Written Off'.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
" Activity: Payment Reminder Issued (Dunning)
SELECT COUNT(*) FROM mhnk WHERE kunnr = gs_invoice-kunnr AND bukrs = gs_invoice-bukrs AND lafdn > gs_invoice-cpudt.
IF sy-subrc = 0 AND sy-dbcnt > 0.
SELECT SINGLE lafdn FROM mhnk
INTO DATA(lv_dunning_date)
WHERE kunnr = gs_invoice-kunnr AND bukrs = gs_invoice-bukrs AND lafdn > gs_invoice-cpudt.
gs_event_log-activityname = 'Payment Reminder Issued'.
gs_event_log-username = 'System'.
CONVERT DATE lv_dunning_date INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Parked (Example from VBKPF, may require system specific logic)
SELECT SINGLE cpudt, cputm, usnam FROM vbkpf
INTO (DATA(lv_park_date), DATA(lv_park_time), DATA(lv_park_user))
WHERE awkey = gs_invoice-vbeln AND awsys = 'LOG' AND bstat = 'V'.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Parked'.
gs_event_log-username = lv_park_user.
CONVERT DATE lv_park_date TIME lv_park_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Dispute Case Created (Requires Dispute Management module)
SELECT SINGLE create_date, create_time, create_user FROM udm_case_attr00
INTO (DATA(lv_disp_date), DATA(lv_disp_time), DATA(lv_disp_user))
WHERE [Your logic to link invoice to dispute case, e.g., via a custom field or object link].
IF sy-subrc = 0.
gs_event_log-activityname = 'Dispute Case Created'.
gs_event_log-username = lv_disp_user.
CONVERT DATE lv_disp_date TIME lv_disp_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Write data to file
*&---------------------------------------------------------------------*
OPEN DATASET p_path FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'Error opening file.' TYPE 'E'.
ENDIF.
" Header
DATA(lv_header) = 'InvoiceNumber,ActivityName,EventTime,UserName,BillingDocumentType,CustomerNumber,CompanyCode,TotalInvoiceAmount'.
TRANSFER lv_header TO p_path.
LOOP AT gt_event_log INTO gs_event_log.
DATA(lv_line) = |
{ gs_event_log-invoicenumber }|
,{ gs_event_log-activityname }|
,{ gs_event_log-eventtime }|
,{ gs_event_log-username }|
,{ gs_event_log-billingdocumenttype }|
,{ gs_event_log-customernumber }|
,{ gs_event_log-companycode }|
,{ gs_event_log-totalinvoiceamount }|.
TRANSFER lv_line TO p_path.
ENDLOOP.
CLOSE DATASET p_path.
WRITE: 'Extraction complete. File created at:', p_path. Passaggi
- Prerequisiti e accesso: verifichi di disporre di un utente del database con accesso in sola lettura alle tabelle SAP ECC necessarie, tra cui VBRK, BKPF, BSAD, NAST, CDHDR, CDPOS, SCASE e le altre indicate nella query. Questo livello di accesso viene in genere concesso solo agli amministratori di sistema o a specifici team di analisi dei dati.
- Connessione al database: utilizzi un client SQL standard, ad esempio DBeaver, Oracle SQL Developer o Microsoft SQL Server Management Studio, per connettersi al database SAP ECC.
- Preparazione della query SQL: copi la query SQL completa fornita nella sezione 'query' nell’editor del client SQL.
- Personalizzazione dei segnaposto: sostituisca i segnaposto presenti nella query con valori specifici del Suo ambiente. Tra questi:
'YYYYMMDD': sostituisca tutte le occorrenze con le date di inizio e fine del periodo da analizzare. È fondamentale limitare i dati a un intervallo gestibile.'XXXX': sostituisca con i codici società specifici che desidera analizzare.[Your Invoice Output Type]: specifichi il codice del tipo di output utilizzato per inviare le fatture ai clienti, ad esempio 'RD00'.[Your Bad Debt G/L Account]: inserisca il numero del conto di contabilità generale utilizzato per stralciare le fatture inesigibili.[Your Dispute Case Invoice Attribute]: specifichi il nome dell’attributo utilizzato nella configurazione della gestione delle contestazioni per memorizzare il numero della fattura, ad esempio 'INVOICE_ID'.
- Verifica delle funzioni per i timestamp: la query utilizza una sintassi generica
CAST(CONCAT(date_field, time_field) AS TIMESTAMP). Potrebbe essere necessario adattarla al database utilizzato, ad esempio sostituendola conTO_TIMESTAMPper Oracle oDATETIMEFROMPARTSper SQL Server. - Esecuzione della query: esegua la query modificata. A seconda delle dimensioni delle tabelle SAP e dell’intervallo di date selezionato, l’operazione potrebbe richiedere molto tempo.
- Controllo dei risultati: al termine dell’esecuzione, verifichi che l’output contenga le colonne previste: InvoiceNumber, ActivityName, EventTime e gli attributi consigliati. Controlli che non vi siano errori e che i risultati non siano vuoti.
- Esportazione in CSV: esporti tutti i risultati dal client SQL in un file CSV. Verifichi che il file utilizzi la codifica UTF-8 per evitare problemi con i caratteri speciali.
- Preparazione al caricamento: prima di caricare i dati in uno strumento di Process Mining, verifichi che le intestazioni delle colonne CSV corrispondano esattamente ai nomi degli attributi richiesti, ad esempio
InvoiceNumber,ActivityName,EventTime,UserName.
Configurazione
- Connessione al database: è necessaria una connessione SQL diretta e in sola lettura al database SAP ECC sottostante. Questo metodo non passa dal livello applicativo SAP.
- Autorizzazioni: l’utente del database deve disporre dei permessi
SELECTsu tutte le tabelle utilizzate nella query, appartenenti ai moduli FI, SD e, potenzialmente, FSCM. - Intervallo di date: è fondamentale filtrare la query per un intervallo di date specifico, così da mantenere ragionevoli i tempi di esecuzione e il volume dei dati. Si consiglia di iniziare con un periodo da 3 a 6 mesi. I segnaposto per le date
'YYYYMMDD'devono essere impostati in più punti della query. - Filtro per codice società: la query prevede un filtro per codice società (
BUKRS). È prassi comune analizzare uno o pochi codici società per volta. - Configurazione dei tipi di documento: la logica per individuare eventi come correzioni di fatture, stralci o documenti inviati dipende dalla configurazione SAP standard. Potrebbe essere necessario modificare la query se l’organizzazione utilizza tipi di documento personalizzati (
BLART), tipi di output (KSCHL) o conti di contabilità generale specifici per questi processi. - Considerazioni sulle prestazioni: l’esecuzione della query su un sistema SAP di produzione attivo può consumare molte risorse e incidere sulle prestazioni operative. Per le estrazioni di grandi dimensioni, si consiglia vivamente di operare nelle fasce orarie di minore attività o su una replica del database dedicata alla reportistica.
Query di esempio sql
WITH InvoiceBase AS (
SELECT
VBRK.VBELN AS InvoiceNumber,
VBRK.FKART AS BillingDocumentType,
VBRK.KUNRG AS CustomerNumber,
VBRK.BUKRS AS CompanyCode,
VBRK.NETWR AS TotalInvoiceAmount,
VBRK.ERNAM AS CreatorName,
VBRK.ERDAT AS CreationDate,
VBRK.ERZET AS CreationTime
FROM VBRK
WHERE VBRK.ERDAT BETWEEN '20230101' AND '20231231' -- Filter by Invoice Creation Date
AND VBRK.BUKRS IN ('1000') -- Filter by Company Code
AND VBRK.FKART NOT IN ('S1', 'S2') -- Exclude cancelled invoices
)
-- 1. Invoice Generated
SELECT
ib.InvoiceNumber,
'Invoice Generated' AS ActivityName,
CAST(CONCAT(ib.CreationDate, ib.CreationTime) AS TIMESTAMP) AS EventTime,
ib.CreatorName AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM InvoiceBase ib
UNION ALL
-- 2. Invoice Parked
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Parked' AS ActivityName,
CAST(CONCAT(b.CPUDT, b.CPUTM) AS TIMESTAMP) AS EventTime,
b.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF b
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND b.BSTAT = 'V' AND b.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 3. Invoice Posted
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Posted' AS ActivityName,
CAST(CONCAT(b.CPUDT, b.CPUTM) AS TIMESTAMP) AS EventTime,
b.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF b
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND b.BSTAT = '' AND b.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 4. Invoice Approved (from Parked to Posted)
SELECT
SUBSTRING(h.OBJECTID, 4, 10) AS InvoiceNumber,
'Invoice Approved' as ActivityName,
CAST(CONCAT(h.UDATE, h.UTIME) AS TIMESTAMP) AS EventTime,
h.USERNAME AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM CDHDR h
JOIN CDPOS p ON h.MANDANT = p.MANDANT AND h.OBJECTCLAS = p.OBJECTCLAS AND h.OBJECTID = p.OBJECTID AND h.CHANGENR = p.CHANGENR
JOIN InvoiceBase ib ON SUBSTRING(h.OBJECTID, 4, 10) = ib.InvoiceNumber
WHERE h.OBJECTCLAS = 'BELEGV'
AND p.TABNAME = 'BKPF'
AND p.FNAME = 'BSTAT'
AND p.VALUE_OLD = 'V'
AND p.VALUE_NEW = ' '
AND h.UDATE BETWEEN '20230101' AND '20231231'
UNION ALL
-- 5. Invoice Sent To Customer
SELECT
n.OBJKY AS InvoiceNumber,
'Invoice Sent To Customer' AS ActivityName,
CAST(CONCAT(n.DATVR, n.UHRVR) AS TIMESTAMP) AS EventTime,
n.VSTAT AS UserName, -- User who processed is not directly available, using processing status as a proxy
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM NAST n
JOIN InvoiceBase ib ON n.OBJKY = ib.InvoiceNumber
WHERE n.KSCHL = '[Your Invoice Output Type]' -- E.g., 'RD00'
AND n.VSTAT = '1' -- Processed successfully
AND n.DATVR BETWEEN '20230101' AND '20231231'
UNION ALL
-- 6. Invoice Corrected (Reversed)
SELECT
SUBSTRING(orig_doc.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Corrected' AS ActivityName,
CAST(CONCAT(rev_doc.CPUDT, rev_doc.CPUTM) AS TIMESTAMP) AS EventTime,
rev_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
rev_doc.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF orig_doc
JOIN BKPF rev_doc ON orig_doc.STBLG = rev_doc.BELNR AND orig_doc.BUKRS = rev_doc.BUKRS AND orig_doc.GJAHR = rev_doc.STJAH
JOIN InvoiceBase ib ON SUBSTRING(orig_doc.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE orig_doc.AWTYP = 'VBRK' AND orig_doc.STBLG IS NOT NULL AND rev_doc.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 7. Invoice Due Date Reached
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Due Date Reached' AS ActivityName,
CAST(CONCAT(bs.ZFBDT, '000000') AS TIMESTAMP) AS EventTime,
'System' AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSEG bs
JOIN BKPF b ON bs.MANDT = b.MANDT AND bs.BUKRS = b.BUKRS AND bs.BELNR = b.BELNR AND bs.GJAHR = b.GJAHR
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND bs.KOART = 'D' AND bs.ZFBDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 8. Payment Reminder Issued
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Payment Reminder Issued' AS ActivityName,
CAST(CONCAT(h.LAUFD, '000000') AS TIMESTAMP) AS EventTime,
h.LAUFI AS UserName, -- Dunning Run ID
ib.BillingDocumentType,
ib.CustomerNumber,
d.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM MHND d
JOIN MHNK h ON d.MANDT = h.MANDT AND d.LAUFD = h.LAUFD AND d.LAUFI = h.LAUFI
JOIN BKPF b ON d.MANDT = b.MANDT AND d.BUKRS = b.BUKRS AND d.BELNR = b.BELNR AND d.GJAHR = b.GJAHR
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE h.LAUFD BETWEEN '20230101' AND '20231231'
UNION ALL
-- 9. Dispute Case Created
SELECT
attr.ATTR_VALUE AS InvoiceNumber,
'Dispute Case Created' AS ActivityName,
sc.CREATE_TIME AS EventTime,
sc.CREATED_BY AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM SCMG_T_CASE_ATTR attr
JOIN SCASE sc ON attr.CASE_GUID = sc.CASE_GUID
JOIN InvoiceBase ib ON attr.ATTR_VALUE = ib.InvoiceNumber
WHERE attr.ATTR_NAME = '[Your Dispute Case Invoice Attribute]' -- e.g., 'INVOICE_ID'
AND CAST(sc.CREATE_TIME AS DATE) BETWEEN '20230101' AND '20231231'
UNION ALL
-- 10, 11, 12. Clearing Events (Payment, Clearing, Write-Off)
SELECT
InvoiceNumber,
ActivityName,
EventTime,
UserName,
BillingDocumentType,
CustomerNumber,
CompanyCode,
TotalInvoiceAmount
FROM (
SELECT
bsad.XBLNR AS InvoiceNumber,
CASE
WHEN clearing_item.HKONT = '[Your Bad Debt G/L Account]' THEN 'Invoice Written Off'
ELSE 'Customer Payment Received'
END AS ActivityName,
CAST(CONCAT(clearing_doc.CPUDT, clearing_doc.CPUTM) AS TIMESTAMP) AS EventTime,
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
LEFT JOIN BSEG clearing_item ON clearing_doc.MANDT = clearing_item.MANDT AND clearing_doc.BUKRS = clearing_item.BUKRS AND clearing_doc.BELNR = clearing_item.BELNR AND clearing_doc.GJAHR = clearing_item.GJAHR AND clearing_item.HKONT = '[Your Bad Debt G/L Account]' -- e.g. '148000'
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
UNION ALL
SELECT
bsad.XBLNR AS InvoiceNumber,
'Payment Applied To Invoice' AS ActivityName,
CAST(CONCAT(bsad.AUGDT, '000000') AS TIMESTAMP) AS EventTime,
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
UNION ALL
SELECT
bsad.XBLNR AS InvoiceNumber,
'Invoice Cleared' AS ActivityName,
CAST(CONCAT(bsad.AUGDT, '235959') AS TIMESTAMP) AS EventTime, -- Add time to separate from 'Payment Applied'
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
) AS ClearingEvents Passaggi
- Prerequisiti: verifichi di disporre di uno strumento ETL con licenza e di un connettore SAP certificato, ad esempio Informatica PowerCenter con SAP Connector o Talend con SAP Connector. Verifichi inoltre di avere credenziali utente SAP con le autorizzazioni necessarie per leggere le tabelle finanziarie, commerciali e di sistema richieste (BKPF, BSEG, VBRK, NAST, MHNK, UDM_CASE_ATTR00, CDHDR, CDPOS).
- Connessione a SAP: nello strumento ETL, crei una nuova connessione al sistema SAP ECC. Configuri i dettagli di connessione, tra cui server applicativo, numero di sistema, client, utente e password. Verifichi che la connessione funzioni correttamente.
- Definizione delle origini dati: per ogni attività da estrarre, definisca le tabelle SAP corrispondenti come origini dati nel processo ETL. Ad esempio, aggiunga VBRK per la generazione delle fatture, BKPF per gli eventi di registrazione e NAST per le comunicazioni con i clienti.
- Impostazione della logica di estrazione per ogni attività: crei un flusso di dati o una trasformazione separata per ciascuna delle 13 attività richieste. In ogni flusso, applichi filtri per selezionare i record pertinenti, ad esempio per codice società (BUKRS), tipo di documento (BLART) e intervallo di date specifico (per esempio, data di creazione ERDAT).
- Associazione dei campi e trasformazione dei dati: in ogni flusso, associ i campi delle tabelle SAP di origine alla struttura dell’Event Log di destinazione: InvoiceNumber, ActivityName, EventTime, UserName e gli altri attributi consigliati. Utilizzi la logica di trasformazione per assegnare un valore fisso ad 'ActivityName' per ciascun flusso e formattare correttamente date e timestamp.
- Gestione delle attività complesse: per gli eventi calcolati, come 'Data di scadenza della fattura raggiunta', utilizzi la data di pagamento di riferimento (ZFBDT) e le condizioni di pagamento per calcolare la scadenza, oppure recuperi direttamente la data di scadenza netta (NETDT) da BSEG. Per gli eventi ricavati dai registri delle modifiche, come 'Fattura approvata', potrebbe essere necessario unire tabelle come BKPF e CDHDR/CDPOS in base al numero e alla data del documento.
- Unione dei dati delle attività: utilizzi una trasformazione 'Union' o 'Merge' nello strumento ETL per combinare i risultati dei 13 flussi di dati in un unico insieme di dati. Prima dell’unione, verifichi che i nomi delle colonne e i tipi di dati siano coerenti in tutti i flussi.
- Configurazione della destinazione: definisca la destinazione finale dell’Event Log, che può essere un file semplice (CSV), una tabella di database o una connessione diretta a un’area di preparazione.
- Pianificazione dell’estrazione: configuri i parametri dell’intervallo di date. Per il caricamento iniziale, può estrarre da 6 a 12 mesi di dati. Per i successivi caricamenti incrementali, configuri il processo in modo che estragga i dati a partire dalla data dell’ultima esecuzione.
- Esecuzione ed esportazione: esegua il processo ETL. Al termine, controlli che il file di output rispetti il formato richiesto. Il risultato deve essere un unico file CSV, con una riga per ogni evento distinto, pronto per il caricamento in ProcessMind.
Configurazione
- Connessione SAP: è necessaria una connessione al server applicativo del sistema SAP ECC di destinazione. L’utente SAP deve disporre dell’accesso RFC e delle autorizzazioni per le tabelle indicate nella query, tra cui VBRK, BKPF, BSEG e NAST.
- Licenza dello strumento ETL: è obbligatoria una licenza valida per lo strumento ETL commerciale e il relativo connettore SAP.
- Intervallo di date: si consiglia di estrarre dati relativi a un periodo da 3 a 6 mesi, così da ottenere un campione rappresentativo senza sovraccaricare il sistema. Utilizzi un parametro configurabile per le date di inizio e fine.
- Filtri principali: applichi sempre un filtro per codice società (BUKRS) per limitare l’ambito dell’estrazione. È inoltre fondamentale filtrare per i tipi di documento di fatturazione pertinenti (VBRK-FKART) e i tipi di documento contabile (BKPF-BLART), includendo solo le fatture standard ed escludendo altri tipi di documento, come note di credito o documenti interni.
- Prestazioni: l’estrazione da tabelle di grandi dimensioni come BSEG può richiedere tempo. Utilizzi filtri selettivi, eviti di estrarre campi non necessari e pianifichi l’estrazione nelle fasce orarie di minore attività per ridurre al minimo l’impatto sul sistema SAP di origine.
Query di esempio config
// ETL Data Extraction Logic for SAP Order-to-Cash Invoicing
// This represents the configuration logic within a graphical ETL tool.
// == Global Parameters ==
// $StartDate: '[Start Date]' (e.g., '2023-01-01')
// $EndDate: '[End Date]' (e.g., '2023-06-30')
// $CompanyCodes: '[Company Code(s)]' (e.g., '1000', '2000')
// $BillingDocTypes: '[Billing Document Type(s)]' (e.g., 'F1', 'F2')
// == Source 1: Invoice Generated ==
// Tables: VBRK
DATA_SOURCE generated_invoices FROM VBRK WHERE
ERDAT >= $StartDate AND ERDAT <= $EndDate
AND BUKRS IN ($CompanyCodes)
AND FKART IN ($BillingDocTypes)
MAP {
InvoiceNumber: VBELN,
ActivityName: 'Invoice Generated',
EventTime: ERDAT + ERZET, // Combine date and time
UserName: ERNAM,
BillingDocumentType: FKART,
CustomerNumber: KUNAG,
CompanyCode: BUKRS,
TotalInvoiceAmount: NETWR
}
// == Source 2: Invoice Posted ==
// Tables: BKPF joined with VBRK
DATA_SOURCE posted_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.BUDAT >= $StartDate AND A.BUDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = ' '
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Posted',
EventTime: A.BUDAT + A.CPUTM, // Posting date and entry time
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 3: Invoice Parked ==
// Tables: BKPF joined with VBRK
DATA_SOURCE parked_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.CPUDT >= $StartDate AND A.CPUDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = 'V'
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Parked',
EventTime: A.CPUDT + A.CPUTM,
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 4: Invoice Approved (Transition from Parked to Posted) ==
// Tables: BKPF joined with VBRK
DATA_SOURCE approved_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.BUDAT >= $StartDate AND A.BUDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = ' '
AND EXISTS (SELECT 1 FROM VBELEGV C WHERE C.BELNR = A.BELNR) // Check if it was ever parked
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Approved',
EventTime: A.BUDAT + A.CPUTM, // Use posting date as approval date
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 5: Invoice Sent To Customer ==
// Tables: NAST joined with VBRK
DATA_SOURCE sent_invoices FROM NAST as A
INNER JOIN VBRK as B ON (A.OBJKY = B.VBELN)
WHERE A.ERDAT >= $StartDate AND A.ERDAT <= $EndDate
AND B.BUKRS IN ($CompanyCodes)
AND A.VSTAT = '1' // Successfully processed
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Sent To Customer',
EventTime: A.ERDAT + A.ERUHR,
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: B.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 6: Invoice Corrected (Reversed) ==
// Tables: VBRK (for the reversal document)
DATA_SOURCE corrected_invoices FROM VBRK as A
WHERE A.ERDAT >= $StartDate AND A.ERDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.SFAKN <> '' // SFAKN is the original cancelled invoice
MAP {
InvoiceNumber: A.SFAKN, // Case ID is the original invoice
ActivityName: 'Invoice Corrected',
EventTime: A.ERDAT + A.ERZET,
UserName: A.ERNAM,
BillingDocumentType: A.FKART,
CustomerNumber: A.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: NULL // Amount belongs to the reversal doc, not original
}
// == Source 7: Invoice Due Date Reached ==
// Tables: BSEG joined with VBRK
DATA_SOURCE due_invoices FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
WHERE A.NETDT >= $StartDate AND A.NETDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.KOART = 'D' // Customer line item
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Due Date Reached',
EventTime: A.NETDT, // Net due date
UserName: 'System',
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 8: Payment Reminder Issued ==
// Tables: MHNK, MHND, VBRK
DATA_SOURCE reminders FROM MHNK as A
INNER JOIN MHND as D ON (A.LAUFD = D.LAUFD AND A.LAUFI = D.LAUFI)
INNER JOIN VBRK as B ON (SUBSTRING(D.XBLNR, 1, 10) = B.VBELN) // XBLNR may need parsing
WHERE A.LAUFD >= $StartDate AND A.LAUFD <= $EndDate
AND D.BUKRS IN ($CompanyCodes)
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Payment Reminder Issued',
EventTime: A.LAUFD, // Dunning date
UserName: A.IDAPS,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: D.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 9: Dispute Case Created ==
// Tables: UDM_CASE_ATTR00
DATA_SOURCE disputes FROM UDM_CASE_ATTR00 as A
WHERE A.CREATE_TIMESTAMP >= $StartDate // Timestamp format may vary
AND A.FIN_COMP_CODE IN ($CompanyCodes)
AND A.PROCESS = 'FIN_FSCM_DIS'
MAP {
InvoiceNumber: A.BILL_DOC_ID,
ActivityName: 'Dispute Case Created',
EventTime: A.CREATE_TIMESTAMP,
UserName: A.CREATE_USER,
BillingDocumentType: NULL,
CustomerNumber: A.BP_NUMBER,
CompanyCode: A.FIN_COMP_CODE,
TotalInvoiceAmount: A.DISPUTED_AMOUNT
}
// == Source 10: Customer Payment Received ==
// Tables: BKPF
DATA_SOURCE payments FROM BKPF
WHERE BUDAT >= $StartDate AND BUDAT <= $EndDate
AND BUKRS IN ($CompanyCodes)
AND BLART = 'DZ' // Example for Customer Payment
MAP {
InvoiceNumber: NULL, // Invoice not yet known
ActivityName: 'Customer Payment Received',
EventTime: BUDAT + CPUTM,
UserName: USNAM,
BillingDocumentType: NULL,
CustomerNumber: NULL, // Requires join to BSEG to get customer
CompanyCode: BUKRS,
TotalInvoiceAmount: NULL
}
// == Source 11 & 12: Payment Applied To Invoice & Invoice Cleared ==
// Tables: BSEG joined with VBRK
DATA_SOURCE cleared_items FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
WHERE A.AUGDT >= $StartDate AND A.AUGDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.AUGBL <> ''
// Generate two records from this source
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Payment Applied To Invoice',
EventTime: A.AUGDT, // Clearing Date
UserName: H.USNAM, // User from header of original invoice doc
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
UNION WITH {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Cleared',
EventTime: A.AUGDT, // Clearing Date
UserName: H.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 13: Invoice Written Off ==
// Tables: BSEG (for the invoice line) and BKPF (for clearing doc type)
DATA_SOURCE written_off FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
INNER JOIN BKPF as C ON (A.AUGBL = C.BELNR AND A.BUKRS = C.BUKRS AND A.AUGGJ = C.GJAHR)
WHERE A.AUGDT >= $StartDate AND A.AUGDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND C.BLART = '[Your Write-Off Document Type]' // e.g., 'AB'
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Written Off',
EventTime: A.AUGDT,
UserName: C.USNAM, // User who posted the write-off
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Final Union of all sources ==
OUTPUT generated_invoices
UNION ALL posted_invoices
UNION ALL parked_invoices
UNION ALL approved_invoices
UNION ALL sent_invoices
UNION ALL corrected_invoices
UNION ALL due_invoices
UNION ALL reminders
UNION ALL disputes
UNION ALL payments
UNION ALL cleared_items
UNION ALL written_off È pronto a iniziare?
Utilizzi questo template per semplificare la preparazione dei dati e ottenere informazioni utili sul processo di fatturazione. Inizi subito a migliorare la liquidità.
Migliori la liquidità: ottimizzi subito la fatturazione!
Elimini le inefficienze, riduca del 30% il tempo di ciclo e migliori la liquidità.
Non è richiesta la carta di credito. Inizi a ottimizzare in pochi minuti.