Fatturazione con OpenOffice.org

di Agnese Bascià

scritto il

Una semplice applicazione gratuita e personalizzabile per gestire le fatture

Un’alternativa gratuita ai sistemi di fatturazione commerciali può essere quella di realizzare una piccola applicazione con Base di OpenOffice.org. Questo sistema è disponibile per tutte le piattaforme, in particolare per Windows ma anche per sistemi operativi open source, come Linux.

In questo tutorial utilizziamo OpenOffice.org 3.0 per creare un piccolo database dei clienti e dei relativi prodotti o servizi da fatturare, predisporremo le fatture, in modo da renderle pronte per il successivo invio a mezzo e-mail, strumento attualmente riconosciuto per la trasmissione dei documenti contabili.

Esempio di database per la fatturazione
scarica l’esempio

Quella proposta è solo un’esemplificazione di ciò che è possibile realizzare; esistono perciò delle soluzioni più strutturate, anche assistite dai wizard a disposizione, ma che richiedono un’architettura del database più complessa.

La prima parte del tutorial è dunque incentrata sulla creazione del database, mentre la seconda riguarderà la generazione della fattura e il suo invio.

Creare le tabelle

Apriamo OpenOffice.org e dal menu File>New>Database lanciamo la finestra di creazione del DB: spuntiamo l’opzione Create new database; salviamo con il nome DB Fatturazione spostandoci nei vari passaggi con un semplice clic su Next e scegliamo di aprire il database in modalità di editing.

Appare l’ambiente di sviluppo del database in cui abbiamo la possibilità di creare una tabella per l’anagrafica dei clienti ed una per gli articoli o servizi acquistati dalla clientela; iniziamo dalla prima cliccando sull’opzione Use Wizard to Create Table.

La suite di Sun dispone di una varietà di tabelle già pronte, dalle quali possiamo attingere campi preimpostati, adattandoli ai nostri scopi.

Figura 1. Utilizzare i campi preimpostati

Utilizzare i campi preimpostati

Dalla categoria Business, selezioniamo Customers e dal menu a discesa e spostiamo i seguenti campi a destra cliccando sul pulsante [>]:

  • CustomerID – sarà un contatore per attribuire un codice al cliente
  • CompanyName – ragione sociale o ditta del cliente
  • Address – indirizzo
  • City – città
  • CountryOrRegion: lo Stato di residenza del cliente
  • EmailAddress
  • FaxNumber
  • PhoneNumber
  • Notes – per annotare dati aggiuntivi

Creare le maschere per l’inserimento dei dati

Nella prima parte dell’articolo abbiamo creato la struttura dei dati ora costruiamo l’interfaccia dell’applicazione. Dalla finestra del DB clicchiamo su Forms e poi su Use Wizard to Create Form….

Selezioniamo poi la tabella Customers dall’elenco a discesa Tables or queries e spostiamo tutti i campi a destra cliccando su [>>], quindi su Next due volte. Scegliamo come layout Columnar – Labels Left, la cui anteprima è visibile nella finestra in background, e poi di nuovo Next due volte; scegliamo la combinazione di colori fra quelle presenti; facciamo clic su Finish e la mascherà si aprirà in modalità di inserimento dati.

Figura 5. Maschera di inserimento clienti

Maschera di inserimento clienti

Procediamo allo stesso modo per creare la maschera Products e per Orders. Quest’ultima va modificata ulteriormente, perciò dopo averla creata e salvata, apriamola con il tasto destro del mouse cliccando sulla voce Edit del menu a cascata.

Dal menu degli strumenti sulla destra della maschera clicchiamo su List Box e tenendo premuto il tasto sinistro del mouse, disegniamo un rettangolo. Rilasciamo il mouse per avviare il List Box Wizard, selezioniamo la voce Customers e clicchiamo su Next.

Figura 6. Selezionare la tabella per l’elenco

Selezionare la tabella per l'elenco

Ora selezioniamo la voce CompanyName dall’elenco Existing fields in modo che venga visualizzato nel campo Display field, quindi diamo un clic su Next.

Figura 7. Selezionare il campo per l’elenco

Selezionare il campo per l'elenco

Nelle due metà della finestra selezioniamo CustomerID cosicché figuri sia nel Field form the Value Table, sia nel Field from the List Table, in questo modo colleghiamo il valore selezionato dal menu al campo CustomerID della maschera, evitando l’inserimento manuale del codice identificativo del cliente.

Figura 8. Associare il campo dell’elenco al campo della maschera

Associare il campo dell'elenco al campo della maschera

Concludiamo la procedura cliccando su Finish.

