Pubblicato il 12 Agosto 2021 da Maurizio Matetich

Per creare la fattura elettronica partendo da un database Access ho utilizzato alcune istruzioni base del linguaggio VBA. E’ possibile utilizzarne anche altre ma queste sono quelle che io ho utilizzato.

Per gestire la fatturazione elettronica utilizzo 4 tabelle: dati aziendali, dati cliente, testata fattura, righe fattura
E’ necessario collegarsi a queste tabelle per estrarre i dati. I dati andranno manipolati e poi scritti nel file XML secondo lo standard dell’Agenzia delle Entrate.

Le istruzioni necessarie per creare una fattura elettronica.

1) Pazienza.
Questa non è un’istruzione ma la consiglio sempre prima di iniziare un nuovo lavoro. Con i computer e con il software ci vuole tanta pazienza e concentrazione 😉

2) Dir e MkDir
Devo salvare il file XML in un determinato percorso. Posso controllare se la cartella esiste altrimenti la devo creare.

Dim PercorsoFatture as String
PercorsoFatture=”c:\gestione azienda\fatture\”

If Dir(PercorsoFatture, vbDirectory) <> “” Then
‘MsgBox (“la cartella Esiste!”)
Else
‘MsgBox (“la cartella non esiste!”)
MkDir (PercorsoGenerale)
End If

3) Open e Close
E’ necessario aprire il file di testo dove scrivere le righe della fattura in formato XML.

Open “C:\gestionale\FattureElettroniche\fattura.xml” For Output As #1

………  (elenco istruzioni da scrivere) …..

al termine ricordarsi di chiudere il file di testo
Close #1

4) Collegamento con la tabella contenente i dati
La tabella Testata contiene i dati di intestazione della fattura e anche l’imponibile, l’iva e il totale fattura.

Dim rs1 As DAO.Recordset
Set rs1 = CurrentDb.OpenRecordset(“Testata”, dbOpenTable)
rs1.MoveFirst ‘mi posiziono sul primo record

…… (inserire le istruzioni) …….

alla fine, ricordarsi di chiudere il collegamento

rs2.Close
Set rs2 = Nothing

5) Lettura dei valori dei campi delle tabelle
Dopo il collegamento con la tabella, posso leggere i dati presenti nei vari campi utilizzando l’istruzione:

Dim Numero as Double
Numero = rs1.Fields(“TotaleFattura”)

6) Format
I prezzi vanno espressi con due decimali.

Numero = Format(Numero, “###0.00”)

7) Replace
Tutti i valori in formato numerico devono avere il punto al posto della virgola.

Dim Riga as String
Riga = Replace(Numero, “,”, “.”)

8) Print
Per scrivere le righe nel file XML utilizzo l’istruzione Print. Ad esempio per l’importo totale della fattura utilizzo le seguenti istruzioni:

Numero = rs1.Fields(“TotaleFattura”)
Numero = Format(Numero, “###0.00”)
Riga = Replace(Numero, “,”, “.”)
Print #1, “<ImportoTotaleDocumento>” & Riga & “</ImportoTotaleDocumento>”

9) IsNull
Alcuni tag non vanno scritti se risultano nulli. Ad esempio non tutte le aziende hanno il codice EORI. Quindi faccio un controllo del campo: se ha un valore allora lo scrivo nel file di testo altrimenti non scrivo niente

If Not IsNull(rs1.Fields(“CodiceEORI”)) Then
Print #1, “<CodEORI>” & rs1.Fields(“CodiceEORI”) & “</CodEORI>”
End If

10) Right, Mid, Left
Le date vanno espresse nel formato anno-mese-giorno e quindi devo effettuare una conversione della mia data che di solito è nel formato giorno-mese-anno:

Dim Riga as String
Riga = Right(rs1.Fields(“DataFattura”), 4) & “-” & Mid(rs1.Fields(“DataFattura”), 4, 2) & “-” & Left(rs1.Fields(“DataFattura”), 2)
Print #1, “<Data>” & Riga & “</Data>”

11) If – Then – Else
La cara vecchia istruzione if-then-else permette di controllare cosa scrivere.
Ad es. posso controllare se il documento è una fattura oppure una nota di credito

Riga = rs1.Fields(“TipoDocumento”)
If Riga = “Fattura” Then
Print #1, “<TipoDocumento>” & “TD01” & “</TipoDocumento>”
else
Print #1, “<TipoDocumento>” & “TD04” & “</TipoDocumento>”
End If

12) Do While
Questa istruzione esegue un ciclo e permette di leggere tutte le righe della fattura che io ho salvato nella tabella Righe.

Set rs2 = CurrentDb.OpenRecordset(“Righe”, dbOpenTable)

NumeroLinea = 1
TipoCodiceArticolo = “Riga”

Do While Not rs2.EOF

If Nz(rs2.Fields(“Quantità”)) > 0 Then          ‘utilizza solo le righe con Quantità positiva

Riga = “<DettaglioLinee>”
Print #1, Riga

Print #1, “<NumeroLinea>” & NumeroLinea & “</NumeroLinea>”
NumeroLinea = NumeroLinea + 1

Riga = “<CodiceArticolo>”
Print #1, Riga
Print #1, “<CodiceTipo>” & TipoCodiceArticolo & “</CodiceTipo>”

Riga = rs2.Fields(“CodiceArticolo”)
Print #1, “<CodiceValore>” & Riga & “</CodiceValore>”
Riga = “</CodiceArticolo>”
Print #1, Riga

Riga = rs2.Fields(“DescrizioneArticolo”)
Print #1, “<Descrizione>” & Riga & “</Descrizione>”

… altri valori

Riga = “</DettaglioLinee>”
Print #1, Riga

End If

rs2.MoveNext
Loop

Conclusione

Utilizzando queste istruzioni diventa semplice creare il file XML della fattura elettronica. Ci vuole solo un po’ di pazienza per seguire con attenzione il tracciato dell’Agenzia delle Entrate.

Hai qualche dubbio? Fissa un appuntamento per una consulenza con me

Buon lavoro ed enjoy with vba!

P.S. se fate un copia-incolla del codice ricordatevi che alle volte le virgolette “si trasformano”.