jschyma / open_fints_js_client

FinTS/HBCI Javascript Client
Apache License 2.0
134 stars 44 forks source link

1822direkt Fehler: "Keine Initialisierung Erfolgreich Nachricht erhalten!" #24

Open martiniusDE opened 8 years ago

martiniusDE commented 8 years ago

Hallo Jens,

super Projekt!!! Ich habe bisher auf aqbanking gesetzt und eine rudimentäre FinanzApp auf nodejs darum gebaut, welche vor allem mehrere Kontenübersichten (Umsätze, Kontostand, Kategorisierung) darestellen soll. Leider funktioniert aqbanking mit der 1822direkt Bank nicht. Bei den Entwicklern habe ich leider kein Feedback erhalten bzw. exisitert ein Ticket, dass schon Jahre alt ist.

Deine Implementierung funktioniert mit anderen Banken (z. B. DKB) super, allerdings ebenfalls nicht mit der 1822direkt. Bisher konnte ich nur in Erfahrung bringen, dass dies mit einer Optimierung des FinTS-Backends auf die Android-App von 1822direkt zusammenhängen soll. Komischerweise funktioniert aber alles mit Starmoney oder auch hibiscus (http://www.willuhn.de/products/hibiscus/) bzw. hbci4java (https://github.com/willuhn/hbci4java). Aber es wäre Klasse, wenn die 1822direkt auch mit JavaScript funktionieren würde.

Da ich mich mit dem Standard HBCI/FinTS kaum auskenne, wäre es super wenn Du einen Blick auf die debug-Ausgabe werfen könntest - vielleicht findest Du ja einen Hinweis, woran es liegen könnte?

Tausend Dank im Voraus!!!

Beste Grüße Martin

Ausgabe

Send: HNHBK:1:3+000000000367+300+0+1'HNVSK:998:3+PIN:1+998+1+1::0+1:20161104:072246+2:2:13:@8@        :5:1+280:50050222:_BENUTZER_:V:0:0+0'HNVSD:999:1+@206@HNSHK:2:4+PIN:1+999+1+1+1+1::0+1+1:20161104:072246+1:999:1+6:10:16+280:50050222:_BENUTZER_:S:0:0'HKIDN:3:2+280:50050222+_BENUTZER_+0+1'HKVVB:4:3+0+0+0+Open-FinTS-JS-Client+4'HKSYN:5:3+0'HNSHA:6:2+1++_PASSWORT_''HNHBS:7:1+1'
Recv: HNHBK:1:3+000000002167+300+3655693366398000wBJmUwn*jlx1j9+1+3655693366398000wBJmUwn*jlx1j9:1'HNVSK:998:3+PIN:1+998+1+2::36556933664530000C9YAOLZQBH8Q2+1:20161104:072246+2:2:13:@8@        :5:1+280:50050222:_BENUTZER_:V:0:0+0'HNVSD:999:1+@1913@HIRMG:2:2+3060::Teilweise liegen Warnungen/Hinweise vor.+0020::Dialogintialisierung erfolgreich.'HIRMS:3:2:5+0020::Auftrag ausgeführt.'HIRMS:4:2:4+3920::Meldung unterstützter Ein- und Zwei-Schritt-Verfahren:900+1050::UPD nicht mehr aktuell. Aktuelle Version folgt.+1040::BPD nicht mehr aktuell. Aktuelle Version folgt.'HIRMS:5:2:3+0020::Information fehlerfrei entgegengenommen.'HIBPA:6:3:4+8+280:50050222+1822direkt+0+1+300+0'HIKOM:7:4:4+280:50050222+1+3:https?://fints.1822direkt.com/fints/hbci::UUE:1'HIKPV:8:1:4+0:1'HIPINS:9:1:4+1+1+1+5:10:6:Online-Kennung:Online-Kennung:HKCSE:J:HKTAN:N:HKCDE:J:HKKAZ:N:HKCDL:J:HKSPA:N:HKCSA:J:HKFRD:N:HKCSL:J:HKSAL:N:HKCCS:J:HKFGB:N:HKCSB:N:HKWPD:N:HKCDB:N'HITANS:10:1:4+1+1+1+N:N:1:0:900:1:iTAN:iTAN:6:1:iTAN:256:1:J:J'HIKAZS:11:5:4+990+1+360:J:N'HIKAZS:12:6:4+990+1+1+360:J:N'HISALS:13:5:4+990+1'HISALS:14:6:4+990+1+1'HIFGBS:15:3:4+990+1'HIFGBS:16:4:4+990+1+1'HIWPDS:17:5:4+990+1+J:N:N'HIWPDS:18:6:4+990+1+1+J:N:N'HIFRDS:19:1:4+990+1'HIFRDS:20:2:4+990+1+1'HISPAS:21:1:4+990+1+1+J:J:J:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.003.03'HISPAS:22:2:4+990+1+1+J:J:J:J:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.003.03'HISPAS:23:3:4+990+1+1+J:J:J:J:0:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.003.03'HICCSS:24:1:4+1+1+1'HICSES:25:1:4+1+1+1+1:360'HICSBS:26:1:4+990+1+1+J:J'HICSAS:27:1:4+1+1+1+1:360'HICSLS:28:1:4+1+1+1+N'HICDES:29:1:4+1+1+1+14:1:9999:0102030612:01020304050607080910111213141516171819202122232425262728293099'HICDBS:30:1:4+1+1+1+J'HICDLS:31:1:4+1+1+1+0:9999:J:J'HIUPA:32:4:4+_BENUTZER_+7+0+_KONTOINHABER_'HIUPD:33:6:4+_KONTONUMMER_:EUR:280:50050201+_IBAN_+_BENUTZER_+2+EUR+_KONTOINHABER_++GiroSkyline+E:25000,:EUR+HKFRD:1+HKTAN:1+HKCDL:1+HKCDB:1+HKCDE:1+HKCSL:1+HKCSA:1+HKCSB:1+HKCSE:1+HKCCS:1+HKSPA:1+HKKAZ:1+HKSAL:1'HIUPD:34:6:4+++_BENUTZER_+++_KONTOINHABER_++++HKFRD:1+HKTAN:1'HISYN:35:4:5+36556933664530000C9YAOLZQBH8Q2''HNHBS:36:1+1'
Send: HNHBK:1:3+000000000292+300+0+2'HNVSK:998:3+PIN:1+998+1+1::0+1:20161104:072246+2:2:13:@8@        :5:1+280:50050222:_BENUTZER_:V:0:0+0'HNVSD:999:1+@131@HNSHK:2:4+PIN:1+999+1+1+1+1::0+1+1:20161104:072246+1:999:1+6:10:16+280:50050222:_BENUTZER_:S:0:0'HKEND:3:1+0'HNSHA:4:2+1++_PASSWORT_''HNHBS:5:1+2'
Fehler: Keine Initialisierung Erfolgreich Nachricht erhalten!
Recv: HNHBK:1:3+000000000119+300+0+2+0:2'HIRMG:2:2+9050::Teilweise fehlerhaft.+9800::Dialog ungueltig/unbekannt.'HNHBS:3:1+2'

PS: Benutzername, Konto, Passwort, IBAN etc. wurden geändert.

martiniusDE commented 8 years ago

Nachtrag

Hier noch der FinTS-Dialog aus dem Programm hibiscus (nutzt hbci4java), mit dem der Abruf von Umsätzen klappt:

HNHBK:1:3+000000000466+300+0+1'HNVSK:998:3+PIN:2+998+1+1::3655720980460000QKKPS5NH868BSU+1:20161104:150617+2:2:13:@8@        :5:1+280:50050222:_BENUTZER_:V:0:0+0'HNVSD:999:1+@276@HNSHK:2:4+PIN:2+900+2039962856+1+1+1::3655720980460000QKKPS5NH868BSU+1+1:20161104:150617+1:999:1+6:10:16+280:50050222:_BENUTZER_:S:0:0'HKIDN:3:2+280:50050222+_BENUTZER_+3655720980460000QKKPS5NH868BSU+1'HKVVB:4:3+8+7+1+HBCI4Java (Hibiscus 2.6)+2.6'HNSHA:5:2+2039962856++_PASSWORD_''HNHBS:6:1+1'
HNHBK:1:3+000000000484+300+36557211778170005kTtA1vN1lUsT6+1+36557211778170005kTtA1vN1lUsT6:1'HNVSK:998:3+PIN:1+998+1+2::3655720980460000QKKPS5NH868BSU+1:20161104:150617+2:2:13:@8@        :5:1+280:50050222:_BENUTZER_:V:0:0+0'HNVSD:999:1+@232@HIRMG:2:2+3060::Teilweise liegen Warnungen/Hinweise vor.+0020::Dialogintialisierung erfolgreich.'HIRMS:3:2:4+3920::Meldung unterst�tzter Ein- und Zwei-Schritt-Verfahren:900'HIRMS:4:2:3+0020::Information fehlerfrei entgegengenommen.''HNHBS:5:1+1'
HNHBK:1:3+000000000423+300+36557211778170005kTtA1vN1lUsT6+2'HNVSK:998:3+PIN:2+998+1+1::3655720980460000QKKPS5NH868BSU+1:20161104:150618+2:2:13:@8@        :5:1+280:50050222:_BENUTZER_:V:0:0+0'HNVSD:999:1+@204@HNSHK:2:4+PIN:2+900+762514437+1+1+1::3655720980460000QKKPS5NH868BSU+1+1:20161104:150618+1:999:1+6:10:16+280:50050222:_BENUTZER_:S:0:0'HKSAL:3:6+_KONTONUMMER_:EUR:280:50050201+N'HNSHA:4:2+762514437++_PASSWORT_''HNHBS:5:1+2'
HNHBK:1:3+000000000455+300+36557211778170005kTtA1vN1lUsT6+2+36557211778170005kTtA1vN1lUsT6:2'HNVSK:998:3+PIN:1+998+1+2::3655720980460000QKKPS5NH868BSU+1:20161104:150618+2:2:13:@8@        :5:1+280:50050222:_BENUTZER_:V:0:0+0'HNVSD:999:1+@203@HIRMG:2:2+0010::Nachricht entgegengenommen.'HIRMS:3:2:3+0020::Auftrag ausgef�hrt.'HISAL:4:6:3+_KONTONUMMER_:EUR:280:50050201+GiroSkyline+EUR+C:0000,00:EUR:20161104+C:0000,00:EUR:20161104+0,:EUR+0000,00:EUR''HNHBS:5:1+2'
HNHBK:1:3+000000000423+300+36557211778170005kTtA1vN1lUsT6+3'HNVSK:998:3+PIN:2+998+1+1::3655720980460000QKKPS5NH868BSU+1:20161104:150618+2:2:13:@8@        :5:1+280:50050222:_BENUTZER_:V:0:0+0'HNVSD:999:1+@204@HNSHK:2:4+PIN:2+900+546395346+1+1+1::3655720980460000QKKPS5NH868BSU+1+1:20161104:150618+1:999:1+6:10:16+280:50050222:_BENUTZER_:S:0:0'HKKAZ:3:6+_KONTONUMMER_:EUR:280:50050201+N'HNSHA:4:2+546395346++_PASSWORT_''HNHBS:5:1+3'
HNHBK:1:3+000000015046+300+36557211778170005kTtA1vN1lUsT6+3+36557211778170005kTtA1vN1lUsT6:3'HNVSK:998:3+PIN:1+998+1+2::3655720980460000QKKPS5NH868BSU+1:20161104:150618+2:2:13:@8@        :5:1+280:50050222:_BENUTZER_:V:0:0+0'HNVSD:999:1+@14792@HIRMG:2:2+0010::Nachricht entgegengenommen.'HIRMS:3:2:3+0020::Auftrag ausgef�hrt.'HIKAZ:4:6:3+@14360@
martiniusDE commented 8 years ago

Hallo nochmal,

nach weiterem debuggen habe ich noch folgende Fehlermeldung heraus bekommen:

{
"name": "demo_fints_logger", "hostname": "workstation", "pid": 1864, "area": "gv", "level": 50, "gv": "HKVVB", "msg": "Error while analyse HKVVB Response No Init Successful recv.", "time": "2016-11-06T19:37:11.184Z", "v": 0
}

Außerdem konnte ich Unterschiede zwischen der DKB und 1822direkt in den Eigenschaften "sys_id", "pin_version" und "pin_vers" finden:

var client1822 = {
    msg: {
        segments: [{
            name: 'HNHBK',
            nr: 1,
            vers: 3,
            bez: 0,
            store: [Object],
            init: [Function],
            transformForSend: [Function],
            parse: [Function],
            getEl: [Function]
        },
            {
                name: 'HNSHK',
                nr: 2,
                vers: 4,
                bez: 0,
                store: [Object],
                init: [Function],
                transformForSend: [Function],
                parse: [Function],
                getEl: [Function]
            }],
        segments_ctr: 2,
        sign_it: {
            pin: 'XXXXXXXXXX',
            tan: {id: 1234},
            sys_id: 0,
            pin_vers: '999',
            sig_id: 1478462427820,
            blz: 50050222,
            kunden_id: 'XXXXXXXXXX'
        },
        hnvsk: null,
        msg_nr: 1,
        proto_version: 300,
        sign: [Function],
        init: [Function],
        parse: [Function],
        transformForSend: [Function],
        addSeg: [Function],
        isSigned: [Function],
        selectSegByName: [Function],
        selectSegByBelongTo: [Function],
        selectSegByNameAndBelongTo: [Function],
        create_debug_js: [Function]
    },
    HKVVB: {
        name: 'HKVVB',
        nr: 0,
        vers: 3,
        bez: 0,
        store: {
            next_el: 5,
            data: ['0', '0', 0, 'Open-FinTS-JS-Client', 4],
            desc: [1, 1, 1, 1, 1],
            addDE: [Function],
            addDEbin: [Function],
            addDEG: [Function],
            parse: [Function],
            transformForSend: [Function],
            getEl: [Function]
        },
        init: [Function],
        transformForSend: [Function],
        parse: [Function],
        getEl: [Function]
    }
};
var clientDKB = {
    msg: {
        segments: [{
            name: 'HNHBK',
            nr: 1,
            vers: 3,
            bez: 0,
            store: [Object],
            init: [Function],
            transformForSend: [Function],
            parse: [Function],
            getEl: [Function]
        },
            {
                name: 'HNSHK',
                nr: 2,
                vers: 4,
                bez: 0,
                store: [Object],
                init: [Function],
                transformForSend: [Function],
                parse: [Function],
                getEl: [Function]
            }],
        segments_ctr: 2,
        sign_it: {
            pin: 'XXXXXXXXXX',
            tan: {id: 1234},
            sys_id: 'Wg2cvgo4O1gBAADBW5LcT/0SrAQA',
            pin_vers: '900',
            sig_id: 1478462565461,
            blz: 12030000,
            kunden_id: 'XXXXXXXXXX'
        },
        hnvsk: null,
        msg_nr: 1,
        proto_version: 300,
        sign: [Function],
        init: [Function],
        parse: [Function],
        transformForSend: [Function],
        addSeg: [Function],
        isSigned: [Function],
        selectSegByName: [Function],
        selectSegByBelongTo: [Function],
        selectSegByNameAndBelongTo: [Function],
        create_debug_js: [Function]
    },
    HKVVB: {
        name: 'HKVVB',
        nr: 0,
        vers: 3,
        bez: 0,
        store: {
            next_el: 5,
            data: ['0', '0', 0, 'Open-FinTS-JS-Client', 4],
            desc: [1, 1, 1, 1, 1],
            addDE: [Function],
            addDEbin: [Function],
            addDEG: [Function],
            parse: [Function],
            transformForSend: [Function],
            getEl: [Function]
        },
        init: [Function],
        transformForSend: [Function],
        parse: [Function],
        getEl: [Function]
    }
};

(Quelle: me.MsgInitDialog --> msg.init(...) & var HKVVB)

jschyma commented 8 years ago

Hi Martin zunächst danke, dass du dich für das Projekt hier interessierst. Übrigens auch super Beschreibung deines Issues.

Das ganze ist leider immer etwas schwierig selbst nachzustellen für mich, da ich keinen Account bei dieser Bank habe.

Aber ich habe schon eine Stelle erkannt, wo wahrscheinlich das Problem lokalisiert ist. Du musst jedoch selber noch etwas debuggen.

Erstmal noch zu deinem Vergleich mit HBCI for Java, das ist natürlich super. Jedoch hier folgendes Problem: Die Requests sind nicht ganz vergleichbar. Bei diesem HBCI for Java Request wurde offensichtlich schonmal die BPD(Bank Parameter Daten) und UPD gelesen und damit auch das PIN/TAN Verfahren 990.

In der OpenFinTSJS Library sieht es so aus als wärst du in dem aller ersten Request, hast also noch keine BPD/UPD die hier geladen werden sollen. Die Methode EstablishConnection erledigt für dich all diese Sachen, ich hoffe die verwendest du auch?

Der erste Request funktioniert folgendermaßen:

  1. Client sendet: HKVVB, HKSYN nutzt hier aber einfach mal PIN:1 und 999 als Pin/Tan Verfahren
  2. Server antwortet: BPD/UPD und in HIRMS mit 3920 die möglichen Pin/Tan Verfahren HIRMS:4:2:4+3920::Meldung unterstützter Ein- und Zwei-Schritt-Verfahren:900+1050::UPD nicht mehr aktuell. Aktu...
  3. Client sendet: HKEND um diesen Dialog wieder zu beenden
  4. Server antwortet: Dialog beendet (optional)

Erst im nächsten Request(Dialog) wird das richtige Verfahren etc. verwendet und der funktioniert idR. dann.

Bei dir funktioniert Schritt: 1 und 2 super Bei Schritt 3 ist aber ein Fehler iwo in der Client Logik Schritt 4 ist dann die Konsequenz auf den Fehler aus 3 aber sollte eigentlich vom Client ignoriert werden, daher auch komisch?

Der Fehler liegt im falschen Dialog ID Handling, ich kann mir aber nicht erklären warum das passiert. Da müsstest du debuggen. Die Dialog ID dient dem Server und Client dazu die einzelnen Nachrichten einander zuzuordnen. Alle Nachrichten mit der selben Dialog ID sind nachfolgende Nachrichten eines Dialogs. Das Problem siehst du am Nachrichten Header der Nachrichten (hier Fett):

  1. Send: HNHBK:1:3+000000000367+300+0+1'
  2. Recv: HNHBK:1:3+000000002167+300+*3655693366398000wBJmUwnjlx1j9**+1+3655693366398000wBJmUwn_jlx1j9:1'
  3. Send: HNHBK:1:3+000000000292+300+0+2'
  4. Recv: HNHBK:1:3+000000000119+300+_0*+2+0:2'

Der Server bestimmt die Dialog ID, da der 1. Request aber vom Client ausgeht setzt dieser zunächst die ID auf 0, das ist korrekt. In der Antwort erhält er aber eine vom Server gewählte ID. Diese hat er für alle weiteren Nachrichten des selben Dialogs zu verwenden. Genau das passiert bei 3. nicht. Hier liegt der Fehler. Normal wird die Dialog ID automatisch beim Empfang der Nachricht in MsgInitDialog ausgelesen und als Member dialog_id gesetzt. Warum das hier jetzt nicht passiert/ bzw. die ID wieder überschrieben wird weiß ich nicht und müsstest du durch debuggen herausfinden.

Wäre super wenn du da weiter kommst und die Ergebnisse hier posten könntest, damit auch alle anderen davon profitieren.

Danke und Viele Grüße Jens

martiniusDE commented 8 years ago

Hallo Jens,

vielen Dank für die ausführliche Erklärung!

Ich hatte diese Stelle auch schon bemerkt. Mit deiner Hilfe konnte ich aber nun weiter debuggen und ich weiß jetzt wo der Fehler liegt (hier mein Commit, allerdings hat meine IDE viele Leerzeichen entfernt, daher etwas unübersichtlich...: https://github.com/martiniusDE/open_fints_js_client/commit/5b094884997b86a67ef73aae131d85e59c1ab790).

Und zwar gibt es eine Stelle in der "lib/FinTSClient.js", an der es abbricht:

if(Helper.checkMsgsWithBelongToForId(recvMsg,HKVVB.nr,"0020")){
// ...

Diese Überprüfung ist bei der 1822 niemals "true", weil die 1822direkt anscheinend eine nicht konforme Nachricht zurücksendet (niemals ist die "0020" dabei). Hier der Ouptut von "var = d" aus der innersten Schleife "checkMsgsWithBelongToForId()" (lib/Classes.js):

var d = { next_el: 4,
  data:
   [ '3920',
     '',
     'Meldung unterstützter Ein- und Zwei-Schritt-Verfahren',
     '900' ],
  desc: [ 1, 1, 1, 1 ],
  addDE: [Function],
  addDEbin: [Function],
  addDEG: [Function],
  parse: [Function],
  transformForSend: [Function],
  getEl: [Function] }

var d = { next_el: 3,
  data: [ '1050', '', 'UPD nicht mehr aktuell. Aktuelle Version folgt.' ],
  desc: [ 1, 1, 1 ],
  addDE: [Function],
  addDEbin: [Function],
  addDEG: [Function],
  parse: [Function],
  transformForSend: [Function],
  getEl: [Function] }

var d = { next_el: 3,
  data: [ '1040', '', 'BPD nicht mehr aktuell. Aktuelle Version folgt.' ],
  desc: [ 1, 1, 1 ],
  addDE: [Function],
  addDEbin: [Function],
  addDEG: [Function],
  parse: [Function],
  transformForSend: [Function],
  getEl: [Function] }

Dagegen der Output für die DKB:

var d = { next_el: 3,
  data:
   [ '3050',
     '',
     'UPD nicht mehr aktuell, aktuelle Version enthalten.' ],
  desc: [ 1, 1, 1 ],
  addDE: [Function],
  addDEbin: [Function],
  addDEG: [Function],
  parse: [Function],
  transformForSend: [Function],
  getEl: [Function] }

var d = { next_el: 3,
  data:
   [ '3050',
     '',
     'BPD nicht mehr aktuell, aktuelle Version enthalten.' ],
  desc: [ 1, 1, 1 ],
  addDE: [Function],
  addDEbin: [Function],
  addDEG: [Function],
  parse: [Function],
  transformForSend: [Function],
  getEl: [Function] }

var d = { next_el: 4,
  data:
   [ '3920',
     '',
     'Zugelassene Zwei-Schritt-Verfahren für den Benutzer.',
     '900' ],
  desc: [ 1, 1, 1, 1 ],
  addDE: [Function],
  addDEbin: [Function],
  addDEG: [Function],
  parse: [Function],
  transformForSend: [Function],
  getEl: [Function] }

var d = { next_el: 3,
  data: [ '0020', '', 'Der Auftrag wurde ausgeführt.' ],
  desc: [ 1, 1, 1 ],
  addDE: [Function],
  addDEbin: [Function],
  addDEG: [Function],
  parse: [Function],
  transformForSend: [Function],
  getEl: [Function] }

Hier habe ich erstmal immer ein "return d" eingebaut, womit die Überprüfung klappt. Allerdings weiß ich nicht, warum es der Code "0020" sein sollte und die 1822 den nicht mitschickt. Da wärst Du als Experte gefragt, worauf man hier alternativ noch prüfen könnte?

Nachdem er in die if-Anweisung hinein kommt, gibt es noch ein weiteres kleines Problem, wodurch der Client ohne Rückmeldung einfach abbricht. Und zwar schickt die 1822 außerdem bei der Kontenliste ein weiteres Konto mit, welches allerdings nur die Kundenkennung enthält (IBAN etc. ist leer - da bricht der Client ab). Daher habe ich hier einfach überprüft, ob die IBAN nicht leer ist:

// 4. Mögliche KontoInformationen
                        if(me.konten.length==0){
                            var konto_list = recvMsg.selectSegByName("HIUPD");
                            for(var i=0;i!=konto_list.length;i++){
                                var iban = konto_list[i].getEl(2);
                                if (iban.length) {
                                    var konto = new Konto();
                                    konto.iban          = iban;
                                    konto.konto_nr      = konto_list[i].getEl(1).getEl(1);
                                    konto.unter_konto   = konto_list[i].getEl(1).getEl(2);
                                    konto.ctry_code     = konto_list[i].getEl(1).getEl(3);
                                    konto.blz           = konto_list[i].getEl(1).getEl(4);
                                    konto.kunden_id     = konto_list[i].getEl(3);
                                    konto.kontoar       = konto_list[i].getEl(4);
                                    konto.currency      = konto_list[i].getEl(5);
                                    konto.kunde1_name   = konto_list[i].getEl(6);
                                    konto.product_name  = konto_list[i].getEl(8);
                                    konto.sepa_data     = null;
                                    me.konten.push(konto);
                                }
                            }
                        }

Mit diesen kleinen Änderungen hat der Abruf der Kontoumsätze geklappt! Wenn Du jetzt noch eine elegante Lösung für das Problem des HIRMS-ID-Codes in der Funktion "checkMsgsWithBelongToForId()" hättest, wäre das perfekt.

Beste Grüße Martin