Creare un Database completo per la gestione del magazzino con LibreOffice

Vedremo di seguito una guida pratica su come creare un Database per la gestione del magazzino e la rispettiva spiegazione analitica:
Innanzitutto apriamo il pacchetto di LibreOffice (oppure OpenOffice) LibreOffice Base, ci comparira questa schermata:

qui possiamo scegliere se creare un nuovo Database oppure aprire un Database già esistente. Fatto ciò avremo questa seconda schermata:

Qui possiamo scegliere se registrare il Database o no; e’ consigliabile registrarlo per renderlo disponibile come fonte dati per altre applicazioni di LibreOffice. Poi “Fine”.

Arrivati a questo punto diamo un nome significativo al nostro Database, salvandolo avremo una schermata simile a questa:

Innanzitutto prima di iniziare a realizzare fisicamente il nostro Database, dobbiamo avere uno schema ben preciso di come dobbiamo impostarlo; quindi dobbiamo sapere a priori cosa ci può essere utile includere nel Database, di quante tabelle abbiamo bisogno, se e quali relazioni sono presenti in esso. Avendo uno schema chiaro ottenuto con il tradizionale metodo, quello con carta e penna, possiamo iniziare a creare le nostre tabelle. Supponiamo di voler realizzare un Database dove andremo ad inserire i nostri articoli, le quantità, il loro prezzo di acquisto, i vari fornitori i relativi acquisti, ecc… Iniziamo a creare la tabella “TabArticoli” (è bene inserire il riferimento per distinguere le tabelle, le query, le ricerche ecc…).

Per fare cio clicchiamo su: “Crea tabella in vista struttura” ed avremo questo:

Qui dobbiamo iniziare ad inserire i campi che che ci saranno utili ed i rispettivi tipi di campo. Iniziamo però ad inserire il campo “ID” a cui attribuiremo come tipo di campo “Intero [INTEGER]” e modifichiamo a “si” il valore automatico. Il campo “ID” sarà la nostra chiave primaria la quale avrà un valore univoco per ogni record inserito. Inseriamo un altro campo “Descrizione” il quale avrà come tipo “Testo [VARCHAR]” e salviamo con nome la tabella (possiamo rinominarla “TabArticoli”).

Proseguiamo con la creazione della tabella fornitori, quindi clicchiamo su “Crea tabella in vista struttura” ed inseriamo i campi: “ID” con tipo di campo “intero [INTEGER]” e valore automatico su “si”, “Ragione Sociale”, “Indirizzo”, “N. Telefono”, “P.iva”, “Codice Fiscale”; questi ultimi avranno come tipo di campo “Testo [VARCHAR]”. Finito salviamo la tabella con nome (la chiameremo “TabFornitori”) ed avremo una schermata simile a questa:

Andiamo avanti con la creazione della tabella “TabAcquisti” la quale ci permettera di caricare le nostre fatture quindi i nostri articoli, il loro prezzo di acquisto, la data, ecc… Andiamo su “Crea tabella in vista struttura” ed iniziamo ad inserire i seguenti campi:

N.B. Ai campi “IDArticolo” e “IDFornitore” abbiamo attribuito come tipo di campo “INTEGER” in quanto saranno i campi che andremo ad usare per creare le relazioni con le relative tabelle e le relative chiavi primarie. Infatti, come regola generale, per creare la relazione tra due tabelle, i due campi utilizzati, dovranno essere dello stesso tipo. Anche al campo “Numero Fattura” abbiamo attribuito un tipo di campo che potrebbe sembrare strano, però se non mettiamo “Testo” e dovessimo inserire ad esempio come numero di fattura 454322/A non potremmo inserirlo.
Salviamo la tabella come “TabAcquisti” ed avremo questa schermata:

Proseguiamo con la creazione della tabella clienti, quindi clicchiamo su “Crea tabella in vista struttura” ed inseriamo i campi: “ID” con tipo di campo “intero [INTEGER]” e valore automatico su “si”, “Ragione Sociale/Nome”, “Indirizzo”, “N. Telefono”, “P.iva”, “Codice Fiscale”; questi ultimi avranno come tipo di campo “Testo [VARCHAR]”. Finito salviamo la tabella con nome (la chiameremo “TabClienti”) ed avremo una schermata simile a questa:

