Fattura elettronica XML Datagridview

di il
18 risposte

Fattura elettronica XML Datagridview

Buongiorno a tutti!
Sto cercando di estrarre specifici elementi dalle fatture elettroniche XML nella cartella "fattureXML", per inserirli in un datagridview, nel seguente ordine: Denominazione, FormatoTrasmissione, Telefono, Comune, Telefono e Email.

-<FatturaElettronicaHeader>
-<DatiTrasmissione>
-<IdTrasmittente>
<IdPaese>IT</IdPaese>
<IdCodice>1020304050</IdCodice>
-</IdTrasmittente>
-<ProgressivoInvio>01GGAA</ProgressivoInvio>
-<FormatoTrasmissione>AABBCC</FormatoTrasmissione>
-<ContattiTrasmittente>
<Telefono>1020304050</Telefono
<Email></Email>
</ContattiTrasmittente>
</DatiTrasmissione>
-<CedentePrestatore>
-<DatiAnagrafici>
-<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>123456789</IdCodice>
</IdFiscaleIVA>
<CodiceFiscale>4928569285</CodiceFiscale>
-<Anagrafica>
<Denominazione>PincoPallino SRL</Denominazione
</Anagrafica>
<RegimeFiscale>RF01</RegimeFiscale>
</DatiAnagrafici>
-<Sede>
<Indirizzo>Viale Inventato, 50</Indirizzo>
<CAP>50102</CAP>
<Comune>Esempio</Comune>
<Provincia>XXX</Provincia>
<Nazione>IT</Nazione>
</Sede>
-<IscrizioneREA>
<Ufficio>XXX</Ufficio>
<NumeroREA>090807</NumeroREA
<CapitaleSociale>50000.00</CapitaleSociale
<SocioUnico>AB</SocioUnico
<StatoLiquidazione>BOH</StatoLiquidazione>
</IscrizioneREA>
-<Contatti>
<Telefono>0123456789</Telefono>
<Fax>010203456789</Fax
<Email></Email>
</Contatti>
</CedentePrestatore>
-</FatturaElettronicaHeader>

Sto provando da circa una settimana, ho cercato ovunque su internet e su alcuni libri, ma non riesco ad ottenere un risultato decente.

Attualmente sto provando con questo codice:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Dim fattureXML As String
fattureXML = "C:\Users\Tizio\Desktop\Files\fattureXML"

For each FattureXML in fattureXML
Dim opf2 As New OpenFileDialog
opf2.Filter = "XML FILES | *.xml"
If opf2.ShowDialog = DialogResult.OK Then
Dim bs As New BindingSource
Dim editflag As Boolean = False
'Dim filepath As String = opf2.FileName
Dim deflection As New DataSet
Try
deflection.ReadXml(opf2.FileName)
bs.DataSource = deflection.Tables(5)
DataGridView2.DataSource = bs
Catch ex As Exception
MsgBox("Errore")
End Try
End If
End Sub
End For

Domanda forse sciocca: per le cartelle esiste un percorso C:\Users\Tizio\Desktop\Files\MieiFiles, esiste anche per i file XML, per raggiungere più specifici dati, ad esempio quelli che ho indicato all'inizio della discussione?

Spero possiate aiutarmi, sono davvero in difficoltà. Vi ringrazio in anticipo.
Lorenzo

