Logo Einstein grigio sfumato
e = m x c al quadrato

Gestire le fatture con Microsoft Access

Impariamo a costruire un programma per gestire la fatturazione con Microsoft Access




Il modello di fattura che vedrete in questo tutorial è stato utilizzato realmente da una società di elaborazione dati e quindi è maggiormente adatto ad una attività di servizi, quindi senza magazzino.

Ciò non toglie che si possa adattare anche ad una qualsiasi attività produttiva o commerciale, basterà modificare una paio di query in modo che puntino alla tabella degli articoli di magazzino venduti, anzichè alle prestazioni effettuate, e aggiungere i dati identificativi della Bolla di consegna o del Documento di Trasporto.

Cercheremo comunque di dare indicazioni su come raccordare questo modello di fattura con l'altro nostro progetto, la gestione del magazzino con access.

Il database di esempio, GestioneFatture.mdb per ora è in fase di aggiornamento e di modifiche per esigenze didattiche, per cui per il momento non è disponibile per il download, nel frattempo seguiteci perchè queste pagine verranno modificate con una certa frequenza.

Vediamo la finestra delle relazioni di questo database (figura 1).

L'archivio di partenza è quello delle Prestazioni, nel quale gli incarichi ricevuti o i rapporti contrattuali con i clienti possono essere gestiti in 2 modi alternativi:

* Il primo è quello dell'abbonamento periodico a servizi continuativi, ad esempio annuale, con fatturazione mensile o trimenstrale: questo caso è tipico delle società di elaborazione dati o degli studi di commercialisti e o consulenza fiscale o del lavoro. La data di inizio e quella di fine coincidono rispettivamente con il 1 gennaio e il 31 dicembre e ad ogni nuovo anno si crea un altra scheda prestazione, anche perchè potrebbero essere riviste le condizioni economiche e quindi il fatturato previsto.

* Il secondo invece è a progetto o a corpo o a stato d'avanzamento: in questo caso la data di inizio e la data di fine prestazione (o incarico) possono essere qualsiasi data, anche a cavallo di 1 anno o anche per più anni.

* L'applicazione database funziona in entrambi i modi perchè è stata progettata appositamente per gestire questa duplice caratteristica dell'attività aziendale.

* In entrambi i casi vi sono 2 archivi direttamente dipendenti dall'archivio Prestazioni e legati a quest'ultimo per mezzo di una relazione uno-a-molti: si tratta dell'archivio DettagliPrestazione e dell'archivio SpesePerPrestazione.

* In questi archivi di livello inferiore o di dettaglio vengono registrate cronologicamente tutte le prestazioni e le spese imputabili a ciascun contratto di prestazione di servizi, con l'indicazione, oltre che della data, del consulente o collaboratore che ha operato la prestazione in favore del cliente ma per conto dello studio o della società di servizi, quindi eventualmente le ore da fatturare, il compenso in Euro e l'articolo di fatturazione previsto.

* L'articolo di fatturazione sarà quello che verrà evidenziato in fattura e sul quale verrà applicata l'IVA, infatti ogni articolo è collegamento tramite un codice IVA ad una tabella esterna, di nome CodiciIVA

* Per quanto riguarda le spese sostenute per conto del cliente, questo possono o meno essere soggette ad IVA e comunque, indipendentemente da questo fatto, sono imputate alla scheda prestazioni e di conseguenza al cliente e allo stempo tempo alla fattura.

* Ma vediamo ora la struttura dei singoli archivi per capire meglio

ArchivioPrestazioni:

(figura 2)

IDPrestazione: chiave primaria univoca. Notate che il cliente (tramite IDCliente) è collegato a monte alla tabella Clienti.

Archivio Dettagli prestazioni:

(figura 3)

Relazione: Dettagli prestazioni!IDPrestazione=Prestazioni!IDPrestazione

Archivio Spese per prestazioni:

(figura 4)

Relazione: Spese per prestazioni!IDPrestazione=Prestazioni!IDPrestazione

Notate inoltre che sia l'archivio Dettagli Prestazioni che l'archivio Spese per prestazione contengono al loro interno un campo chiave esterna per generare i movimenti IVA della fattura che sono rispettivamente IDArticoloFatturazione e IDCodiceSpese.

