La gestione partite è stata sviluppata a layer così da isolare ciò che è l’elaborazione vera e propria delle partite da ciò che è la rappresentazione visuale più sensibile di personalizzazione cliente.

Pre Elaborazione

Il motore analizza i movimenti contabili del soggetto con una precisa priorità di tipo documento:

1.       Invoice

2.       Credit Memo

3.       Blank

4.       Payment

5.       Dishonored

6.       Refund

Per ogni movimento si analizzano I movimenti dettagliati per comprendere il collegamento tra le partite gestendo anche i collegamenti relativi alle esposizioni RIBA.

Nei movimenti dettagliati viene applicata anche una rigenerazione degli stessi per sopperire ai problemi di “importo applicato” nel caso di collegamento molti a molti.

Il termine della elaborazione di questi movimenti confluisce in un buffer “Assets Detail” temporaneo:

In questo esempio le prime tre righe si possono leggere come “il movimento 2430 (fattura 00-1) è una partita principale ed è chiuso da due movimenti 2584, 2586 e 2588 di tipo pagamento. L’intero blocco ha il flag “Aperto” a falso segno che la partita è chiusa.

Il dettaglio generato viene riconfrontato (Funzione “ProcessCustomerAssetsMerge” per i clienti) con i movimenti contabili al fine di garantire la correttezza dei saldi anche in caso di errore di analisi o dei movimenti.

Questo punto è particolarmente importante:

Qualora per un errore di analisi o nei dati un movimenti contabile avesse, ad esempio, un saldo 1000 euro mentre secondo le partite fosse solo 900, il motore inserirebbe automaticamente un movimento di dettaglio per 100 euro al fine di far quadrare il saldo della partita principale (che nella rappresentazione ad albero è il livello 2). Le partite principali hanno sempre, by design, il valore corretto.

Generazione struttura ad albero

Per semplificare la generazione di un dettaglio visivamente chiaro il dettaglio generato precedentemente viene rielaborato in una struttura ad albero definito così:

1.       Partita principale, che generalmente intende la fattura o qualsiasi movimenti con un residuo

2.       Rata

3.       Movimento collegato, che chiude completamente o parzialmente la rata

4.       Informazione del movimento insoluto nel caso il livello 3 sia una riba tornata non pagata.

Durante questa fase vengono valorizzati anche tutti i campi relativi alle RIBA, eliminati i documenti chiusi e le rate con scadenza fuori dai filtri.

Il buffer generato, anch’esso temporaneo, è il seguente:

E’ immediato vedere che qualsiasi stampa che vuole mostrare il saldo delle rate gli basta filtrare per “Livello = 2” mentre se vuole mostrare anche i movimenti collegati gli basta filtrare per “Livello = 2..3”.

Ogni record di livello 2 è collegato al livello 1 tramite il campo “Node linked to”. Idem i livelli sotto e questo rende semplice identificare come sono collegati i vari record.

Debug

Per rendere più semplice il debug, sia da eventuali errori di analisi sia dei dati sono presente alcune funzionalità apposite.

Il primo problema è il debug di dettagli generati in modo “temporaneo” dalle procedure e quindi non persistente in tabella.

Sulla page sono presenti due action nascoste che possono essere portate a video andando in personalizzazione della page:

Il pulsante “Debug” fa si che il dettaglio di pre elaborazione venga salvato sulla tabella “Assets Detail” e quindi sia possibile analizzarlo facendo il run della tabella.

Il pulsante “Download Debug Excel” genera due documenti excel relativi al dettaglio di pre elaborazione e del buffer della page, visualizzando infine il download.

Nella tabella “Assets Detail” sono presenti due campi di debug:

Il primo campo è “ID Interno”. Esso è un valore che definisce quale è la procedura che ha inserito o modificato il record in analisi.

Nella prima funzione “GetCustomerAssets” quel campo è definito come il tipo documento in elaborazione:

Pertanto I è Fattura (Invoice), C è la nota di credito (Credit Memo), B (Blank), etc.

Ogni movimento principale causa l’inserimento delle partite di bilanciamento (i movimenti collegati).

Ad esempio se vediamo “1” possiamo cercare nella codeunit il testo ‘1’ e troveremo:

Che è la prima funzione di analisi dei movimenti dettagliati.

“P6” invece significa che il movimento è stato inserito durante l’elaborazione dei Paayments e successivamente è stato toccato dalla funzione “6” che corrisponde:

Che è la funzione che valorizza il campo “Partita collegata”.

Il secondo campo è “Debug Sequence” che è un numero progressivo di come sono stati inseriti i record in tabella. Questo fornisce un ordine “cronologico” di elaborazione e assieme al campo descritto in precedenza da una visione abbastanza chiara di come il modulo ha elaborato, prima di addentrarsi nel debug passo a passo.

Per aggiornare i programmi relativi alle partite clienti e fornitori gli oggetti da prendere, ed eventualmente mergiare, da platform sono i seguenti:

Type

ID

Name

Table

18004100

Assets Detail

Table

18004101

Assets Buffer

Report

18004137

NP Customer Aging

Report

18004138

NP Vendor Aging

Report

18004141

NP Vendor Aging (In Column)

Report

18004149

NP Customer Aging (In Column)

Report

18004255

NP Customer Statement

Report

18004256

NP Vendor Statement

Report

18004262

NP send fin. report to salesp.

Report

18004263

NP send fin. report to cust.

Codeunit

18004100

Assets Engine

Page

18004125

Assets Analysis

Query 18004100 Open CustLedgerEntry1
Query 18004101 Open CustLedgerEntry2
Query 18004102 Dishonored CustLedgerEntry3
Query 18004103 Open VendLedgerEntry1
Query 18004104 Open VendLedgerEntry2