Newsgroup: it.comp.appl.access
Titolo: FE - fatture ricevute decodifica

Allora vedo che con le buone non funziona
Esso proviamo con le cattive
Bon
Salti fuori subito chi ha un pezzo di codice vba per leggere gli xml 
ricevuti, sia fatture che notifiche, e lo esponga con tanto di 
descrizione comprensibile
Porcaccia miseriaccia, siamo al 27 di gennaio
"Non possiamo star qui a ciurlare sul manico"
(cit. Sim.Ona.Vent.Ura)
 
 


leggi i post... che non mancano...


Li ho letti
A quale ti riferisci esattamente?
 

Il giorno domenica 27 gennaio 2019 12:39:16 UTC+1, RobertoA ha scritto:

https://groups.google.com/d/msg/it.comp.appl.access/LHXPUdDS_T0/NdezktGVDwAJ
 
https://groups.google.com/d/msg/it.comp.appl.access/ScdI90Uh36k/7HssxmJiDQAJ
 

on 27-01-19, RobertoA supposed :

Application.ImportXML dovrebbe essere l'attrezzo di Access per
importare l'XML... ma da me non funziona (Office 2019).
È così anche da te?
 
Funzionerebbe - forse! - dando come opzione l'Append a una
tabella esistente, che dovrebbe contenere TUTTI i campi
previsti nell'XML. Sono troppi per fare la prova.
 
In rete... delle gran chiacchiere.
 
Bruno


che difficoltà trovi ad applicare questa soluzione?
https://groups.google.com/forum/#!msg/it.comp.appl.access/ScdI90Uh36k/7HssxmJiDQAJ
 
 
è banale, ti posizioni sul nodo che ti serve e ne leggi il valore
 
ciao
BFS
 
---
Questa email è stata esaminata alla ricerca di virus da AVG.
http://www.avg.com
 
 

Bruno Campanini formulated the question :

Prova che ti riprova... mi correggo.
Con questa unica riga di codice Access 2019:
 
Application.ImportXML _
            DataSource:="D:\IT03466010232_045KW.xml", _
            ImportOptions:=AppendData
 
Senza alcuna indicazione di errore, Access crea 22 tabelle
denominate Anagrafica, CertDigest, Contatto, etc e se importi
un altro XML ne crea altre 22 denominate Anagrafica1,
CertDigest1, Contatto1, etc.
 
Ho dato un'occhiata all'XML con Notepad: vi sono 13 URL dai
quali vengono prelevati algoritmi, chiavi, etc.
Io 'sto XML proprio non lo capisco, mi sembra un linguaggio
dell'età della pietra.
Con quattro tabelle opportunamente relazionate e un database
con le palle, non certo Access...
 
Bruno

 è banale, ti posizioni sul nodo che ti serve e ne leggi il valore
Ok, ci provo.
Ma come definisco quell'xDOc?
 
Bruno


Dim xDoc As MSXML2.DOMDocument
Set xDoc = New MSXML2.DOMDocument


BFS pretended :

Fin qui ci sarei arrivato anch'io, forse!
Se sapessi quali References attivare...?
 
Bruno


msxml3.dll
 
ciao


BFS was thinking very hard :

Cioè Microsoft XML, v3.0
 
Un'ultima cosa, come definisco il file XML al quale si riferisce:
 
Set Nodo = 
xDoc.selectNodes("//FatturaElettronicaBody/DatiBeniServizi/DettaglioLinee")
 
???
 
Bruno


Dim fileXML As String
fileXML = SceltaFile("*.xml")  ' questa è una funzione per scegliere un 
file da pc
 
If fileXML = "nofile" Then
     MsgBox "operazione annullata", vbInformation, "ok"
     Exit Sub
End If
 
 
Dim LeggiNodo As String
 
 
If xDoc.Load(fileXML) Then
 
 
      'dati anagrafici
      Set Nodo = 
xDoc.selectNodes("//FatturaElettronicaHeader/CedentePrestatore/DatiAnagrafici/Anagrafica")
      Me.Denominazione = 
Nodo.Item(0).selectNodes("//Denominazione").Item(i).Text
 
...
 
e cosi ti passi tutti i nodi
nel mio caso li precarico tutti in una mascherta di questo tipo:
https://ibb.co/P1pxH4w
 
 
e da li elaboro il tutto


 Nodo.Item(0).selectNodes("//Denominazione").Item(i).Text
[...]
 
Finalmente ci sono arrivato, soprattutto grazie alla tua
===================================
Private Sub Command1_Click()
' References:  Microsof XML, v3.0
Dim fileXML As String, Nodo As IXMLDOMNodeList
Dim xDoc As New MSXML2.DOMDocument
fileXML = "D:\IT03466010232_045KW.xml"
If xDoc.Load(fileXML) Then
      Set Nodo = xDoc.selectNodes("//FatturaElettronicaHeader" & _
                 "/CedentePrestatore/DatiAnagrafici/Anagrafica")
      MsgBox Nodo.Item(0).selectNodes("//Denominazione").Item(1).Text
End If
End Sub
================================
 
E per finire, come catturi in un file PDF quanto di PDF
è contenuto nell'XML (Allegati)?
 
Bruno


leggo la stringa contenuta nel tag attachmnent e me la decodifico
 
