+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Importazione fattura elettronica xml

  1. #1
    SILVIO non è in linea Novello
    Post
    45

    Cool Importazione fattura elettronica xml

    Ciao a tutti

    Sono quasi riuscito ad importare il dettaglio delle linee delle fatture elettroniche,
    facendo un ciclo di esse.

    Purtroppo a volte alcuni campi "nodi" nel file xml vengono saltati
    qui sotto numerolinea1 non è prevista la quantita
    mentre numerolinea2 esiste la quantita

    -<DatiBeniServizi>
    -<DettaglioLinee>
    <NumeroLinea>1</NumeroLinea>
    <Descrizione>Riferimento: DDT Nr. 000503 del 07/06/2019</Descrizione>
    <PrezzoUnitario>0.00000000</PrezzoUnitario>
    <PrezzoTotale>0.00000000</PrezzoTotale>
    <AliquotaIVA>22.00</AliquotaIVA>
    </DettaglioLinee>

    -<DettaglioLinee>
    <NumeroLinea>2</NumeroLinea>
    <Descrizione>Cilindro freno ant. sx</Descrizione>
    <Quantita>1.00000000</Quantita>
    <UnitaMisura>PZ</UnitaMisura>
    <PrezzoUnitario>119.00000000</PrezzoUnitario>
    <PrezzoTotale>119.00000000</PrezzoTotale>
    <AliquotaIVA>22.00</AliquotaIVA>
    </DettaglioLinee>

    Facendo il ciclo
    i = 0
    'Ciclo le "NumeroLinea"
    Do While i < NrLinea
    Forms![__]![__].Form!Descrizione = ARTICOLOTROVATO
    Forms![__]![__].Form!QTA = Replace(xmlDoc.documentElement.SelectNodes("Fattur aElettronicaBody/DatiBeniServizi/DettaglioLinee/Quantita").ITEM(i).Text, ".", ",")
    i = i + 1

    per intercettare i valori
    se il nodo quantita non esiste da errore

    "Errore di run-time '91':
    Variabile oggetto o variabile del blocco With non impostata"

    Dove devo inserire o impostare la variabile ?
    Dovrei fare in modo che se quantita non esiste salti la riga

    Grazie in anticipo

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,046
    Scusa ma usi DOM e cicli le righe...?
    Usa DOM per cilclare e vedrai che funziona tutto.
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  3. #3
    SILVIO non è in linea Novello
    Post
    45
    Si
    apro xml così

    Ti invio sub
    (ho preso spunto da una vecchia discussione di Alexander23 "VBA Access Importare XML"

    _-----------
    Dim DettaglioLinee As IXMLDOMNodeList
    Dim NumeroLinea As IXMLDOMNode
    Dim Dati() As String
    Dim Contatore As Long
    Dim strSQL As String
    Dim strSqlFT As String
    Dim LngFATFOR As Long
    Dim Testo As String


    Dim xmlDoc As DOMDocument
    Dim xmlElement As IXMLDOMElement
    Dim Rs As Recordset
    Set xmlDoc = New MSXML2.DOMDocument
    xmlDoc.async = False
    xmlDoc.validateOnParse = False
    NOMEFILE = FOLDERDOC & Me.lstFilesDirectory
    Verifica = xmlDoc.Load(NOMEFILE)
    If Not Verifica Then
    MsgBox "NON E' POSSIBILE LEGGERE IL FILE XML"
    Exit Sub
    End If
    Set xmlElement = xmlDoc.documentElement


    '-------------------
    'CodiceFiscale Partita Iva
    FORNIT = xmlElement.SelectSingleNode("FatturaElettronicaHea der/CedentePrestatore/DatiAnagrafici/IdFiscaleIVA/IdCodice").Text
    forpae = xmlElement.SelectSingleNode("FatturaElettronicaHea der/CedentePrestatore/DatiAnagrafici/IdFiscaleIVA/IdPaese").Text
    ForSocieta = xmlElement.SelectSingleNode("FatturaElettronicaHea der/CedentePrestatore/DatiAnagrafici/Anagrafica/Denominazione").Text
    Indirizzo = xmlElement.SelectSingleNode("FatturaElettronicaHea der/CedentePrestatore/Sede/Indirizzo").Text
    CAP = xmlElement.SelectSingleNode("FatturaElettronicaHea der/CedentePrestatore/Sede/CAP").Text
    Comune = xmlElement.SelectSingleNode("FatturaElettronicaHea der/CedentePrestatore/Sede/Comune").Text
    Provincia = xmlElement.SelectSingleNode("FatturaElettronicaHea der/CedentePrestatore/Sede/Provincia").Text
    PIVAPAESE = forpae & FORNIT

    TROVATO = DLookup("[IDFORNITORE]", "Q_ELENCO_FORNITORI", "[PARIVA] = '" & PIVAPAESE & "'") 'controllo se esiste il Fornitore PIVA per PAESE

    If IsNull(TROVATO) Then 'se non esiste il Fornitore lo inserisco
    MsgBox "Aggiungere Nuovo Fornitore"
    DoCmd.OpenForm "M_NUOVO_FORNITORE", acNormal, "", "", , acNormal
    Forms![M_NUOVO_FORNITORE].Società = ForSocieta
    Forms![M_NUOVO_FORNITORE].Indirizzo = Indirizzo
    Forms![M_NUOVO_FORNITORE].Piva = FORNIT
    Forms![M_NUOVO_FORNITORE].CAP = CAP
    Forms![M_NUOVO_FORNITORE].[Stato/Provincia] = Provincia
    Forms![M_NUOVO_FORNITORE].[Città] = Comune

    'Dim Applicazione As String
    'Applicazione = "C:\Program Files\internet explorer\iexplore.exe " & NOMEFILE
    'Call Shell(Applicazione, 1)

    'DoCmd.Close
    Exit Sub

    'TESTATA__________________________

    End If
    DoCmd.OpenForm "M_NUOVA_FATTURA_FORNITORI", acNormal, "", "", , acNormal
    StrSocieta = xmlElement.SelectSingleNode("FatturaElettronicaHea der/CedentePrestatore/DatiAnagrafici/Anagrafica/Denominazione").Text
    'Indirizzo = xmlElement.SelectSingleNode("FatturaElettronicaHea der/CedentePrestatore/Sede/Indirizzo").Text
    'CAP = xmlElement.SelectSingleNode("FatturaElettronicaHea der/CedentePrestatore/Sede/CAP").Text
    'Comune = xmlElement.SelectSingleNode("FatturaElettronicaHea der/CedentePrestatore/Sede/Comune").Text
    'Provincia = xmlElement.SelectSingleNode("FatturaElettronicaHea der/CedentePrestatore/Sede/Provincia").Text
    'Nazione = xmlElement.SelectSingleNode("FatturaElettronicaHea der/CedentePrestatore/Sede/Nazione").Text
    'sqltxt = "insert into T_FORNITORI (idcodice,denominazione,indirizzo,cap,comune,provi ncia,nazione) values (""" & FORNIT & """,'" & Denominazione & "','" & Indirizzo & "','" & CAP & "','" & Comune & "','" & Provincia & "','" & Nazione & "')"
    'DoCmd.RunSQL sqltxt




    DoCmd.SelectObject acForm, "M_NUOVA_FATTURA_FORNITORI"
    lngIDfor = DLookup("[IDFORNITORE]", "Q_ELENCO_FORNITORI", "[PARIVA] = '" & PIVAPAESE & "'")
    lngIDMODP = DLookup("[IDMODPAGAMENTO]", "Q_ELENCO_FORNITORI", "[PARIVA] = '" & PIVAPAESE & "'")
    strNumFatt = xmlElement.SelectSingleNode("FatturaElettronicaBod y/DatiGenerali/DatiGeneraliDocumento/Numero").Text
    datDatFatt = Format(xmlElement.SelectSingleNode("FatturaElettro nicaBody/DatiGenerali/DatiGeneraliDocumento/Data").Text, "dd/mm/yyyy")
    strImportoTotaleDocumento = (Replace(xmlElement.SelectSingleNode("FatturaElett ronicaBody/DatiGenerali/DatiGeneraliDocumento/ImportoTotaleDocumento").Text, ".", ","))
    strImpagamento = (Replace(xmlElement.SelectSingleNode("FatturaElett ronicaBody/DatiPagamento/DettaglioPagamento/ImportoPagamento").Text, ".", ","))

    Forms![M_NUOVA_FATTURA_FORNITORI].IDFORNITORE = lngIDfor
    Forms![M_NUOVA_FATTURA_FORNITORI].NUMEROFATTURA = strNumFatt
    Forms![M_NUOVA_FATTURA_FORNITORI].DATAFATTURA = datDatFatt
    Forms![M_NUOVA_FATTURA_FORNITORI].ANNO = year(datDatFatt)
    Forms![M_NUOVA_FATTURA_FORNITORI].IMPORTOFATTURA = strImportoTotaleDocumento

    'FINE TESTATA__________________________

    'INIZIO RIGHE FATTURA ______________________


    Set DettaglioLinee = xmlDoc.documentElement.SelectNodes("FatturaElettro nicaBody/DatiBeniServizi/DettaglioLinee/Descrizione")
    For Each Descrizione In DettaglioLinee
    DESCART = ClearString(Descrizione.Text)
    ARTICOLOTROVATO = DLookup("[IDARTICOLO]", "T_ARTICOLI_FORNITORE", "[DESCRIZIONE] = '" & DESCART & "'")

    If IsNull(ARTICOLOTROVATO) Then

    strSQL = "INSERT INTO T_ARTICOLI_FORNITORE([DESCRIZIONE],IDCATEGORIA,IDALIQUOTAIVA) values ('" & DESCART & "',17,2)"

    DBEngine(0)(0).Execute strSQL, dbFailOnError
    MsgBox "INSERITA CATEGORIA PROVVISORIA xx"

    End If

    Next

    NrLinea = xmlDoc.getElementsByTagName("FatturaElettronicaBod y/DatiBeniServizi/DettaglioLinee/NumeroLinea").Length

    i = 0
    'Ciclo le "NumeroLinea"

    Do While i < NrLinea
    X = ClearString(xmlDoc.getElementsByTagName("FatturaEl ettronicaBody/DatiBeniServizi/DettaglioLinee/Descrizione").ITEM(i).Text)
    ARTICOLOTROVATO = DLookup("[IDARTICOLO]", "T_ARTICOLI_FORNITORE", "[DESCRIZIONE] = '" & X & "'")



    Forms![M_NUOVA_FATTURA_FORNITORI]![SM_DETTAGLIO_FATTURE_FORNITORI_NUOVA].Form!Descrizione = ARTICOLOTROVATO
    Forms![M_NUOVA_FATTURA_FORNITORI]![SM_DETTAGLIO_FATTURE_FORNITORI_NUOVA].Form!QTA = Replace(xmlDoc.documentElement.SelectNodes("Fattur aElettronicaBody/DatiBeniServizi/DettaglioLinee/Quantita").ITEM(i).Text, ".", ",")
    Forms![M_NUOVA_FATTURA_FORNITORI]![SM_DETTAGLIO_FATTURE_FORNITORI_NUOVA].Form!PREZZOUNITARIO = Replace(xmlDoc.documentElement.SelectNodes("Fattur aElettronicaBody/DatiBeniServizi/DettaglioLinee/PrezzoUnitario").ITEM(i).Text, ".", ",")
    Forms![M_NUOVA_FATTURA_FORNITORI]![SM_DETTAGLIO_FATTURE_FORNITORI_NUOVA].Form!IVA = Replace(xmlDoc.documentElement.SelectNodes("Fattur aElettronicaBody/DatiBeniServizi/DettaglioLinee/AliquotaIVA").ITEM(i).Text, ".", ",") / 100
    'Forms![M_NUOVA_FATTURA_FORNITORI]![SM_DETTAGLIO_FATTURE_FORNITORI_NUOVA].Form![Sc1] = Replace(xmlDoc.DocumentElement.SelectNodes("Fattur aElettronicaBody/DatiBeniServizi/DettaglioLinee/ScontoMaggiorazione/Percentuale").ITEM(i).Text, ".", ",") / 100
    Forms![M_NUOVA_FATTURA_FORNITORI]![SM_DETTAGLIO_FATTURE_FORNITORI_NUOVA].Form![IDCATEGORIA] = DLookup("[IDCATEGORIA]", "[T_ARTICOLI_FORNITORE]", "[IDARTICOLO]= Forms!M_NUOVA_FATTURA_FORNITORI![SM_DETTAGLIO_FATTURE_FORNITORI_NUOVA].Form![IDARTICOLO]")
    Forms![M_NUOVA_FATTURA_FORNITORI]![SM_DETTAGLIO_FATTURE_FORNITORI_NUOVA].Form![Targa] = DLookup("[IDVEICOLO]", "[T_ARTICOLI_FORNITORE]", "[IDARTICOLO]= Forms!M_NUOVA_FATTURA_FORNITORI![SM_DETTAGLIO_FATTURE_FORNITORI_NUOVA].Form![IDARTICOLO]")

    'Forms!MascheraEnelScrivi![IVA] = xmlDoc.DocumentElement.SelectNodes("RiepilogoConsu mi").ITEM(Z).SelectNodes("Posizione/CodiceIVA").ITEM(i).Text
    'Forms!MascheraEnelScrivi![codconumo] = xmlDoc.DocumentElement.SelectNodes("RiepilogoConsu mi").ITEM(Z).SelectNodes("Posizione/Codice").ITEM(i).Text

    i = i + 1
    DoCmd.GoToControl "SM_DETTAGLIO_FATTURE_FORNITORI_NUOVA"
    DoCmd.GoToRecord , "", acNewRec

    'DoCmd.GoToRecord ,"",
    Loop

    'Z = Z + 1
    'Loop
    'chiusura File
    Set xmlDoc = Nothing
    Set xmlElement = Nothing

    fileNome = Mid$(NOMEFILE, InStrRev(NOMEFILE, "\") + 1)
    Forms![M_NUOVA_FATTURA_FORNITORI].XMLFAT = fileNome 'XML


    Prosegui = MsgBox("Copio e cancello File nella cartella XMLFATFOR ?", vbYesNo)
    If Prosegui = vbNo Then
    Exit Sub
    End If


    FileCopy "U:\DocFattureFornitori\XMLFATFOR\" & fileNome, "U:\DocFattureFornitori\XMLFATFOR\Registrate\" & "\" & fileNome 'copia ok

    Kill "U:\DocFattureFornitori\XMLFATFOR\" & fileNome '

    End Sub
    _------------------

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi