Tratto dallo speciale:

Automatizzare un archivio fatture con Access

di Gianluca Tinti

Pubblicato 31 Maggio 2013
Aggiornato 26 Ottobre 2018 13:00

Come creare un archivio in Microsoft Access per la numerazione progressiva e automatica delle fatture emesse, in grado di ripartire anno dopo anno.

In questo tutorial costruiremo un archivio delle fatture emesse da una qualsivoglia azienda, cercando di automatizzare alcuni dati. Per esempio faremo in modo che la numerazione venga immessa (direttamente dal programma) in automatico e in maniera progressiva a seconda delle date inserite, inoltre utilizzeremo degli script che azzereranno la numerazione ad ogni inizio anno, e che regoleranno il modo in cui vengono datate le fatture.

Scarica l’esempio completo

Per diversi motivi, in questo tutorial daremo per scontate alcune conoscenze di base del programma Access che andremo ad utilizzare, come ad esempio la creazione di una maschera o una tabella.

Creazione database e tabella

Come prima operazione creiamo un nuovo database di ACCESS (noi lo abbiamo chiamato ARCHIVIO_FATTURE), e all’interno una nuova tabella (…FATTURE). La tabella dovrà contenere i seguenti campi e tipi di dati:

Diamo ora alcune regole che impediscono all’utente (nel momento dell’inserimento dati) di lasciare vuoti i campi “Data” e quello contenente l’aliquota Iva. A questo scopo nella struttura della tabella:

1. Click su Data
2. Impostare il valore “SI” alla proprietà “Richiesto”
3. Click sul campo “Aliq_IVA”
4. In basso, click su “Valore predefinito” e scrivere 21

Creazione maschere

Per poter gestire al meglio il nostro DB occorre creare due maschere, una per visualizzare l’elenco delle fatture emesse, l’altra per inserirne di nuove. Nella prima includiamo tutti i campi della tabella Fatture e la salviamo col nome di ELENCO_FATTURE. Nella seconda invece inseriamo tutti i campi tranne NUM e salviamo col nome di NUOVA_FATTURA. Personalizzate entrambe le maschere formattandole come ritenete più opportuno.
In entrambe le maschere inserite un pulsante in questo modo:

1. Fare click su “PULSANTE”, nella barra “Struttura”
2.  Appena cliccate su “Pulsante” comparirà la finestra di “creazione guidata pulsante di comando” (figura3). Non proseguite oltre, cliccate subito” Annulla” poiché inseriremo noi lo script per dare il comando al pulsante.


3. Poi semplicemente con un doppio click cambiate la caption del pulsante Scrivendo “NUOVA FATTURA” (nella maschera ELENCO_FATTURE) e “CONFERMA” (Nella maschera NUOVA_FATTURA)

Nel nostro esempio le due maschere appaiono come di seguito:

 

Caselle di testo

Solo nella maschera ELENCO_FATTURE invece inserite due caselle di testo (utilizzate il pulsante omonimo, nella barra”Struttura”), potete posizionarle dove volete, preferibilmente in un punto dove non diano molto fastidio.
Queste serviranno da blocco degli appunti, memorizzeranno cioè temporaneamente alcune informazioni, non occorre visualizzarle nella maschera, ecco perché, dopo averle selezionate richiamiamo la “Finestra delle proprietà” (col tasto F4) e impostiamo a NO la proprietà Visibile (la trovate nella scheda Formato).

Tramite la “finestra delle proprietà” diamo un nome alle due caselle, utilizziamo a tale scopo la proprietà “Nome Elemento” nella scheda “ALTRO”. Le chiamiamo rispettivamente TESTODATA e TESTONUM.

Comandi per controllo maschere

Adesso vediamo come inserire i codici di programmazione per dare gli automatismi al programma. A questo scopo ci serviremo di qualche comando VBA, che sarebbe il Visual basic applicato ai programmi della suite Office.