Andiamo avanti con la creazione della tabella “TabVendite” la quale ci permettera di caricare le nostre vendite quindi i nostri articoli, il loro prezzo di vendita, la data, ecc… Andiamo su “Crea tabella in vista struttura” ed iniziamo ad inserire i seguenti campi:

N.B. Ai campi “IDArticolo” e “IDCliente” abbiamo attribuito come tipo di campo “INTEGER” in quanto saranno i campi che andremo ad usare per creare le relazioni con le relative tabelle e le relative chiavi primarie. Infatti, come regola generale, per creare la relazione tra due tabelle, i due campi utilizzati, dovranno essere dello stesso tipo. Salviamo la tabella come “TabVendite” ed avremo questa schermata:

Adesso siamo pronti a creare i nostri formulari per avere un’interfaccia più gradevole e la visualizzazione dei soli campi che ci interesseranno. Quindi sulla colonna a sinistra del nostro database selezioniamo “Formulari” e clicchiamo su “Usa procedura guidata per la creazione dei formulari”. Iniziamo con il creare il
Formulario (Maschera) riferito alla tabella “TabArticoli”: alla voce “Selezionate i campi del formulario” selezioniamo dall’elenco a tendina la voce: “Tabella: Articoli”, mentre su “Campi disponibili” selezioniamo solo il campo “Descrizione” e lo aggiungiamo ai Campi nel Formulario con il segno ” > “

Fatto cio clicchiamo su “Avanti”, poi “Avanti” di nuovo sulla configurazione di un formulario secondario, poi scegliamo come disporre i nostri campi nel formulario (personalmente preferisco: “In colonna testo fisso a sinistra”); poi “Avanti” sulla selezione del modo di inserimento dei dati. Applichiamo lo stile ed il colore,
impostiamo il nome (meglio usare lo stesso nome significativo della tabella) e fine.
Procediamo con la creazione del Formulario della tabella “Fornitori”; clicchiamo su “Usa procedura guidata per la creazione dei formulari” ed alla voce “Selezionate i campi del formulario” selezioniamo dall’elenco a tendina la voce: “Tabella:
Fornitori”, mentre su “Campi disponibili” selezioniamo tutti i campi eccetto il campo “ID” e li aggiungiamo ai Campi nel Formulario con il segno ” > “

Fatto ciò clicchiamo su “Avanti”, poi “Avanti” di nuovo sulla configurazione di un formulario secondario, poi scegliamo come disporre i nostri campi nel formulario;
poi “Avanti” sulla selezione del modo di inserimento dei dati. Applichiamo lo stile ed il colore, impostiamo il nome e fine.
N.B. Anche dopo la creazione del formulario possiamo modificare la disposizione delle etichette e dei campi, il colore di sfondo ecc… Per fare ciò clicchiamo con il tasto destro sul formulario che vogliamo modificare e click su “Modifica”. Andando su “Formato” → “Pagina”, possiamo cambiare lo sfondo.

Se vogliamo invece modificare le dimensioni delle etichette, dei campi o la loro disposizione, basta
cliccare con il tasto destro ed andare su “Raggruppa” → “Separa”. Cosi facendo abbiamo diviso l’etichetta dal campo, mentre se vogliamo raggrupparli di nuovo, click sull’etichetta e tenendo premuto il tasto “SHIFT” click sul campo, tasto destro del mouse “Raggruppa”.

Invece se volessimo modificare il carattere, la dimensione dell’etichetta, tasto destro, “Campo di controllo” su “Generale” troveremo la voce “Carattere” che ci permetterà effettuare le modifiche a proprio piacere. Fatto ciò, possiamo creare in entrambe le tabelle un pulsante che ci permetterà di aggiungere un nuovo articolo oppure un nuovo fornitore; per fare questo andiamo in modalità modifica, selezioniamo nella tabella strumenti a sinistra la voce “Pulsante”, e ne creiamo uno sul formulario. Per modificare le proprietà, clicchiamo due volte sul pulsante, quindi su “Didascalia” dovremo mettere il nome che andremo a
visualizzare, mentre per far fare ciò per cui lo abbiamo creato, andiamo su “Operazione” e nell’elenco a tendina selezioniamo: “Nuovo Record”.