Ecco le 2 tabelle in modalità visualizzazione foglio dati:

Tabella ArticoliFatturazione:

(figura 5)

Tabella CodiciSpese

(figura 6)

A questo punto non resta che preparapare una query per ciascun sottoreport; tutte le query, tranne quella per la Testa della fattura (qryFattureTesta) dovranno necesseriamente essere filtrate in base ad una maschera, anch'essa riportata sotto, nella quale l'utente può selezionare la prima e l'ultima data dell'intervallo all'interno del quale verranno estratte le prestazioni o le spese effettuate nell'ambito della prestazione e del cliente selezionati e che quindi sono da fatturare, raggruppate per aliquota iva, vediamo come:

I dati relativi all'intestazione della fattura sono ricavati tramite funzioni DLookup che interrogano l'unico record della TabellaGenerale, tabella nella quale sono memorizzate una volta per tutte la Ragione Sociale della società che emette la fattura, l'indirizzo, il cap, la provincia, il comune e la Partita IVA.

La parte di testa che riguarda invece i dati del destinatario della fattura e che si riferisce naturalmente al cliente, vengono forniti dalla query di nome qryFattureTesta, rappresentata in figura 7.

I dati provengono principalmente dall'archivio di appoggio FatturePreparate e dagli archivi Clienti e Prestazioni.

La funzione dell'archivio di appoggio FatturePreparate è quella di permettere l'elaborazione simultanea di gruppi di fatture con lo stesso report, ma qui nella versione semplificata utilizziamo l'archivio FatturePreparate soltanto come una tabellina di appoggio nella quale vengono memorizzati temporaneamente gli estremi della fattura in emissione: Numero, Data, IDCliente, IDPrestazione, CondizioniPagamento, Note, Importo TotaleNettoAPagare, TotaleImponibile, TotaleIVA.

Se la stampa della fattura va a buon fine e si era fatto clic sul pulsante Stampa della maschera Stampa fattura riprodotta più sotto, allora viene richiesto se si vuole l'aggiornamento dell'archivio Fatture Emesse: in questo caso verrà azzerata la tabelle FatturePreparate e aggiunto un nuovo record all'archivio Fatture Emesse dal quale verrà stampato il Registro IVA delle fatture emesse.

Vi facciamo notare inoltre che sia la tabella ArticoliFatturazione,sia la tabella Codice IVA, oltre che un campo di collegamento per la tabella IVA (IDCodiceIVA), hanno anche un campo IDSottoconto, che li collega entrambi al piano dei conti dell'azienda che emette la fattura.

L'archivio Piano de Conti è gestito all'interno di un'altra applicazione database, separata da quella di fatturazione, che è l'applicazione GestioneContabilitàGeneraleEuro, dove sarà possibile generare automaticamente i movimenti contabili relativi alle fatture emesse, anche per la movimentazione dei ricavi e non solo dei movimenti IVA.

Schema del modello finale di arrivo in anteprima di stampa (figura 8)

Vediamo ora come si presenta il Report Fattura nella finestra relativa alla modalità di visualizzazione struttura (figura 9): siccome è molto complesso, l'abbiamo diviso in 3 parti: la testa, il corpo e il piede della fattura-

La testata del Report Fattura (PRIMA PARTE) (figura 9)

Come abbiamo anticipato prima, nella testata, vengono riportati i dati relativi all'emittente ed al destinatario della fattura, quindi il periodo di riferimento cui si riferiscono le prestazioni rese e le spese effettuate.

Il corpo del Report Fattura (SECONDA PARTE) (figura 10)

Nella seconda parte vediamo la Partita IVA del Cliente, il tipo documento (FATTURA o NOTA di ACCREDITO) , a seconda del valore impostato sulla maschera Stampa fattura in alto a sinistra, poi le Condizioni di pagamento, la Data di emissione della Fattura (default=data odierna), la descrizione del Nome della Prestazione (può quindi richiamare i nome del progetto), quindi il Numero progressivo di emissione della fattura, ottenuto prelevando l'ultimo valore dalla tabella generale e sommando 1.