Con lo stesso procedimento creiamo un’altra List Box solo che la tabella scelta sarà Products nella prima videata; il campo della seconda videata sarà ProductDescription e nell’ultima videata in entrambi i campi uguali figurerà ProductID.

Siamo così tornati alla nostra maschera Orders ancora in modalità modifica. Selezioniamo il campo CustomerID e con un clic con il tasto destro del mouse accediamo alle proprietà scegliendo Control; passiamo la voce Enabled su No e ripetiamo gli stessi passaggi per il campo ProductID. In questo modo ambedue i campi saranno gestiti dalle list box che abbiamo creato in precedenza.

Salviamo la maschera e passiamo alla modalità inserimento dati cliccando, nel menu di sinistra sull’icona Design Mode On/Off. Apparirà la nostra maschera per l’inserimento degli ordini.

Figura 9. Maschera di inserimento ordini

Maschera di inserimento ordini, con menu a discesa

Creazione delle query di preparazione alla fatturazione

La query per definizione è un’interrogazione che viene fatta al database per estrapolare i dati cui siamo interessati ed ordinarli secondo le nostre esigenze. OpenOffice.org, che si basa su SQL, non presenta particolari difficoltà, almeno per quanto riguarda la generazione di una query come quella che andremo a vedere.

Dalla solita finestra principale del DB, clicchiamo su Queries e poi su Create Query in Design View; aggiungiamo all’area dell’interrogazione tutte le tabelle con un doppio clic su ognuna. Le tabelle appariranno in alto insieme alle relazioni. Selezioniamo e trasciniamo singolarmente – tenendo premuto il tasto sinistro del mouse – le voci:

TabellaCampi

Customers
CustomerID – CompanyName – Address – City -CountryOrRegion – Partita IVA/CF

Productstutti i campi

Orders
Quantity – Discount – Date

Salviamo la query e clicchiamo sul pulsante Run query per controllare che funzioni: se dopo aver inserito qualche dato nelle diverse maschere, la query non risulta vuota possiamo pensare che funziona.

Riapriamo la query in modalità edit e sotto il campo Date della query, digitiamo le date da fatturare nella riga Criterion con la seguente sintassi:

>= #01/06/2008# AND <= #30/09/2008#

modificando per ogni fatturazione le date, in modo da non fatturare due volte lo stesso ordine. Salviamo, lanciamo la query per accertarci che stia funzionando quindi chiudiamola se tutto è a posto.

A questo punto creiamo una serie di query, che ci servono per creare dei campi con i conteggi relativi agli importi al netto dello sconto e al lordo dell’IVA, in modo da arrivare al totale della fattura.

Generiamo una nuova query, inseriamo solo la Query1. In ogni colonna inseriremo le seguenti formule, una per colonna sul rigo Field, ciascuna contenente una formula e un nome assegnato tramite il campo Alias.

FormulaAlias
“UnitPrice” / “Discount”ImportoSconto
“UnitPrice” – (“UnitPrice” / “Discount”)PrezzoNetto
“UnitPrice” / “TaxSales”IVA

Da ultimo inseriamo il campo ProductID, trascinandolo dalla tabella che abbiamo inserito nell’area superiore della query. Lanciamo la query, se tutto funziona e la sintassi è stata rispettata dovrebbe apparire una tabella, nella quale le intestazioni di colonna sono i dati contenuti nell’Alias e il contenuto delle celle sarà generato dalle formule che abbiamo scritto. Salviamo la query ed usciamo.

Generiamo la terza query, inseriamo la Query1 e la Query2 e ripetiamo il procedimento precedente inserendo prima i campi: ProductID, UnitPrice, Discount, Prezzo Netto, SalesTax, IVA.

Poi aggiungiamo le seguenti formule e alias:

FormulaAlias
“PrezzoNetto” + “IVA”PrezzoIvato
(“PrezzoNetto” + “IVA”) * “Quantity”TotaleOrdine

Figura 10. QueryTotali

QueryTotali

Lanciamo la query e se tutto funziona, se i totali vengono generati e non ci sono errori di sintassi, salviamola come QueryTotali, quindi chiudiamola.

Infine creiamo la query per generare le fatture, che chiameremo QueryFatturazione: al solito, dal pannello principale scegliamo Create query in Design View e aggiungiamo tutte e quattro le tabelle e la QueryTotali. Da ognuna di queste selezioneremo con un doppio clic i campi: CustomerName, Address, City, CountryOrRegion, Partita IVA/CF, OrderID, Date, ProductDescription, SerialNumber, ID e tutti i campi della QueryTotali.

Inseriamo nella colonna Date il criterio di selezione delle date già visto in precedenza in modo da effettuare un filtro temporale sugli ordini, ad esempio:

