Il Suo Template di Dati per il Processo di Pagamento dei Conti Fornitori
Il Suo Template di Dati per il Processo di Pagamento dei Conti Fornitori
- Attributi chiave per l'analisi dei fornitori e dei pagamenti
- Tappe fondamentali del processo per il ciclo di pagamento
- Logica di estrazione specializzata per sistemi SAP S/4HANA
Attributi di Elaborazione dei Pagamenti dei Conti Fornitori
| Nome | Descrizione | ||
|---|---|---|---|
| Activity Activity | Lo stato specifico dell'attività o dell'evento registrato per la fattura. | ||
| Descrizione Questo attributo rappresenta i distinti passaggi di processo che si verificano durante il ciclo di vita della fattura. Cattura eventi come la creazione della fattura, la registrazione, il blocco, l'approvazione e la compensazione del pagamento. I nomi delle attività derivano da codici di transazione, voci di change log o aggiornamenti di stato del workflow trovati nel sistema sorgente. Per l'analisi, questo campo è fondamentale per mappare la variante del flusso di processo. Permette al motore di Process Mining di visualizzare la sequenza dei passaggi, identificare i cicli di rilavorazione e determinare dove il processo devia dal percorso standard. È il componente centrale dell'event log. Perché è importante Definisce i nodi nella Dove trovare Derivato da Codici Transazione ( Esempi Fattura RegistrataBlocco Pagamento ApplicatoEsecuzione Ciclo PagamentiFattura Compensata | |||
| Numero fattura InvoiceNumber | L'identificatore unico per la fattura fornitore in fase di elaborazione. | ||
| Descrizione Il Numero Fattura è la chiave primaria per tracciare il ciclo di vita di una partita debitoria all'interno del sistema SAP S/4HANA. Si riferisce specificamente al numero del documento contabile generato al momento della registrazione della fattura nel libro mastro. Nella terminologia SAP standard, questo corrisponde al Numero Documento (BELNR) che si trova all'interno di un Codice Società e un Anno Fiscale specifici. Nell'analisi di processo, questo attributo funge da Case ID. Collega tutte le attività disparate—dalla ricezione iniziale e il parcheggio della fattura, attraverso vari blocchi di approvazione e modifiche, fino al pagamento di compensazione finale. Raggruppare gli eventi tramite questo identificatore consente agli analisti di ricostruire la cronologia completa end-to-end di ogni obbligazione di pagamento. Perché è importante Serve come Dove trovare Tabella SAP BKPF (Intestazione Documento Contabile) campo BELNR o tabella ACDOCA campo BELNR Esempi 1900000523510000289119000006015100003002 | |||
| Timestamp Evento EventTime | Il timestamp esatto in cui si è verificata l'attività. | ||
| Descrizione L'Ora Evento registra la data e l'ora specifiche in cui un'attività è stata commessa nel database SAP. Fornisce la dimensione temporale necessaria per ordinare gli eventi in sequenza all'interno di un caso. Questo timestamp viene solitamente costruito combinando i campi Data CPU e Ora CPU dai log di sistema o dalle intestazioni dei documenti. Nell'analisi, questo attributo è essenziale per il calcolo dei tempi di ciclo, della durata e del throughput. Permette la misurazione degli intervalli di tempo tra i passaggi, come il tempo impiegato tra la ricezione della fattura e l'approvazione finale, che è cruciale per identificare i bottleneck e valutare le performance dei KPI come il Tempo Medio di Approvazione Fattura. Perché è importante Fornisce l'ordine cronologico degli eventi e costituisce la base per tutti i calcoli delle performance basati sul tempo. Dove trovare Tabella SAP BKPF campo CPUDT (Data Inserimento) e CPUTM (Ora Inserimento), o campi UDATE e UTIME della tabella CDHDR Esempi 2023-10-12T08:30:00.000Z2023-10-12T14:15:22.000Z2023-10-15T09:00:00.000Z | |||
| Sistema di Origine SourceSystem | L'identificatore dell'istanza SAP S/4HANA da cui provengono i dati. | ||
| Descrizione Questo attributo identifica la specifica installazione ERP o il client da cui sono stati estratti i dati di processo. In ambienti con più istanze SAP o sistemi legacy in parallelo, questo campo garantisce che la data lineage sia mantenuta e consente confronti tra sistemi. Per l'analisi, questo campo funge da filtro di alto livello. Aiuta gli analisti a segregare i dati quando confrontano le performance tra diverse installazioni di sistema regionali o quando convalidano la coerenza dei dati durante i progetti di migrazione di sistema. Garantisce che eventuali variazioni di processo attribuite al sistema di configurazione siano adeguatamente contestualizzate. Perché è importante Distingue le fonti di Dove trovare ID Sistema (SY-SYSID) dal contesto dell'installazione SAP Esempi SAP_PROD_01S4H_NA_100ERP_EU_200 | |||
| Ultimo `Data Update` LastDataUpdate | Il timestamp che indica l'ultima estrazione o aggiornamento del record. | ||
| Descrizione Ultimo Aggiornamento Dati segna il momento in cui i Nell'analisi, questo Perché è importante Informa gli utenti sulla freschezza dei Dove trovare Generato dal processo ETL / di estrazione Esempi 2023-10-27T23:59:59.000Z2023-11-01T06:00:00.000Z | |||
| Codice Società CompanyCode | L'unità organizzativa per la quale vengono creati il bilancio e il conto economico (P&L). | ||
| Descrizione Il Codice Società rappresenta l'entità contabile indipendente all'interno dell'impresa. È l'unità organizzativa centrale nella contabilità esterna e viene utilizzata per strutturare i dati finanziari. Ogni fattura è assegnata esattamente a un Codice Società. Nell'analisi, questo attributo consente la segmentazione dei KPI per entità giuridica o regione. Viene utilizzato nei dashboard per confrontare l'efficienza dei team dei conti fornitori tra le diverse filiali. Ad esempio, aiuta a identificare se una specifica filiale ha un tasso più elevato di blocchi di pagamento manuali rispetto allo standard aziendale. Perché è importante Segmenta il processo per entità legale, facilitando il Dove trovare Tabella SAP BKPF campo BUKRS Esempi US01DE1010002000 | |||
| Data di Compensazione ClearingDate | La data in cui la fattura è stata compensata tramite pagamento. | ||
| Descrizione La Data di Compensazione registra il momento in cui la partita aperta nel registro dei conti fornitori è stata saldata, tipicamente tramite un ciclo di pagamento o una registrazione manuale di pagamento. Questo segna effettivamente la fine della passività. Nell'analisi, questo attributo viene utilizzato per calcolare il tempo di ciclo finale del processo. È il timestamp utilizzato per l'attività 'Pagamento Compensato' e viene confrontato con la Data di Scadenza Netta per determinare la Performance di Pagamento Puntuale. Alimentata direttamente nel dashboard Efficienza Compensazione Pagamenti. Perché è importante Segna il completamento del processo di pagamento ed è utilizzato per determinare la tempestività del pagamento. Dove trovare Tabella SAP BSEG o campo AUGDT della tabella AUGDT Esempi 2023-11-012023-11-15 | |||
| Data di Scadenza Netta NetDueDate | La data calcolata entro cui la fattura deve essere pagata per evitare penali. | ||
| Descrizione La Data di Scadenza Netta è la scadenza finale per il pagamento. Viene calcolata aggiungendo il numero massimo di giorni dei termini di pagamento alla Data Base. Sebbene a volte sia memorizzata esplicitamente, è spesso un campo calcolato nelle viste di analisi. Nell'analisi, questo è il benchmark principale per il Tracciatore di Pagamenti in Ritardo e Penali. Il confronto della Data di Compensazione effettiva con la Data di Scadenza Netta genera la metrica 'Giorni Pagati in Ritardo', che aiuta a quantificare l'efficienza del team AP e il rischio di attrito con i fornitori. Perché è importante È la scadenza obiettivo per il processo; mancarla impatta il rating creditizio e comporta costi. Dove trovare Calcolato: Esempi 2023-11-302023-12-01 | |||
| È `Touchless` IsTouchless | Un `flag` booleano che indica se la fattura è stata elaborata senza intervento manuale. | ||
| Descrizione Questo attributo è calcolato analizzando lo stream di eventi per un caso. Se il caso contiene solo attività automatizzate (ad esempio, utente 'system', TCODE specifici in background) e nessuna modifica o blocco manuale, viene contrassegnato come 'touchless' (senza intervento manuale). Nell'analisi, questa è la metrica principale per il KPI Tasso Fatture Touchless. Permette all'organizzazione di tracciare il successo delle iniziative di automazione e identificare quali tipi di casi (ad esempio, per Fornitore o Regione) fluiscono correttamente attraverso il sistema senza interventi umani. Perché è importante È la misura primaria di automazione ed efficienza del processo. Dove trovare Calcolato in base alla sequenza di attività e ai tipi di utente Esempi truefalse | |||
| È un Pagamento in Ritardo IsLatePayment | Un `flag` booleano che indica se il pagamento è stato effettuato dopo la data di scadenza netta. | ||
| Descrizione Questo attributo calcolato restituisce 'vero' se la Data di Compensazione è strettamente maggiore della Data di Scadenza Netta. Serve come classificatore binario per le performance del processo. Nell'analisi, questo flag viene utilizzato per contare il numero di casi non conformi per il KPI Frequenza Penali per Pagamenti in Ritardo. Semplifica la creazione dei dashboard consentendo un semplice conteggio dei valori 'Vero' invece di richiedere calcoli complessi di date nello strato di visualizzazione. Perché è importante Semplifica il calcolo dei KPI di prestazione puntuale. Dove trovare Calcolato: Data di Compensazione > Data di Scadenza Netta Esempi truefalse | |||
| Importo Fattura InvoiceAmount | L'importo lordo totale della fattura nella valuta del documento. | ||
| Descrizione Questo attributo riflette il valore finanziario della fattura così come registrato nel documento sorgente. Rappresenta la passività che deve essere saldata con il fornitore. In SAP S/4HANA, questo è tipicamente memorizzato nel campo Importo nella Valuta del Documento. Nell'analisi, l'Importo Fattura viene utilizzato per prioritizzare il lavoro. Dashboard come Distribuzione Punti di Contatto Manuali utilizzano questo campo per evidenziare se attività manuali ad alto sforzo vengono sprecate su fatture di basso valore. Consente all'organizzazione di concentrare gli sforzi di ottimizzazione su transazioni di alto valore dove i fallimenti di processo comportano un rischio finanziario maggiore. Perché è importante Fornisce il peso finanziario del Dove trovare Tabella SAP BKPF o BSEG campo WRBTR Esempi 1500.00250.5010000.00 | |||
| Motivo Blocco Pagamento PaymentBlockReason | Il codice che indica il motivo per cui una fattura è bloccata per il pagamento. | ||
| Descrizione Questo attributo contiene il codice motivo specifico applicato a una fattura che impedisce al ciclo di pagamento automatico di prelevarla. Gli esempi includono 'A' per Bloccato per Pagamento, 'R' per Verifica Fattura, o blocchi manuali impostati dagli utenti. Nell'analisi, questo campo è il driver principale per il dashboard Analisi Blocchi di Pagamento Manuali. Aggregando la frequenza dei diversi motivi di blocco, l'organizzazione può diagnosticare problemi sistemici, come frequenti varianze di prezzo o ricevute merce mancanti, che stanno bloccando il processo di pagamento. Perché è importante Identifica la causa specifica delle interruzioni di processo, abilitando un'analisi mirata delle cause radice. Dove trovare Tabella SAP BSEG campo ZLSPR Esempi ABR„ | |||
| Nome Utente UserName | L'ID dell'utente che ha eseguito l'attività specifica. | ||
| Descrizione Il Nome Utente cattura l'ID di accesso della persona o dell'agente di sistema responsabile dell'esecuzione di un passaggio di processo. Questo potrebbe essere un utente manuale che inserisce dati o un ID di job in background (ad esempio, 'BATCH_USER') che esegue attività automatizzate. Nell'analisi, questo attributo consente il calcolo del Tasso di Automazione delle Attività. Distinguendo tra utenti umani e account di sistema, gli analisti possono misurare il livello di automazione nel processo. Viene anche utilizzato nel dashboard Distribuzione Punti di Contatto Manuali per valutare il carico di lavoro tra i team. Perché è importante Distingue tra lavoro manuale e automatizzato, abilitando il calcolo dei tassi di automazione. Dove trovare Tabella SAP BKPF campo USNAM o tabella CDHDR campo USERNAME Esempi BSMITHWF-BATCHRJONES | |||
| Numero del fornitore VendorNumber | L'identificatore unico per il fornitore associato alla fattura. | ||
| Descrizione Il Numero Fornitore corrisponde allo specifico conto creditore nel sottoconto SAP. Collega la fattura ai dati anagrafici contenenti termini di pagamento, dettagli bancari e informazioni di contatto. In S/4HANA, questo è spesso collegato al concetto di Business Partner ma mantiene il nome del campo legacy LIFNR in molte tabelle. Nell'analisi, questo attributo è fondamentale per il dashboard Conformità Termini di Pagamento Fornitore. Permette agli analisti di aggregare le performance di processo per fornitore, identificando fornitori specifici che causano costantemente blocchi, varianze di prezzo o ritardi. Supporta le decisioni di sourcing strategico e la gestione delle relazioni con i fornitori. Perché è importante Consente l'aggregazione delle prestazioni per fornitore, critica per identificare le cause radice dei ritardi. Dove trovare Tabella SAP BKPF campo LIFNR o tabella ACDOCA campo LIFNR Esempi 100050VEND-US-99200400 | |||
| Termini di Pagamento PaymentTerms | La chiave che rappresenta le condizioni concordate per il pagamento e gli sconti. | ||
| Descrizione I Termini di Pagamento definiscono la scadenza di una fattura e se si applicano sconti per pagamento anticipato. Questo codice (ad esempio, 'Z001') si collega a regole come 'Netto 30' o '2% 10, Netto 30'. Viene copiato dall'Anagrafica Fornitore alla Fattura ma può essere modificato manualmente. Nell'analisi, questo attributo è fondamentale per i dashboard Ottimizzatore Sconti per Pagamento Anticipato e Conformità Termini di Pagamento Fornitore. Permette al sistema di calcolare la data di scadenza base e di identificare se il pagamento è stato effettuato entro la finestra ottimale per ottenere risparmi. Perché è importante Detta la tempistica prevista e gli incentivi finanziari, chiave per l'analisi degli sconti. Dove trovare Tabella SAP BSEG campo ZTERM Esempi Z001NT300001 | |||
| Tipo Documento DocumentType | Classifica il documento contabile (ad es. Fattura Fornitore, Pagamento, Nota di Credito). | ||
| Descrizione Il Tipo Documento è un codice a due caratteri in SAP che classifica la transazione contabile. I tipi comuni includono 'KR' per Fatture Fornitori, 'KZ' per Pagamenti Fornitori e 'RE' per Ricevuta Fattura Lorda. Dettaglia l'intervallo di numerazione e lo stato dei campi del documento. Nell'analisi, questo attributo viene utilizzato per filtrare lo scope del processo. Ad esempio, un analista potrebbe voler escludere le Note di Credito per concentrarsi esclusivamente sull'efficienza dei pagamenti in uscita. Aiuta anche a identificare il mix di tipi di transazione elaborati e supporta il dashboard Complessità Variante di Processo. Perché è importante Categorizza il Dove trovare Tabella SAP BKPF campo BLART Esempi KRREKZKG | |||
| Anno Fiscale FiscalYear | L'anno finanziario a cui appartiene la fattura. | ||
| Descrizione L'Anno Fiscale è un periodo di tempo utilizzato per il reporting finanziario. Insieme al Codice Società e al Numero Documento, forma la chiave primaria composita per un documento finanziario in SAP. Nell'analisi, questa è una necessità tecnica per identificare univocamente i casi, ma supporta anche il reporting anno su anno. Garantisce che il 'Numero Fattura' Case ID rimanga unico per decenni di storia dei dati. Perché è importante Requisito tecnico per l'identificazione unica dei casi in SAP FI. Dove trovare Tabella SAP BKPF campo GJAHR Esempi 20232024 | |||
| Baseline Date BaselineDate | La data dalla quale si applicano i termini di pagamento e si calcolano le date di scadenza. | ||
| Descrizione La Data Base è il punto di partenza per il calcolo della data di scadenza netta e dei periodi di sconto cassa. Di solito è la data della fattura o la data di registrazione, a seconda della configurazione e dei dati anagrafici del fornitore. Nell'analisi, questa data è un prerequisito tecnico per il calcolo dello stato 'È in ritardo'. Errori nella data base spesso portano a pagamenti prematuri (impatto sul flusso di cassa) o a pagamenti in ritardo (impatto sulle penali). La verifica dell'accuratezza di questa data fa parte dell'analisi della Conformità Termini di Pagamento Fornitore. Perché è importante È il punto di ancoraggio per tutti i calcoli delle date di scadenza. Dove trovare Tabella SAP BSEG campo ZFBDT Esempi 2023-10-012023-10-15 | |||
| Documento d'Acquisto PurchasingDocument | Il numero dell'ordine di acquisto associato alla fattura. | ||
| Descrizione Questo attributo collega la fattura al processo di approvvigionamento a monte. Contiene il numero dell'Ordine di Acquisto (OA) rispetto al quale la fattura viene abbinata. Non tutte le fatture (ad esempio, spese varie) avranno un riferimento a un OA. Nell'analisi, questo campo è vitale per l'Analisi del Tasso di Riconciliazione a Tre Vie. Permette agli analisti di separare le fatture con OA dalle fatture senza OA, che tipicamente hanno workflow di approvazione molto diversi. Facilita inoltre il Process Mining end-to-end collegando i dati dei Conti Fornitori con i dati degli Approvvigionamenti. Perché è importante Collega il Ciclo Passivo all'Approvvigionamento, abilitando l'analisi della riconciliazione a 3 vie e l'estensione del processo. Dove trovare Tabella SAP BSEG campo EBELN Esempi 45000012344500009876 | |||
| Giorni Sconto Cassa 1 CashDiscountDays1 | Il numero di giorni dalla data base durante i quali è disponibile il primo sconto cassa. | ||
| Descrizione Questo attributo definisce la finestra temporale per i termini di pagamento più favorevoli (ad esempio, '10' in '2% 10, Netto 30'). Deriva dai termini memorizzati nella voce della fattura. Nell'analisi, questo aiuta a determinare la 'Data Target' per l'Ottimizzatore Sconti per Pagamento Anticipato. Se la fattura viene compensata entro questa finestra, lo sconto viene realizzato. Questo campo aiuta a misurare il costo opportunità dei cicli di elaborazione lenti. Perché è importante Definisce la finestra di opportunità per i risparmi finanziari. Dove trovare Tabella SAP BSEG campo ZBD1T Esempi 10140 | |||
| Importo Sconto Perso DiscountLostAmount | Il valore monetario degli sconti cassa disponibili ma non sfruttati. | ||
| Descrizione Questo attributo calcolato rappresenta il 'denaro lasciato sul tavolo'. È derivato verificando se il pagamento è stato effettuato dopo la scadenza dello sconto e, in tal caso, calcolando il valore della percentuale di sconto persa applicata all'importo della fattura. Nell'analisi, questa è una metrica finanziaria critica per l'Ottimizzatore Sconti per Pagamento Anticipato. Quantifica il costo dell'inefficienza in valuta forte, fornendo un business case convincente per il miglioramento dei processi. Perché è importante Quantifica la perdita finanziaria diretta dovuta ai ritardi di processo. Dove trovare Calcolato: Se Data di Compensazione > Data Sconto, allora Importo Fattura * % Sconto Esempi 30.000.00150.00 | |||
| Percentuale Sconto Cassa 1 CashDiscountPercentage1 | La percentuale di sconto disponibile se pagato entro il primo periodo di sconto. | ||
| Descrizione Questo attributo rappresenta il tasso di incentivo finanziario offerto dal fornitore per il pagamento anticipato (ad esempio, '2' in '2% 10'). Nell'analisi, questo viene utilizzato per calcolare il valore del 'Sconto Cassa Potenziale'. Moltiplicando questa percentuale per l'Importo Fattura, i dashboard possono visualizzare il denaro totale perso a causa delle inefficienze di processo, supportando il business case per l'automazione. Perché è importante Quantifica il potenziale tasso di risparmio, essenziale per i calcoli del ROI. Dove trovare Tabella SAP BSEG campo ZBD1P Esempi 2.03.00.0 | |||
| Valuta Currency | Il codice valuta associato all'importo della fattura. | ||
| Descrizione L'attributo Valuta specifica la denominazione dell'Importo Fattura, come USD, EUR o GBP. Permette la corretta interpretazione dei valori finanziari ed è essenziale quando si aggregano dati tra codici società internazionali. Nell'analisi, questo campo assicura che i KPI finanziari siano calcolati correttamente. Viene spesso utilizzato per normalizzare i valori in una valuta di reporting per i dashboard globali. Senza questo attributo, metriche aggregate come Spesa Totale o Valore Medio Fattura sarebbero prive di significato in un ambiente multi-valuta. Perché è importante Fornisce contesto per gli importi finanziari, essenziale per una Dove trovare Tabella SAP BKPF campo WAERS Esempi USDEURGBPJPY | |||
Attività di Elaborazione dei Pagamenti dei Conti Fornitori
| Activity | Descrizione | ||
|---|---|---|---|
| Blocco Pagamento Applicato | Indica che è stato impostato un blocco di pagamento sulla voce della fattura, impedendone l'inclusione nel ciclo di pagamento. Questo viene rilevato monitorando le modifiche al campo ZLSPR nella tabella BSEG tramite i documenti di modifica. | ||
| Perché è importante I blocchi sono la causa principale dei pagamenti in ritardo e dell'attrito nei processi, influenzando direttamente la Dove trovare Tabelle CDPOS e CDHDR (Documenti di Modifica), cercando aggiornamenti al campo Acquisisci Registrato quando i record CDPOS cambiano in Tipo di evento explicit | |||
| Blocco Pagamento Rimosso | Indica che un blocco di pagamento precedentemente applicato è stato rimosso, rilasciando di fatto la fattura per il pagamento. Ciò viene identificato quando il campo `ZLSPR` in BSEG cambia da un valore a `null` o vuoto. | ||
| Perché è importante Spesso funge da Dove trovare Tabelle CDPOS e CDHDR, cercando Acquisisci Registrato quando i record CDPOS rimuovono Tipo di evento explicit | |||
| Documento di Pagamento Creato | La generazione del documento contabile che accredita la banca e addebita il fornitore. Questo si trova in BKPF con un tipo di documento di pagamento (es. ZP, KZ). | ||
| Perché è importante La realizzazione finanziaria del pagamento, utilizzata per calcolare i Giorni Debiti Verso Fornitori (DPO). Dove trovare Tabella BKPF, filtrata per Tipo Documento ( Acquisisci Registrato quando il doc. di pagamento BKPF è creato Tipo di evento explicit | |||
| Esecuzione Ciclo Pagamenti | Rappresenta l'esecuzione del ciclo di pagamento in cui vengono generate le istruzioni di trasferimento di denaro. Questo è tracciato tramite l'aggiornamento dello stato nelle tabelle REGUH o REGUP. | ||
| Perché è importante L'impegno operativo al pagamento, fondamentale per analizzare l'efficienza del processo di raggruppamento dei pagamenti. Dove trovare Tabella REGUH, tipicamente correlata alla data e all'identificazione dell'esecuzione. Acquisisci Registrato quando lo stato di Esecuzione Pagamento si aggiorna Tipo di evento explicit | |||
| Fattura Registrata | Rappresenta la registrazione ufficiale della passività nel Libro Mastro. Questa attività è derivata dal timestamp di creazione nella tabella BKPF o dalla data di inserimento nella tabella ACDOCA. | ||
| Perché è importante Questo è il punto di partenza principale per la timeline finanziaria, che stabilisce la base per le date di scadenza e l'analisi dell'invecchiamento. Dove trovare Tabella BKPF, utilizzando Acquisisci Registrato quando il record BKPF è creato Tipo di evento explicit | |||
| Pagamento Liquidato | Contrassegna la riconciliazione finale dove la partita aperta nel conto fornitore viene compensata con il pagamento. Acquisito dal campo `AUGDT` (Data di Compensazione) nella tabella BSEG. | ||
| Perché è importante Lo stato finale del processo, che indica che il ciclo di vita è completo e i conti sono in equilibrio. Alti tassi di compensazione manuale indicano inefficienze nella riconciliazione. Dove trovare Tabella BSEG, campo Acquisisci Registrato quando il campo Tipo di evento explicit | |||
| Condizioni di Pagamento Modificate | Registra un aggiornamento dei termini di pagamento su una fattura aperta, che modifica la data di scadenza o l'idoneità allo sconto. Questo viene tracciato tramite i change log sul campo ZTERM nella tabella BSEG. | ||
| Perché è importante Frequenti modifiche suggeriscono errori nei Dove trovare Tabelle CDPOS e CDHDR, cercando aggiornamenti al campo Acquisisci Registrato quando i record CDPOS cambiano in Tipo di evento explicit | |||
| Fattura in Scadenza | Un `timestamp` calcolato che rappresenta il momento in cui la fattura ha raggiunto la sua data di scadenza netta. Questo è derivato aggiungendo i giorni delle condizioni di pagamento alla `baseline date` trovata nella tabella BSEG. | ||
| Perché è importante Funge da punto di riferimento per le prestazioni di pagamento puntuale e il Dove trovare Calcolato: Acquisisci Derivare confrontando la data corrente con la Data di Scadenza Netta Tipo di evento calculated | |||
| Fattura Parcheggiata | Indica che una fattura è stata inserita in SAP ma non ancora registrata nel Conto Co.Ge., spesso utilizzata per l'inserimento `data` preliminare. Questo viene acquisito esplicitamente dalla tabella VBKPF o identificando documenti in BKPF con un codice di stato `parcheggiato` prima che passino a `registrato`. | ||
| Perché è importante La fase di registrazione preliminare indica l'inizio dell'inserimento dati e aiuta a misurare il tempo di latenza tra la ricezione e l'obbligazione finanziaria. Dove trovare Tabella VBKPF per i dati di intestazione dei documenti parcheggiati o BKPF con stato documento specifico (BSTAT = V). Acquisisci Registrato quando la voce VBKPF è creata Tipo di evento explicit | |||
| Fattura Stornata | Indica che il documento di fattura è stato stornato o annullato. Acquisito controllando il campo `STBLG` (Documento di Storno) nella tabella BKPF. | ||
| Perché è importante Rappresenta rilavorazioni e fallimenti di processo, identificando sprechi e potenziale sforzo duplicato. Dove trovare Tabella BKPF, campo Acquisisci Registrato quando il campo Tipo di evento explicit | |||
| Proposta di Pagamento Creata | Indica che la fattura è stata inclusa in un ciclo di proposta di pagamento (F110), il primo passaggio del programma di pagamento automatizzato. Acquisito dalla tabella REGUH che memorizza i dati di liquidazione. | ||
| Perché è importante Indica che la fattura è stata selezionata per il pagamento e ha superato i controlli di validazione all'interno del programma di pagamento. Dove trovare Timestamp di creazione della tabella REGUH (chiavi LAUFD e LAUFI). Acquisisci Registrato quando il record REGUH è creato Tipo di evento explicit | |||
| Sconto Cassa Perso | Un `evento` calcolato che indica la data di scadenza dell'eleggibilità per uno sconto cassa. Derivato confrontando la data di scadenza dello sconto con la data corrente o la data di pagamento. | ||
| Perché è importante Essenziale per l' Dove trovare Calcolato: Acquisisci Derivare confrontando la data con la Data di Scadenza Sconto Tipo di evento calculated | |||
| Varianza di Prezzo Rilevata | Attività inferita che indica una discrepanza tra il prezzo della fattura e il prezzo dell'ordine di acquisto. Questo è derivato osservando una specifica Chiave di Blocco Pagamento (tipicamente 'R' per Verifica Fattura) applicata automaticamente alla registrazione. | ||
| Perché è importante Identifica le cause radice delle rilavorazioni manuali e supporta l'Analisi del Tasso di Riconciliazione a Tre Vie. Dove trovare Inferito dal valore Acquisisci Confrontare il valore Tipo di evento inferred | |||
| Varianza di Quantità Rilevata | Attività inferita che indica una discrepanza tra la quantità fatturata e la quantità ricevuta della merce. Questo è derivato osservando una specifica Chiave di Blocco Pagamento (tipicamente 'M' per Varianza Quantità) applicata alla riga. | ||
| Perché è importante Cruciale per analizzare l'efficienza della riconciliazione e la qualità dei Dove trovare Inferito dal valore Acquisisci Confrontare il valore Tipo di evento inferred | |||
Guide all'Estrazione
Fasi
Identificare le viste CDS richieste: Confermare la disponibilità delle viste CDS standard di SAP S/4HANA. Le viste primarie richieste sono
I_JournalEntry(Header),I_OperationalAcctgDocItem(Items/equivalente BSEG),I_SupplierInvoice(Logistics),I_PaymentProposalItem(F110) eI_ChangeDocument(for logs).Configurare le autorizzazioni utente: Assicurarsi che l'utente del
databaseo l'utente del servizio tecnico disponga dei privilegiSELECTsulle viste SQL DDL associate alle entità CDS. Questo è tipicamente gestito tramite SAP HANA Studio o gli ABAP Eclipse Development Tools (ADT).Preparare l'ambiente SQL: Aprire la Sua interfaccia SQL (ad es. SAP HANA Studio, DBeaver connesso a HANA, o un connettore Process Mining che accetta SQL). Questo metodo presuppone l'accesso SQL diretto allo strato HANA dove le viste CDS sono esposte come viste.
Definire l'ambito: Determinare il Codice Società (
CompanyCode) e l'intervallo dell'Anno Fiscale per limitare il volume deidata. Questo è cruciale per le prestazioni durante l'interrogazione della vistaOperational Accounting Document Item.Implementare la logica delle attività: Copiare la query SQL fornita di seguito. Questa query utilizza
UNION ALLper combinare 14 blocchi logici distinti in un'unica struttura dievent log. Ogni blocco mira a un'attività specifica (ad es., Fattura Registrata, Pagamento Compensato).Gestire i documenti di modifica: La query include sezioni per le modifiche delle condizioni di pagamento e la manipolazione dei blocchi. Queste si basano sulla vista
I_ChangeDocument. Se questa vista non è attiva nella Sua specificareleaseS/4, potrebbe essere necessario racchiudere le tabelle sottostanti (CDHDR/CDPOS) in una vista CDS personalizzata.Gestire gli
eventicalcolati: Esaminare la logica perInvoice DueeCash Discount Lost. Questi sonoeventicalcolati generati aggiungendo giorni allabaseline datetrovata nella vista degli elementi operativi.Eseguire l'estrazione: Eseguire la query. Per
datasetdi grandi dimensioni, è altamente raccomandato partizionare l'estrazione per Anno Fiscale o Codice Società per evitarememory overflows.Verificare i formati data: Assicurarsi che la colonna
EventTimesia formattata come YYYY-MM-DD HH:MM:SS. SAP HANA SQL restituiscetimestampche potrebbero richiedere uncastinga seconda della Sua applicazione di destinazione.Esportare i
data: Salvare ilresult setcome file CSV o Parquet. Assicurarsi che le intestazioni corrispondano alle colonne definite nell'istruzioneSELECTfinale.Trasformare per il caricamento: Se il Suo strumento di Process Mining richiede un formato CSV specifico (ad es. mascheramento data specifico), applicare queste trasformazioni in uno
scriptdipost-processingo all'interno dell'SQL utilizzando le funzioniTO_VARCHAR.Validazione finale: Caricare un campione in ProcessMind e verificare che il
Case ID(Numero Fattura) raggruppi correttamente tutte le attività dalla registrazione alla compensazione.
Configurazione
- Filtro per codice società: Limitare la query a unità organizzative specifiche (
CompanyCode= '1000') per mantenere contesto e prestazioni. - Intervallo di date: Applicare un filtro su
PostingDateoCreationDate(ad es. ultimi 12 mesi) per gestire il volume deidata. - Tipo di conto: Filtrare
I_OperationalAcctgDocItemperFinancialAccountType= 'K' (Fornitore) per escludere le righe di Conto Co.Ge. e Cliente. - Attivazione vista CDS: Assicurarsi che le viste
I_JournalEntry,I_OperationalAcctgDocItemeI_PaymentProposalItemsiano attive e rilasciate per l'accesso SQL. - Prestazioni log delle modifiche: L'interrogazione di
I_ChangeDocumentpuò essere intensiva in termini di risorse. Limitare queste sotto-query perObjectClass'BELEG' e nomi di campo specifici comeZLSPReZTERM.
a Query di Esempio sql
/* SAP S/4HANA CDS View Extraction for Accounts Payable */
/* Combined Event Log Query */
/* 1. Invoice Parked */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Parked' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JE.CreationDateTime > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
'False' AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K' -- Vendor
AND JE.AccountingDocumentCategory = 'V' -- Parked Document
UNION ALL
/* 2. Invoice Posted */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Posted' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
'False' AS IsLatePayment,
CASE WHEN JE.CreatedByUser = 'BATCH_USER' THEN 'True' ELSE 'False' END AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.AccountingDocumentCategory <> 'V' -- Exclude Parked
UNION ALL
/* 3. Price Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Price Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'R' -- Standard SAP Price Variance Block Key
UNION ALL
/* 4. Quantity Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Quantity Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'M' -- Standard SAP Quantity Variance Block Key
UNION ALL
/* 5. Payment Block Applied (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Applied' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
CD.NewValue AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NULL AND CD.NewValue IS NOT NULL
UNION ALL
/* 6. Payment Block Removed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Removed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NOT NULL AND (CD.NewValue IS NULL OR CD.NewValue = '')
UNION ALL
/* 7. Payment Terms Changed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Terms Changed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
CD.NewValue AS PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZTERM'
UNION ALL
/* 8. Invoice Due (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Due' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) < CURRENT_DATE
UNION ALL
/* 9. Cash Discount Lost (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Cash Discount Lost' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.CashDiscount1Days > 0
AND (JEItem.ClearingDate IS NULL OR JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days)))
UNION ALL
/* 10. Payment Proposal Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Proposal Created' AS Activity,
PPI.ProposalRunDate AS EventTime, -- Often just a date, cast to timestamp if needed
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
AND PPI.FiscalYear = JE.FiscalYear
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JEItem.FinancialAccountType = 'K'
UNION ALL
/* 11. Payment Run Executed */
/* Derived from existence in payment tables with a run ID */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Run Executed' AS Activity,
PPI.PaymentRunDate AS EventTime,
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
WHERE PPI.PaymentRunID IS NOT NULL
UNION ALL
/* 12. Payment Document Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Document Created' AS Activity,
PayJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
PayJE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PayJE.CreatedByUser AS UserName,
PayJE.PostingDate AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS PayJE
ON JEItem.ClearingJournalEntry = PayJE.AccountingDocument
AND JEItem.ClearingJournalEntryFiscalYear = PayJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingJournalEntry IS NOT NULL
UNION ALL
/* 13. Payment Cleared */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Cleared' AS Activity,
TO_TIMESTAMP(JEItem.ClearingDate) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
JEItem.ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingDate IS NOT NULL
UNION ALL
/* 14. Invoice Reversed */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Reversed' AS Activity,
RevJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
RevJE.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS RevJE
ON JE.ReverseDocument = RevJE.AccountingDocument
AND JE.ReverseDocumentFiscalYear = RevJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.ReverseDocument IS NOT NULL Fasi
Identificare le viste CDS richieste: Confermare la disponibilità delle viste CDS standard di SAP S/4HANA. Le viste primarie richieste sono
I_JournalEntry(Header),I_OperationalAcctgDocItem(Items/equivalente BSEG),I_SupplierInvoice(Logistics),I_PaymentProposalItem(F110) eI_ChangeDocument(for logs).Configurare le autorizzazioni utente: Assicurarsi che l'utente del
databaseo l'utente del servizio tecnico disponga dei privilegiSELECTsulle viste SQL DDL associate alle entità CDS. Questo è tipicamente gestito tramite SAP HANA Studio o gli ABAP Eclipse Development Tools (ADT).Preparare l'ambiente SQL: Aprire la Sua interfaccia SQL (ad es. SAP HANA Studio, DBeaver connesso a HANA, o un connettore Process Mining che accetta SQL). Questo metodo presuppone l'accesso SQL diretto allo strato HANA dove le viste CDS sono esposte come viste.
Definire l'ambito: Determinare il Codice Società (
CompanyCode) e l'intervallo dell'Anno Fiscale per limitare il volume deidata. Questo è cruciale per le prestazioni durante l'interrogazione della vistaOperational Accounting Document Item.Implementare la logica delle attività: Copiare la query SQL fornita di seguito. Questa query utilizza
UNION ALLper combinare 14 blocchi logici distinti in un'unica struttura dievent log. Ogni blocco mira a un'attività specifica (ad es., Fattura Registrata, Pagamento Compensato).Gestire i documenti di modifica: La query include sezioni per le modifiche delle condizioni di pagamento e la manipolazione dei blocchi. Queste si basano sulla vista
I_ChangeDocument. Se questa vista non è attiva nella Sua specificareleaseS/4, potrebbe essere necessario racchiudere le tabelle sottostanti (CDHDR/CDPOS) in una vista CDS personalizzata.Gestire gli
eventicalcolati: Esaminare la logica perInvoice DueeCash Discount Lost. Questi sonoeventicalcolati generati aggiungendo giorni allabaseline datetrovata nella vista degli elementi operativi.Eseguire l'estrazione: Eseguire la query. Per
datasetdi grandi dimensioni, è altamente raccomandato partizionare l'estrazione per Anno Fiscale o Codice Società per evitarememory overflows.Verificare i formati data: Assicurarsi che la colonna
EventTimesia formattata come YYYY-MM-DD HH:MM:SS. SAP HANA SQL restituiscetimestampche potrebbero richiedere uncastinga seconda della Sua applicazione di destinazione.Esportare i
data: Salvare ilresult setcome file CSV o Parquet. Assicurarsi che le intestazioni corrispondano alle colonne definite nell'istruzioneSELECTfinale.Trasformare per il caricamento: Se il Suo strumento di Process Mining richiede un formato CSV specifico (ad es. mascheramento data specifico), applicare queste trasformazioni in uno
scriptdipost-processingo all'interno dell'SQL utilizzando le funzioniTO_VARCHAR.Validazione finale: Caricare un campione in ProcessMind e verificare che il
Case ID(Numero Fattura) raggruppi correttamente tutte le attività dalla registrazione alla compensazione.
Configurazione
- Filtro per codice società: Limitare la query a unità organizzative specifiche (
CompanyCode= '1000') per mantenere contesto e prestazioni. - Intervallo di date: Applicare un filtro su
PostingDateoCreationDate(ad es. ultimi 12 mesi) per gestire il volume deidata. - Tipo di conto: Filtrare
I_OperationalAcctgDocItemperFinancialAccountType= 'K' (Fornitore) per escludere le righe di Conto Co.Ge. e Cliente. - Attivazione vista CDS: Assicurarsi che le viste
I_JournalEntry,I_OperationalAcctgDocItemeI_PaymentProposalItemsiano attive e rilasciate per l'accesso SQL. - Prestazioni log delle modifiche: L'interrogazione di
I_ChangeDocumentpuò essere intensiva in termini di risorse. Limitare queste sotto-query perObjectClass'BELEG' e nomi di campo specifici comeZLSPReZTERM.
a Query di Esempio sql
/* SAP S/4HANA CDS View Extraction for Accounts Payable */
/* Combined Event Log Query */
/* 1. Invoice Parked */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Parked' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JE.CreationDateTime > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
'False' AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K' -- Vendor
AND JE.AccountingDocumentCategory = 'V' -- Parked Document
UNION ALL
/* 2. Invoice Posted */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Posted' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
'False' AS IsLatePayment,
CASE WHEN JE.CreatedByUser = 'BATCH_USER' THEN 'True' ELSE 'False' END AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.AccountingDocumentCategory <> 'V' -- Exclude Parked
UNION ALL
/* 3. Price Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Price Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'R' -- Standard SAP Price Variance Block Key
UNION ALL
/* 4. Quantity Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Quantity Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'M' -- Standard SAP Quantity Variance Block Key
UNION ALL
/* 5. Payment Block Applied (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Applied' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
CD.NewValue AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NULL AND CD.NewValue IS NOT NULL
UNION ALL
/* 6. Payment Block Removed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Removed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NOT NULL AND (CD.NewValue IS NULL OR CD.NewValue = '')
UNION ALL
/* 7. Payment Terms Changed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Terms Changed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
CD.NewValue AS PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZTERM'
UNION ALL
/* 8. Invoice Due (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Due' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) < CURRENT_DATE
UNION ALL
/* 9. Cash Discount Lost (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Cash Discount Lost' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.CashDiscount1Days > 0
AND (JEItem.ClearingDate IS NULL OR JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days)))
UNION ALL
/* 10. Payment Proposal Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Proposal Created' AS Activity,
PPI.ProposalRunDate AS EventTime, -- Often just a date, cast to timestamp if needed
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
AND PPI.FiscalYear = JE.FiscalYear
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JEItem.FinancialAccountType = 'K'
UNION ALL
/* 11. Payment Run Executed */
/* Derived from existence in payment tables with a run ID */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Run Executed' AS Activity,
PPI.PaymentRunDate AS EventTime,
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
WHERE PPI.PaymentRunID IS NOT NULL
UNION ALL
/* 12. Payment Document Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Document Created' AS Activity,
PayJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
PayJE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PayJE.CreatedByUser AS UserName,
PayJE.PostingDate AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS PayJE
ON JEItem.ClearingJournalEntry = PayJE.AccountingDocument
AND JEItem.ClearingJournalEntryFiscalYear = PayJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingJournalEntry IS NOT NULL
UNION ALL
/* 13. Payment Cleared */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Cleared' AS Activity,
TO_TIMESTAMP(JEItem.ClearingDate) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
JEItem.ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingDate IS NOT NULL
UNION ALL
/* 14. Invoice Reversed */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Reversed' AS Activity,
RevJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
RevJE.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS RevJE
ON JE.ReverseDocument = RevJE.AccountingDocument
AND JE.ReverseDocumentFiscalYear = RevJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.ReverseDocument IS NOT NULL