Newsgroup: it.comp.appl.access
Titolo: Come verificare correttezza formale xml fattura e restituire errori?

Come fare per controllare che l'xml della fattura sia corretto 
formalmente, e nel caso non lo sia vengano restituiti gli errori che 
possano aiutare l'operatore a comprendere il motivo del problema?


Previo controlli a prova di scimmia sui dati (bellissima espressione rubata a BFS), generare l'Xml seguendo scrupolosamente il tracciato.
Non vedo come possano sfuggire degli errori "formali".
 
Saluti.


Non ho scritto che l'xml lo creo da mia procedura
La domanda e' "come verificare un xml e visualizzarne gli errori"
 
 
 


In fatture e corrispettivi c'č un servizio di controllo.
Alberto S

 
 
Si lo so, e quello e' l'unico sistema 'ufficiale' per testare la 
correttezza formale del file prima di inviarlo
Ma quel sistema, oltre a necessitare di account Entratel o Fisconline, 
non e' minimamente usabile per testare piu' di uno o due file
Non e' automatizzabile in nessun modo, c'e' il captcha di mezzo


potresti appoggiarti a qualche webservices
tipo aruba offre questo
 
https://fatturazioneelettronica.aruba.it/apidoc/docs.html#overview
 
 
solo che da una lettura veloce mi par di capire che se i controlli 
correttezza vengono superati la fattura viene automaticamente inviata e 
tu vuoi solo controllarla giusto?
 
quindi dovresti trovare qualche altro "gestore" che offra tra i vari 
service anche il solo controllo
 
BFS
 
 
 


Veramente non vorrei trovare un terzo che espone il servizio, ma vorrei 
realizzare il codice vba per eseguire il controllo
Il fatto e' che non conoscendo bene il mondo degli xml, dei fogli di 
stile, degli xsl, non so bene dove metter mano, e quindi ho chiesto 
nella certezza che chissa' quanti qua dentro, avendo gia' realizzato 
gestionali predisposti per l'invio fattura elettronica, sicuramente 
avranno creato anche il 'validatore' finale
O create l'xml, lo spedite, e 'speriamo che io me la cavo' ???

 O create l'xml, lo spedite, e 'speriamo che io me la cavo' ???
 
Previo controlli a prova di scimmia sui dati (bellissima espressione rubata a BFS), basta generare l'Xml seguendo scrupolosamente il tracciato.
Dopo una breve fase di test e correzione, tutto funzionerà sempre al 100%. 
Ti va bene così?
 
Saluti.

 O create l'xml, lo spedite, e 'speriamo che io me la cavo' ???
 
 
c'è un tracciato prefissato
ogni campo ha un tipo dati e una dimensione massima
se una fattura e una anagrafica è compilata come si deve, e la procedura 
che scrive gli xml fa ulteriori controlli è quasi impossibile generare 
un xml errato.
 
in soldoni, i controlli si fanno a monte non dopo aver generato il file.
ovvio che se non c'è un controllo su come viene inserito in anagrafica 
il codice sdi, una anagrafica estera, un cf e una partita iva i casini 
arrivano.
 
io dedico una attenzione quasi maniacale al data entry perchè per 
esperienza negli anni, ho visto che il grosso dei casini arriva sempre 
da dati inseriti a cazzum.
 
per farti un esempio
se hai il classico campo "cellulare" in anagrafica e lo metti di tipo 
testo stai sicuro che ci scriveranno dentro di tutto
"393 4585545"
"3934585545"
"393/485545"
"393-485545 Mario 2 cell"
"393/485545 Nuovo numero Gianni"
 
un giorno un cliente mi ha chiesto "dammi la possibilità di inviare sms 
dal gestionale...tanto i numeri di cellulare sono gia dentro"
ti lascio immaginare il casino quando per farlo mi serviva avere il 
cellulare nel formato +39xxxxxxx
 
mentre se per inserire un cellulare  ci metti la selezione del prefisso 
internazionale +39 da menu a tendina
e controlli che il numero poi inserito sia effettivamente numerico, 
senza spazi, simboli e fronzoli di sicuro quel campo non ti darà mai 
fastidio in futuro
 
scusa la divagazione
BFS
 
 
 
 
 
 
 

 senza spazi
 
la parte difficile è convertire certi utenti "datati" alla gestione di un 
numero di cellulare senza distinzione tra prefisso e numero, come una 
volta, per cui continueranno a infilare ogni sorta di punteggiatura tra le 
varie parti, vuoi per abitudine, vuoi per comodità di lettura in fasi 
successive
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

prova questo link
 
funzione bene
 
 
 
https://microsoft.public.it.office.excel.narkive.com/7I4XiXDe/controllare-validare-file-xml-by-vba
 

 
correggi lo  "schema_vfpr12.xsd"  come indicato nell'articolo e usa il seguente codice
 
 
Function ValidaXmlFE(sFileXmlFullName As String) As Integer
 
    Const sFileXsdFullName As String = "c:\inviofael\Schema_VFPR12_mod.xsd"
    Const sTargetNameSpace = "
http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2
"
    Dim objSchemaCache As New MSXML2.XMLSchemaCache60
    Dim objErr As MSXML2.IXMLDOMParseError2
    Dim oErr As MSXML2.IXMLDOMParseError
    Dim arrErrori() As Variant
    Dim sFileName As String
    Dim i As Long
    sFileName = Mid(sFileXmlFullName, InStrRev(sFileXmlFullName, "\") + 1)
    objSchemaCache.Add sTargetNameSpace, CaricaXml(sFileXsdFullName)
    With CaricaXml(sFileXmlFullName)
        Set .schemas = objSchemaCache
        .SetProperty "MultipleErrorMessages", True
        Set objErr = .validate()
    End With
    For Each oErr In objErr.allErrors
        i = i + 1
        ReDim Preserve arrErrori(1 To i)
        arrErrori(i) = oErr.reason
    Next oErr
    If i > 0 Then
        MsgBox "Verifica del file: " & sFileName & vbNewLine & _
               "Sono stati rilevati i seguenti errori nello schema:" & String(2, vbNewLine) & _
               Join(arrErrori, vbNewLine), vbInformation, "REPORT ERRORI"
               ValidaXmlFE = True
    Else
        ValidaXmlFE = False
'        MsgBox "Verifica del file: " & sFileName & vbNewLine & _
'               "Non sono stati rilevati errori nello schema.", vbInformation, "REPORT ERRORI"
    End If
End Function
 
Function CaricaXml(sFileFullName As String) As MSXML2.DOMDocument60
    Set CaricaXml = New MSXML2.DOMDocument60
    With CaricaXml
        .async = False
        .validateOnParse = False
        .resolveExternals = False
        .Load sFileFullName
    End With
End Function


Ahhh ecco l'inghippo, ci vuole l'xsd modificato
Molte grazie, e' proprio quello che stavo cercando