>= #01/09/2008# AND <= #30/09/2008#

quindi lanciamo la query dal solito pulsante Run Query e verifichiamone l’output.

Preparare la fattura

La fattura, a questo punto, è il risultato di un report generato sulla base della QueryFatturazione. Il report può essere generato attraverso il link Use Wizard to Create Report e selezionando la query citata anziché le tabelle.

La creazione del report non è semplice come in Microsoft Access, e soprattutto la grafica ne risente. Perciò prima di procedere, si consiglia di installare un’estensione di OpenOffice.org: Sun Report Builder. Dopo l’installazione dell’estensione, riavviamo il database.

Questo add-on consente di elaborare i report in maniera più intuitiva, suddividendone le diverse porzioni: intestazione, corpo e piè di pagina (come per MS Access), e soprattutto semplificando la modifica dei campi grazie alla finestra Proprietà evidenziata sulla destra dell’area di lavoro.

Aiutiamoci con il wizard per generare il report e provvediamo a modificarlo: sistemiamo i campi nell’ordine voluto; aggiungiamo il logo della nostra azienda e l’intestazione della fattura; controlliamo che tutto vada al posto giusto, e se riteniamo opportuno, spostiamo i campi trascinandoli, tenendo premuto il tasto sinistro del mouse. Possono essere aggiunte etichette, modificati i caratteri, i colori etc., possono essere immessi i numeri di pagina e quant’altro si renda utile alle proprie esigenze.

Possiamo aggiungere altri campi come la Partita IVA/CF, utilizzando il pannello al passo successivo, che raggiungiamo con il tasto [Next >], cliccando prima sul [+] e poi modificando i nome del nuovo campo.

Figura 2. Aggiungere campi “a mano”

Aggiungere campi "a mano"

Allo step 3, possiamo impostare la chiave primaria della tabella. Vogliamo utilizzare il campo CustomerID come chiave, quindi selezioniamo l’opzione Use an exisiting field as primary key e selezioniamo CustomerID nel menu fieldname, infine spuntiamo la casella Auto value, che ci garantisce che ogni campo sarà univoco.

Figura 3. Assegnare la chiave primaria

Assegnare la chiave primaria

Andiamo avanti cliccando su Next e poi su Finish. Possiamo inserire il primo cliente spostandoci con il tasto TAB nei vari campi, per verificare che tutto funzioni. Se tutto va bene con questa tabella abbiamo finito.

Creiamo la tabella dei prodotti, utilizzando nuovamente il wizard: dalla categoria Business scegliamo la voce Products quindi inseriamo i campi: ProductID (identificativo del prodotto), ProductDescription, Serial Number, UnitPrice (il prezzo dell’articolo o servizio). Poi, dall’elenco OrderDetails selezioniamo il campo SalesTax, ovvero quello dedicato all’IVA. Qui indichiamo come chiave primaria il campo ProductID.

Mancano ancora due tabelle. Le creiamo sempre con il wizard, utilizzando le voci già pronte nelle varie aree della categoria Business; le tabelle in questione sono Orders e conterrà i seguenti campi:

  • OrderID: sarà la nostra chiave primaria
  • CustomerID: è il nostro collegamento con il cliente che fa l’ordine
  • ProductID: è il collegamento con la tabella Products
  • Quantity: conterrà la quantità dei prodotti o servizi acquistati
  • Discount: è lo sconto riservato al cliente sul prezzo del prodotto o servizio venduto
  • OrderDate: cioè il campo data

e Invoice, che contiene solo un InvoiceID, chiave primaria, e OrderID per collegarsi agli ordini, in modo che ogni ordine abbia una fattura a se stante. Questo perché molti enti pubblici richiedono la fatturazione del singolo ordine e non consentono il cumulo di ordini su un’unica fattura.

Correlare le tabelle

Da Tools>Relationships accediamo alla finestra delle relazioni, quindi clicchiamo sull’icona Add Tables e aggiungiamo tutte e quattro le tabelle, facendo doppio clic su ognuna. Selezioniamo dalla tabella Customers il campo CustomersID e trasciniamolo – tenendo premuto il tasto sinistro del mouse – sul campo omonimo nella tabella Orders.

Facciamo la stessa cosa con il campo ProductID della tabella Products e colleghiamolo all’omonimo campo della tabella Orders. Poi colleghiamo il campo OrderID di Invoice al campo omonimo della tabella Orders. Verranno create relazioni uno-a-molti automaticamente. Salviamo le relazioni e chiudiamo la finestra.

Figura 4. Relazioni tra le tabelle

Relazioni tra le tabelle