Announcement

Collapse
No announcement yet.

Sepa- XML erstellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Sepa- XML erstellen

    Hallo,

    ich bin das erste mal hier im Forum. ich weis nicht genau wie es läuft, Vorstellung? oder einfach loslegen?

    Ich fange dreister weise mal mit dem zweiten an.

    Ich habe hier die Aufgabe bekomme eine Sepa-XML Datei zu generieren.
    Jetzt habe ich aber überall im Netzt nur gefunden, dass das nicht so einfach sein soll.

    Ich muss diese Datei aus ACCESS heraus generieren, XML selber kann ich ganz einfach über Export erledigen, aber eben keine Sepa-XML.
    Das liegt ja wohl daran, dass in diesem Dokument keine Prüfungen der BLZ un der Kontonummer vorgenommen werden, sehe ich das richtig?
    Dies kann ich bei uns über HanftWddx erledigen, d.h. alles Daten in der Tabelle sind schon geprüft, da muss es doch möglich sein den Rest über VBA und die entsprechenden Stringfunktionen bzw. über die Objekte. zusammenzubasteln. Kann mir da jemand sagen ob das möglich ist?

    über den Aufbau der Sepa habe ich mich hier informiert:
    http://www.hettwer-beratung.de/sepa-...d-dateiformat/

    Grüße, Babsi

    P.S.
    Ich hoffe ich habe mich verständlich ausgedrückt.

  • #2
    Hallo Babsi,

    generell musst du die Prüfungen der SEPA-Logik durch eine Software abdecken. In XML direkt kann keine Prüfung der enthaltenen Informationen erfolgen.
    Die Validierung einer XML-Datei erfolgt gegen die beschreibende XSD-Datei. In der XSD-Datei wird die Struktur der XML-Datei festgelegt, aber nicht
    der Inhalt geprüft.

    Haben die Tabellen in deiner ACCESS-Datenbank denn alle Felder, die du in der SEPA-Datei benötigst?
    Welchen SEPA-Nachrichtentyp sollst du denn erstellen?

    In der Regel baut man SEPA-Dateien mit einer Software während der Laufzeit auf.
    Wenn du genauere Informationen über die SEPA-Formate benötigst, kannst du
    dich hier schlau machen: http://www.die-deutsche-kreditwirtsc...-der-sepa.html
    Dort findest du auch die Spezifikationen.

    Ich hoffe, dir ein bisschen geholfen zu haben.

    Grüße, Dotty

    Comment


    • #3
      Originally posted by Mokkie View Post
      Ich muss diese Datei aus ACCESS heraus generieren, XML selber kann ich ganz einfach über Export erledigen, aber eben keine Sepa-XML.
      Das liegt ja wohl daran, dass in diesem Dokument keine Prüfungen der BLZ un der Kontonummer vorgenommen werden, sehe ich das richtig?
      Dies kann ich bei uns über HanftWddx erledigen, d.h. alles Daten in der Tabelle sind schon geprüft, da muss es doch möglich sein den Rest über VBA und die entsprechenden Stringfunktionen bzw. über die Objekte. zusammenzubasteln. Kann mir da jemand sagen ob das möglich ist?
      Wenn Du XML kannst, kannst Du auch SEPA.
      Die XML Validierung ist aber was anderes als die inhaltliche Korrektheit der Daten. SEPA XML bringt die technische Validierung durch Angabe der Schema Datei direkt mit. Entweder Dein Output passt dann oder eben nicht.
      Du kannst im Vorfeld also nach Herzenslust Bankdaten prüfen. Die die Du rausjagst, müssen bzw. sollten stimmen.

      Beim Erstellen der Datei kannst Du grob unterscheiden Zielland, Lastschrift oder Überweisung (glaub pain.008 und pain.001), ein oder mehrere Konten, usw usw.
      Für den Anfang kannst Du erstmal blankes XML erzeugen ohne Schemavalidierung und Dich dem Format nähern. Ansonsten gibt es z.B. noch CAMT für das Einlesen von Auszügen.
      Gruß, defo

      Comment


      • #4
        Hallo Dotty, Hallo defo,

        ich danke euch für die Antworten.

        @Dotty
        Haben die Tabellen in deiner ACCESS-Datenbank denn alle Felder, die du in der SEPA-Datei benötigst?
        Ja, es sind alles einzelnen Daten für die einzelnen Zahlungen vorhanden.
        Welchen SEPA-Nachrichtentyp sollst du denn erstellen?
        Lastschriften

        Aber der Header fehlt ja in der normalen XML die aus ACCESS heraus generiert wird.

        @defo
        Wenn Du XML kannst, kannst Du auch SEPA.
        na das hört sich ja gut an.
        Habe jetzt angefangen das ganze zu Fuß zu erstellen das ist aber eine riesige Tipparbeit.

        Ich werde mir das alles noch mal ansehen.

        Danke, Gruß, Babsi

        Comment


        • #5
          Hallo noch mal,

          also, der Header fehlt definitiv im XML welches aus ACCESS heraus erstellt wird.
          Das ganze Schema passt entspricht ja so dem Sepa nicht.
          Jetzt bin ich am überlegen, wie ich mich da langsam annähern kann.

          Ich muss übrigens nichts prüfen, alle Daten könnten so in die Sepa XML eingebaut werden. das mach ich schon vorher mit HanftWddx in ACCESS,
          Ich kann, wie schon erwähnt, die Sepa- XML per VBA erstellen aber das ist, wie auch schon erwähnt, eine wahnsinnige Tipparbeit. Das muss doch anders gehen.

          Wenn da jemand noch ne Idee hätte...

          Gruß, Babsi

          Comment


          • #6
            Originally posted by Mokkie View Post
            also, der Header fehlt definitiv im XML welches aus ACCESS heraus erstellt wird.
            Ich kann, wie schon erwähnt, die Sepa- XML per VBA erstellen aber das ist, wie auch schon erwähnt, eine wahnsinnige Tipparbeit. Das muss doch anders gehen.
            Was für ein Header?
            Code:
            <?xml version="1.0" encoding="UTF-8"?>
            <!-- (C) Copyright -.... -->
            <Document xsi:schemaLocation="http://...>
            ..
            </Document>
            Das?
            Und was meinst Du mit Tipparbeit? SEPA XML per Hand eintippen?
            Es sind ca. 60 Attribute, die Du per VBA zu XML umwandeln musst, deren Name steht in den Specs, brauchst Du nur zu kopieren, Dein jeweiliges Datenfeld dazu und fertig.
            Gruß, defo

            Comment


            • #7
              Hi defo,

              der Header muss so aussehen:
              Code:
              - <GrpHdr>
                <MsgID>MsgID12245774</MsgID> 
                <CreDtTime>13.01.2015 14:07:49</CreDtTime> 
                <NbOfTxs>17367</NbOfTxs> 
                <CtrlSum>7179879358571</CtrlSum> 
              - <InitgPty>
                <Nm>Unser unternehmen GmbH</Nm> 
                </InitgPty>
                </GrpHdr>
              Dann kommen die Payment Infos. Die müssen mind. einmal pro Überweisung vorkommen.
              Code:
              - <PrntfInf>
                <PmtInfld>GR1</PmtInfld> 
                <PmtMtd>DD</PmtMtd> 
                <BtchBookg>DD</BtchBookg> 
                <NbOfTxs>Anzahl TX</NbOfTxs> 
                <CtrlSum>Summe</CtrlSum> 
              - <Svclv>
                <cd>SEPA</cd> 
                </Svclv>
              - <LcInstrm>
                <cd>CORE</cd> 
                </LcInstrm>
              - <SeqTp>
                <SeqTp>RCUR</SeqTp> 
                </SeqTp>
                </PrntfInf>
              usw.

              Danach kommen dann die eigentlichen einzelnen Überweisungen

              SEPA XML per Hand eintippen?
              Ja, ich tippe das alles ein, so:

              Code:
               Public Function CreateSepaDoc()
              Dim db As DAO.database
              Dim rs As DAO.Recordset
              Dim xmlObject As DOMDocument
              Dim docElement As IXMLDOMElement
              Dim objHeader As IXMLDOMElement
              Dim objHeader_I As IXMLDOMElement
              Dim objMsgId As IXMLDOMElement
              Dim objRoot As IXMLDOMElement
              Dim objMainComapny As IXMLDOMElement
              Dim objInitgPty As IXMLDOMElement
              Dim objTransaktionAunzahl As IXMLDOMElement
              Dim objSubElement As IXMLDOMElement
              Dim objSubElement2 As IXMLDOMElement
              Dim objElement As IXMLDOMElement
              Dim objPrintInf  As IXMLDOMElement
              Dim subPrintInf_I As IXMLDOMElement
              Dim subPrintInf_II  As IXMLDOMElement
              Dim subPrintInf_III As IXMLDOMElement
              Dim subPrintInf_IV As IXMLDOMElement
              Dim subPrintInf_V As IXMLDOMElement
              Dim objSvclvl As IXMLDOMElement
              Dim subSvclvl As IXMLDOMElement
              Dim objLcInstrm As IXMLDOMElement
              Dim subLcInstrm As IXMLDOMElement
              Dim objSeqTp As IXMLDOMElement
              Dim subSeqTp As IXMLDOMElement
              Dim anzTransakt As Long
              Dim Account As Currency
              Dim mydate As Date
              Dim mytime As Date
              Dim objPI As IXMLDOMProcessingInstruction
              Dim str As String
              'On Error GoTo errormessage:
              
                  
                  mydate = Now()
                  
                  Set db = CurrentDb '**********Recordset öffnen***************
                  Set rs = db.OpenRecordset("SELECT COUNT(DTA_ID) As Anzahl,Sum(DTA_ACCOUNT) as Umsatz" _
                                         & " FROM Tbl_SepaExport ;", dbOpenDynaset)
                                       
                          '**********Anzahl der gesamten Transaktionen und Umsätze feststellen***************
                                             anzTransakt = rs!Anzahl
                                                Account = rs!Umsatz
                  rs.Close
                  Set rs = Nothing
                  
                      
                  Set xmlObject = New DOMDocument
                  Set objPI = _
                      xmlObject.createProcessingInstruction("xml", "version= '1.0' encoding =  'iso-8859-1' ")
                  Set objRoot = xmlObject.createElement("Document")
                      xmlObject.appendChild objPI
                      xmlObject.appendChild objRoot
                      objRoot.Text = "urn:iso:std:iso:20022:tech:xsd_pain.008.002.02 xmlns.xsi=  Http://w3org/2001/XMLSchema-instane"
              
                  Set objHeader_I = xmlObject.createElement("CstmrDrctDbtInitn")
                      objRoot.appendChild objHeader_I
                 '******************Sepa Header ********************
                  Set objHeader = xmlObject.createElement("GrpHdr")
                      objHeader_I.appendChild objHeader
                      
                  Set objMsgId = xmlObject.createElement("MsgID")
                      objHeader.appendChild objMsgId
                      objMsgId.Text = "MsgID12245774"
                       
                  Set objSubElement2 = xmlObject.createElement("CreDtTime")
                      objHeader.appendChild objSubElement2
                      objSubElement2.Text = mydate
                      
                  Set objTransaktionAunzahl = xmlObject.createElement("NbOfTxs")
                      objHeader.appendChild objTransaktionAunzahl
                      objTransaktionAunzahl.Text = anzTransakt
                      
                  Set objSubElement = xmlObject.createElement("CtrlSum")
                      objHeader.appendChild objSubElement
                      objSubElement.Text = Account
                  
                  Set objInitgPty = xmlObject.createElement("InitgPty")
                       objHeader.appendChild objInitgPty
                      
                  Set objMainComapny = xmlObject.createElement("Nm")
                      objInitgPty.appendChild objMainComapny
                      objMainComapny.Text = "AFC Rechenzentrum GmbH"
                  
                 '**********Sepapaymentinfos pro Überweisung ********************
                  Set objPrintInf = xmlObject.createElement("PrntfInf")
                      objHeader_I.appendChild objPrintInf
                 
                  Set subPrintInf_I = xmlObject.createElement("PmtInfld")
                      objPrintInf.appendChild subPrintInf_I
                      subPrintInf_I.Text = "GR1"
              
                  Set subPrintInf_II = xmlObject.createElement("PmtMtd")
                      objPrintInf.appendChild subPrintInf_II
                      subPrintInf_II.Text = "DD"
                      
                 Set subPrintInf_III = xmlObject.createElement("BtchBookg")
                      objPrintInf.appendChild subPrintInf_III
                      subPrintInf_III.Text = "DD"
              
                 Set subPrintInf_IV = xmlObject.createElement("NbOfTxs")
                      objPrintInf.appendChild subPrintInf_IV
                      subPrintInf_IV.Text = "Anzahl TX"
              
                 Set subPrintInf_V = xmlObject.createElement("CtrlSum")
                      objPrintInf.appendChild subPrintInf_V
                      subPrintInf_V.Text = "Summe"
                      
                '**********Sepapaymentinfos I pro Überweisung ********************
                    
                 Set objSvclvl = xmlObject.createElement("Svclv")
                     objPrintInf.appendChild objSvclvl
                     
                 Set subSvclvl = xmlObject.createElement("cd")
                     objSvclvl.appendChild subSvclvl
                     subSvclvl.Text = "SEPA"
                
                '**********Sepapaymentinfos II pro Überweisung ********************
                 Set objLcInstrm = xmlObject.createElement("LcInstrm")
                     objPrintInf.appendChild objLcInstrm
                  
                 Set subLcInstrm = xmlObject.createElement("cd")
                     objLcInstrm.appendChild subLcInstrm
                     subLcInstrm.Text = "CORE"
                  
                '**********Sepapaymentinfos II pro Überweisung ********************
                 Set objSeqTp = xmlObject.createElement("SeqTp")
                     objPrintInf.appendChild objSeqTp
                     
                 Set subSeqTp = xmlObject.createElement("SeqTp")
                     objSeqTp.appendChild subSeqTp
                     subSeqTp.Text = "RCUR"
              Da brauch ich ja ewig. Habe jetzt gehört, dass man per Visual Basic ne DLL erstellen soll, die dann über Verweise in ACCESS einbinden sollte um sich das leben einfacher zu machen.

              Es sind ca. 60 Attribute, die Du per VBA zu XML umwandeln musst, deren Name steht in den Specs
              Sorry, Specs? Damit, meinst du die Spezifikationen, wie komme ich daran, kann ich die auch ändern?

              Comment


              • #8
                Originally posted by Mokkie View Post
                der Header muss so aussehen:
                Wenn Dir das bekannt ist, dann wäre die Frage woher? Ja, das steht in den Sepa Specs / Spezifikationen. Die bekommst Du bei der Bank Deines Vertrauens und diversen Webseiten.
                Originally posted by Mokkie View Post
                Ja, ich tippe das alles ein, so:
                Ich seh jetzt nicht das Problem. Automatische Programmierung gibt es noch nicht, Du musst schon irgendwo definieren, wie, welches Feld aus Deinem System an welcher Stelle in der SEPA Datei landen soll und wie oft.

                Originally posted by Mokkie View Post
                Da brauch ich ja ewig. Habe jetzt gehört, dass man per Visual Basic ne DLL erstellen soll, die dann über Verweise in ACCESS einbinden sollte um sich das leben einfacher zu machen.
                Du hast doch schon die Hälfte~. Ich kann Dir zu VBA und ACCESS nicht viel sagen. Ob per DLL oder anders, Du wirst nicht darum herum kommen, für jedes Attribut einen Aufruf zu bauen. Ich erzeuge das XML per SQL Statement aus der DB.

                Originally posted by Mokkie View Post
                Sorry, Specs? Damit, meinst du die Spezifikationen, wie komme ich daran, kann ich die auch ändern?
                Ist das Dein Ernst? Die SEPA Spezifikationen gibt es überall im Internet, im Zweifel bei Eurer Hausbank (Abgabe der Lastschriften), die hier leider gerne auch Ihr eigenes Süppchen kochen. Dann gibt es noch Unterschiede bei anderen SEPA Teilnehmerländern. Ändern kannst Du die wahrscheinlich als Mitglied in entsprechenden SEPA Gremien.
                Gruß, defo

                Comment


                • #9
                  Hallo defo,

                  Ist das Dein Ernst? Die SEPA Spezifikationen gibt es überall im Internet
                  Ja, ich weis, da haben wir uns missverstanden. Entschuldigung.

                  na dann ist ja alles klar und ich bin auf dem richtigen Weg, Danke noch mal.

                  Comment

                  Working...
                  X