Le sequenze numeriche: alternativa ai numeri di serie?

Salve lettore, in questo articolo voglio parlarti di una seconda possibilità di creare record con sequenze numeriche senza passare dalla tabella “No. Series”.

In passato, quando si voleva inserire un numero sequenziale veniva utilizzata la tabella “No. Series” impostando un codice di numeratore e poi da codice occorreva gestire la creazione sequenziale tramite le funzioni messe a disposizione dalla codeunit 396 “NoSeriesManagement” ad esempio utilizzando la funzione GetNextNo.

Dalla versione di Microsoft Business Central 2019 wave 2, è possibile utilizzare le sequenze numeriche. Esse sono basate sulle sequenze numeriche di SQL, il che significa che non sono associate a nessuna tabella.

Le sequenze numeriche vengono generate in ordine crescente ad intervalli predefiniti. Non c’è nessun meccanismo di sequenzialità obbligatoria sui numeri; questo significa che, se per qualche motivo, dopo aver staccato un nuovo numero della sequenza numerica, viene emesso un errore dal sistema, quando si richiamerà la generazione della sequenza in un momento successivo, il numero non sarà quello ottenuto al momento dell’errore, ma sarà il numero successivo, causando un “buco” nella numerazione.

Vediamo, meglio, con un esempio di che cosa si tratta. Supponiamo di avere una tabella con un campo di tipo Integer “Number Sequence Id” che è l’ID della sequenza numerica e una descrizione di tipo Text[100].

Creiamo poi una page di tipo lista per la tabella e aggiungiamo due action. Una che prevede l’inserimento di 5 record e una che prevede l’inserimento di 5 record, ma con un errore per testarne il comportamento.

Analizziamo la prima action, essa chiama la funzione InsertFiveRecord della codeunit “Number Series Test DZ”. Vediamo che per creare la serie numerica ho creato la funzione CreateNumberSequence al cui interno ha la creazione della sequenza numerica tramite il comando:

NumberSequence.Insert(‘TestDZ’, 0, 1, true)

Dove ‘TestDZ’ è il nome della serie numerica; 0 rappresenta da che numero deve iniziare la sequenza; 1 è lo step della sequenza e l’ultimo parametro indica se la sequenza è per società oppure no.

Se clicchiamo sulla action vedremo che il sistema avrà creato 5 record che partono dall’ID = 0 come indicato nel comando per la creazione della sequenza numerica.

Analizziamo, ora, la funzione che genera un errore: semplicemente al terzo loop del ciclo FOR ho emesso un errore con rollback.

Se poi tentiamo di ri-eseguire l’inserimento dei 5 record vediamo che la sequenza riparte da 8 perché era stata utilizzata per gli indici 5-6-7, l’errore ha fatto rollback dell’applicazione e l’utilizzo successivo della sequenza numerica ha fatto sì che essa riparta dall’indice 8.

Questo a dimostrazione che le sequenze numeriche sono utili per tutti quei casi che si vogliono aumentare le prestazioni perché non ci sono locktable come potrebbe essere utilizzando i numeri di serie classici; però hanno lo svantaggio che se la numerazione deve essere consequenziale (ad esempio per le fatture di vendita registrate) questa tecnica non può essere utilizzata, ma occorre passare sempre dai numeri di serie classici.

Le funzioni dei NumberSequence sono:

Nome metodo

Descrizione

[Insert(String, BigInteger][, BigInteger], [Boolean])

Crea la sequenza numerica coi parametri indicati.

Exists(String[, Boolean])

Controlla l’esistenza della sequenza numerica.

Delete(String[, Boolean])

Cancella la sequenza numerica

Next(String[, Boolean])

Restituisce il valore successive della sequenza numerica.

Current(String[, Boolean])

Restituisce il valore corrente della sequenza numerica.

Spero che questo articolo ti abbia dato delle nozioni aggiuntive sull’utilizzo delle sequenze numeriche; inoltre se vuoi approfondire che cos’è una sequenza numerica di SQL, a questo link puoi trovare la documentazione appropriata.

Lascia una risposta