Se la fattura verrà confermata verrà aggiornato in Tabella generale il nuovo ultimo numero progressivo fattura.

A seguire vediamo il primo sottoreport, il cui nome è qryFattureCorpo ed ha la funzione di riepilogare i record provenienti dall'archivio dettagli prestazioni in base all'aliquota iva, ecco la struttura della query qryFattureCorpo (figura 11).
Si tratta in pratica di una query di raggruppamento sugli archivi Dettagli prestazione, Articoli Fatturazione e Codici IVA.

Da sottolineare 2 aspetti importantissimi:

* la condizione filtro :

Between DLookUp("DataInizio";"StampaFattura") And DLookUp("DataFine";"StampaFattura")

sul campo DataIntervento della tabella Dettagli prestazione
(DataInizio e DataFine sono i 2 campi dotati di controllo calendario che vedere più sotto sul piede della maschera Stampa Fatture)

* La verifica che il record sono sia già stata fatturato, controllando il flag: FatturaONotaEmessa su Dettagli prestazione. Se la stampa va a buon fine e si aggiorna l'archivio fatture emesse, allora verrà impostato a Sì il valore del flag.

Il piede del Report Fattura (TERZA PARTE) (figura 12)

Nel piede della fattura vi sono gli altri 2 sottoreport, che nello schema sopra corrispondono a: Sottoreport FatturaTotaliIVA e a Sottoreport FattureSpese.

Per quanto riguarda il funzionamento del secondo, ecco la query: qryFattureSpese il cui funzionamento è analogo alla query qryFattureCorpo vista sopra (figura 13).

Per quanto riguarda invece la query FattureTotaliIVA, trattandosi di una query UNION, rimandiamo a questo altro tutorial, ove peraltro viene trattato lo stesso esempio della fattura:

Vedi tutorial: Query Union o Query Unione
Ed ecco infine la maschera di nome StampaFattura (figura 14), che può essere aperta direttamente dalla finestra database e che ha la funzione, come anticipato, di selezionare dapprima il cliente nei confronti del quale vogliamo emettere fattura, poi a quale prestazione ci riferiamo, quindi confermiamo i valori della data e del numero progressivo proposti ed infine selezioniamo le date di Inizio e di Fine periodo fatturazione (Da data A data:), quindi facciamo click sul pulsante Prepara Fattura e quindi su Anteprima oppure direttamente su Stampa se vogliare stampare subito la fattura.

Se si richiede la Stampa, allora viene anche chiesto se si vuole aggiornare l'archivio della Fatture Emesse, altrimenti l'operazione verrà considerata di prova.

Ed infine il risultato definitivo della fattura in anteprima di stampa (figura 15): se i sottoreport non restituiscono alcun record, naturalmente la fattura non viene stampata perchè viene intercettato l'evento NOData del Report principale, ecco il codice:

Private Sub Report_NoData(Cancel As Integer)
MsgBox "Nessun dato per questo report. Annullamento del report..."
Cancel = -1
End Sub

Per quanto riguarda il calcolo dei campi del piede, si rimanda al tutorial dei report e sottoreport seguente:

Aggiungere un sottoreport ad un Report






Tutorials su Microsoft Access


Home page MC2 E-Learning



Dr.Maurizio Cucchiara

Amministratore unico
MC2 E-Learning S.a r.l.
Formazione per il Web
autore del corso:
"Corso Base di Microsoft Access"
disponibile on line su questo sito
http://www.mc2.it/html/access.html





NOVITA'!

'VIDEO TUTORIAL
DOWNLOAD AREA'

(Fai clic sull'immagine
qui sotto per vedere
una anteprima della
pagina di accesso)



L'accesso è riservato agli iscritti ai corsi on line www.mc2.it

Acquista anche uno solo
dei nostri corsi
per avere immediatamente
accesso alla
'Videotutorial Download Area': è facile, basta un clic:

http://www.mc2.it



Condividi sui social network:

Social buttons



Iscriviti al nostro
canale Youtube!


Iscrivi al nostro canale Youtube

Iscrivimi ora



Potrai restare aggiornato
sui nostri più recenti
video-tutorial su:
Microsoft Access ed Excel
e molto altro...


Cerca sul web con Google: