{"id":55000209,"date":"2020-02-01T00:00:00","date_gmt":"2020-06-15T12:10:02","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=209"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Onlinebanking_mit_DDBAC_II_Ueberweisungen","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Onlinebanking_mit_DDBAC_II_Ueberweisungen\/","title":{"rendered":"Onlinebanking mit DDBAC II: &Uuml;berweisungen"},"content":{"rendered":"<p><b>Onlinebanking ist aktuell in aller Munde, da es f&uuml;r erh&ouml;hte Sicherheit einige &Auml;nderungen in den Abl&auml;ufen gegeben hat. Viele Leser kennen die DDBAC-Bibliothek bereits, denn wir haben in Access im Unternehmen schon dar&uuml;ber berichtet und es ist auch ein Buch zu diesem Thema im Andr&eacute; Minhorst Verlag erschienen. Wer diese Bibliothek nutzt, braucht neben einer aktuellen Version auch noch eine kleine &Auml;nderung, ohne die Vorg&auml;nge nicht mehr durchgef&uuml;hrt werden k&ouml;nnen. Nachdem wir im ersten Teil der Beitragsreihe das Einlesen von Kontost&auml;nden und Ums&auml;tzen beschrieben haben, k&uuml;mmern wir uns nun um das Durchf&uuml;hren von &Uuml;berweisungen.<\/b><\/p>\n<p><b>Voraussetzungen<\/b><\/p>\n<p>Voraussetzung f&uuml;r das Umsetzen der L&ouml;sung dieses Artikels ist das Vorhandensein einer DDBAC-Lizenz. Die damit nutzbaren Komponenten sind leider nicht mehr kostenlos verf&uuml;gbar, sondern m&uuml;ssen lizensiert werden, bevor man diese in seine Produkte einbauen kann. Lizenzen finden Sie im Onlineshop unter <b>https:\/\/shop.minhorst.com\/access-tools\/295\/ddbac-jahreslizenzc=78<\/b>.<\/p>\n<p><b>Download und Installation<\/b><\/p>\n<p>Nach dem Erwerben einer Lizenz erhalten Sie einen Download in ihrem Kundenkonto. Dort finden sie eine Datei namens <b>DDBACNetWrapper-Version-5-7-65-0.zip <\/b>(oder neuer), die Sie entpacken. Darin enthalten ist eine <b>DDBACSDK.exe<\/b>, die Sie auf Ihrem Rechner installieren. Anschlie&szlig;end finden Sie im Verzeichnis <b>C:\\Program Files (x86)\\DataDesign\\DDBACSDK <\/b>die installierten Elemente.<\/p>\n<p><b>Test des Quellcodes<\/b><\/p>\n<p>Beim Erstellen des Codes f&uuml;r diesen Artikel haben wir das Tool <b>LinqPad5 <\/b>zur Programmierung und zum Testen der Funktionalit&auml;t genutzt. Dieses Tool ist kostenlos. Wir haben dazu im Tool eine neue Datei erstellt und f&uuml;r Language den Wert <b>VB Program <\/b>ausgew&auml;hlt. Die Methode <b>Main <\/b>wird beim Ausf&uuml;hren aufgerufen, hier haben wir die Aufrufe der einzelnen Beispielmethoden untergebracht.<\/p>\n<p><b>&Uuml;berweisung durchf&uuml;hren<\/b><\/p>\n<p>Zum Durchf&uuml;hren einer &Uuml;berweisung verwenden wir diesmal eine <b>Function<\/b>-Methode, da wir einen Wert zur&uuml;ckliefern wollen, der &uuml;ber den Erfolg oder Misserfolg der &Uuml;berweisung Auskunft geben soll. Dieser Funktionswert soll den Datentyp <b>Boolean <\/b>aufweisen. Die ben&ouml;tigten Parameter f&uuml;r eine &Uuml;berweisung sind die folgenden:<\/p>\n<ul>\n<li><b>lngContact<\/b>: Index des Kontakts, f&uuml;r den die &Uuml;berweisung durchgef&uuml;hrt werden soll (entspricht dem 0-basierten Index der Position des zu w&auml;hlenden Kontakts aus dem Dialog <b>Banking Kontakte<\/b>, siehe Bild 1)<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_209_001.png\" alt=\"Verwaltung der Homebanking-Kontakte\" width=\"449,6946\" height=\"455,9116\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Verwaltung der Homebanking-Kontakte<\/span><\/b><\/p>\n<li><b>lngAccount<\/b>: Index des Kontos des Auftraggebers (entspricht dem 0-basierten Index der Position des zu w&auml;hlenden Kontos aus dem Dialog Konten verwalten, siehe Bild 2)<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_209_002.png\" alt=\"Verwaltung der Konten eines Homebanking-Kontakts\" width=\"449,6946\" height=\"455,9116\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Verwaltung der Konten eines Homebanking-Kontakts<\/span><\/b><\/p>\n<li><b>strEmpfaengername<\/b>: Name des Empf&auml;ngers<\/li>\n<li><b>strEmpfaengerIBAN<\/b>: IBAN des Empf&auml;nger-Kontos<\/li>\n<li><b>strEmpfaengerBIC<\/b>: BIC des Empf&auml;nger-Kontos<\/li>\n<li><b>curBetrag<\/b>: Zu &uuml;berweisender Betrag<\/li>\n<li><b>strVerwendungszweck<\/b>: Verwendungszweck der &Uuml;berweisung<\/li>\n<li><b>strMeldung<\/b>: Antwort des Systems (mit <b>ByRef <\/b>deklarieren!)<\/li>\n<\/ul>\n<p>Die nackte Funktion, die wir nachfolgend f&uuml;llen, sieht nun wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>Ueberweisung(lngContact<span style=\"color:blue;\"> As Long<\/span>, lngAccount<span style=\"color:blue;\"> As Long<\/span>, strEmpfaengername<span style=\"color:blue;\"> As String<\/span>, strEmpfaengerIBAN<span style=\"color:blue;\"> As String<\/span>, strEmpfaengerBIC<span style=\"color:blue;\"> As String<\/span>, decBetrag<span style=\"color:blue;\"> As Decimal<\/span>, strVerwendungszweck<span style=\"color:blue;\"> As String<\/span>, ByRef strMeldung<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Boolean<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b>BACContact-Objekt f&uuml;r den Auftraggeber ermitteln<\/b><\/p>\n<p>Mit dem Parameter <b>lngContact <\/b>wollen wir das <b>BACContact<\/b>-Objekt f&uuml;r den Eintrag im Dialog <b>Banking Kontakte <\/b>ausw&auml;hlen, dessen Index dem Wert dieses Parameters entspricht. Diesen speichern wir in der Variablen <b>objContact<\/b>, die wir wie folgt deklarieren:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>objContact<span style=\"color:blue;\"> As <\/span>BACContact<\/pre>\n<p>Diese Variable f&uuml;llen wir dann mit der folgenden Anweisung:<\/p>\n<pre>objContact = GetContacts.Item(lngContact) <\/pre>\n<p>Die Funktion <b>GetContacts <\/b>haben wir bereits im ersten Teil der Beitragsreihe namens <b>Onlinebanking mit DDBAC: Saldo und Ums&auml;tze <\/b>erl&auml;utert. Sie liefert eine Auflistung aller <b>BACContact<\/b>-Elemente, die &uuml;ber die Systemsteuerung hinzugef&uuml;gt wurden. &Uuml;ber die <b>Item<\/b>-Eigenschaft greifen wir auf das Element mit dem mit <b>lngContact <\/b>&uuml;bergebenen Indexwert zu.<\/p>\n<p><b>BACAccount-Objekt f&uuml;r den Auftraggeber ermitteln<\/b><\/p>\n<p>Danach ben&ouml;tigen wir das <b>BACAccount<\/b>-Objekt f&uuml;r das Konto, von dem aus die &Uuml;berweisung durchgef&uuml;hrt werden soll. Dazu legen wir die Variable <b>objAuftraggeber <\/b>an:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>objAuftraggeber<span style=\"color:blue;\"> As <\/span>BACAccount<\/pre>\n<p>Das <b>BACAccount<\/b>-Objekt ermitteln wir einfach &uuml;ber die <b>Accounts<\/b>-Auflistung des zuvor ermittelten <b>BACContacts<\/b>-Objekts:<\/p>\n<pre>objAuftraggeber = objContact.Accounts(lngAccount)<\/pre>\n<p><b>BACAccount f&uuml;r das Konto des Empf&auml;ngers erstellen<\/b><\/p>\n<p>W&auml;hrend wir das <b>BACAccount<\/b>-Objekt f&uuml;r das Konto des Auftraggebers aus den &uuml;ber die Systemsteuerung abgelegten Daten auslesen konnten, m&uuml;ssen wir das <b>BACAccount<\/b>-Objekt f&uuml;r das Konto des Empf&auml;ngers neu erstellen und mit den entsprechenden Daten f&uuml;llen.<\/p>\n<p>Dabei handelt es sich um den Namen, die IBAN und die BIC des Auftraggebers, die wir einem neuen <b>BACAccount<\/b>-Objekt zuweisen. Um diese Daten in einem neuen <b>BACAccount<\/b>-Objekt zusammenzustellen, verwenden wir die folgende Hilfsfunktion <b>AccountErstellen<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>AccountErstellen(strName1<span style=\"color:blue;\"> As String<\/span>, strIban<span style=\"color:blue;\"> As String<\/span>, strBIC<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As <\/span>BACAccount\r\n     <span style=\"color:blue;\">Dim <\/span>objAccount<span style=\"color:blue;\"> As <\/span>BACAccount\r\n     objAccount = <span style=\"color:blue;\">New<\/span> BACAccount\r\n     <span style=\"color:blue;\">With<\/span> objAccount\r\n         .NameEins = strName1\r\n         .IBAN = strIban\r\n         .BIC = strBIC\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     Return objAccount\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Diese erwartet den Namen des Empf&auml;ngers, die IBAN und die BIC als Parameter und erstellt zun&auml;chst ein neues <b>BACAccount<\/b>-Objekt. Dann weist es die Werte der &uuml;bergebenen Parameter den Eigenschaften <b>NameEins<\/b>, <b>IBAN <\/b>und <b>BIC <\/b>zu. Das so gef&uuml;llte <b>BACAccount<\/b>-Objekt wird dann mit der <b>Return<\/b>-Anweisung als Ergebnis der Funktion zur&uuml;ckgegeben.<\/p>\n<p>Die Variable, in der das <b>BACAccount<\/b>-Objekt gespeichert werden soll, hei&szlig;t <b>objEmpfaenger <\/b>und wird wie folgt deklariert:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>objEmpfaenger<span style=\"color:blue;\"> As <\/span>BACContact<\/pre>\n<p>Dieses f&uuml;llen wir &uuml;ber einen Aufruf der zuvor beschriebenen Funktion <b>AccountErstellen<\/b>. Dabei &uuml;bergeben wir die Werte der drei Parameter <b>strEmpfaengername<\/b>, <b>strEmpfaengerIBAN <\/b>und <b>strEmpfaengerBIC<\/b>:<\/p>\n<pre>objEmpfaenger = AccountErstellen(strEmpfaengername, strEmpfaengerIBAN, strEmpfaengerBIC)<\/pre>\n<p><b>Segmenttyp festlegen und Version ermitteln<\/b><\/p>\n<p>Danach speichern wir in einer Variablen namens <b>strSegment <\/b>den Namen des zu verwendenden Segments, in diesem Fall <b>HKCCS<\/b>, das der Einreichung einer Einzel&uuml;berweisung entspricht:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>strSegment<span style=\"color:blue;\"> As String<\/span>\r\n...\r\nstrSegment = \"HKCCS\"<\/pre>\n<p>In einer Variablen namens <b>objSegmentVersion <\/b>wollen wir die Version des Segments speichern:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>objSegmentVersion<span style=\"color:blue;\"> As <\/span>BACSegment<\/pre>\n<p>Dieses ermitteln wir &uuml;ber die Methode <b>FindOptimalBPDSegment <\/b>des <b>BACAccount<\/b>-Elements <b>objAuftraggeber<\/b>, also f&uuml;r die Auftraggeberbank:<\/p>\n<pre>objSegmentVersion = objAuftraggeber.FindOptimalBPDSegment(strSegment, 0)<\/pre>\n<p>Abh&auml;ngig davon, ob ein passendes Segment gefunden werden konnte, steigen wir dann im <b>If<\/b>-Teil der folgenden Abfrage in die eigentliche &Uuml;berweisung ein oder geben eine Meldung zur&uuml;ck, dass das Segment nicht gefunden werden konnte:<\/p>\n<pre><span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> objSegmentVersion Is Nothing<span style=\"color:blue;\"> Then<\/span>\r\n     <span style=\"color:blue;\">Debug.Print<\/span> (\"Segmentversion: \" + objSegmentVersion.Version.ToString())\r\n     Return <span style=\"color:blue;\">True<\/span>\r\n<span style=\"color:blue;\">Else<\/span>\r\n     strMeldung = \"Segment '\" + strSegment + \"' konnte nicht gefunden werden.\"\r\n     Return False&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:blue;\">End If<\/span><\/pre>\n<p><b>HKCCS-Segment erstellen<\/b><\/p>\n<p>Nachdem wir die aktuellste Version des <b>HKCCS<\/b>-Segments ermittelt haben, erstellen wir auf dieser Basis das eigentliche <b>HKCCS<\/b>-Segment. Daf&uuml;r deklarieren wir zwei Variablen &#8211; eine f&uuml;r das <b>BACBanking<\/b>-Objekt und eine f&uuml;r das <b>BACSegment<\/b>-Objekt:<\/p>\n<pre><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<\/pre>\n<p>Das <b>BACBanking<\/b>-Objekt f&uuml;llen wir mithilfe der Funktion <b>GetBanking<\/b>, die wir gegen&uuml;ber der Version aus dem ersten Teil der Artikelserie noch ge&auml;ndert haben &#8211; wie, lesen Sie im Artikel <b>Onlinebanking mit DDBAC: FinTS-Registrierung<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> objBanking = GetBanking<\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000209\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000209?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000209\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"edd26c4512\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Onlinebanking ist aktuell in aller Munde, da es f&uuml;r erh&ouml;hte Sicherheit einige &Auml;nderungen in den Abl&auml;ufen gegeben hat. Viele Leser kennen die DDBAC-Bibliothek bereits, denn wir haben in Access im Unternehmen schon dar&uuml;ber berichtet und es ist auch ein Buch zu diesem Thema im Andr&eacute; Minhorst Verlag erschienen. Wer diese Bibliothek nutzt, braucht neben einer aktuellen Version auch noch eine kleine &Auml;nderung, ohne die Vorg&auml;nge nicht mehr durchgef&uuml;hrt werden k&ouml;nnen. Nachdem wir im ersten Teil der Beitragsreihe das Einlesen von Kontost&auml;nden und Ums&auml;tzen beschrieben haben, k&uuml;mmern wir uns nun um das Durchf&uuml;hren von &Uuml;berweisungen.<\/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":[66012020,662020,44000004,44000026],"tags":[],"yst_prominent_words":[],"class_list":["post-55000209","post","type-post","status-publish","format-standard","hentry","category-66012020","category-662020","category-Loesungen","category-Outlook_programmieren"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000209","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000209"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000209\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000209"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000209"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000209"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000209"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}