Il Suo Template dei dati per Order to Cash, fatturazione ed emissione delle fatture
Il Suo Template dei dati per Order to Cash, fatturazione ed emissione delle fatture
- Attributi consigliati per un'analisi completa
- Fasi e tappe fondamentali del processo da monitorare
- Indicazioni pratiche per l'estrazione dei dati da SAP ECC
Attributi di Order to Cash - Fatturazione ed emissione delle fatture
| Nome | Descrizione | ||
|---|---|---|---|
| Attività ActivityName | Il nome dell'evento aziendale o della fase che si è verificata nel ciclo di vita della fattura. | ||
| Descrizione Questo Attributo descrive un'azione specifica o un cambiamento di stato nel processo di fatturazione, come 'Fattura generata', 'Fattura registrata' o 'Pagamento del cliente ricevuto'. Queste attività vengono derivate concettualmente da diversi eventi di sistema, dai cambiamenti di stato dei documenti o da specifici codici di transazione eseguiti dagli utenti. La sequenza di queste attività forma il flusso del processo, che costituisce la base dell'analisi di Process Mining. Esaminando le attività, le organizzazioni possono comprendere quali passaggi vengono eseguiti, in quale ordine e con quale frequenza, mettendo a confronto l'esecuzione effettiva del processo con quella progettata. Perché è importante Definisce le fasi nella mappa del processo, consentendo di visualizzare e analizzare i flussi, le deviazioni e i colli di bottiglia del processo. Dove reperirlo Si tratta di un Attributo concettuale derivato da più fonti, quali i codici di transazione (CDHDR-TCODE), i cambiamenti di stato dei documenti (VBUK-FKSTK) e le registrazioni dei documenti contabili. Esempi Fattura generataFattura registrataSollecito di pagamento emessoFattura compensata | |||
| Numero fattura InvoiceNumber | L'identificativo univoco del documento di fatturazione, che funge da ID principale del caso per il processo di fatturazione. | ||
| Descrizione Il numero della fattura, noto in SAP come numero del documento di fatturazione, identifica univocamente ogni fattura. Nel Process Mining funge da CaseId e raggruppa in un'unica istanza end-to-end del processo tutte le attività correlate, come creazione, registrazione, invio, pagamento e compensazione. Analizzare i processi per numero di fattura consente di ottenere una visione completa del ciclo di vita di ogni transazione di fatturazione, dalla sua origine al saldo definitivo. Questo è fondamentale per calcolare KPI chiave come i Days Sales Outstanding (DSO) e il tempo complessivo del ciclo di fatturazione, fornendo una base chiara per misurare e migliorare le prestazioni. Perché è importante È la chiave essenziale per monitorare l'intero percorso di una fattura e consente di analizzare i tempi di ciclo, i colli di bottiglia e le variazioni di ogni singola transazione di fatturazione. Dove reperirlo Tabella SAP ECC: VBRK, campo: VBELN Esempi 90001234900012359000123690001237 | |||
| Ora di inizio EventTime | Il timestamp che indica quando si è verificata una specifica attività o un determinato evento. | ||
| Descrizione L'ora dell'evento registra la data e l'ora precise di ogni attività nel ciclo di vita della fattura. Questo timestamp è fondamentale per tutte le analisi temporali nel Process Mining, inclusi il calcolo dei tempi di ciclo, l'identificazione dei colli di bottiglia e il monitoraggio delle prestazioni del processo rispetto agli accordi sui livelli di servizio. Questo Attributo viene generalmente costruito combinando un campo data, come la data di registrazione (BUDAT), con un campo ora (UZEIT) proveniente da diverse tabelle SAP che registrano modifiche o creazioni di documenti. Timestamp accurati sono essenziali per costruire un Event Log affidabile e garantire la validità di qualsiasi analisi delle prestazioni. Perché è importante Questo Attributo costituisce la base di ogni analisi delle prestazioni e consente di calcolare tempi di ciclo, durate e tempi di attesa tra le fasi del processo. Dove reperirlo Costruito a partire da diversi campi data e ora presenti in più tabelle, come 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 della fattura TotalInvoiceAmount | Il valore netto totale del documento di fatturazione. | ||
| Descrizione Questo attributo rappresenta l'importo netto totale della fattura, al netto delle imposte. L'importo della fattura è un dato finanziario fondamentale associato al processo di fatturazione. Viene utilizzato in diverse analisi, ad esempio per suddividere le fatture in categorie di valore alto e basso e verificare se i relativi flussi di processo differiscono. Può inoltre essere impiegato per stabilire le priorità nelle attività di recupero crediti o per analizzare perché le fatture di importo elevato richiedano più tempo per essere approvate o pagate. Questo contesto finanziario aggiunge un livello significativo di profondità all'analisi del processo. Perché è importante Fornisce il contesto finanziario essenziale per analizzare il processo in base al valore della fattura, ad esempio per verificare se le fatture di importo elevato seguono un processo diverso o richiedono più tempo per essere saldate. Dove reperirlo Tabella SAP ECC: VBRK, Campo: NETWR Esempi 1500.7525000.00500.0012345.67 | |||
| Nome utente UserName | L'ID dell'utente che ha eseguito l'attività o creato il documento. | ||
| Descrizione Questo Attributo acquisisce l'ID utente SAP responsabile di un determinato evento, come la creazione di una fattura o la registrazione di un pagamento. È essenziale per analizzare la componente umana del processo. Questi dati consentono di analizzare le variazioni delle prestazioni tra utenti o team, individuare le esigenze formative e rilevare potenziali problemi di conformità. Vengono inoltre utilizzati per distinguere le attività manuali eseguite da utenti umani dalle fasi automatizzate eseguite dal sistema o da utenti batch, un elemento fondamentale per calcolare i tassi di automazione. Perché è importante Consente di analizzare le prestazioni degli utenti e la distribuzione dei carichi di lavoro, oltre a distinguere tra attività manuali e automatizzate, supportando le iniziative di automazione ed efficienza. Dove reperirlo 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 | Un numero univoco che identifica il cliente al quale 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 Days Sales Outstanding (DSO) tra clienti diversi, individuare quelli che pagano frequentemente in ritardo o analizzare la conformità ai termini di pagamento. Comprendere questi modelli è essenziale per gestire le relazioni con i clienti e migliorare le strategie di riscossione mirate ai diversi segmenti. Perché è importante Consente un'analisi incentrata sul cliente, aiutando a individuare i comportamenti di pagamento, valutare il DSO per cliente e definire strategie di riscossione mirate. Dove reperirlo Tabella SAP ECC: VBRK, campo: KUNRG (Pagatore) oppure KUNAG (Committente). Esempi 100023200541CUST-A487910345 | |||
| Società CompanyCode | L'identificativo dell'entità giuridica che ha emesso la fattura. | ||
| Descrizione La società rappresenta un'unità giuridica e contabile indipendente in SAP. Tutte le transazioni finanziarie, incluse le fatture, vengono registrate in una specifica società. Si tratta di un elemento fondamentale dei dati organizzativi. Nel contesto del Process Mining, la società viene utilizzata per analizzare e confrontare le prestazioni del processo di fatturazione tra diverse entità giuridiche all'interno di un gruppo. Ciò aiuta a individuare le best practice di una società che potrebbero essere applicate alle altre e garantisce che l'analisi rispetti la struttura organizzativa aziendale. Perché è importante Consente di filtrare e confrontare i processi tra diverse entità giuridiche, un elemento fondamentale per l'analisi finanziaria e il benchmarking organizzativo. Dove reperirlo Tabella SAP ECC: VBRK, campo: BUKRS Esempi 10002000US01DE01 | |||
| Tipo di documento di fatturazione BillingDocumentType | Un codice che classifica il tipo di documento di fatturazione, come una fattura, una nota di credito o una 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' è una fattura cliente standard, mentre 'G2' rappresenta una nota di credito. Questa classificazione è configurata in SAP per controllare il modo in cui vengono elaborati i 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à specifiche e ottenere miglioramenti più mirati. Perché è importante Consente di segmentare e analizzare diversi processi di fatturazione, come quelli relativi alle fatture standard rispetto alle note di credito, che spesso presentano flussi di processo molto diversi. Dove reperirlo Tabella SAP ECC: VBRK, campo: FKART Esempi F2G2L2IV | |||
| Codice transazione TransactionCode | Il codice della transazione SAP utilizzato per eseguire un'attività. | ||
| Descrizione Il codice transazione, o T-Code, è un identificativo univoco di una specifica funzione o programma in SAP, come 'VF01' per la creazione di un documento di fatturazione. Acquisire il T-Code per ogni evento offre una visione tecnica, a livello di sistema, dell'esecuzione del processo. Queste informazioni sono molto utili per l'analisi delle cause profonde. Ad esempio, se gli errori sono frequenti, gli analisti possono verificare se viene utilizzato un codice transazione non standard. Aiuta inoltre a ricavare il nome dell'attività e a comprendere quali funzionalità del sistema vengono utilizzate nel processo. Perché è importante Fornisce il contesto tecnico su come è stata eseguita un'attività, consentendo l'analisi delle cause profonde delle deviazioni del processo e aiutando a individuare azioni utente non standard. Dove reperirlo Tabella SAP ECC: CDHDR, campo: TCODE Esempi VF01VF02FB01F-28 | |||
| Data del documento DocumentDate | La data riportata sul documento originale, indicata dal fornitore o dal creatore. | ||
| Descrizione La data del documento è la data di emissione del documento originale. Nel caso della fatturazione, corrisponde generalmente alla data di creazione della fattura e viene spesso utilizzata come base per calcolare la data di scadenza del pagamento. Questa data è fondamentale per la reportistica finanziaria e per il calcolo di metriche chiave come i Days Sales Outstanding (DSO). Dal punto di vista del cliente, rappresenta l'inizio del periodo di incasso. L'analisi delle discrepanze tra la data del documento e la data di registrazione può evidenziare ritardi interni nella gestione delle fatture ricevute. Perché è importante Costituisce il riferimento per calcolare l'anzianità della fattura e il DSO, fornendo un punto di partenza essenziale per l'analisi finanziaria e dei termini di pagamento. Dove reperirlo Tabella SAP ECC: VBRK, Campo: FKDAT (Data di fatturazione) Esempi 2023-04-152023-04-162023-05-20 | |||
| Data di compensazione ClearingDate | La data in cui il pagamento è stato ricevuto e la fattura è stata rimossa dai crediti commerciali. | ||
| Descrizione La data di compensazione è la data in cui una partita aperta, come una fattura, viene contrassegnata come pagata o "compensata" nel sistema finanziario. Rappresenta il momento in cui il denaro viene considerato incassato e riconciliato. È una delle date più importanti del ciclo Order to Cash. Costituisce il punto finale per calcolare i Days Sales Outstanding (DSO) e il tempo complessivo del ciclo dalla fattura all'incasso. L'analisi della data di compensazione aiuta a misurare l'efficacia del processo di recupero crediti. Perché è importante Segna la fase finale del ciclo di vita della fattura, fungendo da data di fine per il calcolo del DSO e del tempo complessivo del ciclo e riflettendo l'efficienza dell'incasso. Dove reperirlo Tabella SAP ECC: BSAD, Campo: AUGDT Esempi 2023-05-142023-06-012023-06-25 | |||
| Data di registrazione PostingDate | La data in cui il documento viene registrato nei libri contabili finanziari. | ||
| Descrizione La data di registrazione determina il periodo fiscale in cui la transazione viene contabilizzata nel libro mastro. È una data fondamentale per la contabilità e la reportistica finanziaria. I ritardi tra la data di creazione del documento e la data di registrazione possono indicare inefficienze nella gestione interna dei documenti di fatturazione. Dal punto di vista del Process Mining, la data di registrazione segna una tappa fondamentale nel ciclo di vita della fattura. Il tempo trascorso tra la generazione e la registrazione della fattura può rappresentare un indicatore chiave dell'efficienza del reparto di fatturazione. Perché è importante Segna una tappa finanziaria fondamentale ed è essenziale per la contabilità. Il tempo trascorso tra la creazione e la registrazione della fattura è una misura importante dell'efficienza dei processi interni. Dove reperirlo Tabella SAP ECC: BKPF, Campo: BUDAT Esempi 2023-04-152023-04-172023-05-21 | |||
| Data di scadenza della fattura InvoiceDueDate | La data entro la quale il cliente dovrebbe effettuare il pagamento. | ||
| Descrizione La data di scadenza della fattura è il termine entro cui deve essere effettuato il pagamento, come stabilito dai termini di pagamento. Questa data è fondamentale per la gestione dei crediti commerciali e l'avvio delle attività di recupero crediti. Questo attributo viene utilizzato per calcolare il KPI del tasso di pagamento puntuale, confrontandolo con la data effettiva del pagamento. L'analisi delle fatture in base alla data di scadenza aiuta a prevedere il flusso di cassa e a stabilire le priorità per il recupero dei crediti in scadenza o scaduti. In genere viene ricavato dalla data di riferimento e dai termini di pagamento. Perché è importante Costituisce il riferimento per misurare la puntualità dei pagamenti ed è essenziale per la gestione dei crediti commerciali e la previsione del flusso di cassa. Dove reperirlo 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 | |||
| È automatizzato IsAutomated | Un 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 tra attività manuali e automatizzate. In genere viene ricavato confrontando l'attributo Nome utente con un elenco di ID di utenti di sistema o batch noti, come "BATCHUSER" o "SAPSYSTEM". Questo indicatore è essenziale per misurare il livello di automazione del processo di fatturazione, un obiettivo prioritario per molte organizzazioni che desiderano migliorare l'efficienza e ridurre i costi. Il KPI del tasso di fatturazione automatizzata viene calcolato direttamente a partire da questo attributo e aiuta a monitorare i progressi delle iniziative di automazione. Perché è importante Supporta direttamente il calcolo del tasso di fatturazione automatizzata, aiutando a misurare l'efficienza del processo e a monitorare l'impatto dei progetti di automazione. Dove reperirlo Derivato dall'attributo Nome utente. La logica potrebbe essere la seguente: IF UserName IN ('BATCH', 'SYSTEM', 'RFCUSER') THEN true ELSE false. Esempi truefalse | |||
| È rielaborazione IsRework | Un indicatore che segnala se un'attività rappresenta una fase di rielaborazione o correzione. | ||
| Descrizione Questo attributo calcolato identifica le attività che rappresentano una rielaborazione, come "Fattura corretta" o gli storni di documenti. In genere è un indicatore booleano derivato 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 rielaborazione nel processo di fatturazione. Supporta direttamente KPI come il tasso di correzione delle fatture e aiuta a visualizzare i loop di rielaborazione nella mappa del processo, evidenziando 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à, evidenziando quanto impegno viene dedicato alla correzione degli errori e supportando direttamente i KPI della rielaborazione. Dove reperirlo Derivato dal Nome attività o dal Codice transazione. Ad esempio: IF ActivityName = 'Invoice Corrected' OR TransactionCode = 'VF11' THEN true ELSE false. Esempi truefalse | |||
| Numero del documento di vendita SalesDocumentNumber | L'identificativo dell'ordine di vendita originale che ha dato origine alla fattura. | ||
| Descrizione Questo attributo collega direttamente la fattura all'ordine di vendita che ha avviato la transazione. Questa tracciabilità è fondamentale per un'analisi end-to-end completa del processo Order to Cash. Collegando il processo di fatturazione al precedente processo di vendita, le organizzazioni possono analizzare il tempo complessivo del ciclo dall'ordine del cliente all'incasso. Ciò aiuta a stabilire se i ritardi nella fatturazione siano causati da problemi nelle vendite, nell'evasione dell'ordine o nel reparto di fatturazione, offrendo una visione più completa del processo. Perché è importante Collega il processo di fatturazione all'ordine di vendita, consentendo una vera analisi end-to-end Order to Cash e aiutando a individuare i ritardi tra i diversi reparti. Dove reperirlo Tabella SAP ECC: VBRP, Campo: VGBEL Esempi 100000451000004610000047 | |||
| Organizzazione commerciale SalesOrganization | L'unità organizzativa responsabile della vendita di prodotti o servizi. | ||
| Descrizione L'organizzazione commerciale è un'unità organizzativa di SAP responsabile della distribuzione di beni e servizi e della negoziazione delle condizioni di vendita. È un campo fondamentale 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 le prestazioni di diverse organizzazioni commerciali, aiutando a individuare le aree geografiche o le linee di business più efficienti nei processi di fatturazione e sostenendo le iniziative volte a standardizzare le best practice. Perché è importante Consente di effettuare benchmark e analisi delle prestazioni tra diverse divisioni commerciali o aree geografiche, aiutando a individuare le best practice e gli ambiti di miglioramento. Dove reperirlo Tabella SAP ECC: VBRK, Campo: VKORG Esempi 1000NA01EU01AP01 | |||
| Sistema di origine SourceSystem | Identifica il sistema di origine dal quale sono stati estratti i dati. | ||
| Descrizione Questo Attributo specifica il sistema di riferimento da cui provengono i dati. In un ambiente aziendale con più istanze ERP o sistemi integrati, questo campo aiuta a distinguere i dati provenienti da fonti diverse. Nel Process Mining è essenziale per la convalida dei dati e per le analisi che confrontano i processi tra sistemi o unità organizzative differenti. In genere viene valorizzato come valore statico durante l'estrazione dei dati, per identificare il dataset. Perché è importante Fornisce il contesto sull'origine dei dati, fondamentale negli ambienti con più sistemi per garantire l'integrità dei dati e consentire analisi specifiche per sistema. Dove reperirlo In genere si tratta di un valore statico aggiunto durante il processo di estrazione, trasformazione e caricamento (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 | Le condizioni alle quali il venditore conclude una vendita, incluso il calendario dei pagamenti. | ||
| Descrizione I termini di pagamento definiscono le regole relative alla scadenza dei pagamenti, ad esempio "Net 30" o "Net 60". Tali termini vengono concordati con il cliente e rappresentano un fattore determinante per il flusso di cassa. L'analisi del processo in base ai termini di pagamento può evidenziare 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 migliori con i clienti o ad adeguare la propria pianificazione finanziaria. Sono inoltre un input fondamentale per calcolare la data di scadenza della fattura. Perché è importante Aiuta ad analizzare il comportamento di pagamento dei clienti e l'impatto sul flusso di cassa in base alle condizioni negoziate, fornendo indicazioni utili per ottimizzare gli accordi commerciali. Dove reperirlo Tabella SAP ECC: VBRK, Campo: ZTERM Esempi Z030Z060Z001 | |||
| Ultimo aggiornamento dei dati LastDataUpdate | Il timestamp dell'aggiornamento o dell'estrazione più recente dei dati dal sistema di origine. | ||
| Descrizione Questo Attributo indica l'ultima volta in cui il dataset è stato aggiornato dal sistema di origine. Fornisce un contesto fondamentale per qualsiasi analisi, assicurando che gli utenti comprendano il livello di aggiornamento dei dati visualizzati. Nei Dashboard e nei report, questo timestamp informa gli stakeholder sull'attualità dei dati e aiuta a gestire le aspettative riguardo alla visibilità delle transazioni più recenti. In genere viene generato al termine del processo di estrazione dei dati. Perché è importante Informa gli utenti sull'attualità dei dati, un elemento fondamentale per prendere decisioni operative basate sull'analisi. Dove reperirlo Generato e memorizzato durante il processo di estrazione, trasformazione e caricamento (ETL) dei dati. Esempi 2023-10-27T02:00:00Z2023-10-28T02:00:00Z | |||
| Valuta Currency | Il codice 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 i dati di un'organizzazione multinazionale, il campo della valuta è essenziale per interpretare e convertire correttamente i valori finanziari. Consente di produrre report coerenti e garantisce che gli importi non vengano aggregati senza un'adeguata conversione valutaria, evitando così analisi finanziarie errate. Perché è importante Fornisce il contesto necessario per tutti i valori monetari, garantendo un'analisi finanziaria accurata, soprattutto in un ambiente multivaluta. Dove reperirlo Tabella SAP ECC: VBRK, Campo: WAERK Esempi USDEURGBPJPY | |||
Attività di Order to Cash - Fatturazione ed emissione delle fatture
| Attività | Descrizione | ||
|---|---|---|---|
| Fattura compensata | Lo stato finale di una fattura pagata correttamente, che indica che la posizione aperta è stata chiusa mediante un pagamento o una nota di credito corrispondente. La fattura è considerata completamente saldata. | ||
| Perché è importante Segna il completamento corretto del ciclo Order to Cash per una fattura. È l'evento finale principale per misurare il tempo medio complessivo del ciclo di fatturazione. Dove reperirlo Si verifica quando i campi del documento di compensazione (AUGBL) e della data di compensazione (AUGDT) vengono valorizzati per la posizione della fattura nella tabella BSEG. Acquisizione L'evento si verifica nella data di compensazione (AUGDT) registrata nella tabella BSEG per la posizione 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 testata dei documenti contabili (BKPF), con uno specifico tipo di documento per le fatture. | ||
| Perché è importante Questo è il punto di partenza dell'intero processo di fatturazione. Analizzare il tempo trascorso da questo evento consente di misurare il tempo del ciclo di creazione della fattura ed è alla base del calcolo dei Days Sales Outstanding (DSO). Dove reperirlo Registrato nella tabella BKPF. La data (CPUDT) e l'ora (CPUTM) di creazione per uno specifico numero di documento (BELNR) identificano questo evento. Il tipo di documento (BLART) indica che si tratta di una fattura. Acquisizione Dal timestamp di creazione (CPUDT) nella tabella BKPF relativo al documento della fattura. Tipo di evento explicit | |||
| Fattura inviata al cliente | Indica che la fattura è stata inviata al cliente attraverso un canale di output definito, come stampa, e-mail o EDI. In genere, questo evento viene acquisito dai log del sistema di gestione degli output. | ||
| Perché è importante Questo evento rappresenta una tappa fondamentale, poiché avvia il conteggio dei termini di pagamento del cliente. I ritardi in questa fase incidono direttamente sulla data prevista per il pagamento e sull'efficienza della riscossione dei pagamenti. Dove reperirlo 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 Deducibile da una registrazione nella tabella NAST con stato di elaborazione '1' (elaborato correttamente). Tipo di evento inferred | |||
| Fattura registrata | La fattura viene registrata formalmente nel sottolibro dei crediti verso clienti e nel libro mastro generale. Questo evento rende la fattura giuridicamente vincolante e riflette il debito del cliente. | ||
| Perché è importante Si tratta di una tappa fondamentale, che avvia ufficialmente il conteggio dei tempi di riscossione. Il tempo tra la generazione e la registrazione può evidenziare ritardi interni che incidono sul flusso di cassa. Dove reperirlo Registrato nella tabella BKPF. La data di registrazione (BUDAT) del numero di documento (BELNR) identifica questo evento. Per i documenti parcheggiati, corrisponde al momento in cui il documento viene convertito in un documento registrato. Acquisizione Dalla data di registrazione (BUDAT) nella tabella BKPF relativa al documento della fattura. Tipo di evento explicit | |||
| Pagamento del cliente ricevuto | È stato ricevuto un pagamento dal cliente e registrato nel sistema come incasso o deposito bancario. Viene creato un documento di pagamento separato, non ancora associato alla specifica fattura. | ||
| Perché è importante Si tratta di una tappa fondamentale del ciclo di conversione della liquidità. Il tempo che intercorre tra l'invio della fattura e la ricezione del pagamento è una componente primaria dei Days Sales Outstanding (DSO). Dove reperirlo Registrato come nuovo documento in BKPF e BSEG, generalmente con un tipo di documento che indica un pagamento del cliente, ad esempio 'DZ'. La data di registrazione (BUDAT) identifica l'evento. Acquisizione Dalla data di registrazione del documento di pagamento del cliente in BKPF. Tipo di evento explicit | |||
| Caso di contestazione creato | È stata registrata una contestazione formale relativa alla fattura, generalmente a seguito di un reclamo del cliente. La contestazione viene registrata nel sistema SAP Dispute Management. | ||
| Perché è importante Identifica le fatture a rischio di ritardo nel pagamento ed evidenzia i problemi alla base dell'insoddisfazione del cliente. Segna l'inizio di un importante processo di gestione delle eccezioni. Dove reperirlo Acquisito dalla creazione di un caso nella tabella dei casi di contestazione (UDM_CASE), collegato al documento contabile della fattura. Acquisizione Registrato quando un utente crea un caso di contestazione tramite la transazione UDM_DISPUTE. Tipo di evento explicit | |||
| Fattura approvata | Rappresenta l'approvazione formale della fattura, che ne consente la registrazione o l'invio al cliente. Spesso viene dedotta dalla conversione di un documento parcheggiato in un documento registrato. | ||
| Perché è importante Tiene traccia del Workflow di approvazione interno, una fonte comune di colli di bottiglia. L'analisi di questa attività contribuisce al Dashboard Invoice Approval Flow Analysis, identificando gli approvatori più lenti. Dove reperirlo Può essere dedotto dal passaggio di un documento dallo stato parcheggiato (in VBKPF) allo stato registrato (in BKPF). In alternativa, se viene utilizzato un sistema di Workflow, può essere un evento esplicito 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 | Rappresenta un'attività di rilavorazione in cui una fattura iniziale è risultata errata ed è stata successivamente stornata. L'evento viene acquisito individuando i documenti di storno collegati alla fattura originale. | ||
| Perché è importante Evidenzia inefficienze del processo e problemi di qualità. Un'elevata frequenza di correzioni segnala problemi nei dati di vendita o di fatturazione a monte e supporta il Dashboard Invoice Rework And Error Rates. Dove reperirlo Identificato individuando un documento di storno in cui BKPF-STBLG rimanda al documento originale. L'evento corrisponde alla creazione di questo documento di storno. Acquisizione Registrato quando viene creato un documento di storno, ad esempio tramite FB08. Tipo di evento explicit | |||
| Fattura parcheggiata | Il documento della fattura è stato salvato in uno stato preliminare senza essere registrato nel libro mastro generale. Questa modalità viene spesso utilizzata quando le informazioni sono incomplete o richiedono una verifica prima della registrazione definitiva. | ||
| Perché è importante Tiene traccia delle fasi precedenti alla registrazione e dei possibili ritardi. Una permanenza prolungata nello stato parcheggiato può indicare problemi di qualità dei dati o colli di bottiglia nel processo di pre-approvazione. Dove reperirlo I documenti parcheggiati sono memorizzati nella tabella VBKPF. La creazione di un documento in questa tabella, successivamente registrato, identifica questa attività. Acquisizione Registrato al salvataggio di un documento parcheggiato mediante una transazione come FV70. Tipo di evento explicit | |||
| Fattura stralciata | Uno stato finale alternativo in cui la fattura viene considerata inesigibile e l'importo residuo viene compensato con un conto per crediti inesigibili. La fattura viene chiusa senza un pagamento da parte del cliente. | ||
| Perché è importante Rappresenta un esito negativo del processo e una perdita di ricavi. Il monitoraggio di questi eventi aiuta ad analizzare le cause dei crediti inesigibili e a migliorare le politiche di gestione del credito. Dove reperirlo Deducibile analizzando la transazione di compensazione della fattura. Se il documento di compensazione viene registrato su uno specifico conto di costo del libro mastro generale per crediti inesigibili, la fattura viene considerata stralciata. Acquisizione Deducibile quando la transazione di compensazione include una registrazione su un conto designato del libro mastro generale per crediti inesigibili. Tipo di evento inferred | |||
| Pagamento applicato alla fattura | Il pagamento ricevuto dal cliente è stato associato e applicato alla specifica fattura aperta, contrassegnando la posizione per la compensazione. Questo è il passaggio di riconciliazione che collega il pagamento al debito. | ||
| Perché è importante Questa attività è fondamentale per misurare il Cash Application Cycle Time. I ritardi nell'applicazione degli incassi possono rappresentare in modo errato lo stato effettivo dei crediti verso clienti e nascondere la liquidità disponibile. Dove reperirlo Deducibile dalla transazione di compensazione, ad esempio F-32, che valorizza i campi di compensazione nella posizione della fattura. Il timestamp dell'evento corrisponde alla data di compensazione. Acquisizione Deducibile dalla valorizzazione della data di compensazione (AUGDT) nella tabella delle posizioni della fattura (BSEG). Tipo di evento inferred | |||
| Raggiunta la scadenza della fattura | Evento calcolato che indica il giorno in cui il pagamento della fattura è ufficialmente dovuto in base ai termini di pagamento. Non si tratta di un'attività eseguita da un utente o da un sistema, bensì di un momento temporale fondamentale. | ||
| Perché è importante È essenziale per analizzare il comportamento di pagamento e la conformità. Costituisce il riferimento per determinare i pagamenti puntuali e tardivi e per calcolare il KPI On-Time Payment Rate. Dove reperirlo Derivato confrontando la data corrente con la data di scadenza netta. La data di scadenza si trova nel campo BSEG-ZFBDT oppure viene calcolata a partire dalla data di riferimento e dai termini di pagamento. Acquisizione Confrontare la data di sistema con il campo della data di scadenza netta nella posizione della fattura (BSEG). Tipo di evento calculated | |||
| Sollecito di pagamento emesso | 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 riscossione. Analizzare il tempo che intercorre tra il sollecito e la ricezione del pagamento è fondamentale per il KPI Payment Reminder Effectiveness. Dove reperirlo Registrato nelle tabelle dei dati di sollecito, in particolare MHNK (testata dei dati di sollecito) e MHND (posizioni dei dati di sollecito), generate dall'esecuzione dei solleciti (transazione F150). Acquisizione Registrato all'esecuzione di un sollecito (F150) per la posizione scaduta. Tipo di evento explicit | |||
Guide all'estrazione
Passaggi
- Accedere all'editor ABAP: acceda al Suo sistema SAP ECC. Apra l'editor ABAP utilizzando il codice transazione
SE38. - Creare il programma: inserisca nel campo Programma un nome per il nuovo programma, ad esempio
Z_PM_O2C_INVOICE_EXTRACT, quindi selezioni il pulsante Crea. Indichi un titolo descrittivo e imposti il Tipo di programma su 'Programma eseguibile'. - Definire la schermata di selezione: nel codice sorgente del programma, definisca i parametri della schermata di selezione. In questo modo gli utenti potranno filtrare i dati da estrarre. I parametri principali includono l'intervallo delle date di creazione dei documenti (
S_ERDAT), il codice società (S_BUKRS) e il tipo di documento di fatturazione (S_VBTYP). - Definire le strutture dati: dichiari una struttura di tabella interna che conterrà i dati finali dell'Event Log. La struttura deve includere i campi
InvoiceNumber,ActivityName,EventTimee gli Attributi consigliati, comeUserName,BillingDocumentType,CustomerNumber,CompanyCodeeTotalInvoiceAmount. - Implementare la logica di selezione dei dati: scriva la logica ABAP principale per selezionare i dati. Innanzitutto, selezioni i documenti di fatturazione principali dalle tabelle
VBRKeBKPFin base ai valori inseriti dall'utente nella schermata di selezione. Memorizzi i risultati in una tabella interna temporanea. - Estrarre le attività: analizzi l'elenco iniziale dei documenti di fatturazione. Per ogni documento, esegua selezioni successive da diverse tabelle per identificare le 13 attività richieste. Ad esempio, interroghi la tabella
NASTper gli eventi 'Invoice Sent To Customer',BSEGper le informazioni di compensazione ('Invoice Cleared', 'Payment Applied') eMHNKper i dati relativi ai solleciti ('Payment Reminder Issued'). - Creare 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 mappati correttamente dalle tabelle di origine. - Scrivere sul server applicativo: una volta completato il ciclo e popolata interamente la tabella finale dell'Event Log, utilizzi le istruzioni
OPEN DATASET,LOOP AT... TRANSFEReCLOSE DATASETper scrivere il contenuto della tabella interna in un file flat sul server applicativo SAP. Specifichi un percorso logico accessibile. - Recuperare il file: utilizzi il codice transazione
AL11per accedere alle directory del server applicativo e individuare il file generato. Collabori con il team SAP Basis per scaricare il file dal server sul computer locale o in una posizione di rete condivisa. - Formattazione finale: apra il file scaricato e verifichi che sia un file CSV con una riga di intestazione. Si assicuri che il file sia salvato con codifica UTF-8, così da garantirne la compatibilità con il caricamento in ProcessMind.
Configurazione
- Prerequisiti: accesso alla creazione e all'esecuzione di programmi ABAP (transazione SE38). Autorizzazione alla lettura delle tabelle FI e SD, incluse
VBRK,VBRP,BKPF,BSEG,NAST,MHNKeUDM_CASE_ATTR00(per Dispute Management). - Selezione dell'intervallo di date: il programma deve prevedere un parametro obbligatorio per l'intervallo di date, generalmente 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 gestibili i dati. - Filtri principali: applichi sempre un filtro per
CompanyCode(BUKRS) per limitare l'ambito dell'estrazione. È inoltre fortemente consigliato filtrare per tipo di documento di fatturazione (VBTYPda VBRK) o tipo di documento contabile (BLARTda BKPF), includendo solo i tipi di fattura pertinenti, ad esempio 'RV' per le fatture contabili standard, ed escludendo note di credito o altri documenti. - Considerazioni sulle prestazioni: per grandi volumi di dati che coprono più di alcuni mesi, esegua il programma come job in background per evitare timeout della sessione. La logica ABAP deve essere ottimizzata utilizzando letture indicizzate delle tabelle ed evitando cicli annidati con selezioni dal database al loro interno. È preferibile selezionare prima i dati nelle tabelle interne e procedere quindi alla loro elaborazione.
- 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, generalmente una virgola o un punto e virgola. Verifichi che il percorso corrisponda a una directory configurata a livello globale e accessibile.
a 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: si assicuri di disporre di un utente del database con accesso in sola lettura alle tabelle SAP ECC necessarie, incluse VBRK, BKPF, BSAD, NAST, CDHDR, CDPOS, SCASE e le altre specificate nella query. Questo livello di accesso viene generalmente concesso solo agli amministratori di sistema o a specifici team di analisi dei dati.
- Connettersi al database: utilizzi un client SQL standard, come DBeaver, Oracle SQL Developer o Microsoft SQL Server Management Studio, per stabilire una connessione al database SAP ECC.
- Preparare la query SQL: copi la query SQL completa fornita nella sezione 'query' nell'editor del Suo client SQL.
- Personalizzare i segnaposto: la query contiene diversi segnaposto che deve sostituire con valori specifici del Suo ambiente. Tra questi:
'YYYYMMDD': sostituisca tutte le occorrenze con le date di inizio e fine del periodo di analisi desiderato. È fondamentale filtrare i dati su un intervallo gestibile.'XXXX': sostituisca con il codice o 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 per memorizzare il numero della fattura nella configurazione di Dispute Management, ad esempio 'INVOICE_ID'.
- Verificare le funzioni per i timestamp: la query utilizza la sintassi Generica
CAST(CONCAT(date_field, time_field) AS TIMESTAMP). Potrebbe essere necessario adattarla al sistema di database specifico, ad esempio utilizzandoTO_TIMESTAMPper Oracle oDATETIMEFROMPARTSper SQL Server. - Eseguire la query: esegua la query modificata. In base alle dimensioni delle tabelle SAP e all'intervallo di date selezionato, l'esecuzione potrebbe richiedere molto tempo.
- Esaminare i risultati: al termine della query, verifichi che l'output contenga le colonne previste: InvoiceNumber, ActivityName, EventTime e gli Attributi consigliati. Controlli la presenza di eventuali errori o risultati vuoti.
- Esportare in CSV: esporti l'intero set di risultati dal client SQL in un file CSV. Si assicuri che il file utilizzi la codifica UTF-8 per evitare problemi con i caratteri speciali.
- Preparare il 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 bypassa completamente il 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 in base a un intervallo di date specifico, così da garantire prestazioni e volumi di dati ragionevoli. Si consiglia di iniziare con un periodo da 3 a 6 mesi. I segnaposto del filtro data
'YYYYMMDD'devono essere impostati in più parti della query. - Filtro per codice società: la query è progettata per essere filtrata per codice società (
BUKRS). L'analisi di uno o pochi codici società alla volta rappresenta la prassi standard. - Configurazione dei tipi di documento: la logica per identificare eventi come correzioni di fatture, stralci o documenti inviati dipende dalle configurazioni SAP standard. Potrebbe essere necessario adattare la query se la Sua 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 di questa query su un sistema SAP di produzione attivo può consumare risorse significative e influire sulle prestazioni operative. Si raccomanda vivamente di eseguire le estrazioni di grandi dimensioni negli orari di minore attività o su una replica del database dedicata alla reportistica.
a 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: si assicuri 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 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).
- Stabilire la connessione SAP: nello strumento ETL, crei una nuova connessione al sistema SAP ECC. Configuri i dati di connessione, inclusi server applicativo, numero di sistema, client, utente e password. Verifichi la connessione per assicurarsi che sia attiva.
- Definire le origini dati: per ogni attività da estrarre, definisca le tabelle SAP corrispondenti come origini dati nel job ETL. Ad esempio, aggiunga VBRK per la generazione delle fatture, BKPF per gli eventi di registrazione contabile e NAST per le comunicazioni ai clienti.
- Creare la 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, filtri per codice società (BUKRS), tipo di documento (BLART) e uno specifico intervallo di date, come la data di creazione ERDAT.
- Mappare i campi e trasformare i dati: in ogni flusso di dati, mappi i campi delle tabelle SAP di origine sulla struttura dell'Event Log di destinazione: InvoiceNumber, ActivityName, EventTime, UserName e gli altri Attributi consigliati. Utilizzi la logica di trasformazione per impostare in modo fisso 'ActivityName' per ogni flusso e formattare correttamente date e timestamp.
- Gestire le attività complesse: per gli eventi calcolati, come 'Invoice Due Date Reached', utilizzi la data di pagamento di riferimento (ZFBDT) e la logica delle condizioni di pagamento per calcolare la data di scadenza oppure recuperi direttamente la data di scadenza netta (NETDT) da BSEG. Per gli eventi derivati dai log delle modifiche, come 'Invoice Approved', potrebbe essere necessario unire tabelle quali BKPF e CDHDR/CDPOS in base al numero e alla data del documento.
- Combinare i dati delle attività: utilizzi una trasformazione 'Union' o 'Merge' nello strumento ETL per combinare gli output dei 13 flussi di dati individuali in un unico dataset. Prima dell'unione, verifichi che i nomi delle colonne e i tipi di dati siano coerenti in tutti i flussi.
- Configurare la destinazione: definisca la destinazione finale dell'Event Log. Può trattarsi di un file flat (CSV), di una tabella di database o di una connessione diretta a un'area di staging.
- Impostare la pianificazione dell'estrazione: configuri i parametri dell'intervallo di date per l'estrazione. Per il caricamento iniziale, potrebbe estrarre dati relativi a 6-12 mesi. Per i successivi caricamenti incrementali, configuri il job in modo che estragga i dati a partire dalla data dell'ultima esecuzione.
- Eseguire ed esportare: esegua il job ETL. Al termine, esamini il file di output per verificare che rispetti il formato richiesto. L'output finale deve essere un unico file CSV, in cui ogni riga rappresenta un evento univoco, 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 tabelle come VBRK, BKPF, BSEG, NAST e le altre specificate nella query.
- Licenza dello strumento ETL: è obbligatoria una licenza valida dello strumento ETL commerciale e del relativo connettore SAP.
- Intervallo di date: si consiglia di estrarre dati relativi a un periodo compreso tra 3 e 6 mesi, così da ottenere un campione rappresentativo per l'analisi senza causare un carico eccessivo sul 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 per 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ò essere lenta. Utilizzi filtri selettivi, eviti di estrarre campi non necessari e pianifichi l'estrazione negli orari di minore attività, così da ridurre al minimo l'impatto sulle prestazioni del sistema SAP di origine.
a 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 preziose sul processo di fatturazione ed emissione delle fatture. Inizi oggi il Suo percorso verso un flusso di cassa più rapido.
Sblocchi rapidamente il flusso di cassa: ottimizzi oggi la fatturazione e l’emissione delle fatture!
Elimini le inefficienze, riduca del 30% il tempo di ciclo e migliori il flusso di cassa.
Non è richiesta alcuna carta di credito. Inizi a ottimizzare in pochi minuti.