{"id":55000898,"date":"2013-08-01T00:00:00","date_gmt":"2020-05-22T21:30:03","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=898"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Onlinebanking_mit_SEPA","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/","title":{"rendered":"Onlinebanking mit SEPA"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/1e2f2cba222d4f89ab696e276e2e317e\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>SEPA wird ab 1. Februar 2014 Standard beim Onlinebanking. Damit Sie ger&uuml;stet sind, zeigen wir Ihnen, wie Sie beispielsweise Kontost&auml;nde abfragen, Buchungen einlesen und &uuml;berweisungen durchf&uuml;hren. Grundlage ist die DDBAC-Bibliothek der Firma DataDesign. Die Bibliothek stellt die grundlegenden Funktionen zur Verf&uuml;gung und kann zu Testzwecken kostenlos eingesetzt werden.<\/b><\/p>\n<p><b>Warum SEPA<\/b><\/p>\n<p>SEPA (<b>Single Euro Payments Area<\/b>, einheitlicher Euro-Zahlungsverkehrsraum) ist die Bezeichnung f&uuml;r ein Projekt f&uuml;r die Vereinheitlichung und Erleichterung des bargeldlosen Zahlungsverkehrs von Zahlungen in Euro.<\/p>\n<p>Dies bezieht sich zum Beispiel darauf, dass der Zahlungsverkehr zwischen verschiedenen L&auml;ndern vereinfacht wird, dass Zahlungen schneller auf dem Zielkonto eingehen (bei Lastschriften sofort und bei &uuml;berweisungen in einem Tag) und dass die Zahlungsinformationen in XML &uuml;bertragen werden und somit weniger Probleme durch verschiedene Protokolle im internationalen Zahlungsverkehr auftreten.<\/p>\n<p>Konkrete &auml;nderungen sind, dass Kontonummer und Bankleitzahl f&uuml;r Zahlungen bald nicht mehr genutzt werden k&ouml;nnen und diese durch IBAN und BIC ersetzt werden.<\/p>\n<p>IBAN ist die International Bank Account Number und dient der Standardisierung der vielen verschiedenen Formate f&uuml;r Kontonummern in den verschiedenen L&auml;ndern. In Deutschland besteht die IBAN aus zwei Buchstaben f&uuml;r die L&auml;nderkennung (DE), zwei Zahlen f&uuml;r eine Pr&uuml;fsumme, eine achtstellige Bankleitzahl und eine zehnstellige Kontonummer. In anderen L&auml;ndern variiert der Aufbau. BIC ist die Abk&uuml;rzung f&uuml;r Business Identifier Code und dient prinzipiell als eine Art Bankleitzahl.<\/p>\n<p>Sie besteht mindestens aus acht Zeichen, wobei die ersten vier dem Bank-Code entsprechen, die folgenden zwei dem L&auml;ndercode und die letzten zwei dem Ort. Zus&auml;tzlich kann mit drei Zeichen eine Kennzeichnung einer Filiale oder Abteilung hinzugef&uuml;gt werden.<\/p>\n<p><b>Voraussetzungen<\/b><\/p>\n<p>Voraussetzung zum Nachvollziehen der Beispiele dieses Beitrags ist die Installation des <b>DDBAC Software Development Kits<\/b>, das Sie unter dem Link <b>http:\/\/ddbac.de\/index.php\/menu-endanwender-user\/menu-e-u-updates-download <\/b>finden.<\/p>\n<p>Achtung: Sie d&uuml;rfen diese Software ohne Lizenz ausschlie&szlig;lich zu Testzwecken oder f&uuml;r private Zwecke einsetzen. Ohne Lizenz darf die Funktionsbibliothek weder f&uuml;r gesch&auml;ftliche Zwecke genutzt noch als Teil einer Anwendung weitergegeben werden.<\/p>\n<p>Wir arbeiten jedoch an einer g&uuml;nstigen Lizenzform f&uuml;r die Leser von <b>Access im Unternehmen <\/b>&#8211; mehr dazu im Newsletter (Anmeldung: <b>http:\/\/access-im-unternehmen.de\/index.phpid=380<\/b>).<\/p>\n<p>Nach der Installation des Pakets m&uuml;ssen Sie zun&auml;chst Ihre Bankverbindungen einrichten. Dies erledigen Sie zun&auml;chst noch v&ouml;llig ohne Hilfe von Access, n&auml;mlich &uuml;ber die Systemsteuerung.<\/p>\n<p>Sie finden dort einen Eintrag namens <b>Homebanking Kontakte<\/b>, der nach einem Doppelklick den Dialog aus Bild 1 anzeigt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_04\/pic_898_001.png\" alt=\"Der noch leere Dialog der Banking-Kontakte\" width=\"415\" height=\"414,0653\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Der noch leere Dialog der Banking-Kontakte<\/span><\/b><\/p>\n<p>Mit der Schaltfl&auml;che <b>Neu <\/b>legen Sie nun einen neuen Eintrag an. Ein Homebanking-Kontakt ist eine Zusammenfassung eines oder mehrerer Konten bei einem Kreditinstitut. Geben Sie hier zun&auml;chst die Bankleitzahl der Bank ein und klicken Sie dann auf <b>Weiter<\/b> (s. Bild 2). Der Dialog ermittelt nun alle Zugangsarten f&uuml;r diese Bank und zeigt diese zwei Dialoge sp&auml;ter an (s. Bild 3). <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_04\/pic_898_003.png\" alt=\"Auswahl einer Zugangsart\" width=\"415\" height=\"414,0653\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Auswahl einer Zugangsart<\/span><\/b><\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_04\/pic_898_002.png\" alt=\"Anlegen eines neuen Banking-Kontakts\" width=\"415\" height=\"414,0653\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Anlegen eines neuen Banking-Kontakts<\/span><\/b><\/p>\n<p>Wenn Sie sich wundern, dass beispielsweise die Option <b>PIN\/TAN <\/b>nicht aktiviert ist, springen Sie nochmal einen Schritt zur&uuml;ck: Wenn Sie dort die Option <b>Zugangsdaten manuell eingeben (f&uuml;r Experten) <\/b>aktivieren, werden gegebenenfalls weitere Zugangsoptionen angezeigt.<\/p>\n<p>In Abh&auml;ngigkeit von der gew&auml;hlten Zugriffsart geben Sie in den folgenden Dialogen verschiedene Informationen an &#8211; bei Verwendung einer Schl&uuml;sseldatei m&uuml;ssen Sie etwa deren Speicherort angeben.<\/p>\n<p>Oder Sie m&uuml;ssen sicherstellen, dass bei Verwendung eines Chipkartenlesers auch ein entsprechendes Ger&auml;t angeschlossen ist. Je nach der Zugangsart m&uuml;ssen Sie unter Umst&auml;nden Informationen oder Ger&auml;te von Ihrem Kre-dit-in-stitut anfordern. Sind die f&uuml;r die Konfiguration der Zugangsart n&ouml;tigen Schritte erledigt, w&auml;hlen Sie eine der angebotenen HBCI-Versionen aus (s. Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_04\/pic_898_004.png\" alt=\"Auswahl der HBCI-Version\" width=\"415\" height=\"414,0653\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Auswahl der HBCI-Version<\/span><\/b><\/p>\n<p>Schlie&szlig;lich geben Sie die Verbindungsdaten f&uuml;r das Kreditinstitut ein, die aber normalerweise schon vorhanden sein sollten (zum Beispiel <b>hbci.commerzbank.de<\/b>).<\/p>\n<p>Klicken Sie im Dialog aus Bild 5 dann auf die Schaltfl&auml;che <b>Verbindung testen<\/b>, um die Funktion zu pr&uuml;fen. Ein frisch erstellter Kontakt sieht schlie&szlig;lich wie in Bild 6 aus. Legen Sie die gew&uuml;nschten Banking-Kontakte an und schlie&szlig;en Sie den Dialog &#8211; von nun an geht es mit Access weiter.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_04\/pic_898_005.png\" alt=\"Verbindungsdaten des Kreditinsituts\" width=\"415\" height=\"414,0653\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Verbindungsdaten des Kreditinsituts<\/span><\/b><\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_04\/pic_898_006.png\" alt=\"Frisch erstellter Kontakt\" width=\"415\" height=\"414,0653\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Frisch erstellter Kontakt<\/span><\/b><\/p>\n<p><b>Customers und Accounts<\/b><\/p>\n<p>Unter VBA hei&szlig;t das, was Sie soeben &uuml;ber den entsprechenden Dialog der Systemsteuerung angelegt haben, <b>BACCustomer<\/b>.<\/p>\n<p>Ein <b>BACCustomer <\/b>kann jedoch ein oder mehrere Konten besitzen, die Sie &uuml;ber die <b>Accounts<\/b>-Auflistung ermitteln. Ein Konto entspricht wiederum einem <b>BACAccount<\/b>-Objekt. Konten k&ouml;nnen Giro-Konten sein, aber auch Tagesgeldkonten, Kreditkarten und mehr. &uuml;brigens: Der <b>BACContact <\/b>kann in den hier vorgestellten Beispielen synonym zum <b>BACCustomer <\/b>verwendet werden.<\/p>\n<p><b>Wie verwalten<\/b><\/p>\n<p>In einer Datenbankanwendung stellt sich immer die Frage, wie Daten in Tabellen verwaltet werden. Wenn die Basisdaten, also die Bankkonten, mit einer externen Anwendung verwaltet werden, muss man diese Daten dann noch zus&auml;tzlich in Tabellen vorhalten Tatsache ist: Es kann sein, dass Sie mit dem Assistenten ein Bankkonto anlegen.<\/p>\n<p>Wenn Sie dieses zus&auml;tzlich in einer Tabelle speichern, liegen die Daten doppelt vor. Sie k&ouml;nnen dann allerdings die in Zusammenhang mit diesem Konto anfallenden Daten wie etwa die Buchungen in einer Tabelle speichern und von dieser Tabelle aus das entsprechende Konto referenzieren.<\/p>\n<p>Damit w&uuml;rden Sie dem vorbeugen, dass ein Konto einmal gel&ouml;scht und nicht mehr &uuml;ber DDBAC zugreifbar ist oder dass sich Daten &auml;ndern, die mit dem Konto zusammenh&auml;ngen. Aber letztlich ben&ouml;tigt man zum Speichern einer Buchung doch nur die &uuml;blicherweise anfallenden Metadaten &#8211; im Falle des eigenen Bankkontos die Kontonummer und die Bankleitzahl, unter welcher die Buchung durchgef&uuml;hrt wurde.<\/p>\n<p>Was aber, wenn Sie beispielsweise mit Ihrer mit Access erstellten Homebanking-L&ouml;sung auf einen anderen Rechner ziehen, der die Bankverbindungen noch nicht kennt Von dort aus k&ouml;nnen Sie dann weder Kontost&auml;nde noch -bewegungen abrufen noch Aktionen wie &uuml;berweisungen initiieren.<\/p>\n<p>Aber k&ouml;nnen Sie das, wenn die Bankdaten in einer Tabelle der Datenbank gespeichert sind Nein: Die Daten m&uuml;ssen der DDBAC-Komponente bekannt sein und an der entsprechenden Stelle in der Registry gespeichert sein. Die Kontakte lassen sich auch nicht einfach per VBA anlegen &#8211; Sie werden beim Umzug also die Kontakte neu anlegen m&uuml;ssen.<\/p>\n<p>Oder Sie kopieren die Datei mit den benutzerdefinierten DDBAC-Daten, die Sie unter dem Namen <b>ddusers.dat <\/b>im Verzeichnis <b>C:\\Users\\<Benutzername>\\AppData\\Roaming\\DataDesign\\DDBAC <\/b>finden, vom alten auf den neuen Rechner. Wir belassen es also dabei, die Kombination aus Bankleitzahl und Kontonummer mit Daten wie etwa den Buchungen zu speichern und verzichten auf das Anlegen einer Tabelle f&uuml;r die Bankkonten.<\/p>\n<p><b>Kontakte und Konten auslesen<\/b><\/p>\n<p>Listing 1 zeigt, wie Sie per VBA auf die Kontakte und Konten zugreifen, die DDBAC in der Datei <b>ddusers.dat <\/b>gespeichert hat. Die Prozedur ben&ouml;tigt zun&auml;chst das Hauptobjekt des Typs <b>BACBanking<\/b>. In einer &auml;u&szlig;eren <b>For Each<\/b>-Schleife durchl&auml;uft die Prozedur nun die Elemente der Auflistung <b>Customers<\/b>. Dieses liefert als Eigenschaften beispielsweise die &uuml;bergeordnete Benutzernummer (die in manchen F&auml;llen der Kontonummer plus weiteren Zahlen entspricht), die Bankleitzahl oder die Anzahl der in diesem Kontakt enthaltenen Konten.<\/p>\n<p>Die Konten wiederum sprechen Sie &uuml;ber die Auflistung <b>Accounts <\/b>des <b>BACCustomer<\/b>-Objekts an. Das <b>BACAccount<\/b>-Objekt liefert mit <b>AcctName <\/b>die bankinterne Bezeichnung der Kontenart, mit <b>AccountNumber <\/b>die Kontonummer und weitere Informationen.<\/p>\n<p><b>SEPA oder nicht SEPA<\/b><\/p>\n<p>Interessant ist in Zusammenhang mit dem vorliegenden Beitrag die Information, ob ein Account SEPA-f&auml;hig ist oder nicht. Dies bekommen Sie relativ einfach per VBA heraus &#8211; das <b>BACAccount<\/b>-Objekt liefert n&auml;mlich mit einer Eigenschaft namens <b>IsSepa <\/b>die Antwort. Hat diese den Wert <b>True<\/b>, k&ouml;nnen Sie das Konto f&uuml;r <b>SEPA <\/b>nutzen.<\/p>\n<p><b>BIC und IBAN<\/b><\/p>\n<p>Die bereits weiter oben vorgestellten Eigenschaften <b>BIC <\/b>und <b>IBAN <\/b>k&ouml;nnen Sie ebenfalls aus dem <b>BACAccount<\/b>-Objekt auslesen, und zwar &uuml;ber die gleichnamigen Eigenschaften. Bevor wir zur SEPA-&uuml;berweisung kommen, schauen wir uns jedoch noch an, was die Beispieldatenbank noch zu bieten hat.<\/p>\n<p><b>Kontostand und Ums&auml;tze<\/b><\/p>\n<p>Das Formular aus Bild 7 bietet die M&ouml;glichkeit, Bankverbindungen und Konten auszuw&auml;hlen und den aktuellen Kontostand und die Ums&auml;tze einzulesen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_04\/pic_898_007.png\" alt=\"Anzeigen von Bankverbindungen, Konten, Kontostand und Ums&auml;tzen\" width=\"700\" height=\"444,0625\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Anzeigen von Bankverbindungen, Konten, Kontostand und Ums&auml;tzen<\/span><\/b><\/p>\n<p><b>Bankverbindungen eintragen<\/b><\/p>\n<p>Das Eintragen der Bankverbindungen geschieht beim Laden des Formulars. Die <b>Form_Load<\/b>-Ereignisprozedur liest dann die in der oben angegebenen Textdatei enthaltenen Bankverbindungs- und Kontodaten in das Kombinationsfeld <b>cboContacts <\/b>ein.<\/p>\n<p>Aus einer Tabelle namens <b>tblOptionen<\/b> holt das Formular sich den zuletzt ausgew&auml;hlten Datensatz f&uuml;r dieses Feld, soweit vorhanden. Falls ja, wird die Bankverbindung eingestellt und das Formular liest auf die gleiche Weise das zuletzt verwendete Konto ein. In diesem Fall werden auch gleich die bereits gespeicherten Ums&auml;tze eingelesen und im Unterformular angezeigt (s. Listing 2). W&auml;hlt der Benutzer eine neue Bankverbindung aus, liest das Formular alle Konten zu dieser Bankverbindung ein und bietet diese im unteren Kombinationsfeld zur Auswahl an (s. Listing 3). Anschlie&szlig;end muss er noch das Konto ausw&auml;hlen, damit die entsprechenden Ums&auml;tze im Unterformular erscheinen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     <span style=\"color:blue;\">Dim <\/span>intLastContact<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>intLastAccount<span style=\"color:blue;\"> As Integer<\/span>\r\n     Me!cboContacts.RowSource = GetContacts\r\n     intLastContact = Nz(DLookup(\"LetzterBankkontakt\", \"tblOptionen\"), -1)\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> intLastContact = -1<span style=\"color:blue;\"> Then<\/span>\r\n         Me!cboContacts = Me!cboContacts.ItemData(intLastContact)\r\n         Me!cboAccounts.RowSource = GetAccounts(intLastContact)\r\n         intLastAccount = Nz(DLookup(\"LetztesKonto\", \"tblOptionen\"), -1)\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> intLastAccount = -1<span style=\"color:blue;\"> Then<\/span>\r\n             Me!cboAccounts = Me!cboAccounts.ItemData(intLastAccount)\r\n             UnterformularFiltern\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Laden des Formulars frmHomebanking<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cboAccounts_AfterUpdate()\r\n     <span style=\"color:blue;\">If <\/span>IsNull(Me!cboAccounts)<span style=\"color:blue;\"> Then<\/span>\r\n         UnterformularLeeren\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         UnterformularFiltern\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Daten des Unterformulars stammen aus der Tabelle <b>tblUmsaetze<\/b>. Das Unterformular wird durch die Prozedur <b>UnterformularFiltern <\/b>gef&uuml;llt. Die Prozedur liest die Bankverbindung und das Konto aus den beiden Kombinationsfeldern <b>cboContacts<\/b> und <b>cboAccounts <\/b>ein und stellt einen entsprechenden Filter zusammen, der die gew&uuml;nschten Datens&auml;tze der Tabelle <b>tblUmsaetze <\/b>liefert (s. Listing 4).<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>UnterformularFiltern()\r\n     <span style=\"color:blue;\">Dim <\/span>strKontonummer<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strKundennummer<span style=\"color:blue;\"> As String<\/span>\r\n     strKundennummer = Me!cboContacts.Column(1)\r\n     strKontonummer = Me!cboAccounts.Column(1)\r\n     <span style=\"color:blue;\">With<\/span> Me.sfmHomebanking.Form\r\n         .Filter = \"Kundennummer = ''\" & strKundennummer & \"'' AND Kontonummer = ''\" _\r\n             & strKontonummer & \"''\"\r\n         .FilterOn = <span style=\"color:blue;\">True<\/span>\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Filtern der Ums&auml;tze nach dem gew&auml;hlten Bankkonto<\/span><\/b><\/p>\n<p>Kontostand einlesen<\/p>\n<p>Ein Klick auf die Schaltfl&auml;che mit der Beschriftung <b>Aktualisieren <\/b>liest den Kontostand f&uuml;r das aktuell ausgew&auml;hlte Konto ein.<\/p>\n<p>Den Gro&szlig;teil der Arbeit &uuml;bernimmt dabei die Funktion <b>Kontostand<\/b>, die als Parameter die Nummer des aktuell ausgew&auml;hlten Kontakts im Kombinationsfeld <b>cboContacts <\/b>und die Nummer des gew&uuml;nschten Kontos aus <b>cboAccounts <\/b>erwartet.<\/p>\n<p>Die Funktion f&uuml;llt einen benutzerdefinierten Typ, der die vier Elemente <b>Datum<\/b>, <b>Wert<\/b>, <b>SollHaben <\/b>und <b>Waehrung <\/b>enth&auml;lt. Die Ergebnisse landen schlie&szlig;lich in den entsprechenden Textfeldern des Formulars (s. Listing 5). Die Funktion <b>Kontostand <\/b>finden Sie im Modul <b>mdlSEPA <\/b>der Beispieldatenbank.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdAktualisieren_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>AktuellerKontostand<span style=\"color:blue;\"> As <\/span>tKontostand\r\n     AktuellerKontostand = Kontostand(Me!cboContacts, Me!cboAccounts)\r\n     <span style=\"color:blue;\">With<\/span> AktuellerKontostand\r\n         Me!txtKontostandDatum = .Datum\r\n         Me!txtKontostandSaldo = .Wert\r\n         Me!txtKontostandSollHaben = .SollHaben\r\n         Me!txtKontostandWaehrung = .Waehrung\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Aktualisieren des Kontostands<\/span><\/b><\/p>\n<p><b>Ums&auml;tze einlesen<\/b><\/p>\n<p>Das Einlesen der Ums&auml;tze resultiert im Speichern der Umsatzdaten in der Tabelle <b>tblUmsaetze<\/b>. Das Arbeitstier bei diesem Vorgang ist die Funktion <b>Kontoauszug<\/b>, die wiederum den Index des Kontakts und des Kontos als Parameter erwartet.<\/p>\n<p>Die Prozedur, die durch das Anklicken der Schaltfl&auml;che <b>cmdUmsaetzeAbfragen <\/b>ausgel&ouml;st wird, ruft die Funktion <b>Kontoauszug <\/b>mit diesen Parametern auf und erh&auml;lt ein Objekt auf Basis der benutzerdefinierten Klasse <b>clsTransactions <\/b>zur&uuml;ck. Dieses enth&auml;lt f&uuml;r jeden Umsatz ein weiteres Objekt des Typs <b>clsTransaction<\/b>. Die folgende <b>For&#8230;Next<\/b>-Schleife durchl&auml;uft die einzelnen Buchungen und tr&auml;gt f&uuml;r jede einen Datensatz in der Tabelle <b>tblUmsaetze <\/b>ein.<\/p>\n<p>Die neue Variante unterscheidet sich in einem praktischen Aspekt von den in fr&uuml;heren Beitr&auml;gen beschriebenen Versionen: Bislang wurde ein Startdatum vom Benutzer vorgegeben oder es wurden einfach alle vorhandenen Ums&auml;tze eingelesen. Die jeweilige Routine hat dann konsequent alle Ums&auml;tze eingelesen und diese nach bestimmten Kriterien (Datum, Betrag, Verwendungszweck) mit bereits vorhandenen Eintr&auml;gen abgeglichen.<\/p>\n<p>Wenn Sie nun am gleichen Tag zwei oder mehr &uuml;berweisungen get&auml;tigt haben, deren Umsatz, Verwendungszweck und weitere Vergleichskriterien &uuml;bereinstimmen, wurde der Umsatz nur einmal gespeichert.<\/p>\n<p>Die neue Variante ermittelt nun zun&auml;chst das Datum des letzten Umsatzes f&uuml;r das angegebene Konto. Dieses Datum wird als Startdatum f&uuml;r das Einlesen der Ums&auml;tze verwendet &#8211; so spart man sich das Einlesen der kompletten Ums&auml;tze vorheriger Tage.<\/p>\n<p>Allerdings kann es immer noch vorkommen, dass Sie einmal am 15.7.2013 um 16 Uhr die Ums&auml;tze einlesen und dann wieder an einem sp&auml;teren Datum. Sollten dann am 15.7.2013 weitere Ums&auml;tze nach 16 Uhr hinzugekommen sein, gleicht die Prozedur diese wieder gegeneinander ab.<\/p>\n<p>Ist dann ein Umsatz mit gleichen Daten dabei, wird dieser f&auml;lschlicherweise nicht erneut gespeichert. Deshalb l&ouml;scht die Prozedur <b>cmdUmsaetzeAbfragen <\/b>alle Ums&auml;tze, die am Tag der letzten Abfrage eingelesen wurden, und liest diesen Tag nun komplett neu ein. Eventuell vorhandene eindeutige Indizes, die verhindern, dass ein Umsatz mit gleichem Betrag, Datum und Verwendungszweck doppelt angelegt wird, k&ouml;nnen somit ebenfalls entfallen (s. Listing 6). <\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdUmsaetzeAbfragen_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>objTransactions<span style=\"color:blue;\"> As <\/span>clsTransactions\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>intNeueUmsaetze<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>datStart<span style=\"color:blue;\"> As Date<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     datStart = Nz(DMax(\"Buchungsdatum\", \"tblUmsaetze\", \"Kundennummer = ''\" & Me!cboContacts.Column(1) _\r\n         & \"'' AND Kontonummer = ''\" & Me!cboAccounts.Column(1) & \"'' AND BLZ = ''\" & Me!cboContacts.Column(2) & \"''\"), 0)\r\n     <span style=\"color:blue;\">Set<\/span> objTransactions = Kontoauszug(Me!cboContacts, Me!cboAccounts, eUmsaetzeGebucht, datStart)\r\n     db.Execute \"DELETE FROM tblUmsaetze WHERE Kundennummer = ''\" & Me!cboContacts.Column(1) & \"'' AND Kontonummer = ''\" _\r\n         & Me!cboAccounts.Column(1) & \"'' AND BLZ = ''\" & Me!cboContacts.Column(2) & \"'' And Buchungsdatum &gt;= \" _\r\n         & SQLDatum(datStart), dbFailOnError\r\n     For i = 1 To objTransactions.count\r\n         <span style=\"color:blue;\">With<\/span> objTransactions.Item(i)\r\n             On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n             db.Execute \"INSERT INTO tblUmsaetze(Kundennummer, Kontonummer, BLZ, Betrag, Waehrung, Buchungsdatum, \" _\r\n                 & \"Auftraggeber, Kontonummer_Partner, BLZ_Partner, Verwendungszweck) VALUES(''\" & .Kundennummer & \"'', ''\" _\r\n                 & .Kontonummer & \"'', ''\" & .BLZ & \"'', \" & <span style=\"color:blue;\">Replace<\/span>(.Betrag, \",\", \".\") & \", ''\" & .Waehrung & \"'', \" _\r\n                 & SQLDatum(.Buchungsdatum) & \", ''\" & .Auftraggeber & \"'', ''\" & .Kontonummer_Partner & \"'', ''\" & .BLZ_Partner _\r\n                 & \"'', ''\" & .Verwendungszweck & \"'')\", dbFailOnError\r\n             Select Case Err.Number\r\n                 <span style=\"color:blue;\">Case <\/span>0\r\n                     intNeueUmsaetze = intNeueUmsaetze + 1\r\n                 <span style=\"color:blue;\">Case Else<\/span>\r\n                     <span style=\"color:blue;\">MsgBox<\/span> \"Fehler \" & Err.Number & \", ''\" & Err.Description & \"''\"\r\n             <span style=\"color:blue;\">End Select<\/span>\r\n         End <span style=\"color:blue;\">With<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n     <span style=\"color:blue;\">If <\/span>intNeueUmsaetze = 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Es wurden keine neuen Ums&auml;tze eingelesen.\"\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Es wurden \" & intNeueUmsaetze & \" neue Ums&auml;tze eingelesen.\"\r\n         Me!sfmHomebanking.Form.Requery\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Ums&auml;tze abfragen<\/span><\/b><\/p>\n<p>Die Funktion <b>Kontoauszug<\/b>, welche alle Ums&auml;tze seit dem letzten Buchungstag liefert, finden Sie ebenfalls im Modul <b>mdlSEPA<\/b>. Auch diese wurde in &auml;hnlicher Art bereits in vorherigen Beitr&auml;gen beschrieben, sodass wir hier nicht mehr im Detail darauf eingehen.<\/p>\n<p><b>Die Schaltfl&auml;che <b>Neue &uuml;berweisung<\/b><\/b><\/p>\n<p>Wenn Sie einen Kontakt und ein Bankkonto ausgew&auml;hlt haben, k&ouml;nnen Sie &uuml;ber die Schaltfl&auml;che <b>cmdNeue-Ueber-weisung<\/b> den nachfolgend beschriebenen Dialog zum Durchf&uuml;hren einer &uuml;berweisung aufrufen. Die beim Anklicken der Schaltfl&auml;che ausgel&ouml;ste Prozedur &ouml;ffnet das Formular und &uuml;bergibt den Index des aktuell ausgew&auml;hlten Bankkontos an das Formular. Dies verwendet dies direkt zum Einstellen der Bankverbindung des Ausf&uuml;hrenden der &uuml;berweisung:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdNeueUeberweisung_Click()\r\n     DoCmd.OpenForm _\r\n         \"frmUeberweisung\", _\r\n         WindowMode:=acDialog, _\r\n         OpenArgs:=Me!cboAccounts\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b>&uuml;berweisungsformular<\/b><\/p>\n<p>Kommen wir nun zu den neuen SEPA-&uuml;berweisungen, die sich von den in vorherigen Artikeln vorgestellten herk&ouml;mmlichen &uuml;berweisungen unterscheiden. Um die &uuml;berweisung benutzerfreundlich zu gestalten, verwenden wir dazu nat&uuml;rlich ein geeignetes Formular, das im Entwurf wie in Bild 8 aussieht. Das Formular ist ungebunden. Beim &ouml;ffnen des Formulars werden gleich einige Aktionen durchgef&uuml;hrt. Die Prozedur <b>Form_Open <\/b>erstellt eine neue <b>BACContacts<\/b>-Auflistung und f&uuml;llt diese aus den gespeicherten Bankverbindungen (s. Listing 7). Dann durchl&auml;uft sie alle Elemente und alle im jeweiligen Kontakt enthaltenen <b>BACAccount<\/b>-Elemente &#8211; jeweils in einer <b>For Each<\/b>-Schleife. Dabei f&uuml;gt sie nur f&uuml;r die SEPA-f&auml;higen Konten jeweils einen Eintrag zu einer semikolaseparierten Liste hinzu, der aus dem Indexwert, der Bankleitzahl, der Kontonummer, IBAN und BIC besteht.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_04\/pic_898_008.png\" alt=\"&uuml;berweisungsformular\" width=\"345\" height=\"460,777\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: &uuml;berweisungsformular<\/span><\/b><\/p>\n<p>Das Ergebnis landet in einer Textvariablen namens <b>strAccounts<\/b>, die anschlie&szlig;end als Datensatzherkunft eines als Wertliste ausgef&uuml;hrten Kombinationsfeldes landet.<\/p>\n<p>Beim &ouml;ffnen des Formulars kann der Indexwert f&uuml;r ein Konto per OpenArgs &uuml;bergeben werden. Die Prozedur w&auml;hlt dann entweder das per <b>OpenArgs <\/b>angegebene Konto oder das erste Konto im Kombinationsfeld <b>cboSender <\/b>aus. Mit diesem Kombinationsfeld kann der Benutzer das Konto ausw&auml;hlen, von dem aus die &uuml;berweisung stattfinden soll.<\/p>\n<p>Je nach gew&auml;hltem Eintrag zeigen die Textfelder <b>txtIBANSender <\/b>und <b>txtBICSender <\/b>die entsprechenden Spaltenwerte des Kombinationsfeldes an.<\/p>\n<p><b>Sender einstellen<\/b><\/p>\n<p>Wenn beim &ouml;ffnen des Formulars kein Konto &uuml;bergeben wurde, von dem aus die &uuml;berweisung erfolgen soll, wird standardm&auml;&szlig;ig der erste Eintrag der Liste eingestellt. Der Benutzer kann dann einen anderen Eintrag ausw&auml;hlen.<\/p>\n<p>Dies l&ouml;st die Prozedur <b>cboSender_AfterUpdate <\/b>aus, wodurch <b>IBAN <\/b>und <b>BIC<\/b> mit den Daten des ausgew&auml;hlten Kontos gef&uuml;llt werden (Code siehe Modul <b>Form_frmUeberweisung <\/b>der Beispieldatenbank).<\/p>\n<p><b>Empf&auml;nger einstellen<\/b><\/p>\n<p>Bei einer jungfr&auml;ulichen Datenbank gibt es zu Beginn noch keine Empf&auml;nger. Erst, wenn Sie eine &uuml;berweisung ausf&uuml;hren, speichert die Anwendung den Empf&auml;nger in der Tabelle <b>tblEmpfaenger<\/b>, und zwar mit dem Werten <b>Name1<\/b>, <b>Name2<\/b>, <b>IBAN <\/b>und <b>BIC<\/b> &#8211; siehe weiter unten.<\/p>\n<p>Sind bereits Empf&auml;nger in der Tabelle <b>tblEmpfaenger <\/b>gespeichert, werden diese im Kombinationsfeld <b>cboEmpfaenger <\/b>zur Auswahl angeboten. W&auml;hlt der Benutzer einen dieser Eintr&auml;ge aus, tr&auml;gt die Prozedur <b>cboEmpfaenger_AfterUpdate <\/b>die Werte der Felder <b>Name1<\/b>, <b>Name2<\/b>, <b>IBAN <\/b>und <b>BIC <\/b>in die Textfelder <b>txtName1<\/b>, <b>txtName2<\/b>, <b>txtIBANEmpfaenger <\/b>und <b>txtBICEmpfaenger <\/b>ein.<\/p>\n<p>Die Prozedur finden Sie ebenfalls im Modul <b>Form_frmUeberweisung <\/b>der Beispieldatenbank.<\/p>\n<p><b>Aufruf der &uuml;berweisungsfunktion<\/b><\/p>\n<p>Die Schaltfl&auml;che <b>cmdUeberweisen <\/b>l&ouml;st schlie&szlig;lich die Prozedur aus Listing 8 aus, die zuerst die Daten des aktuellen Empf&auml;ngers in die Tabelle <b>tblEmpfaenger <\/b>eintr&auml;gt.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdUeberweisen_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>intContact<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strEmpfaengername1<span style=\"color:blue;\"> As String<\/span>, strEmpfaengername2<span style=\"color:blue;\"> As String<\/span>, strEmpfaengerIBAN<span style=\"color:blue;\"> As String<\/span>, strEmpfaengerBIC<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>curBetrag<span style=\"color:blue;\"> As Currency<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strVerwendungszweck<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>objKontakt<span style=\"color:blue;\"> As <\/span>BACContact, objSender<span style=\"color:blue;\"> As <\/span>BACAccount, objEmpfaenger<span style=\"color:blue;\"> As <\/span>BACAccount\r\n     <span style=\"color:blue;\">Dim <\/span>datDatum<span style=\"color:blue;\"> As Date<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     db.Execute \"INSERT INTO tblEmpfaenger(Name1, Name2, IBAN, BIC) VALUES(''\" & Me!txtName1 & \"'', ''\" & Me!txtName2 _\r\n         & \"'', ''\" & Me!txtIBANEmpfaenger & \"'', ''\" & Me!txtBICEmpfaenger & \"'')\"\r\n     intContact = Me!cboSender\r\n     strEmpfaengername1 = Me!txtName1\r\n     strEmpfaengername2 = Nz(Me!txtName2)\r\n     strEmpfaengerIBAN = Me!txtIBANEmpfaenger\r\n     strEmpfaengerBIC = Me!txtBICEmpfaenger\r\n     curBetrag = Me!txtBetrag\r\n     strVerwendungszweck = Me!txtVerwendungszweck\r\n     <span style=\"color:blue;\">Set<\/span> objKontakt = objContacts(Me!cboSender)\r\n     <span style=\"color:blue;\">Set<\/span> objSender = objKontakt.Accounts(Me!cboSender)\r\n     <span style=\"color:blue;\">Set<\/span> objEmpfaenger = AccountErstellen(strEmpfaengername1, strEmpfaengername2, strEmpfaengerIBAN, strEmpfaengerBIC)\r\n     Me!Meldung = SEPAUeberweisung(objKontakt, objSender, objEmpfaenger, curBetrag, strVerwendungszweck, datDatum)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 7: Aufruf der &uuml;berweisungs-Funktion mit den ermittelten Parametern<\/span><\/b><\/p>\n<p>Dann ermittelt sie den Indexwert des ausgew&auml;hlten Sender-Bankkontos aus dem Kombinationsfeld <b>cboSender <\/b>und speichert ihn in der Variablen <b>inContact<\/b>.<\/p>\n<p>Informationen wie <b>Name1<\/b>, <b>Name2<\/b>, <b>IBAN <\/b>und <b>BIC <\/b>des Empf&auml;ngers werden in vier entsprechenden String-Variablen gespeichert. Der Betrag aus dem Textfeld <b>txtBetrag <\/b>landet in der Variablen <b>curBetrag<\/b>, der Verwendungszweck in <b>strVerwendungszweck<\/b>.<\/p>\n<p>Dann erstellt die Funktion ein neues Objekt des Typs <b>BACContact <\/b>f&uuml;r den ausgew&auml;hlten Sender aus dem Kombinationsfeld <b>cboSender<\/b> und speichert es in der Variablen <b>objKontakt<\/b>. Die Variable <b>objSender <\/b>vom Typ <b>BACAccount <\/b>hingegen nimmt das zu verwendende Konto auf. <b>objEmpfaenger <\/b>ist auch ein Objekt des Typs <b>BACAccount<\/b>, muss aber neu erstellt werden &#8211; und zwar auf Basis der Daten des Empf&auml;ngers. Dies erledigt die Funktion <b>AccountErstellen<\/b>, die auf Basis der Werte <b>Name1<\/b>, <b>Name2<\/b>, <b>IBAN <\/b>und <b>BIC <\/b>ein neues <b>BACAccount<\/b>-Objekt zur&uuml;ckliefert. Diese Funktion finden Sie im Modul <b>mdlSEPA <\/b>der Beispieldatenbank.<\/p>\n<p>Schlie&szlig;lich ruft die Routine die Funktion <b>SEPAUeberweisung <\/b>auf, welche die &uuml;berweisung auf Basis der &uuml;bergebenen Daten durchf&uuml;hrt. Die Funktion liefert die von der Bank gelieferte Antwort als Zeichenkette zur&uuml;ck, die gleich im entsprechenden Textfeld angezeigt wird.<\/p>\n<p><b>SEPA-&uuml;berweisung <\/b><\/p>\n<p>Die Funktion <b>SEPAUeberweisung<\/b> (s. Listing 9) erwartet einige Objekte und weitere Informationen als Parameter:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>SEPAUeberweisung(objContact<span style=\"color:blue;\"> As <\/span>BACContact, objSender<span style=\"color:blue;\"> As <\/span>BACAccount, objEmpfaenger<span style=\"color:blue;\"> As <\/span>BACAccount, _\r\n         curBetrag<span style=\"color:blue;\"> As Currency<\/span>, strVerwendungszweck<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objBanking<span style=\"color:blue;\"> As <\/span>BACBanking\r\n     <span style=\"color:blue;\">Dim <\/span>objSegment<span style=\"color:blue;\"> As <\/span>BACSegment\r\n     <span style=\"color:blue;\">Dim <\/span>objSepaMessage<span style=\"color:blue;\"> As <\/span>BACSepaMessage\r\n     <span style=\"color:blue;\">Dim <\/span>objSepaOrder<span style=\"color:blue;\"> As <\/span>BACSepaOrder\r\n     <span style=\"color:blue;\">Dim <\/span>strError<span style=\"color:blue;\"> As String<\/span>, strAntwort<span style=\"color:blue;\"> As String<\/span>, i<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objMessage<span style=\"color:blue;\"> As <\/span>BACMessage\r\n     <span style=\"color:blue;\">Dim <\/span>objBACDialog<span style=\"color:blue;\"> As <\/span>BACDialog\r\n     <span style=\"color:blue;\">Dim <\/span>objTransaction<span style=\"color:blue;\"> As <\/span>BACTransaction\r\n     <span style=\"color:blue;\">Set<\/span> objBanking = <span style=\"color:blue;\">New<\/span> BACBanking\r\n     <span style=\"color:blue;\">Set<\/span> objSegment = objBanking.NewSegment(\"HKCCS\", objContact(\"HBCIVersion\"))\r\n     <span style=\"color:blue;\">Set<\/span> objSepaMessage = <span style=\"color:blue;\">New<\/span> BACSepaMessage\r\n     objSepaMessage.Segment = objSegment\r\n     objSepaMessage.FromAccount = objSender\r\n     <span style=\"color:blue;\">Set<\/span> objSepaOrder = objSepaMessage.Orders.Add\r\n     objSepaOrder.ToAccount = objEmpfaenger\r\n     objSepaMessage.Recipient = objEmpfaenger\r\n     <span style=\"color:blue;\">With<\/span> objSepaOrder\r\n         .Amount = curBetrag\r\n         .CurrencyCode = \"EUR\"\r\n         .Purpose = strVerwendungszweck\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     objSepaMessage.Verify strError\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strError) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n          <span style=\"color:blue;\">MsgBox<\/span> strError\r\n          <span style=\"color:blue;\">Exit Function<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objBACDialog = objContact.NewDialogUI\r\n     objBACDialog.BeginDialog\r\n     <span style=\"color:blue;\">Set<\/span> objMessage = objBACDialog.ExecuteSegment(objSegment)\r\n     objMessage.Acknowledgement.SaveAs CurrentProject.Path & \"\\result.txt\"\r\n     <span style=\"color:blue;\">Set<\/span> objTransaction = objMessage.Transactions(0)\r\n     For i = 1 To 100\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(objTransaction.Acknowledgement.Item(i, 3)) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n             strAntwort = strAntwort & objTransaction.Acknowledgement.Item(i, 3)\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n     SEPAUeberweisung = strAntwort\r\n     objBACDialog.EndDialog\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 8: Ausf&uuml;hren einer Einzel&uuml;berweisung<\/span><\/b><\/p>\n<ul>\n<li><b>objContact<\/b>: Kontakt, &uuml;ber den die &uuml;berweisung durchgef&uuml;hrt werden soll<\/li>\n<li><b>objSender<\/b>: <b>BACAccount<\/b>-Objekt f&uuml;r das Konto des Senders<\/li>\n<li><b>objEmpfaenger<\/b>: <b>BACAccount<\/b>-Objekt f&uuml;r das Konto des Empf&auml;ngers<\/li>\n<li><b>curBetrag<\/b>: zu &uuml;berweisender Betrag<\/li>\n<li><b>strVerwendungszweck<\/b>: Verwendungszweck<\/li>\n<\/ul>\n<p>Die Prozedur erstellt zun&auml;chst ein neues <b>BACBanking<\/b>-Objekt, das f&uuml;r die Steuerung des Vorgangs n&ouml;tig ist. Die Methode <b>NewSegment <\/b>dieses Objekts liefert ein <b>BACSegment<\/b>-Objekt des Typs <b>HKCCS<\/b>.<\/p>\n<p>Dies entspricht prinzipiell einem Schema f&uuml;r einen Gesch&auml;ftsvorfall, hier einer SEPA-&uuml;berweisung.<\/p>\n<p>Damit die aktuellste Version des Segments verwendet wird, &uuml;bergibt man der Funktion <b>NewSegment <\/b>zus&auml;tzlich den Wert der Eigenschaft <b>HBCIVersion <\/b>des <b>BACContact<\/b>-Objekts.<\/p>\n<p>Die Auftragsdaten werden in einem speziellen neuen Objekt des Typs <b>BACSepaMessage <\/b>erfasst. Dieses erstellt die Funktion neu und f&uuml;llt dann zun&auml;chst die Eigenschaft <b>Segment <\/b>mit einem Verweis auf die Variable <b>objSegment<\/b>. Das als Parameter &uuml;bergebene Objekt <b>objSender <\/b>mit den Sender-Daten weist die Funktion der Eigenschaft <b>FromAccount <\/b>zu.<\/p>\n<p>Die Empf&auml;ngerdaten und die &uuml;brigen Informationen weisen Sie allerdings nicht dem <b>BACSepaMessage<\/b>-Objekt hinzu. Dazu wird ein weiteres Objekt des Typs <b>BACSepaOrder <\/b>ben&ouml;tigt.<\/p>\n<p>Dieses wird &uuml;ber die <b>Add<\/b>-Methode der <b>Orders<\/b>-Auflistung des Objekts <b>objSepaMessage <\/b>erstellt. Die Eigenschaft <b>ToAccount <\/b>des neuen Objekts <b>objSepaOrder <\/b>wird mit dem mit <b>objEmpfaenger <\/b>&uuml;bergebenen <b>BACAccount<\/b>-Objekt mit den Empf&auml;ngerdaten gef&uuml;llt.<\/p>\n<p>Gleiches geschieht mit der Eigenschaft <b>Recipient <\/b>des <b>BACSepaMessage<\/b>-Objekts. Das <b>BACSepaOrder<\/b>-Objekt wird nun noch mit den eigentlichen &uuml;berweisungsdaten gef&uuml;llt &#8211; mit dem Betrag (<b>Amount<\/b>), der W&auml;hrung (<b>CurrencyCode<\/b>) und dem Verwendungszweck (<b>Purpose<\/b>).<\/p>\n<p>Die <b>Verify<\/b>-Methode pr&uuml;ft den Inhalt, danach beginnt der eigentliche &uuml;berweisungsvorgang. Fehler k&ouml;nnen hier beispielsweise auftreten, wenn eine falsche W&auml;hrung angegeben wird. Tritt ein Fehler auf, wird die Funktion mit einer entsprechenden Meldung beendet. Schlie&szlig;lich erstellt die Funktion ein neues Objekt des Typs <b>BACDialog<\/b>. Dieser sorgt mit der Methode <b>NewDialogUI<\/b> daf&uuml;r, dass ein Dialog zur Authentifizierung angezeigt wird &#8211; zum Beispiel wie in Bild 9.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_04\/pic_898_009.png\" alt=\"Beispiel f&uuml;r die PIN-Eingabe\" width=\"345\" height=\"344,223\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Beispiel f&uuml;r die PIN-Eingabe<\/span><\/b><\/p>\n<p>Danach f&uuml;hrt die Prozedur das Segment aus und speichert die Antwort in einem <b>BACMessage<\/b>-Objekt. Von dort liest sie die Antwort in einer Schleife aus und schreibt sie in eine Textvariable, die als Antwort an die aufrufende Routine zur&uuml;ckgegeben wird.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Die &uuml;berweisung ist nur eine der Neuerungen unter SEPA. Sie k&ouml;nnen damit auch Sammel&uuml;berweisungen ausf&uuml;hren oder Lastschriften einziehen. Diese beiden Aktionen werden wir in einem sp&auml;teren Beitrag betrachten.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>SEPA.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{4C3DCD10-E615-48A8-8DBA-1A3B9F02E049}\/aiu_898.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>SEPA wird ab 1. Februar 2014 Standard beim Onlinebanking. Damit Sie ger&uuml;stet sind, zeigen wir Ihnen, wie Sie beispielsweise Kontost&auml;nde abfragen, Buchungen einlesen und &Uuml;berweisungen durchf&uuml;hren. Grundlage ist die DDBAC-Bibliothek der Firma DataDesign. Die Bibliothek stellt die grundlegenden Funktionen zur Verf&uuml;gung und kann zu Testzwecken kostenlos eingesetzt werden.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662013,66042013,44000027],"tags":[],"class_list":["post-55000898","post","type-post","status-publish","format-standard","hentry","category-662013","category-66042013","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Onlinebanking mit SEPA - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Onlinebanking mit SEPA\" \/>\n<meta property=\"og:description\" content=\"SEPA wird ab 1. Februar 2014 Standard beim Onlinebanking. Damit Sie ger&uuml;stet sind, zeigen wir Ihnen, wie Sie beispielsweise Kontost&auml;nde abfragen, Buchungen einlesen und &Uuml;berweisungen durchf&uuml;hren. Grundlage ist die DDBAC-Bibliothek der Firma DataDesign. Die Bibliothek stellt die grundlegenden Funktionen zur Verf&uuml;gung und kann zu Testzwecken kostenlos eingesetzt werden.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:30:03+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/1e2f2cba222d4f89ab696e276e2e317e\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"20\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Onlinebanking_mit_SEPA\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Onlinebanking_mit_SEPA\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Onlinebanking mit SEPA\",\"datePublished\":\"2020-05-22T21:30:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Onlinebanking_mit_SEPA\\\/\"},\"wordCount\":3391,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Onlinebanking_mit_SEPA\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/1e2f2cba222d4f89ab696e276e2e317e\",\"articleSection\":[\"2013\",\"4\\\/2013\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Onlinebanking_mit_SEPA\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Onlinebanking_mit_SEPA\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Onlinebanking_mit_SEPA\\\/\",\"name\":\"Onlinebanking mit SEPA - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Onlinebanking_mit_SEPA\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Onlinebanking_mit_SEPA\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/1e2f2cba222d4f89ab696e276e2e317e\",\"datePublished\":\"2020-05-22T21:30:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Onlinebanking_mit_SEPA\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Onlinebanking_mit_SEPA\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Onlinebanking_mit_SEPA\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/1e2f2cba222d4f89ab696e276e2e317e\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/1e2f2cba222d4f89ab696e276e2e317e\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Onlinebanking_mit_SEPA\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Onlinebanking mit SEPA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Onlinebanking mit SEPA - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/","og_locale":"de_DE","og_type":"article","og_title":"Onlinebanking mit SEPA","og_description":"SEPA wird ab 1. Februar 2014 Standard beim Onlinebanking. Damit Sie ger&uuml;stet sind, zeigen wir Ihnen, wie Sie beispielsweise Kontost&auml;nde abfragen, Buchungen einlesen und &Uuml;berweisungen durchf&uuml;hren. Grundlage ist die DDBAC-Bibliothek der Firma DataDesign. Die Bibliothek stellt die grundlegenden Funktionen zur Verf&uuml;gung und kann zu Testzwecken kostenlos eingesetzt werden.","og_url":"https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:30:03+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/1e2f2cba222d4f89ab696e276e2e317e","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"20\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Onlinebanking mit SEPA","datePublished":"2020-05-22T21:30:03+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/"},"wordCount":3391,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/1e2f2cba222d4f89ab696e276e2e317e","articleSection":["2013","4\/2013","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/","url":"https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/","name":"Onlinebanking mit SEPA - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/1e2f2cba222d4f89ab696e276e2e317e","datePublished":"2020-05-22T21:30:03+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/1e2f2cba222d4f89ab696e276e2e317e","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/1e2f2cba222d4f89ab696e276e2e317e"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Onlinebanking_mit_SEPA\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Onlinebanking mit SEPA"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000898","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000898"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000898\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000898"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000898"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000898"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}