Header widget area left
Header widget area right

Funzionalità della struttura dati

La struttura dati di X-Cross

La funzionalità operativa di un ERP nasce dalla qualità della struttura dati su cui è fondato.
Le modalità di interazione con il database, infatti, anche se invisibile per l’utente, è fondamentale per ottenere quelle caratteristiche (velocità operativa, facilità d’uso, flessibilità delle funzioni, ecc.) che vengono poi apprezzate nell’uso pratico.
L’utilizzo di CrossModel ha permesso di creare una struttura dati con un livello di sofisticazione che sarebbe stata impossibile da ottenere senza questo strumento.
Tutte le relazioni tra le tabelle vengono gestite automaticamente dal programma, in base ad uno schema della struttura memorizzato nel programma stesso, che crea o modifica il database automaticamente.

Foreign keys nel database

Le connessioni tra tabelle vengono memorizzate nel database per mezzo di foreign keys, che:

  • Se bloccanti, impediscono la cancellazione di un record che ha record figli (es. un cliente che ha fatture)
  • Se in cascata, cancellano le righe figlie insieme al record padre (es. le righe di un documento cancellando la testata)

Integrità referenziale

In questo modo viene garantita la cosiddetta integrità referenziale, ovvero la consistenza dei dati sul server, senza record “orfani”.

Impossibile integrità referenziale sul client

Solo le gestione delle foreign keys nel database può assicurare una integrità referenziale al 100%.
Qualunque controllo effettuato sul client, infatti, viene fatto in un tempo diverso rispetto alla cancellazione, e quindi non può garantire completamente la consistenza dei dati.

Manutenzione automatica delle struttura del database

La struttura dati di X-Cross è memorizzata direttamente nel programma.

In molti programmi, l’aggiornamento del database avviene per release sequenziali; ognuna di queste release apporta al database le modifiche necessarie, che presuppongono le release precedenti.
Questo non avviene in X-Cross.
Al rilascio di una nuova versione, X-Cross verifica automaticamente la compatibilità tra le struttura dati della nuova versione e la
struttura presente nel database, ed apporta automaticamente le modifiche necessarie, indipendentemente dalla versione precedente.
Questo elimina l’obbligo di installare in sequenza tutte le release che comportano una modifica della struttura dati, e si applica anche alle personalizzazioni del programma che prevedono una variazione o un’aggiunta della struttura dati.

Campi IDENTITY

Ogni record del database viene univocamente identificato con un campo numerico unico, generato automaticamente inserendo il record, denominato IDENTITY (abbreviato ID).
Una volta assegnato, questo campo non viene mai più modificato.
I collegamenti tra le tabelle utilizzano sempre questo campo; in questo modo, i collegamenti sono gestiti in maniera molto più sicura, rapida ed efficiente.
Questo permette inoltre la modifica di qualunque altro campo della tabella, inclusi i codici unici assegnati dall’utente, che non vengono mai utilizzati nei collegamenti.

Calcoli e procedure nel database

CrossModel offre un linguaggio di programmazione del database, CrossSQL, che genera automaticamente le procedure nel database.
Molte delle funzionalità del programma, grazie a CrossSQL, sono svolte direttamente nel database, migliorando contemporaneamente la velocità e la sicurezza delle operazioni.
Le operazioni di aggiornamento (ad esempio il ricalcolo delle giacenze inserendo un movimento di magazzino) vengono svolte utilizzando il linguaggio nativo del database, e sono legati al verificarsi di certi avvenimenti (inserimento, modifica o cancellazione di record), i cosiddetti “trigger”.
Questo, rispetto all’esecuzione delle procedure indiretto, da parte del computer connesso al database (client) consente una velocità operativa 100-200 volte superiore, e una sicurezza dei dati molto più elevata.

Aggiornamenti del database per transazioni

Gli aggiornamenti complessi del database, anche se riguardano più tabelle, vengono effettuati in un’unica transazione.
Questo significa che, se qualcosa non va a buon fine, tutta l’operazione viene annullata, come se non fosse mai stata eseguita.
Quindi se per qualche motivo il collegamento viene interrotto, o anche nel caso che lo stesso server di database vada in errore, la struttura dati non subisce alcun danno ed è anche internamente coerente; infatti gli aggiornamenti eseguiti sono “tutto o niente”, ovvero o tutto va a buon fine o il database non vien modificato per nulla, peraltro segnalando l’errore.