Salviamo e chiudiamo. Non dimentichiamo di salvare non solo le modifiche alle tabelle, ma anche a tutto il database creato.
Adesso possiamo creare la nostra prima relazione; andiamo su “Strumenti” → “Relazioni” ed avremo questa schermata:

Qui possiamo aggiungere le tabelle che dobbiamo mettere in relazione. In questo caso le aggiungiamo tutte e cinque, dopodiché diamo “Chiudi”. Per creare fisicamente le relazioni, clicchiamo con il tasto sinistro sulla chiave primaria (ID) della tabella “Articoli” e tenendo premuto il tasto lo trasciniamo sulla voce “IDArticoli” della tabella “Acquisti” e rilasciamo il tutto. Facciamo la stessa operazione per la tabella
“Vendite”, “Clienti” e “Fornitori”, salviamo la relazione ed il file ed avremo questo:

Procediamo con la creazione del formulario riferito alla tabella “Acquisti” e, come vedremo, grazie alla relazione creata precedentemente, più della metà del lavoro lo troveremo già fatto, con i vari menù già pronti, dovremo solo modificare le impostazioni di alcuni campi.

Quindi iniziamo: “Usa procedura guidata per la creazione dei formulari” ed alla voce “Selezionate i campi del formulario” selezioniamo dall’elenco a tendina la voce: “Tabella: Acquisti”, mentre su “Campi disponibili” selezioniamo tutti i campi eccetto il campo “ID” e li aggiungiamo ai Campi nel Formulario con il segno ” > ” :

Fatto ciò clicchiamo su “Avanti”, poi “Avanti” di nuovo sulla configurazione di un formulario secondario, poi scegliamo come disporre i nostri campi nel formulario; poi “Avanti” sulla selezione del modo di inserimento dei dati. Applichiamo lo stile ed il colore, impostiamo il nome e fine. Quindi separiamo tutte le etichette dai campi con la solita procedura: tasto destro del mouse sopra il campo, “Raggruppa” → “Separa”; possiamo modificare le etichette con una descrizione a piacere cliccando due volte sopra l’etichetta ed inserire nella “Didascalia” il termine che vogliamo compaia nel formulario. Possiamo anche modificare la formattazione del testo andando sotto la voce “Didascalia” su “Carattere” e modificare la grandezza del carattere, il font, ecc… Avremo questa schermata:

Adesso andiamo a modificare le proprietà di ogni singolo campo: allora tasto destro sul campo “Articolo” ed andiamo su: “Sostituisci con” → “Casella di riepilogo”, poi clicchiamo due volte sul campo e alla voce “Apribile” lo modifichiamo a “si”.

Sempre nelle Proprietà del campo, andiamo alla voce “Dati” ed inseriamo su “Tipo del contenuto della lista” → “Sql”, poi su “Contenuto elenco” andiamo su sfoglia;
nella query che si visualizza, clicchiamo sulla tabella “Articoli” → “Aggiungi” → “Chiudi”. Fatto ciò inseriamo nella prima colonna il campo “Descrizione” mentre nella seconda, il campo “ID” e salviamo. Ecco l’immagine che avremo:

Come risolvere il problema del contatore che inizia da 0 (zero).

Come e’ noto, il campo contatore (id numerico auto-incrementante) di una tabella di LibreOffice inizia da 0 (zero), a differenza del contatore di Access che inizia da 1 (uno). Di solito questo non comporta un problema, ma a volte, ci sono dei casi nei quali il contatore non può partire da 0.

Ad esempio, se si usa il contatore di una tabella come protocollo, questo non può partire da zero. Per fare in modo che il contatore inizi a contare da 1 e non da zero e’ necessario che la tabella sia vuota, poi
con un paio di comandi SQL si converte il valore iniziale da 0 a 1. Quindi:
“Strumenti” → “SQL” → “Esegui il comando SQL”, su “Comando da eseguire”
inserire queste due righe di comando e poi “esegui”:

alter table "prova" alter column "id"

restart with 1

dove “prova” è il nome della tabella e “id” è il campo con chiave primaria. Se la logica e la sintassi del comando sono corrette si otterra come risposta “comando eseguito con successo” altrimenti si riceverà un messaggio di errore.

Come registrare ed eliminare un database come sorgente di dati.

