.Net Fattura elettronica leggere il file xml con C# e VB.Net

Articolo introduttivo alla gestione della fattura elettronica, obbligatoria dal primo gennaio 2019, nel caricare i dati presenti nel file xml.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

Dal primo di gennaio 2019, è obbligatorio per tutti la fattura elettronica, anche tra privati, tranne per alcune categorie, i quali sono esenti.
Molti sono i programmi a pagamento che permettono la gestione della fatturazione elettronica, come anche i servizi online. L’agenzia delle entrate fornisce anche la gestione delle fatture, gratuitamente.
Fatta questa premessa, sulla fatturazione elettronica, che crediamo il lettore già conosce, l’articolo vuole fornire uno scenario ben diverso, ossia la possibilità di leggere i dati della fattura che si riceve, che sono presenti nel file Xml.
In questo modo possiamo estendere le nostre applicazioni con la lettura dei dati, e magari gestire la parte contabilità ed assistenza del cliente.
Vedremo come tramite poche righe di codice riusciamo a leggere i file di tipo fattura elettronica.
Apriamo Visual Studio e selezioniamo per il linguaggio di nostro interesse il progetto di tipo “Windows application”, in modo che si crea un progetto eseguibile.


Stesura di codice


Al termine della creazione del progetto, andiamo nella finestra di “Esplora soluzione” e tramite il tasto destro sul nome del progetto, selezioniamo dal menu la voce “Aggiungi” e poi il sottomenu “Classe” .
La classe, ci permetterà di utilizzare la tecnica della serializzazione, ossia mappare il file xml con le proprietà di una classe, e quindi associare i dati.
Aggiungiamo una classe denominata “Fattura”.
 

VB.Net
Public Class Fattura

End Class
C#
public class Fattura
{

}

Ora dobbiamo rendere la classe idonea che riporti le proprietà come i nodi del file contenente i valori presenti in tale file.
Una funzionalità molto interessante di Visual Studio, è quella di trasformare un file di tipo “xml” in classe.
Nello spazio presente tra la dichiarazione di classe e fine, andremo ad inserire le classi e proprietà che Visual Studio in automatico andrà a creare.
Apriamo un file xml di fatturazione elettronica qualsiasi, selezioniamo tutto il file (dall’inizio alla fine) e copiamo i dati in memoria, passiamo a Visual Studio, ci posizioniamo nello spazio presente nella classe, e facciamo click sul menu modifica e poi Incolla, tra i vari sottomenu, facciamo click sul sottomenu denominato “Incolla xml come classi” il tutto come mostrato in figura 1.

Figura 1 – La voce menu per trasformare xml in classi

Tale funzionalità realizzerà in maniera immediata le classi e proprietà per gestire i file xml tramite la tecnica della serializzazione.
Questa funzionalità si può fare per entrambi i linguaggi, e come si vede in figura 2 e 3 il risultato sarà ottimale

Figura 2 – La generazione delle classi in VB.Net

Figura 3 - La generazione delle classi in C#


Ora non ci resta che scrivere il codice per estrapolare i dati dai file di fattura elettronica.
Per utilizzare alcune classi, dobbiamo inserire lo spazio dei nomi per la servializzazione dei file e xml, qui di seguito per entrambi linguaggi.

VB.Net
Imports System.Xml.Serialization
Imports System.IO
C#
using System.Xml.Serialization;
using System.IO;

Andiamo nella nostra Form, ed aggiungiamo un pulsante, all’evento click del pulsante andremo a scrivere il codice che trasforma il file xml relativo alla fattura, in un oggetto nel quale le proprietà sono valorizzati con i dati presenti nel file xml.
In particolare, vedremo come rilevare il nome del fornitore, il totale della fattura, i singoli prodotti acquistati, con quantità, prezzo per ogni prodotto e totale per ogni prodotto.
Per la gestione del file xml, utilizzeremo le classi xmserializer, che tramite il metodo deserialize trasforma l’oggetto StreamReader, che permette di leggere il file xml, in un oggetto della classe specificata.
Qui di seguito si riporta il codice per entrambi i linguaggi.

VB.Net
Private Sub BtnCarica_Click(sender As Object, e As EventArgs) Handles BtnCarica.Click
Try
Dim PercorsoFile As String = "D:\FattureRicevute\It999fattura.xml"
Dim fatturaElettronica As Fattura.FatturaElettronica = New Fattura.FatturaElettronica()
Dim serializzare As XmlSerializer = New XmlSerializer(GetType(Fattura.FatturaElettronica))
Dim readerLettura As StreamReader = New StreamReader(PercorsoFile)
fatturaElettronica = CType(serializzare.Deserialize(readerLettura), Fattura.FatturaElettronica)
readerLettura.Close()
Dim NomeFornitore As String = fatturaElettronica.FatturaElettronicaHeader.CedentePrestatore.DatiAnagrafici.Anagrafica.Denominazione
Dim totaleImporto As Decimal = fatturaElettronica.FatturaElettronicaBody.DatiGenerali.DatiGeneraliDocumento.ImportoTotaleDocumento
Dim Prodotti As String = ""
For Each DescrizioneProdotti In fatturaElettronica.FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee
Prodotti &= "NomeProdotto: " & DescrizioneProdotti.Descrizione & " Quantità: " & DescrizioneProdotti.Quantita & " Prezzo per singolo prodotto: " & DescrizioneProdotti.PrezzoUnitario & " Prezzo Totale: " & DescrizioneProdotti.PrezzoTotale & vbCrLf
Next
MessageBox.Show(Prodotti)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
C#
private void BtnCarica_Click(object sender, EventArgs e)
{
try
{
string PercorsoFile = "D:\\FattureRicevute\\It999fattura.xml";
Fattura.FatturaElettronica fatturaElettronica = new Fattura.FatturaElettronica();
XmlSerializer serializzare = new XmlSerializer(typeof(Fattura.FatturaElettronica));
StreamReader readerLettura = new StreamReader(PercorsoFile);
fatturaElettronica = (Fattura.FatturaElettronica)serializzare.Deserialize(readerLettura);
readerLettura.Close();
string NomeFornitore = fatturaElettronica.FatturaElettronicaHeader.CedentePrestatore.DatiAnagrafici.Anagrafica.Denominazione;
decimal totaleImporto = fatturaElettronica.FatturaElettronicaBody.DatiGenerali.DatiGeneraliDocumento.ImportoTotaleDocumento;
string Prodotti = "";
foreach (var DescrizioneProdotti in fatturaElettronica.FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee)
Prodotti += "NomeProdotto: " + DescrizioneProdotti.Descrizione + " Quantità: " + DescrizioneProdotti.Quantita + " Prezzo per singolo prodotto: " + DescrizioneProdotti.PrezzoUnitario + " Prezzo Totale: " + DescrizioneProdotti.PrezzoTotale + "\r";
MessageBox.Show(Prodotti);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

Conclusioni


L’articolo ha voluto fornire al lettore le basi per realizzare programmi o funzionalità per la gestione dei file relativi alla fattura elettronica. Tramite la possibilità di trasformare il file in una classe, con la quale le varie proprietà avranno i dati presenti nel file xml, la gestione delle fatture elettroniche diventa molto più semplice e di facile gestione.