Integrità referenziale

I collegamenti tra le tabelle creano nel database le cosiddette “foreign keys”, per la massima sicurezza dei dati.
Ad esempio, una fattura è collegata ad un cliente, il quale non può essere cancellato se ha fatture presenti.
Una “foreign key” sulla tabella delle fatture impedisce la cancellazione del cliente se esso ha fatture presenti, senza possibilità di errore che invece si avrebbe se questo controlli fossero effettuati sul client.
Inoltre, le foreign key a cascata assicurano la cancellazione dei record figli ove necessario; ad esempio la cancellazione della testata di un documento ne cancella automaticamente tutte le righe.

Integrità referenziale su campi IDENTITY

L’integrità referenziale utilizza i campi di tipo IDENTITY già descritti.
In questo modo è possibile la modifica di qualunque campo del record padre (ad esempio il codic ea rticolo, il codice di una condizione di pagamento, ecc.) senza alcuna ripercussione sui collegamenti tra i record.

Struttura ad oggetti multilivello (OXRM)

I database sono strutturati in “tabelle”, ognuna delle quali contiene una tipologia di dati, le quali possono essere in relazione tra di loro (database relazionali).
Nella realtà, l’utente ha spesso a che fare con oggetti molto più complessi di questo, che comprendono varie tabelle, a livelli logici diversi.
Ad esempio, un documento (ordine, fattura, ecc.), è composto da varie tabelle (testate, righe, spese,ecc.), come possiamo vedere dall’immagine; dal punto di vista dell’utente, invece, abbiamo sempre a che fare con un unico documento.

In X-Cross questi oggetti complessi sono gestiti con una logica unitaria.

Essi sono letti, inseriti ed aggiornati in una unica operazione, anche su Internet.
Oltre a permettere una velocità operativa senza paragoni, questa funzionalità semplifica enormemente il compito dell’utente.
Tutto quello che riguarda l’oggetto sui cui si sta lavorando, infatti, si trova su una unica finestra (anche se i dati, volendo, possono essere visualizzati su finestra diverse, come vedremo più avanti), e viene aggiornato in una unica soluzione confermando l’inserimento dei dati.

Restrizioni alla modifica delle tabelle

Ogni utente può essere collegato ad una categoria di privilegi, che possono impedire la visualizzazione o la modifica di una tabella. Per ognuna di queste categorie e per ogni tabella, è possibile definire per l’utente la possibilità di:

  • Visualizzare i dati della tabella
  • Inserire nuovi record
  • Cancellare record
  • Modificare record
  • Modificare le chiavi di ricerca
  • Utilizzare i record obsoleti
  • Modificare o cancellare i record obsoleti

Formule di visualizzazione e modifica

La possibilità di apportare modifica alle tabelle può anche essere subordinata ad una formula di selezione; in questo modo l’utente ha la possibilità di apportare modifiche solo a record che soddisfano un certo criterio, ad esempio articoli di una certa categoria.

Filtro di visualizzazione

È anche possibile impostare un filtro aggiuntivo per la visualizzazione dei record.
Ad esempio è possibile impostare un filtro per cui un agente possa vedere solo i suoi clienti ed i suoi documenti (ordine, fatture, ecc.)

Modifica chiavi di ricerca

Ogni tabella ha una chiave numerica progressive (IDENTITY) che non viene mai modificata, e che viene utilizzata per i collegamenti tra le tabelle, ed una chiave esplicita di ricerca (ad esempio il codice articolo di magazzino)
La chiave esplicita di ricerca (codice), se presente, non viene utilizzata per i collegamenti e quindi può venire modificata in qualunque momento.

La modifica non è normalmente abilitata, per evitare errori, ma deve essere richiamato un apposito menu . L’utente deve avere tra i propri privilegi la possibilità di modificare questa chiave per la tabella in oggetto.

Blocco del record in modifica

Modificando le tabelle, il record in modifica viene bloccato per la modifica da parte di altri utenti.
Il problema nasce quando deve venire modificato un oggetto complesso (ad esempio un documento commerciale) che è costituito da varie tabelle.

Blocco record per oggetti

La struttura del database è organizzata in tabelle, ciascuna separata dalle altre.
Nei programmi, come abbiamo visto, vengono spesso utilizzati oggetti complessi, costituiti da più tabelle, ma che costituiscono un tutto unico.
Per esempio, in un documento commerciale (ordine, fattura, ecc.), abbiamo varie tabelle: testata, righe ed altro.
Questo genera conflitti con la struttura del database, per il quale inserire ad esempio una riga d’ordine vuole dire inserire un nuovo record; per l’utente, significa modificare l’ordine.
In X-Cross, in questi casi il blocco del record non avviene relativamente alle tabella (righe) ma a tutto l’oggetto ordine, rispecchiando il vero modo di lavorare dell’utente.
Qualunque operazione su questo oggetto, anche l’inserimento di nuovi record nelle tabelle collegate (es. righe), è subordinato al blocco dell’oggetto effettuato nel database, prevenendo ogni tipo di conflitto.

Salvataggio delle versioni precedenti

Una esclusiva caratteristica di X-Cross è la possibilità di abilitare, per le tabelle desiderate, il salvataggio delle versioni precedenti in caso di modifica del record.

Salvataggio versioni per oggetti

Nel caso di oggetti complessi, ad esempio un ordine, la modifica può comportare operazioni che, dal punto di vista del database, sono cose del tutto diverse.
Aggiungere o cancellare una riga ordine, ad esempio, per il database non sono modifiche ma inserimento o cancellazioni; dal punto di vista dell’utente, invece, in entrambi i casi si tratta di apportare modifiche all’ordine.
In X-Cross, in questi casi il salvataggio della versione non avviene relativamente alle singole tabelle ma a tutto l’oggetto ordine, rispecchiando il vero modo di lavorare dell’utente.
Nel caso per esempio di una fattura, la versione precedente viene salvata come un tutto unico, ovvero testata, righe e tutte le altre tabella che la costituiscono.

Visualizzazione delle versioni precedenti

Selezionando con doppio click una versione precedente, possiamo vedere l’oggetto modificato come era prima della modifica.

Evidenziazione delle modifiche apportate

Oltre a vedere le versioni precedenti, è possibile confrontarle con il record attuale o con un’altra versione, e le differenze vengono visualizzate.
Nel caso di record multipli (per esempio le righe di un documento), vengono visualizzate quelle aggiunte, modificate o cancellate.

Record obsoleti

Molto spesso è necessario inibire l’utilizzo di alcuni record di una tabella, pur non potendo cancellarli.
Per esempio, se un’aliquota IVA cambia, il precedente record non può essere né modificato né cancellato, in quando si altererebbero i dati esistenti, ma non deve essere più possibile utilizzalo per esempio in nuovi documenti.
In tutte le tabelle di X-Cross, è possibile marcare un record come “obsoleto”.
Selezionando questa opzione, è possibile visualizzare il record, ma non è più possibile utilizzarlo per collegamenti ad altre tabelle.
Ad esempio, una condizione di pagamento obsoleta non potrà più essere utilizzata nei documenti, ma è acora presente nel database per la consultazione dell’esistente.

Nel caso si rendesse necessario l’utilizzo di uno di questi record, solo gli utenti abilitati all’uso dei record obsoleti nella specifica tabella possono utilizzarli, selezionando il check box Mostra record obsoleti.
In ogni caso, per evitare errori, l’utilizzo di questi record è comunque subordinato alla selezione di questa opzione, non disponibile per gli utenti non abilitati.

Lettura dei record a blocchi

Nel caso di letture di tabelle con molti record, se la selezione li comprende tutti o molti di essi possiamo avere una lista di lettura dati assai lunga.
Questo è particolarmente importante usando il programma in Internet, dato che i tempi di lettura sono inevitabilmente un po’ più lunghi.

Per risolvere questo problema, è possibile impostare nei parametri della connessione al database il numero massimo di record da leggere.
Se il numero totale supera questa cifra, verrà mostrato il numero di record della selezione ed i record successivi possono essere scaricati a blocchi.

La barra di avanzamento alla base della finestra mostra la percentuale scaricata.

Aggiornamento dei record a blocchi

In molti casi, può esservi la necessità di aggiornamento di alcuni dati su un grande numero di record.
Per esempio, potremmo volere aggiornare le condizioni di pagamento su molti clienti allo stesso tempo.
In X-Cross è possibile effettuare aggiornamenti massivi con una semplice operazione.
È sufficiente selezionare un record che ha il valore desiderato nel campo da aggiornare, ed è possibile aggiornare con lo stesso valore i record selezionati dalla lista, oppure tutti i record indistintamente.