Per fare in modo se non si era specificato al momento della creazione guidata del database, che i dati del database vengano utilizzati dagli altri programmi di LibreOffice (come sorgente dei dati), è necessario registrarlo attraverso l’apposita procedura, quindi aprire Base e poi:
“Strumenti” → “Opzioni” → su “LibreOffice Base” → “Database”
andando su “Nuovo”, si aprira la finestra “File del Database” e su “Sfoglia” andiamo a selezionare il file che vogliamo registrare. Mentre selezionando un database e su “Elimina”, rimuoveremo il database come sorgente dati.

Come creare pulsanti di collegamento ai vari formulari (creare un menu).

Creiamo una cartella specifica per il nostro database dove andremo a salvare i files che ci serviranno per avere il nostro piccolo e semplice menu. Quindi inseriamo il nostro database all’interno della nostra cartella ed apriamo il formulario in modalità modifica su cui vogliamo creare un collegamento → “Salva con nome” ed inseriamo il nome significativo.

Apriamo il file salvato (documento wrtiter) ed andiamo ad abilitare su “Visualizza” → “Barra degli strumenti”: “Controlli per formulario” e “Navigazione formulario”. Poi “Modo bozza on/off” per aprire navigatore formulario tasto desto → “Formulario” → “Dati” → “Sorgente Dati”: inserire andare ad aprire il
nostro database, su “Tipo di contenuto” inserire “Tabella” mentre su “Contenuto” inserire il nome della tabella di riferimento e salviamo.

Per creare il collegamento, su “Formulari” creiamo un “formulario in vista struttura” vuoto; inseriamo un
“Pulsante” poi tasto destro → “Campo di controllo” → “Generale” → su “Operazione” inseriamo: “Apri documento/Pagina web”. Su “URL” andiamo a selezionare il file precedentemente creato, salviamo ed il nostro primo collegamento e’ pronto. Ripetiamo la stessa operazione per tutti i file che vogliamo inserire nel nostro menu.

Come creare un campo calcolato in una ricerca dove non c’è corrispondenza in tutti i record (Acquisti – Vendita = Giacenza).

Per creare un campo calcolato in una ricerca / query (i campi calcolati possono essere creati solo con le ricerche non sui formulari come in access) dove alcuni valori non possono essere presenti si utilizza un’istruzione di SQL: COALESCE; se in un campo dichiarato è presente un valore, lo inserisce, se non presente inserisce un valore che noi andremo ad impostare, così si risolve per quanto riguarda i valori non presenti.
Vediamo un esempio riferito ad una ricerca che ci permette di avere la giacenza dei nostri articoli sottraendo alla quantità dei pezzi acquistati quelli venduti:
abbiamo due possibilità per la creazione, una è quella scritta totalmente in SQL, mentre la seconda è fatta in modalità struttura. Il primo esempio è il seguente:

SELECT "Articoli"."Descrizione",
SUM(COALESCE("Acquisti"."Quantita",0)) - SUM(COALESCE("Vendite"."Quantita",0)) AS "Giacenza"
FROM "Articoli"
LEFT JOIN "Acquisti" ON "Acquisti"."IDArticolo"="Articoli"."ID"
LEFT JOIN "Vendite" ON "Vendite"."IDArticolo"="Articoli"."ID"
GROUP BY "Articoli"."Descrizione"

La seconda possibilita prevede di inserire nella prima colonna il campo “Descrizione” della tabella “Articoli” ed inserire nella funzione “Gruppo”; nella seconda colonna inserire le seguenti istruzioni con Alias “Giacenza”:

Somma( COALESCE ( "Acquisti"."Quantita", 0 ) ) - Somma( COALESCE ( "Vendite"."Quantita", 0 ) )

Quindi avremo questa schermata:

fatto cio, per creare il join interno (le relazioni interne della query non intaccano le relazioni delle tabelle) si devono modificare le due relazioni in questo modo:

Dove nella voce “Campi considerati”, la prima colonna a sinistra deve essere obbligatoriamente riferita alla tabella “Articoli” ed il campo “ID”, mentre nella seconda colonna inseriremo la tabella “Acquisti” ed il campo “IDArticolo” con relazione a sinistra. Stessa identica cosa per il join riferito alla tabella “Vendite”.

Un grazie va agli amici del Forum per gli ottimi suggerimenti e risposte.