1. Riapriamo la maschera “ELENCO_FATTURE” e (in modalità struttura) selezioniamo il pulsante inserito in precedenza per poi cliccare F4 in modo da far apparire la “Finestra delle proprietà”.

=> Leggi di più sulle norme per la fatturazione

2. Posizioniamoci nella scheda “Evento” e clicchiamo prima su “Click” e poi sui puntini che compaiono a lato. Dovrebbe comparire la finestra “Scegli generatore”:

3. Selezionare “Generatore di codice” e cliccare su OK

4. Nell’editor di Visual Basic, tra le diciture “Private Sub…” e “End sub” ricopiare il seguente codice:

Dim ab, cd
Dim stDocName, stLinkCriteria As String
Form_ELENCO_FATTURE.AllowAdditions = True
DoCmd.GoToRecord , , acLast
cd = Num
Testonum.Value = cd
If Data.Value = “” Then
ab = “1/1/1900”
Testodata.Value = ab
Else
ab = Data.Value
Testodata.Value = ab
End If
Form_ELENCO_FATTURE.AllowAdditions = False
stDocName = “NUOVA_FATTURA”
DoCmd.OpenForm stDocName, , , stLinkCriteria

=> Scopri come gestire le fatture con OpenOffice Calc

Questo script consente di richiamare la maschera per l’inserimento delle fatture, ponendo in condizione il programma di aggiungere nuovi record.

5. Chiudere l’editor VB e visualizzare la “finestra delle proprietà” del campo “Cliente”, posizionarsi nella scheda EVENTO e click prima su USCITA poi sui puntini che compaiono a lato.

6. Nella finestra “Scegli generatore”, selezionare “Generatore di codice” e poi cliccare su OK

7. Nell’editor di Visual Basic, tra le diciture “Private Sub…” e “End sub” ricopiare il seguente codice:
Form_ELENCO_FATTURE.AllowAdditions = False

Questa riga di codice obbligherà l’utente ad inserire nuove fatture attraverso la maschera NUOVA_FATTURA

8. Dopo aver chiuso l’editor VB, selezionate il campo Data e nella scheda “Dati” digitare accanto a valore predefinito “=NOW()” (senza virgolette).
Questa locuzione consentirà di inserire come valore di default alla maschera la data odierna.

9. Andate adesso nella proprietà “Valore predefinito” del campo NUM e digitate 1. Così quando inseriremo i dati della prima fattura verrà numerata automaticamente come uno.

10. Esattamente come abbiamo visto prima per il campo CLIENTE, posizioniamoci nel Generatore di codice dell’evento USCITA del campo TOTALE e Digitiamo il seguente codice:

Dim aa, bb, cc, dd, ee
dd = aliq_IVA.Value
aa = Totale.Value
bb = aliq_IVA.Value
cc = aa / ((dd / 100) + 1)
imponibile.Value = cc
ee = aa – cc
IVA.Value = ee
Indirizzo.SetFocus

Questo script calcolerà automaticamente l’imponibile e l’iva, una volta trascritto il totale della fattura.
11. Esattamente come abbiamo visto prima per il campo TOTALE, posizioniamoci nel Generatore di codice dell’evento USCITA del campo “ALIQ_IVA” e ricopiamo lo stesso codice tranne che per l’ultima riga che diventa:
CLIENTE.setfocus

Questo script consente di ricalcolare l’imponibile e l’iva qualora venga modificata l’aliquota.

12. Chiudiamo la maschera, salvando le modifiche.

Seconda maschera

Ora lavoriamo sulla seconda maschera, in questo modo:

1. Apriamo “NUOVA_FATTURA” e posizioniamoci in visualizzazione struttura.
2. Facciamo doppio click all’incrocio dei righelli (Figura7), apparirà la “finestra delle proprietà” della maschera.


3. posizioniamoci nella scheda EVENTO e richiamiamo il generatore di codice in corrispondenza della proprietà “Su caricamento”, dopodiché digitiamo il seguente codice:

DoCmd.GoToRecord , , acLast
DoCmd.GoToRecord , , acNext

Questo breve script svuota tutti i campi, consentendo così solo l’inserimento di nuove fatture ogni volta che si richiama questa maschera, di fatto impedendo, da qui, all’utente, di utilizzare i record già inseriti.

4. Richiamare ora il generatore di codice del campo Totale, in corrispondenza della proprietà Uscita e digitare:

Dim aa, bb, cc, dd, ee
dd = aliq_IVA.Value
aa = Totale.Value
bb = aliq_IVA.Value
cc = aa / ((dd / 100) + 1)
imponibile.Value = cc
ee = aa – cc
IVA.Value = ee
Aliq_Iva.setfocus

5. Ripetere la stessa operazione sul campo “Aliq_Iva”. Il codice da ricopiare è lo stesso, tranne che per l’ultima riga che diventa:

Cliente.setfocus

Questi ultimi due script li abbiamo già utilizzati nella precedente maschera, e come già detto consentono di calcolare automaticamente l’imponibile e l’iva, una volta scritto il totale della fattura e l’aliquota iva.

6. Blocchiamo ora i campi IMPONIBILE e IVA in modo da evitare che inavvertitamente possano essere eliminati i calcoli eseguiti tramite i codici precedenti. A tal fine selezioniamo le due caselle e clicchiamo il tasto F4 per richiamare la “Finestra delle proprietà”. Posizioniamoci nella scheda Dati e impostiamo su “SI” la proprietà BLOCCATO.

7. Inseriamo come valore predefinito (scheda “Dati” della “Finestra delle proprietà”) al campo DATA “=NOW()” (senza virgolette), in modo da far inserire automaticamente la data odierna.

8. Infine diamo i comandi al pulsante “CONFERMA”, inserendo il seguente script nel generatore di codice richiamato in corrispondenza della proprietà CLICK:

Dim ZZ, RR As Date
Dim nn As Integer
ZZ = Data.Value
RR = Form_Elenco_Fatture!Testodata.Value
nn = Form_Elenco_Fatture!Testonum.Value
If ZZ < RR Then
MsgBox (“La data della nuova Fattura non può essere precedente a quella dell’ultima…”)
Data.SetFocus
Exit Sub
Else
If Year(ZZ) > Year(RR) Then
Num = 1
DoCmd.Close
Form_Elenco_Fatture.Requery
Else
Num = nn + 1
DoCmd.Close
Form_Elenco_Fatture.Requery
End If
End If

Quest’ultimo codice è estremamente importante perché esegue un po’ tutte le funzioni che avevamo descritto all’inizio di questo Tutorial, ovvero:

  • Impedisce all’utente di inserire, in una nuova fattura, una data precedente a quella dell’ultima archiviata
  • Numera automaticamente la nuova fattura assegnandole un numero progressivo superiore di una unità rispetto a quella dell’ultima archiviata
  • Nel caso in cui la data inserita appartenga al nuovo anno, la numerazione ricomincerà dall’uno.

Ora il nostro DB dovrebbe essere a posto. Prima di iniziare però ecco alcune dritte:

  • Dopo aver salvato tutte le modifiche aprite la maschera ELENCO_FATTURE, ovviamente all’inizio, poiché non è stato inserito alcun record la maschera apparirà priva di dati. Il primo record (SOLO IL PRIMO!!)  è necessario aggiungerlo in questa maschera (ELENCO_FATTURE), tutti gli altri invece dovrete inserirli tramite il pulsante “NUOVA FATTURA” che ci darà accesso alla maschera omonima.
  • In visualizzazione maschera, dopo aver cliccato sul campo DATA, attivate l’ordinamento crescente dalla barra HOME

Una volta inseriti i dati delle fatture, state molto attenti ad apportare modifiche all’elenco, poiché potrebbe risultare qualche incongruenza fra numeri e date.