Stampa fatture passive da xml

di il
34 risposte

34 Risposte - Pagina 2

  • Re: Stampa fatture passive da xml

    +m2+ ha scritto:


    Wow, sei stato più brutale perfino di me.
  • Re: Stampa fatture passive da xml

    Ritengo questa procedura un cantiere aperto visto cosa non arriva dai fornitori.
    Penso valga anche per voi
    ad maiora semper
  • Re: Stampa fatture passive da xml

    dario46 ha scritto:


    nicola.montemaggi ha scritto:


    dario46 ha scritto:




    Ovviamente devi prima convertirlo in base 64.
    Come già indicato in precedenza uso libreria Chilkat
    se ti interessa di posto la parte di sorgente
    si grazie mi sarebbe sicuramente utile, ho anch'io scaricato e registrato la dll di Chilkat, quindi ho aggiunto ai Riferimenti Chilkat ActiveX v9.5.0 ed infine ho provato ad eseguire una delle funzioni che mi proponeva nell'esempio, questa è la funzione che ho creduto di costruire prendendo spunto dall' esempio proposto da Chilkat :

    Public Function EncodeGif(Xfile, Action)
    Dim bd As New ChilkatBinData
    Dim success As Long
    Dim xml As New ChilkatXml
    Dim gifBase64 As String
    Dim X As String
    Select Case Action
    Case 0
    ' Ho creato un'immagine GIF extra-small per questo esempio .
    success = bd.LoadFile(Xfile)
    If (success <> 1) Then
    Debug.Print "Failed to load GIF image file."
    Exit Function
    End If
    ' Mostra i byte GIF come base64:
    Debug.Print bd.GetEncoded("base64")
    ' Questo GIF particolare in base64 è questo:
    ' R0lGODlhBQAFAMQAAAAAAP////z8/PHx8evr6+jo6OHh4d7e3sPDw8LCwpqamo2NjWxsbGRkZFpaWk1NTUtLS0hISCwsLCQkJP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABQALAAAAAAFAAUAAAUTYCAYQUBAU1lI0TIgztE8jFImIQA7
    Case 1
    ' Iniziamo con una stringa XML:
    X = "<abc><def>R0lGODlhBQAFAMQAAAAAAP////z8/PHx8evr6+jo6OHh4d7e3sPDw8LCwpqamo2NjWxsbGRkZFpaWk1NTUtLS0hISCwsLCQkJP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABQALAAAAAAFAAUAAAUTYCAYQUBAU1lI0TIgztE8jFImIQA7</def></abc>"
    success = xml.loadXML(X)
    Case 2
    ' Ottieni la stringa base64:
    gifBase64 = xml.GetChildContent("def")
    Debug.Print gifBase64
    Case 3
    ' Carica bd con i byte decodificati base64.
    success = bd.Clear()
    success = bd.AppendEncoded(gifBase64, "base64")
    Case 4
    ' Salva come GIF file.
    success = bd.WriteFile(Xfile)
    End Select
    End Function

    ma ho avuto in risposta che "il componente ActiveX non può creare l'oggetto, e qui sono rimasto bloccato.
    Poi siccome sono nuovo del forum mi spiegherai, se vorrai, dove trovo il tuo codice sorgente.
    il riferimento del codice vb6 era per la parte di estrazione da p7m

    Per la stampa delle fatture ho costruito delle tabelle del tipo
    Private Sub definisci_campi()
    Cedenteprestatore(1) = "<CedentePrestatore>"  'non gestisco le righe che hanno valore riga=0 perchè sono sottonodi
    Cedenteprestatore(2) = "<DatiAnagrafici>"
    Cedenteprestatore(3) = "<IdFiscaleIVA>"
    Cedenteprestatore(4) = "<IdPaese>"
    Cedenteprestatore(5) = "<IdCodice>"
    Cedenteprestatore(6) = "</IdFiscaleIVA>"
    Cedenteprestatore(7) = "<CodiceFiscale>"
    Cedenteprestatore(8) = "<Anagrafica>"
    Cedenteprestatore(9) = "<Denominazione>"
    Cedenteprestatore(10) = "</Anagrafica>"
    Cedenteprestatore(11) = "<AlboProfessionale>"
    Cedenteprestatore(12) = "<ProvinciaAlbo>"
    Cedenteprestatore(13) = "<NumeroIscrizioneAlbo>"
    Cedenteprestatore(14) = "<DataIscrizioneAlbo>"
    Cedenteprestatore(15) = "<RegimeFiscale>"
    Cedenteprestatore(16) = "</DatiAnagrafici>"
    Cedenteprestatore(17) = "<Sede>"
    Cedenteprestatore(18) = "<Indirizzo>"
    Cedenteprestatore(19) = "<NumeroCivico>"
    Cedenteprestatore(20) = "<CAP>"
    Cedenteprestatore(21) = "<Comune>"
    Cedenteprestatore(22) = "<Provincia>"
    Cedenteprestatore(23) = "<Nazione>"
    Cedenteprestatore(24) = "</Sede>"
    Cedenteprestatore(25) = "<StabileOrganizzazione>"
    Cedenteprestatore(26) = "<Indirizzo>"
    Cedenteprestatore(27) = "<NumeroCivico>"
    Cedenteprestatore(28) = "<CAP>"
    Cedenteprestatore(29) = "<Comune>"
    Cedenteprestatore(30) = "<Provincia>"
    Cedenteprestatore(31) = "<Nazione>"
    Cedenteprestatore(32) = "</StabileOrganizzazione>"
    Cedenteprestatore(33) = "<IscrizioneREA>"
    Cedenteprestatore(34) = "<Ufficio>"
    Cedenteprestatore(35) = "<NumeroREA>"
    Cedenteprestatore(36) = "<StatoLiquidazione>"
    Cedenteprestatore(37) = "</IscrizioneREA>"
    Cedenteprestatore(38) = "<Contatti>"
    Cedenteprestatore(39) = "<Telefono>"
    Cedenteprestatore(40) = "<Fax>"
    Cedenteprestatore(41) = "<Email>"
    Cedenteprestatore(42) = "</Contatti>"
    Cedenteprestatore(43) = "</CedentePrestatore>"
       
    '   preparo le coordinate dove inserire i valori
    ' Y
    riga_Cedenteprestatore(1) = 0 ' "<CedentePrestatore>"
    riga_Cedenteprestatore(2) = 0 '"<DatiAnagrafici>"
    riga_Cedenteprestatore(3) = 0 '"<IdFiscaleIVA>"
    riga_Cedenteprestatore(4) = 27  '" <IdPaese>"
    riga_Cedenteprestatore(5) = 27 '"<IdCodice>"    'valore partita iva sulla stessa riga
    riga_Cedenteprestatore(6) = 0 '"</IdFiscaleIVA>"
    riga_Cedenteprestatore(7) = 27 ' "<CodiceFiscale>" cf  con descrizione che precede
    riga_Cedenteprestatore(8) = 0 ' "<Anagrafica>"
    riga_Cedenteprestatore(9) = 10 '"<Denominazione>"
    riga_Cedenteprestatore(10) = 0  '"</Anagrafica>"
    riga_Cedenteprestatore(11) = 35  '"<AlboProfessionale>"
    riga_Cedenteprestatore(12) = 38  '"<ProvinciaAlbo>" con descrizione preced
    riga_Cedenteprestatore(13) = 38 '"<NumeroIscrizioneAlbo>"  stessa riga con descrizione preced
    riga_Cedenteprestatore(14) = 38  '"<DataIscrizioneAlbo>"
    riga_Cedenteprestatore(15) = 22  '"<RegimeFiscale>" con descr
    riga_Cedenteprestatore(16) = 0  '"</DatiAnagrafici>"
    riga_Cedenteprestatore(17) = 0  '"<Sede>"
    riga_Cedenteprestatore(18) = 14  '"<Indirizzo>"
    riga_Cedenteprestatore(19) = 14  '"<NumeroCivico>" stessa riga
    riga_Cedenteprestatore(20) = 18  '"<CAP>"
    riga_Cedenteprestatore(21) = 18  '"<Comune>" sr=stessa riga
    riga_Cedenteprestatore(22) = 18  '"<Provincia>" sr
    riga_Cedenteprestatore(23) = 18  '"<Nazione>" sr
    riga_Cedenteprestatore(24) = 0  '"</Sede>"
    riga_Cedenteprestatore(25) = 0  '"<StabileOrganizzazione>"
    riga_Cedenteprestatore(26) = 45  '"<Indirizzo>"
    riga_Cedenteprestatore(27) = 45  '"<NumeroCivico>"
    riga_Cedenteprestatore(28) = 48  '"<CAP>"
    riga_Cedenteprestatore(29) = 48  '"<Comune>"
    riga_Cedenteprestatore(30) = 48 '"<Provincia>"
    riga_Cedenteprestatore(31) = 48  '"<Nazione>"
    riga_Cedenteprestatore(32) = 0  '"</StabileOrganizzazione>"
    riga_Cedenteprestatore(33) = 0  '"<IscrizioneREA>"
    riga_Cedenteprestatore(34) = 282  '"<Ufficio>"
    riga_Cedenteprestatore(35) = 282  '"<NumeroREA>"
    riga_Cedenteprestatore(36) = 0  '"<StatoLiquidazione>"
    riga_Cedenteprestatore(37) = 0  '"</IscrizioneREA>"
    riga_Cedenteprestatore(38) = 0  '"<Contatti>"
    riga_Cedenteprestatore(39) = 282  '"<Telefono>"
    riga_Cedenteprestatore(40) = 282  '"<Fax>"
    riga_Cedenteprestatore(41) = 282  '"<Email>"
    riga_Cedenteprestatore(42) = 0  '"</Contatti>"
    riga_Cedenteprestatore(43) = 0  '"</CedentePrestatore>"
       
       
       
       ' preparo le colonne
       'X
    col_Cedenteprestatore(1) = 0 ' "<CedentePrestatore>"
    col_Cedenteprestatore(2) = 0 '"<DatiAnagrafici>"
    col_Cedenteprestatore(3) = 0 '"<IdFiscaleIVA>"
    col_Cedenteprestatore(4) = 5  '" <IdPaese>"
    col_Cedenteprestatore(5) = 5 '"<IdCodice>"    'valore partita iva sulla stessa riga
    col_Cedenteprestatore(6) = 0 '"</IdFiscaleIVA>"
    col_Cedenteprestatore(7) = 5 ' "<CodiceFiscale>" cf   con descrizione che precede
    col_Cedenteprestatore(8) = 0 ' "<Anagrafica>"
    col_Cedenteprestatore(9) = 5  '"<Denominazione>"
    col_Cedenteprestatore(10) = 0  '"</Anagrafica>"
    col_Cedenteprestatore(11) = 5 '"<AlboProfessionale>"
    col_Cedenteprestatore(12) = 5 '"<ProvinciaAlbo>" con descrizione preced
    col_Cedenteprestatore(13) = 5  '"<NumeroIscrizione"  stessa riga con descrizione preced
    col_Cedenteprestatore(14) = 5  '"<DataIscrizioneAlbo>"
    col_Cedenteprestatore(15) = 5  '"<RegimeFiscale>" con descr
    col_Cedenteprestatore(16) = 0  '"</DatiAnagrafici>"
    col_Cedenteprestatore(17) = 0  '"<Sede>"
    col_Cedenteprestatore(18) = 5  '"<Indirizzo>"
    col_Cedenteprestatore(19) = 5  '"<NumeroCivico>" stessa riga
    col_Cedenteprestatore(20) = 5  '"<CAP>"
    col_Cedenteprestatore(21) = 5  '"<Comune>" sr=stessa riga
    col_Cedenteprestatore(22) = 5  '"<Provincia>" sr
    col_Cedenteprestatore(23) = 5  '"<Nazione>" sr
    col_Cedenteprestatore(24) = 0  '"</Sede>"
    col_Cedenteprestatore(25) = 0  '"<StabileOrganizzazione>"
    col_Cedenteprestatore(26) = 5  '"<Indirizzo>"
    col_Cedenteprestatore(27) = 5 '"<NumeroCivico>"
    col_Cedenteprestatore(28) = 5  '"<CAP>"
    col_Cedenteprestatore(29) = 5  '"<Comune>"
    col_Cedenteprestatore(30) = 5  '"<Provincia>"
    col_Cedenteprestatore(31) = 5  '"<Nazione>"
    col_Cedenteprestatore(32) = 0  '"</StabileOrganizzazione>"
    col_Cedenteprestatore(33) = 5  '"<IscrizioneREA>"
    col_Cedenteprestatore(34) = 5  '"<Ufficio>"
    col_Cedenteprestatore(35) = 5  '"<NumeroREA>"
    col_Cedenteprestatore(36) = 5  '"<StatoLiquidazione>"
    col_Cedenteprestatore(37) = 0  '"</IscrizioneREA>"
    col_Cedenteprestatore(38) = 75  '"<Contatti>"
    col_Cedenteprestatore(39) = 75  '"<Telefono>"
    col_Cedenteprestatore(40) = 75  '"<Fax>"
    col_Cedenteprestatore(41) = 75  '"<Email>"
    col_Cedenteprestatore(42) = 0  '"</Contatti>"
    col_Cedenteprestatore(43) = 0  '"</CedentePrestatore>"
       
    
    dove ho mappato il tag e la relativa riga/colonna dove stamparlo ed anche il tipo di carattere (l'esempio è per la parte cedenteprestatore)
    così come per le altre zone fatture.
    Poi faccio la scansione (cedenteprestatore) dei campi indicati all'interno dell'xml e, se li trovo(cursore dove sono+colonna relativa+riga relativa), compilo la fattura con le coordinate x y dei campi
    Come già ho avuto modo di affermare nei post precedenti, l'unico che si è prestato a fornirmi file xml esempio di fatture passive è stato Ettore (che ringrazio ancora) e, visto l'impegno in ordine di ore (quello intelettuale non è significativo per un lavoro del genere) nelle mie premesse avevo specificato che ci sarebbe stato scambio di risorse. tu dai un esempio a me ed io ti giro il programma.
    interessante la tua strategia per mappare i tag e le relativa riga/colonna dove stamparli, che cercherò di sfruttare per la mia FE.
    la cosa alla quale sono comunque particolarmente interessato è l'utilizzo delle librerie ChilKat, innanzitutto non ho capito bene se se ne può fare un utilizzo free o se si deve acquistare una licenza ed inoltre non so come utilizzarla.
    Come ti ho già detto ho provveduto a registrare la dll quindi ho aggiunto la relative referenza dal'IDE di VB6, ma quando cerco di eseguire l'esempio proposto da Chilkat mi da come errore che "il componente ActiveX non può creare l'oggetto".
    A questo punto non so come procedere, visto che tu stai usando queste librerie ti chiedo se mi sai dire cosa ometto o cosa sbaglio.
    L'esempio è quello che ho già descritto in precedenza.
    Cordiali saluti Nicola
  • Re: Stampa fatture passive da xml

    nid69ita ha scritto:


    dario46 ha scritto:


    Ciao,
    ho ultimato la procedura di stampa delle fatture passive in xml (vb6)

    Se ho potuto completarla devo ringraziare ettore56 per l'invio dell'esempio.
    Purtroppo obtorto collo devo dare ragione a ANDWORK .
    Tutti pronti ad attaccarsi alle mammelle ma nessuno che porta il fieno.
    per chi vuole l'eseguibile è gratis
    Ciao dario46. Se c'e' allegato un PDF riesci anche ad estrarlo ?
    Io ho un codice vb6 (non tutto mio) ti interessa ? Ti darei il link/codice a quel che ho trovato e le prove che ho fatto per tirare fuori il pdf allegato. Parte del codice mio e parte trovato, con il link a dove per giusta riconoscenza a chi ha sviluppato la classe base di conversione base64.

    Sono interessato ad estrarre e/o ad inserire doc. in PDF nella FE ho capito che hai un link utile con codice VB6 da te implementato sono interessato a conoscerlo.
    ho scaricato e registrato la dll di Chilkat, quindi ho aggiunto ai Riferimenti Chilkat ActiveX v9.5.0 ed infine ho provato ad eseguire una delle funzioni che mi proponeva nell'esempio,(questa è la funzione che ho creduto di costruire prendendo spunto dall' esempio proposto da Chilkat ):

    Public Function EncodeGif(Xfile, Action)
    Dim bd As New ChilkatBinData
    Dim success As Long
    Dim xml As New ChilkatXml
    Dim gifBase64 As String
    Dim X As String
    Select Case Action
    Case 0
    ' Ho creato un'immagine GIF extra-small per questo esempio .
    success = bd.LoadFile(Xfile)
    If (success <> 1) Then
    Debug.Print "Failed to load GIF image file."
    Exit Function
    End If
    ' Mostra i byte GIF come base64:
    Debug.Print bd.GetEncoded("base64")
    ' Questo GIF particolare in base64 è questo:
    ' R0lGODlhBQAFAMQAAAAAAP////z8/PHx8evr6+jo6OHh4d7e3sPDw8LCwpqamo2NjWxsbGRkZFpaWk1NTUtLS0hISCwsLCQkJP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABQALAAAAAAFAAUAAAUTYCAYQUBAU1lI0TIgztE8jFImIQA7
    Case 1
    ' Iniziamo con una stringa XML:
    X = "<abc><def>R0lGODlhBQAFAMQAAAAAAP////z8/PHx8evr6+jo6OHh4d7e3sPDw8LCwpqamo2NjWxsbGRkZFpaWk1NTUtLS0hISCwsLCQkJP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABQALAAAAAAFAAUAAAUTYCAYQUBAU1lI0TIgztE8jFImIQA7</def></abc>"
    success = xml.loadXML(X)
    Case 2
    ' Ottieni la stringa base64:
    gifBase64 = xml.GetChildContent("def")
    Debug.Print gifBase64
    Case 3
    ' Carica bd con i byte decodificati base64.
    success = bd.Clear()
    success = bd.AppendEncoded(gifBase64, "base64")
    Case 4
    ' Salva come GIF file.
    success = bd.WriteFile(Xfile)
    End Select
    End Function

    ma ho avuto in risposta che "il componente ActiveX non può creare l'oggetto, e qui sono rimasto bloccato.
    Poi siccome sono nuovo del forum mi spiegherai, se vorrai, dove trovo il tuo codice sorgente.

    Grazie
  • Re: Stampa fatture passive da xml

    A memoria costa sui 300 euro
  • Re: Stampa fatture passive da xml

    nicola.montemaggi ha scritto:


    nid69ita ha scritto:


    dario46 ha scritto:


    Ciao,
    ho ultimato la procedura di stampa delle fatture passive in xml (vb6)

    Se ho potuto completarla devo ringraziare ettore56 per l'invio dell'esempio.
    Purtroppo obtorto collo devo dare ragione a ANDWORK .
    Tutti pronti ad attaccarsi alle mammelle ma nessuno che porta il fieno.
    per chi vuole l'eseguibile è gratis
    Ciao dario46. Se c'e' allegato un PDF riesci anche ad estrarlo ?
    Io ho un codice vb6 (non tutto mio) ti interessa ? Ti darei il link/codice a quel che ho trovato e le prove che ho fatto per tirare fuori il pdf allegato. Parte del codice mio e parte trovato, con il link a dove per giusta riconoscenza a chi ha sviluppato la classe base di conversione base64.

    Sono interessato ad estrarre e/o ad inserire doc. in PDF nella FE ho capito che hai un link utile con codice VB6 da te implementato sono interessato a conoscerlo.
    ho scaricato e registrato la dll di Chilkat, quindi ho aggiunto ai Riferimenti Chilkat ActiveX v9.5.0 ed infine ho provato ad eseguire una delle funzioni che mi proponeva nell'esempio,(questa è la funzione che ho creduto di costruire prendendo spunto dall' esempio proposto da Chilkat ):

    Public Function EncodeGif(Xfile, Action)
    Dim bd As New ChilkatBinData
    Dim success As Long
    Dim xml As New ChilkatXml
    Dim gifBase64 As String
    Dim X As String
    Select Case Action
    Case 0
    ' Ho creato un'immagine GIF extra-small per questo esempio .
    success = bd.LoadFile(Xfile)
    If (success <> 1) Then
    Debug.Print "Failed to load GIF image file."
    Exit Function
    End If
    ' Mostra i byte GIF come base64:
    Debug.Print bd.GetEncoded("base64")
    ' Questo GIF particolare in base64 è questo:
    ' R0lGODlhBQAFAMQAAAAAAP////z8/PHx8evr6+jo6OHh4d7e3sPDw8LCwpqamo2NjWxsbGRkZFpaWk1NTUtLS0hISCwsLCQkJP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABQALAAAAAAFAAUAAAUTYCAYQUBAU1lI0TIgztE8jFImIQA7
    Case 1
    ' Iniziamo con una stringa XML:
    X = "<abc><def>R0lGODlhBQAFAMQAAAAAAP////z8/PHx8evr6+jo6OHh4d7e3sPDw8LCwpqamo2NjWxsbGRkZFpaWk1NTUtLS0hISCwsLCQkJP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABQALAAAAAAFAAUAAAUTYCAYQUBAU1lI0TIgztE8jFImIQA7</def></abc>"
    success = xml.loadXML(X)
    Case 2
    ' Ottieni la stringa base64:
    gifBase64 = xml.GetChildContent("def")
    Debug.Print gifBase64
    Case 3
    ' Carica bd con i byte decodificati base64.
    success = bd.Clear()
    success = bd.AppendEncoded(gifBase64, "base64")
    Case 4
    ' Salva come GIF file.
    success = bd.WriteFile(Xfile)
    End Select
    End Function

    ma ho avuto in risposta che "il componente ActiveX non può creare l'oggetto, e qui sono rimasto bloccato.
    Poi siccome sono nuovo del forum mi spiegherai, se vorrai, dove trovo il tuo codice sorgente.

    Grazie
    probabilmente non hai spuntato in "reference" il riferimento a chilkat
  • Re: Stampa fatture passive da xml

    Chillkat è open? o a Pagamento per fare l'estrazione degli allegati presenti nel xML?
    io mi sono scontrato e sfortunatamente per me, non ho messo link.
    Sto usando la libreria di Nicola Iarocci https://fatturaelettronicaopensource.org/index.htm

    ho iniziato come in questo post(scusatemi ma non avevo trovato anche questo )
    https://www.iprogrammatori.it/forum-programmazione/vbnet/estrazione-xml-fattura-elettronica-t39490.html#p8629616


    l'ultima difficoltà rimasta nella realizzazione è anche per me, l'estrazione dell'allegato, per il resto sono riuscito ad elaborare tutto, so bene che la decodifica è un xbase64 ma non arrivo a decodificare.
           Dim fattura, fattura2 As New FatturaOrdinaria()
            Dim nomefor, iva, progressivo, nomeattch, formatt, attach
            Dim allegato As New Allegati()
    
            fattura = FatturaOrdinaria.CreateInstance(Instance.Privati)
            Dim readerSettings = New XmlReaderSettings With {
            .IgnoreWhitespace = True,
            .IgnoreComments = True,
            .IgnoreProcessingInstructions = True
        }
            Using r = XmlReader.Create(pathexplorer, readerSettings)
                fattura.ReadXml(r)
                allegato.ReadXml(r)
    
            End Using
    
    
    
            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
            Using reader = XmlReader.Create(pathexplorer, readerSettings)
                allegato.ReadXml(reader)
    
            End Using
            nomeattch = allegato.NomeAttachment
            formatt = allegato.FormatoAttachment
            attach = allegato.Attachment
            MsgBox(nomeattch)
    
    questo è il codice che realizzo, premettendo che la classe allegati di viene da questo; Imports FatturaElettronica.Common.Allegati
    riassunto qua https://fatturaelettronicaopensource.org/docs/api/FatturaElettronica.Common.Allegati.html
    solo che credo di essere in un vicolo molto ceco.
    a NB tutte le variabili invnumber, importo, data etc etc funzionano perfettamente. Se rimuovo allegato.xmlreader(r)
    (il debug si ferma li)
    se creo invece un altro reader, associando allegati, il risltato è vuoto non mi da niente, mentre sono sicuro che l'allegato è presente.
  • Re: Stampa fatture passive da xml

    Timer86 ha scritto:


    Chillkat è open? o a Pagamento per fare l'estrazione degli allegati presenti nel xML?
    ....
    Io utilizzo "Base64.exe" (se fai una ricerca trovi sicuramente il sito per scaricarlo), richiamabile anche da riga di comando:
    Call shell("c:\TuoPercorso\Base64.exe /decode " & FileInput & " " & FileOutput, 1)
    Lo puoi utilizzare sia per decodificare, sia per codificare. Ha sempre funzionato egregiamente e non mi ha mai causato problemi.
  • Re: Stampa fatture passive da xml

    Ti farei una Statua,
    Grazie 1000!

    ho modificato il post perchè stavo riflettendo,
    è pefetto, ma come gestisci se un allegato è presente o meno?
    come fai al tuo programma a fargli sorgere la condizione per andare nello shell direttamente,
    farai un controllo se sotto allegati è presente l'allegato no?
  • Re: Stampa fatture passive da xml

    Timer86 ha scritto:


    Ti farei una Statua,
    Grazie 1000!

    ho modificato il post perchè stavo riflettendo,
    è pefetto, ma come gestisci se un allegato è presente o meno?
    come fai al tuo programma a fargli sorgere la condizione per andare nello shell direttamente,
    farai un controllo se sotto allegati è presente l'allegato no?
    Verifico se esiste e se è valorizzato il nodo relativo all'allegato e, in tal caso, ne estraggo i dati in una tabella provvisoria.
    Per esempio (da modificare e personalizzare):
    
    	'Nome Allegato
            Set nodo = obj.documentElement.selectNodes("FatturaElettronicaBody/Allegati/NomeAttachment")
            For Each Nome In nodo
                Testo = Nome.Text
                TuaTabella![NomeAllegato] = Testo
                DoCmd.SelectObject acTable, TuaTabella
                DoCmd.Save
                DoCmd.GoToRecord , , acNext
            Next
            
            'Algoritmo Compressione
            Set nodo = obj.documentElement.selectNodes("FatturaElettronicaBody/Allegati/AlgoritmoCompressione")
            For Each Nome In nodo
                Testo = Nome.Text
                TuaTabella![AlgoritmoCompressione] = Testo
                DoCmd.SelectObject acTable, TuaTabella
                DoCmd.Save
                DoCmd.GoToRecord , , acNext
            Next
            
            'Formato Allegato
            Set nodo = obj.documentElement.selectNodes("FatturaElettronicaBody/Allegati/FormatoAttachment")
            For Each Nome In nodo
                Testo = Nome.Text
                TuaTabella![FormatoAllegato] = Testo
                DoCmd.SelectObject acTable, TuaTabella
                DoCmd.Save
                DoCmd.GoToRecord , , acNext
            Next
        
            'Descrizione Allegato
            Set nodo = obj.documentElement.selectNodes("FatturaElettronicaBody/Allegati/DescrizioneAttachment")
            For Each Nome In nodo
                Testo = Nome.Text
                TuaTabella![DescrizioneAllegato] = Testo
                DoCmd.SelectObject acTable, TuaTabella
                DoCmd.Save
                DoCmd.GoToRecord , , acNext
            Next
  • Re: Stampa fatture passive da xml

    Però da inesperienza c'è realmente una cosa che non riesco a comprendere xbase 64, il tuo modus operandi lo utilizzo nel momento che hai e che hai già il File allegato come valore stringa.

    io non reisco proprio ad arrivare all'ottenimento dell'allegato presente, (vedi codice sopra) ma la cosa divertente è che sia per l'header e che per gran parte del body non ho problemi, solo ed esclusivamente con la sezione allegati. Vedendo l'estratto del tuo controllo presuppongo che tu abbia creato ricreati tutti i nodi all'interno di una fattura, nel mio caso invece non l'ho fatto perchè come vedi avevo bisogno di 5 valori di una fattura e per mia fortuna gli riesco ad ottenere.

    l'errore che invece ottengo nel source code , creando la classe Base64Encoder
    System.FormatException: 'The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters. '

    Questa la funzione decode, della classe
          Private Sub Decode(ByVal inFileName As String, ByVal outFile As Stream)
                Dim transform As System.Security.Cryptography.ICryptoTransform = New System.Security.Cryptography.FromBase64Transform()
    
                Using inFile As System.IO.FileStream = System.IO.File.OpenRead(inFileName)
    
                    Using cryptStream As System.Security.Cryptography.CryptoStream = New System.Security.Cryptography.CryptoStream(inFile, transform, System.Security.Cryptography.CryptoStreamMode.Read)
                        Dim buffer As Byte() = New Byte(4095) {}
                        Dim bytesRead As Integer
    
                        While (CSharpImpl.__Assign(bytesRead, cryptStream.Read(buffer, 0, buffer.Length))) > 0   ********ERRORE SU QUESTA RIGA
                            outFile.Write(buffer, 0, bytesRead)
                        End While
    
                        outFile.Flush()
                    End Using
                End Using
            End Sub
            
    mentre qua è come la lancio :
     
     im BE As Base64.Base64FileEncoder = New Base64.Base64FileEncoder()
            BE.Decode(pathexplorer, newdest)
            If newdest IsNot Nothing Then Console.WriteLine(String.Format("FILE '{0}' WAS SUCCESSFULLY BYTE64 ENCODED AND SAVED TO '{1}'", pathexplorer, newdest))
            
  • Re: Stampa fatture passive da xml

    Timer86 ha scritto:


    Però da inesperienza c'è realmente una cosa che non riesco a comprendere xbase 64, il tuo modus operandi lo utilizzo nel momento che hai e che hai già il File allegato come valore stringa.
    ...
    Il nodo <Allegati> è strutturato, per esempio, così:
    <Allegati>
    <NomeAttachment>Fattura.pdf</NomeAttachment>
    <FormatoAttachment>PDF</FormatoAttachment>
    <DescrizioneAttachment>Fattura #AL01#</DescrizioneAttachment>
    <Attachment>JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXB...etc., etc., etc.(lunghissimo…!!!)</Attachment>
    </Allegati>
    1) Salva tutto il contenuto del tag <Attachment> in un file di testo;
    2) Rileva, attraverso il codice che ti ho postato precedentemente, di che tipo di file si tratta;
    3) Decodificalo con "Base64.exe", salvandolo con l'estensione evidenziata nel tag <FormatoAttachment>
  • Re: Stampa fatture passive da xml

    Eh, come ti dicevo perchè riesci ad estrarre il nodo allegati con il tuo modo,
    ho provato ancora ricambiando il codice così:
    
        Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    
            'allegati
            Dim percorsofile As String = pathexplorer
            'Dim fattallegati As Fattura.FatturaElettronicaBodyAllegati = New Fattura.FatturaElettronicaBodyAllegati
            'Dim serializzare As XmlSerializer = New XmlSerializer(GetType(Fattura.FatturaElettronicaBodyAllegati))
            'Dim readerlettura As StreamReader = New StreamReader(percorsofile)
            'fattallegati = CType(serializzare.Deserialize(readerlettura), Fattura.FatturaElettronicaBodyAllegati)
            'readerlettura.Close()
    
            Dim fattallegati1 As FatturaElettronica.Common.Allegati = New FatturaElettronica.Common.Allegati
            Dim serializzare1 As XmlSerializer = New XmlSerializer(GetType(FatturaElettronica.Common.Allegati))
            Dim readerlettura1 As StreamReader = New StreamReader(percorsofile)
            fattallegati1 = CType(serializzare1.Deserialize(readerlettura1), FatturaElettronica.Common.Allegati)
            readerlettura1.Close()
            Dim nomeattch, formtat, desctat
            nomeattch = fattallegati1.NomeAttachment
            formtat = fattallegati1.FormatoAttachment
            desctat = fattallegati1.DescrizioneAttachment
            MsgBox(nomeattch & formtat)
        End Sub
    
    sarebbe perfetto, peccato che durante l'esecuzione becco un errore
    System.InvalidOperationException: 'There is an error in XML document (1, 56).'

    InvalidOperationException: <FatturaElettronica xmlns='http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2'> was not expected.

    il problema è che l'allegato e xml sono corretti perchè su altri programmi quali assoinvoice lo riesco a vedere, dando un rapido occhio, qualcuno riesce a capire dov'è che sbaglio?

    per il body non sto avendo problemi di nessun genere estraggo tranquillamente il iva, nome fornitore e data senza errori(sotto codice esempio funzionante)
    
    
            Dim fattura1, fattura2 As New FatturaOrdinaria()
            Dim nomefor, iva, progressivo
    
    
            fattura1 = FatturaOrdinaria.CreateInstance(Instance.Privati)
            Dim readerSettings = New XmlReaderSettings With {
            .IgnoreWhitespace = True,
            .IgnoreComments = True,
            .IgnoreProcessingInstructions = True
        }
            Using r = XmlReader.Create(pathexplorer, readerSettings)
                fattura1.ReadXml(r)
            End Using
            nomefor = fattura1.FatturaElettronicaHeader.CedentePrestatore.DatiAnagrafici.Anagrafica.Denominazione
            iva = fattura1.FatturaElettronicaHeader.CedentePrestatore.DatiAnagrafici.IdFiscaleIVA.IdCodice
            Dim invnumber, importo, data, attch
            For Each doc In fattura1.FatturaElettronicaBody
                Dim datidocumento = doc.DatiGenerali.DatiGeneraliDocumento
                invnumber = datidocumento.Numero
                importo = datidocumento.ImportoTotaleDocumento
                data = datidocumento.Data
            Next
            ''''''''''''''''''''''''''''''''''''''
            TextBox2.Text = invnumber
            TextBox3.Text = importo
            TextBox5.Text = data
            TextBox6.Text = nomefor
            TextBox7.Text = iva
             
  • Re: Stampa fatture passive da xml

    Timer86 ha scritto:


    Eh, come ti dicevo perchè riesci ad estrarre il nodo allegati con il tuo modo,...
    Per estrarre l'allegato prova così:
    
    Dim datTime As Date
    'Dichiara anche tutte le altre variabili
    File = Forms!NomeMaschera!NomeFile					'ricavo il nome del file
    FormatoAllegato = Forms!NomeMaschera!FormatoAllegato		'ricavo il formato dell'allegato
    obj.async = False
    obj.Load (File)
    Set nodo = obj.documentElement.selectNodes("FatturaElettronicaBody/Allegati/Attachment")
    For Each Nome In nodo
        Testo = Nome.Text
        FileOutput = "c:\TuaCartella\NomeFile" & "." & FormatoAllegato"	'il nome del file decodificato
        Open FileInput For Output As #1
        Print #1, Testo 									'Scrivo il file provvisorio
        Close #1 										'Chiudo il file provvisorio
        datTime = DateAdd("s", IntSeconds, Now)
        Do
        Sleep 100
        DoEvents
        Loop Until Now >= datTime							'ritardo di 1/10 di secondo la decodifica del file per evitare possibili errori
        Call shell("c:\TuaCartella\Base64.exe /decode " & FileInput & " " & FileOutput, 1)	'decodifico il file
        datTime = DateAdd("s", IntSeconds, Now)
        Do
        Sleep 300
        DoEvents
        Loop Until Now >= datTime							'ritardo l'istruzione successiva di 3/10 di secondo per evitare possibili errori
        Application.FollowHyperlink FileOutput, , True			'apro l'allegato
        Kill (FileInput)									'elimino il file input provvisorio
    Next
    Integralo e personalizzalo, poi fai sapere che esito hai avuto.
    Non ho potuto risponderti prima perché non ero in sede.
  • Re: Stampa fatture passive da xml

    Ciao e Grazie mille per il supporto,
    ce l'ho fatta e sono riuscito a estrarre le fatture, mi sono quasi commosso. Posto il con le correzioni che ho effettuato.
     Dim percorsofile As String = pathexplorer
            Dim xmlData As String = pathexplorer '= contenuto del file XML
            Dim doc1 As System.Xml.XmlDocument = New System.Xml.XmlDocument()
            desta = "C:\FATEL\Attachment\" & sedest & ".pdf"
            Try
                doc1.Load(xmlData)
                Dim xmlcontents As String = doc1.InnerXml
    
                For Each node As System.Xml.XmlNode In doc1.SelectNodes(String.Format(".//{0}", "Allegati"))
                    Dim fileName As String = GetElementFromNode("NomeAttachment", node)
                    If Not String.IsNullOrEmpty(fileName) Then
                        Dim fileContent As String = GetElementFromNode("Attachment", node)
                        If Not String.IsNullOrEmpty(fileContent) Then
                            Debug.WriteLine(Convert.FromBase64String(GetElementFromNode("AlgoritmoCompressione", node)))
                            Debug.WriteLine(Convert.FromBase64String(GetElementFromNode("DescrizioneAttachment", node)))
                            'contenuto del file
                            Dim b() As Byte = Convert.FromBase64String(fileContent)
                            If Not File.Exists("C:\FATEL\Attachment\" & sedest & ".pdf") Then
                                File.WriteAllBytes("C:\FATEL\Attachment\" & sedest & ".pdf", b)
                                Button4.Visible = True
                            Else
                                File.Delete("C:\FATEL\Attachment\" & sedest & ".pdf")
                                File.WriteAllBytes("C:\FATEL\Attachment\" & sedest & ".pdf", b)
                                Button4.Visible = True
                            End If
    
                        Else
                                Button4.Visible = False
                            '...
                        End If
                    End If
                Next
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
    Giusto una postilla strana, mi apre quasi il 80% delle fatture allegate, ma non so perchè alcune invece non riesce ad aprirle.
    l'errore che becco su alcune: è the input is not a valid base-64 string as it contains a non-base 64 character, more than two padding character, or an illegal char.
    sto sbagliando qualcosa?

    Grazie ancora a tutti per il supporto
Devi accedere o registrarti per scrivere nel forum
34 risposte