Const adTypeBinary = 1
Dim B64String
B64String = "fjkdhfkjashdfuihwdnfhskdghd...blablabla" questo è il 
contentuo del tag attachment....
 
  Dim str As String
     str = B64String
     Dim Base64Byte() As Byte
 
     Base64Byte = decodeBase64(str)
 
     With CreateObject("ADODB.Stream")
     .Open
     .Type = adTypeBinary
     .Write Base64Byte
     .SaveToFile "C:\pdf\miopdf.pdf"
     .Close
    End With
 
 
'decodebase64 è questa funzione
 
Private Function decodeBase64(ByVal strData As String) As Byte()
     Dim objXML As MSXML2.DOMDocument60
     Dim objNode As MSXML2.IXMLDOMElement
 
     Set objXML = New MSXML2.DOMDocument60
     Set objNode = objXML.createElement("b64")
     objNode.DataType = "bin.base64"
     objNode.Text = strData
     decodeBase64 = objNode.nodeTypedValue
 
     Set objNode = Nothing
     Set objXML = Nothing
End Function
 
'riferimenti msxml6.dll
 
 
ovviamente la devi raffinare...il nome del pdf devi prenderlo dall'altro 
tag e ciclare per verificare la presenza di altri allegati
 
ciao
 
BFS


BFS was thinking very hard :

Ancor prima di iniziare... i soliti ignoti dalla Sub:
 
str = B64String
.Type = adTypeBinary
 
Bruno

 .Type = adTypeBinary
 
.Type = adTypeBinary è andato a posto con:
Microsoft ActiveX Data Object Recordset 6.0 Library
 
Resta sconosciuto  B64String e come passare il nome file XML
 
 
Bruno


Ora dovrebbe essere tutto a posto, però coma faccio a passare
la stringa   <Attachment>...</Attachment>  che è lunga 540Kb?
Sono tre fogli di una fattura del gas.
Ci sarà un'istruzione affinché il programma se la vada a leggere
dall'XML?
 
Bruno

Bruno Campanini explained on 28-01-19 :

Solved!
Dal nodo Attachment contenente 552 684 caratteri (una fattura
Gas composta di tre fogli... colorati), ho ottenuto
un PDF da 405 Kb.
 
Adesso provo a "dipingere".
 
Bruno


se serve a qualcuno (se è pubblicato sul web suppongo possa vederlo chiunque,,)
https://gist.github.com/pierangelo1982/acd6d8cdd83a495b9e33d7b634c58fa7
 


Bello questo esempio
Dovrebbe compilare un documento Word leggendo i vari campi dall'xml
Dico 'dovrebbe' perche' non mi riesce di farlo andare
Con Access 2013, dopo aver caricato nei riferimenti MSWORD.OLB 
(Microsoft Word 15.0 object Library) se tento di avviare la 
'compilazione' mi si pianta sulle righe
 
' ddt
conta = 1
'    Set oTable = 
Word_Document.Tables.Add(Word_Document.Bookmarks("\PrevSel1").Range, 
oCounter, 2)
 
     oTable.Range.ParagraphFormat.SpaceAfter = 6
     oTable.Range.Rows(1).Range.Cells(1).Range.InsertAfter "Numero DDT"
 
 
sul oTable.Range.ParagraphFormat.SpaceAfter = 6  mi dice che 
"..impossibile trovare il metodo o il membro dei dati.."
 
Se da intellisense di oTable si scorrono tutte le proprieta'/metodi il 
Range non sembra esserci sembra un  altro oggetto
Forse la versione di Access/Word 2013  non dispone di questi 
metodi/proprieta'?
Qualche idea sul motivo del problema?
 
 
 


Allora le 'Dim oTable as Table' indicate non sono quelle di Access, ma 
quelle di Word
Indi, siccome il picci' tante volte non capissie, bisogna spiegarglielo 
con calma
 
Dim oTable As Word.Table
Dim oTable_due As Word.Table
 


Certo che servirebbe avere Word installato, e non su tutte le postazioni 
che usano il gestionale aziendale, Word e' disponibile
Chi ha Open Office, chi ha solo il viewer, e via
E' possibile comporre un pdf alla stessa maniera del documento Word?
(richiederebbe solo un pdf viewer e quello c'e' sempre)

RobertoA expressed precisely :

Solo che Acrobat & Co sono oggetti un po' costosi.
Oddio, ci sarebbero anche gli "equivalenti" forniti dai pirati,
ma non è roba per persone serie... li usiamo in pochi.
 
Bruno


scusate...io sono un po ignorante in materia in quanto non sono un esperto in materia...
ma non sarebbe sufficente  creare un report su cui inserire i dati estrappolati
dal file XML  eliminando la parte relativa a word..


Si, certo
Un documento realizzato in formato Word pero' e' anche modificabile
 
 

 Un documento realizzato in formato Word pero' e' anche modificabile
 
Consentimi una battutaccia, non offenderti e mettiti solo
a ridere... ma rispondendo col porre le proprie righe al
termine di un post che per tale comune comportamento finisce
col diventare chilometrico, non è come andare al cesso senza
tirare l'acqua? :-) :-) :-)
 
Quel link di pierangelo1982 di cui state parlando
(tu e Gfranco) siete riusciti a farlo andare? Io no.
 
Comunque l'utilità di modificare il formato DOC tratto
da un XML io non la vedo, per il motivo che poi il DOC né ti
serve per modificare l'XML né ti sarebbe utile farlo.
 
Bruno