Estrarre .xml da .p7m

di Anonimizzato10117 il
43 risposte
Buongiorno a tutti,

Sarebbe interessante sfruttare i vantaggi dei file .xml per importare poi le fatture dei nostri fornitori, nel database della ditta.

Aprendo con un editor di testo l' xml.p7m di una fattura, mi trovo una parte superiore ed una parte inferiore che riuscirei a tagliare in maniera abbastanza semplice (dovrebbe essere quella relativa alla firma), purtroppo però all'interno di quel che rimane mi si ripetono casualmente dei caratteri strani (EOT, ETX, STX,....) che vanno a "deturpare" il mio documento non permettendomi di estrarlo integralmente.

La mia strategia quindi risulta essere fallimentare.

Esiste un metodo per riuscire a "pulire" il file xml?

PS: abbiamo un database in access, farei tutto tramite routines di VBA.

43 Risposte

  • Ti basta usare openssl.exe
    O, alla peggio, il mio programmello xml2pdf (che in realtà usa sempre openssl, è solo se sei particolarmente pigro)
  • weldox ha scritto:


    Buongiorno a tutti,

    Sarebbe interessante sfruttare i vantaggi dei file .xml per importare poi le fatture dei nostri fornitori, nel database della ditta.

    Aprendo con un editor di testo l' xml.p7m di una fattura, mi trovo una parte superiore ed una parte inferiore che riuscirei a tagliare in maniera abbastanza semplice (dovrebbe essere quella relativa alla firma), purtroppo però all'interno di quel che rimane mi si ripetono casualmente dei caratteri strani (EOT, ETX, STX,....) che vanno a "deturpare" il mio documento non permettendomi di estrarlo integralmente.

    La mia strategia quindi risulta essere fallimentare.

    Esiste un metodo per riuscire a "pulire" il file xml?

    PS: abbiamo un database in access, farei tutto tramite routines di VBA.
    Penso che potresti anche evitare di ripulire il file ".xml.p7"
    La parte superiore e quella inferiore a cui ti riferisci non contengono tag che ti possono interessare per un'importazione.
    Puoi sempre scrivere una routine in VBA che ti va a leggere i nodi che ti interessano.
    Per esempio:
    • "FatturaElettronicaHeader/DatiTrasmissione/IdTrasmittente/IdPaese", "FatturaElettronicaHeader/DatiTrasmissione/IdTrasmittente/IdCodice" per recuperare la partita iva e il paese;
      "FatturaElettronicaHeader/CedentePrestatore/DatiAnagrafici/Anagrafica/Denominazione", per recuperare il nominativo del fornitore, se società, oppure nome e cognome se ditta individuale;
      "FatturaElettronicaBody/DatiBeniServizi/DettaglioLinee/Descrizione", per recuperare la descrizione del bene o servizio fatturato;
      etc., etc.
    Proseguendo potrai recuperare tutti gli altri dati.
  • ettore56 ha scritto:


    weldox ha scritto:


    Buongiorno a tutti,

    Sarebbe interessante sfruttare i vantaggi dei file .xml per importare poi le fatture dei nostri fornitori, nel database della ditta.

    Aprendo con un editor di testo l' xml.p7m di una fattura, mi trovo una parte superiore ed una parte inferiore che riuscirei a tagliare in maniera abbastanza semplice (dovrebbe essere quella relativa alla firma), purtroppo però all'interno di quel che rimane mi si ripetono casualmente dei caratteri strani (EOT, ETX, STX,....) che vanno a "deturpare" il mio documento non permettendomi di estrarlo integralmente.

    La mia strategia quindi risulta essere fallimentare.

    Esiste un metodo per riuscire a "pulire" il file xml?

    PS: abbiamo un database in access, farei tutto tramite routines di VBA.
    Penso che potresti anche evitare di ripulire il file ".xml.p7"
    La parte superiore e quella inferiore a cui ti riferisci non contengono tag che ti possono interessare per un'importazione.
    Puoi sempre scrivere una routine in VBA che ti va a leggere i nodi che ti interessano.
    Per esempio:
    • "FatturaElettronicaHeader/DatiTrasmissione/IdTrasmittente/IdPaese", "FatturaElettronicaHeader/DatiTrasmissione/IdTrasmittente/IdCodice" per recuperare la partita iva e il paese;
      "FatturaElettronicaHeader/CedentePrestatore/DatiAnagrafici/Anagrafica/Denominazione", per recuperare il nominativo del fornitore, se società, oppure nome e cognome se ditta individuale;
      "FatturaElettronicaBody/DatiBeniServizi/DettaglioLinee/Descrizione", per recuperare la descrizione del bene o servizio fatturato;
      etc., etc.
    Proseguendo potrai recuperare tutti gli altri dati.

    Con vb6 ho estratto tutti i campi per compilare la fattura passiva come pdf e successiva stampa. è una cosa estremamente facile usando un cursore posizionale.
    valutando 10 il tempo per completare la stampa, 2 è quello necessario per estrarre tutti i campi
    se volete vi posto la routine che ho fatto in vb6
  • +m2+ ha scritto:


    Ti basta usare openssl.exe
    O, alla peggio, il mio programmello xml2pdf (che in realtà usa sempre openssl, è solo se sei particolarmente pigro)
    Grazie per la risposta innanzitutto.

    Dovrei integrare il tutto nel gestionale di access, dici che è possibile richiamarlo da vba? Ci dovrei studiare sopra un pochino, sono un po' ignorante in merito...
  • È possibile si lancia da riga di comando.
    come non so, ma ci sono tanti esperti qui
  • Okk!! Grazie!!
  • X Dario e Ettore,

    Corretta l'osservazione che non sarebbe necessario tagliare capo e coda del p7m, il problema è che anche all'interno del corpo ho queste specie di artefatti inseriti in maniera casuale.
    Come se il tipo di firma applicato avesse "cifrato" a suo modo anche il nucleo dell' xml stesso. Non so se mi sono spiegato
  • Utilizzando il modulo Fatturazione Elettronica ho risolto il problema con le seguenti istruzioni in VB NET:
    --------------------------------------------------------------------------
    Imports FatturaElettronica
    Imports FatturaElettronica.Common
    Imports FatturaElettronica.Defaults
    Imports FatturaElettronica.Validators
    Imports FatturaElettronica.FatturaElettronicaHeader.CedentePrestatore
    Imports FatturaElettronica.Extensions
    'Imports System
    Imports System.Xml
    Imports System.IO
    Imports Newtonsoft.Json
    'Imports Org.BouncyCastle.Cms
    
    Module xml04
    
        Sub Main()
            Dim fatturax = Fattura.CreateInstance(Instance.PubblicaAmministrazione)
            Dim fatturaP7M As String = "C:\\ITxxxxxxxxxxx_0SCZO.xml.p7m"
            Dim fatturaXML As String = "C:\ITxxxxxxxxxxx_0SCZO.xml"
            fatturax.ReadXmlSigned(fatturaP7M)  'legge il documento p7m
            fatturax.WriteXml(fatturaXML) 'scrive il documento xml
           End SUB
    End Module
    -----------------------------------------------------------------------------
  • Grazie af50,

    questo modulo dove lo potrei trovare?
  • +m2+ ha scritto:


    È possibile si lancia da riga di comando.
    come non so, ma ci sono tanti esperti qui
    Credo di riuscire a lanciare gli eseguibili tramite shell, quindi da riga di comando.

    Il tuo programmino funziona da riga di comando? O mi consigli di usare direttamente (dovrei studiare come) openssl.exe?

    Grazie mille!

    PS: Ho trovato la discussione dove lo descrivi, credo sia quello che fa al caso mio!!!

    Xml2pdf.exe 4 c:\*.p7m z:\toltefirme
    Toglie le firme digitali CAdES (p7m) da uno o più file in cartella specificata

    Ho provato ed è perfetto...sei magnifico.

    A chi servisse ho proceduto come segue:
    1) Scaricato magnifico programmino di +m2+
    2) Salvato in C:\Program Files (x86)\xml2pdf\
    3) Creato un pulsante e "su click" in cui ho inserito questa semplice riga:

    Call Shell("C:\Program Files (x86)\xml2pdf\Xml2pdf.exe 4 C:\MiaCartellaOrigine\*.p7m C:\MiaCartellaDestinazione")

    Funziona alla perfezione!

    Grazie infinite!
  • weldox ha scritto:


    +m2+ ha scritto:


    È possibile si lancia da riga di comando.
    come non so, ma ci sono tanti esperti qui
    Credo di riuscire a lanciare gli eseguibili tramite shell, quindi da riga di comando.

    Il tuo programmino funziona da riga di comando? O mi consigli di usare direttamente (dovrei studiare come) openssl.exe?

    Grazie mille!

    PS: Ho trovato la discussione dove lo descrivi, credo sia quello che fa al caso mio!!!

    Xml2pdf.exe 4 c:\*.p7m z:\toltefirme
    Toglie le firme digitali CAdES (p7m) da uno o più file in cartella specificata

    Ho provato ed è perfetto...sei magnifico.

    A chi servisse ho proceduto come segue:
    1) Scaricato magnifico programmino di +m2+
    2) Salvato in C:\Program Files (x86)\xml2pdf\
    3) Creato un pulsante e "su click" in cui ho inserito questa semplice riga:

    Call Shell("C:\Program Files (x86)\xml2pdf\Xml2pdf.exe 4 C:\MiaCartellaOrigine\*.p7m C:\MiaCartellaDestinazione")

    Funziona alla perfezione!

    Grazie infinite!
    Personalmente non ti consiglio di metterlo dentro la cartella programmi.
    Ha una gestione "speciale" dei privilegi (da parte di Windows). Usualmente una cartella tipo c:\sticazzi (o anche c:\sticazzi\lamiacartella) è preferibile.

    Le ACL Windows diventano sempre più restrittive (ed inutili)
  • weldox ha scritto:


    Grazie af50,

    questo modulo dove lo potrei trovare?
    In questo stesso forum si fa riferimento a:
    https://github.com/FatturaElettronica/FatturaElettronica.NET


    Da questo sito ho scaricato sia il package FatturaElettronica sia FatturaElettronica.extension.

    Da questo sito ho scaricato il modulo BouncyCastle.Crypto
  • Grazie mille a entrambi!
  • af50 ha scritto:


    Utilizzando il modulo Fatturazione Elettronica ho risolto il problema con le seguenti istruzioni in VB NET:
    --------------------------------------------------------------------------
    Imports FatturaElettronica
    Imports FatturaElettronica.Common
    Imports FatturaElettronica.Defaults
    Imports FatturaElettronica.Validators
    Imports FatturaElettronica.FatturaElettronicaHeader.CedentePrestatore
    Imports FatturaElettronica.Extensions
    'Imports System
    Imports System.Xml
    Imports System.IO
    Imports Newtonsoft.Json
    'Imports Org.BouncyCastle.Cms
    
    Module xml04
    
        Sub Main()
            Dim fatturax = Fattura.CreateInstance(Instance.PubblicaAmministrazione)
            Dim fatturaP7M As String = "C:\\ITxxxxxxxxxxx_0SCZO.xml.p7m"
            Dim fatturaXML As String = "C:\ITxxxxxxxxxxx_0SCZO.xml"
            fatturax.ReadXmlSigned(fatturaP7M)  'legge il documento p7m
            fatturax.WriteXml(fatturaXML) 'scrive il documento xml
           End SUB
    End Module
    -----------------------------------------------------------------------------
    Salve,
    qualcuno ha fatto una routine simile per VB6?
Devi accedere o registrarti per scrivere nel forum
43 risposte