18 Risposte

  • Re: Fattura elettronica XML Datagridview

    Innazitutto quando pubblichi del codice devi racchiuderlo tra i tag specifici, così come hai fatto tu è illeggile.
    Poi non pubblicare codice che non ci serve, metti solo il codice essenziale, la parte del OpenFileDialog è ininfluente per il problema che hai.
    Dando un'occhiata al codice XML che hai pubblicato mi sembra che sia un oggetto ben definito con livelli e sottolivelli, non credo quindi che sia un codice XML di una tabella visualizzabile quindi con un DataGridView.
    Da dove hai ricavato quel Tables(5) ??
    Hai analizzato le Tables che sono presenti nel Dataset ??
    Secondo me (se ho capito bene), devi prima leggere il file XML, analizzarlo, estrarre i dati che ti servono mettendoli su di una DataTable e poi visualizzarla tramite il DataGridView

    Ciao ciao
    Sergio
  • Re: Fattura elettronica XML Datagridview

    Ciao Sergio, grazie per la risposta.
    Come avrai intuito sono assolutamente un neofita della programmazione...e sì, vorrei comunque importare in un gridview degli specifici elementi, quelli che ho indicato nel post...sto diventando matto...potresti aiutarmi?
    Ti ringrazio tanto.
    Lorenzo
  • Re: Fattura elettronica XML Datagridview

    Scusate, forse sono stato poco chiaro...ho "solo" bisogno di estrarre specifiche parole e inserirle in un datagridview..
    Spero davvero possiate aiutarmi, è molto importante, ho cercato ovunque e non riesco a farlo...grazie in anticipo a chi mi aiuterà.
    Lorenzo
  • Re: Fattura elettronica XML Datagridview

    Lorenzo91 ha scritto:


    ho "solo" bisogno di estrarre specifiche parole e inserirle in un datagridview..
    E quali sono? (riferite all'esempio che hai pubblicato)
  • Re: Fattura elettronica XML Datagridview

    Sto cercando di estrarre specifici elementi dalle fatture elettroniche XML nella cartella "fattureXML", per inserirli in un datagridview, nel seguente ordine: Denominazione, FormatoTrasmissione, Telefono, Comune, Telefono e Email.

    Sto cercando di creare un ciclo che, per ogni fattura XML nella cartella "fattureXML" estragga quei dati e li inserisca in un datagridview.

    Grazie per la risposta Alka.
  • Re: Fattura elettronica XML Datagridview

    Lorenzo91 ha scritto:


    Sto cercando di creare un ciclo che, per ogni fattura XML nella cartella "fattureXML" estragga quei dati e li inserisca in un datagridview.
    Ok, quindi Divide et Impera: parti a studiare l'accesso ai file in .NET in lettura, poi leggi come fare il parsing di file XML e leggerne i dati, magari salvandoli all'interno di propri oggetti/strutture, poi leggi come effettuare il binding dei suddetti oggetti al controllo DataGridView.
  • Re: Fattura elettronica XML Datagridview

    Ok, grazie per il consiglio.
    Tuttavia, ho scritto qua perché quella specifica cosa non mi riesce. Per adesso ho creato una classe, vi ho importato la struttura XML della fattura elettronica e in Form1.vb sto utilizzando il seguente codice:
    Dim opf As New OpenFileDialog
    
            opf.Filter = "XML File | *.xml"
    
            opf.FileName = ""
    
            If opf.ShowDialog() = DialogResult.OK Then
    
                Try
                    Dim XDoc As XDocument = XDocument.Load(opf.FileName)
    
                    For Each nodo In XDoc.Root.Descendants("DettaglioLinee")
    
                        Dim Descrizione = nodo.Element("Descrizione")
                        Dim Quantita = nodo.Element("Quantita")
                        Dim UnitaMisura = nodo.Element("UnitaMisura")
                        Dim PrezzoUnitario = nodo.Element("PrezzoUnitario")
                        Dim AliquotaIVA = nodo.Element("AliquotaIVA")
                        fatture.Add(New FattureRecord(Descrizione, Quantita, UnitaMisura, PrezzoUnitario, AliquotaIVA))
    
                    Next
    
                    Dim binder As BindingSource = New BindingSource
                    binder.DataSource = fatture
                    DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
                    DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
                    DataGridView1.DataSource = binder.DataSource
    Il problema è che dovrei recuperare anche altri campi, indentati in DettaglioLinee, ossia <Tipo>SC</Tipo e <Percentuale>2.00</Percentuale>", elementi che non riesco ad estrarre. Tutti gli altri sono riuscito a riportarli in un datagridview. Potreste aiutarmi? Grazie.
    <FatturaElettronicaBody>
        <DatiGenerali>
          <DatiGeneraliDocumento>
            <TipoDocumento>TD24</TipoDocumento>
            <Divisa>EUR</Divisa>
            <Data>2021-10-12</Data>
            <Numero>20160/2021/FAT</Numero>
            <ImportoTotaleDocumento>3.54</ImportoTotaleDocumento>
            <Causale>FATTURA VENDITA MERCE</Causale>
          </DatiGeneraliDocumento>
          <DatiDDT>
            <NumeroDDT>7183</NumeroDDT>
            <DataDDT>2021-10-11</DataDDT>
          </DatiDDT>
        </DatiGenerali>
        <DatiBeniServizi>
          <DettaglioLinee>
            <NumeroLinea>1</NumeroLinea>
            <CodiceArticolo>
              <CodiceTipo>INTERNO</CodiceTipo>
              <CodiceValore>030014</CodiceValore>
            </CodiceArticolo>
            <Descrizione>CURCUMA POLVERE DISPENSER GR 600 GARUTI</Descrizione>
            <Quantita>1.000</Quantita>
            <UnitaMisura>PZ</UnitaMisura>
            <PrezzoUnitario>3.35400</PrezzoUnitario>
            <ScontoMaggiorazione>
              <Tipo>SC</Tipo>
              <Percentuale>2.00</Percentuale>
            </ScontoMaggiorazione>
            <ScontoMaggiorazione>
              <Tipo>SC</Tipo>
              <Percentuale>2.00</Percentuale>
            </ScontoMaggiorazione>
            <PrezzoTotale>3.22</PrezzoTotale>"
  • Re: Fattura elettronica XML Datagridview

    E in sostanza, dovrei riuscire fare questo per tutte le fatture XML che ho in una cartella denominata "Fatture XML".

    Spero qualcuno mi dia un piccolo aiuto, è per la tesi di laurea..Grazie ancora.
  • Re: Fattura elettronica XML Datagridview

    Innanzitutto per avere una idea più precisa avremmo bisogno di un file XML reale su cui fare le considerazioni, hai postato due XML completamente diversi uno dall'altro, per cui non ho idea di quale considerare
  • Re: Fattura elettronica XML Datagridview

    Il secondo, l'ultimo, grazie!
  • Re: Fattura elettronica XML Datagridview

    Scusate la confusione. Sono riuscito ad andare avanti.

    Comunque come posso importare in un datagridview i dati presenti in questo ciclo For? E come posso estrarre, importandoli sempre nel datagridview, tututti i campi "Descrizione prodotto" e "Prezzo unitario", sempre nel datagridview? Se uso il ciclo per "Descrizione" (prodotti) e Prezzo unitario, nel grid mi compare solo il primo o l'ultimo campo!
    Forse è per voi una domanda banale, ma non so dove sbatterci la testa.
    Mi dareste un enorme aiuto, sto preparando la tesi su questa roba!

    Grazie infinite.
     nomefor = fattura.FatturaElettronicaHeader.CedentePrestatore.DatiAnagrafici.Anagrafica.Denominazione
            iva = fattura.FatturaElettronicaHeader.CedentePrestatore.DatiAnagrafici.IdFiscaleIVA.IdCodice
            Dim invnumber, importo, data, attch
            For Each doc In fattura.FatturaElettronicaBody
                Dim datidocumento = doc.DatiGenerali.DatiGeneraliDocumento
                invnumber = datidocumento.Numero
                importo = datidocumento.ImportoTotaleDocumento
                data = datidocumento.Data
    
            Next
  • Re: Fattura elettronica XML Datagridview

    Si, ma avrei bisogno di un file XML reale, quello che hai pubblicato è solo una parte, non ci sono le chiusure
  • Re: Fattura elettronica XML Datagridview

    Ciao SirJo, ti allego un file reale XML (con dati inventati)
    <?xml version="1.0" encoding="UTF-8"?>
    <p:FatturaElettronica versione="FPR12" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
    xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.7"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 fatturaordinaria_v1.2.xsd ">
      <FatturaElettronicaHeader>
        <DatiTrasmissione>
          <IdTrasmittente>
            <IdPaese>IT</IdPaese>
            <IdCodice>61234556</IdCodice>
          </IdTrasmittente>
          <ProgressivoInvio>09LpA</ProgressivoInvio>
          <FormatoTrasmissione>1938</FormatoTrasmissione>
          <CodiceDestinatario>102938</CodiceDestinatario>
          <ContattiTrasmittente>
            <Telefono>0111223344</Telefono>
            <Email>pincopallino@gmail.com</Email>
          </ContattiTrasmittente>
        </DatiTrasmissione>
        <CedentePrestatore>
          <DatiAnagrafici>
            <IdFiscaleIVA>
              <IdPaese>IT</IdPaese>
              <IdCodice>001122334455</IdCodice>
            </IdFiscaleIVA>
            <CodiceFiscale>0109080706</CodiceFiscale>
            <Anagrafica>
              <Denominazione>PINCOPALLINO SRL</Denominazione>
            </Anagrafica>
            <RegimeFiscale>RF123</RegimeFiscale>
          </DatiAnagrafici>
          <Sede>
            <Indirizzo>VIALE INVENTATO 6</Indirizzo>
            <CAP>50000</CAP>
            <Comune>NONESISTE</Comune>
            <Provincia>BOH</Provincia>
            <Nazione>IT</Nazione>
          </Sede>
          <IscrizioneREA>
            <Ufficio>BOHX</Ufficio>
            <NumeroREA>12345</NumeroREA>
            <CapitaleSociale>10400.00</CapitaleSociale>
            <SocioUnico>SM</SocioUnico>
            <StatoLiquidazione>LN</StatoLiquidazione>
          </IscrizioneREA>
          <Contatti>
            <Telefono>0522304969</Telefono>
            <Fax>0585857667</Fax>
            <Email>PINCOPALLINO1@GMAIL.COM</Email>
          </Contatti>
        </CedentePrestatore>
        <CessionarioCommittente>
          <DatiAnagrafici>
            <IdFiscaleIVA>
              <IdPaese>IT</IdPaese>
              <IdCodice>2010302040</IdCodice>
            </IdFiscaleIVA>
            <CodiceFiscale>109087060</CodiceFiscale>
            <Anagrafica>
              <Denominazione> PIPPOPLUTO SRL</Denominazione>
            </Anagrafica>
          </DatiAnagrafici>
          <Sede>
            <Indirizzo>VIALE INVENTATO2 9</Indirizzo>
            <CAP>54037</CAP>
            <Comune>COMUNE INVENTATO</Comune>
            <Provincia>MAH</Provincia>
            <Nazione>IT</Nazione>
          </Sede>
        </CessionarioCommittente>
      </FatturaElettronicaHeader>
      <FatturaElettronicaBody>
        <DatiGenerali>
          <DatiGeneraliDocumento>
            <TipoDocumento>TD24</TipoDocumento>
            <Divisa>EUR</Divisa>
            <Data>2020-11-01</Data>
            <Numero>10205/2020/FAT</Numero>
            <ImportoTotaleDocumento>3.54</ImportoTotaleDocumento>
            <Causale>FATTURA VENDITA MERCE</Causale>
          </DatiGeneraliDocumento>
          <DatiDDT>
            <NumeroDDT>7183</NumeroDDT>
            <DataDDT>2021-10-11</DataDDT>
          </DatiDDT>
        </DatiGenerali>
        <DatiBeniServizi>
          <DettaglioLinee>
            <NumeroLinea>1</NumeroLinea>
            <CodiceArticolo>
              <CodiceTipo>INTERNO</CodiceTipo>
              <CodiceValore>10203</CodiceValore>
            </CodiceArticolo>
            <Descrizione>ARACHIDI SALATE</Descrizione>
            <Quantita>1.000</Quantita>
            <UnitaMisura>PZ</UnitaMisura>
            <PrezzoUnitario>3.35400</PrezzoUnitario>
            <ScontoMaggiorazione>
              <Tipo>SC</Tipo>
              <Percentuale>2.00</Percentuale>
            </ScontoMaggiorazione>
            <ScontoMaggiorazione>
              <Tipo>SC</Tipo>
              <Percentuale>2.00</Percentuale>
            </ScontoMaggiorazione>
            <PrezzoTotale>3.22</PrezzoTotale>
            <AliquotaIVA>10.00</AliquotaIVA>
             <NumeroLinea>2</NumeroLinea>
            <CodiceArticolo>
              <CodiceTipo>INTERNO</CodiceTipo>
              <CodiceValore>2030</CodiceValore>
            </CodiceArticolo>
            <Descrizione>POPCORN</Descrizione>
            <Quantita>1.000</Quantita>
            <UnitaMisura>KG</UnitaMisura>
            <PrezzoUnitario>4,70</PrezzoUnitario>
            <PrezzoTotale>4,70</PrezzoTotale>
            <AliquotaIVA>10.00</AliquotaIVA>      
          </DettaglioLinee>
          <DatiRiepilogo>
            <AliquotaIVA>10.00</AliquotaIVA>
            <ImponibileImporto>3.22</ImponibileImporto>
            <Imposta>0.32</Imposta>
            <EsigibilitaIVA>I</EsigibilitaIVA>
          </DatiRiepilogo>
        </DatiBeniServizi>
        <DatiPagamento>
          <CondizioniPagamento>TP02</CondizioniPagamento>
          <DettaglioPagamento>
            <ModalitaPagamento>MP01</ModalitaPagamento>
            <DataScadenzaPagamento>2021-10-12</DataScadenzaPagamento>
            <ImportoPagamento>3.54</ImportoPagamento>
          </DettaglioPagamento>
        </DatiPagamento>
        <Allegati>
          <NomeAttachment>ZIPINVENTATO.zip</NomeAttachment>
          <DescrizioneAttachment>DOCUMENTO ALLEGATO</DescrizioneAttachment>
          <Attachment>
    	</Attachment>
        </Allegati>
      </FatturaElettronicaBody>
    </p:FatturaElettronica>
    
    Sto seguendo quello che viene riportato in questa guida

    https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_net-fattura-elettronica-leggere-il-file-_1617.aspx

    usando questo codice:
    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
    e adattandolo alle mie esigenze:
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    
            Dim DettaglioProdotti As String = ""
            For Each DescrProd In fatturaElettronica.FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee
    
                Dim descrizione = DescrProd.Descrizione
                Dim quantita = DescrProd.Quantita
                Dim PrUnit = DescrProd.PrezzoUnitario
    
                Dim dt As New DataTable
                dt.Columns.Add("Descrizione")
                dt.Columns.Add("Quantità")
                dt.Columns.Add("Prezzo unitario")
    
                dt.Rows.Add(descrizione, quantita, PrUnit)
                DataGridView1.DataSource = dt
            Next
        End Sub
    Risultato: nel Datagridview1 ottengo solo una riga, contenente i dati solo del prodotto "ARACHIDI SALATE" e non anche di "POPCORN".

    Nella guida, il ciclo For each permette di visualizzare i campi "Descrizione", "Prezzo unitario" e "Quantità" in una msgbox, mentre io vorrei inserirli nel dtgridview, ma non riesco a farlo.

    Spero di esser stato più chiaro. Mi scuso per la poca chiarezza del post e dei successivi commenti, mi sto approcciando da poco a questo mondo.

    Grazie ancora.

    Lorenzo.
  • Re: Fattura elettronica XML Datagridview

    Il codice dentro al ciclo "For Each" viene eseguito per ogni prodotto, per cui esegui Dim dt as New DataTable per ogni prodotto presente e quindi distruggi e ricrei la tabella ad ogni prodotto
    devi quindi mettere quella riga (e le 3 righe seguenti) fuori dal ciclo FOR
    anche la riga DataGridView1.DataSource = dt devi portarla fuori dal ciclo FOR, va eseguita dopo il NEXT

    però questi errori sono errori di principiante, cose che scopri eseguendo il codice step-by-step, sono le prime cose che si imparano
Devi accedere o registrarti per scrivere nel forum
18 risposte