[gnucash-de] Gnucash-HBCI: Ein paar Vorschläge...

Christian Stimming stimming at tuhh.de
Sa Aug 23 11:46:53 EDT 2008


Hi Fabian!

Am Samstag, 23. August 2008 13:47 schrieb Fabian Wenzel:
> Obwohl noch immer einige Sachen nicht richtig laufen, so habe ich
> eigentlich hauptsächlich einen Hauptwunsch, nämlich die Interaktion mit
> HBCI ein wenig zu "automatisieren". Beispielsweise würde ich gerne einen
> Button (oder einen Menüpunkt) haben, mit dem man automatisch alle
> HBCI-fähigen Konten abgleicht, zunächst, indem man alle Umsätze
> herunterlädt und anschließend den Saldo. Die PINs sollten dabei
> verschlüsselt in einem Wallet gespeichert werden (gnome-keyring oder
> so).
>
> Nun erkläre ich mich auch gerne bereit, mit anzupacken und ein wenig zu
> programmieren (...)

Das ist genau der Satz, der in den OpenSource-Projekten an der richtigen 
Stelle ist :-)

Das mit dem Automatisieren ist von der technischen Seite her nicht sonderlich 
schwer - die Kommandozeilen-Tools um libaqbanking herum bieten das auch schon 
ewig lange an, weil ja auch schon mehr Leute auf jene Idee gekommen sind. 
Auch das mit der PIN-Speicherung ist ja alles keine rocket science, aber auf 

Das eigentliche Problem liegt *in der GUI* von solchen nicht-trivialen 
Ansammlungen von Vorgängen. Meine Motivation hatte seinerzeit halt 
ausgereicht, um die GUI für "den einfachsten Fall" zu bauen, nämlich immer 
einen einzelnen HBCI-Auftrag ("job", im Code z.Zt. der AB_JOB). Der kann 
entweder erfolgreich sein oder fehlschlagen, also eine binäre Rückmeldung. 

Aber sobald du mehr als einen Job in einem Rutsch ausführen lassen willst, 
muss man auch eine GUI bauen, die 1. alle möglichen Kombinationen von 
Erfolgreich / Fehlgeschlagen in brauchbarer Form dem User zurückmeldet, und 
dann 2. für alle erfolgreichen Jobs die zurückgelieferten Daten dem User so 
präsentiert, dass der was damit anfangen kann. 

Die abgerufenen Umsätze zum Beispiel werden bei HBCI leider *immer* eine 
Kontrolle durch den User brauchen, um potentielle Duplikate rauszuwerfen - da 
bietet uns HBCI keine eindeutige Identifikationsmöglichkeit jeder Buchung. 
Man bräuchte dann also einen "transaction matcher"-Dialog, der nicht nur für 
ein Konto funktioniert, sondern auch für mehrere. Behelfsweise könnte man 
natürlich auch den existierenden Dialog mehrmals hintereinander aufpoppen 
lassen, aber das ist ja eigentlich auch doof. 

Idealerweise würden die runtergeladenen Umsätze wahrscheinlich gleich im 
Kontofenster auftauchen, aber dort eine andere Farbe haben o.ä., aber das 
kann man bei gnucash leider völlig vergessen, weil der Code vom Kontofenster 
("register") das schlimmste ist, was einem bei GUI-Programmierung in C wohl 
jemals unterkommt. Es gibt Versuche für einen register-rewrite, aber die 
waren noch nicht erfolgreich.

Das gleiche gilt sinngemäß auch für den Abgleichen-Dialog ("reconcile").

Und wenn man die GUI vollständig machen will, könnte man auch noch die 
Verwaltung eines "Ausgangskorb" von offline vorbereiteten HBCI-Jobs 
implementieren, also HBCI-Job anlegen / ändern / löschen, aber auch dazu 
hatte ich bisher keine Motivation oder Zeit.

Martin Preuss hat in QBankManager einiges davon implementiert, was man sich 
also gerne als Vorbild ansehen kann, aber den C++/Qt-Code können wir leider 
nicht direkt in gnucash (C/gtk) übernehmen.

> Allerdings wäre es prima, wenn du mir prinzipiell ein paar Tipps gibst,
> wie die Integration von HBCI in GnuCash Softwareseitig abläuft, damit
> ich einen schnellen Einstieg finde. 

Momentan hat gnucash zwei Module für HBCI, nämlich einmal für aqbanking2 (alt, 
nicht mehr weiterentwickelt) in src/import-export/hbci und einmal für 
aqbanking3 in src/import-export/aqbanking. Letzterer wäre also für dich 
interessant. Ein einzelner Umsatzabruf wird dort iniitiert vom Menü-Callback 
gnc_plugin_ab_cmd_get_transactions() in gnc-plugin-aqbanking.c:349 und dann 
geht's weiter in gnc-ab-gettrans.c. Die Ergebnisse des Umsatzabrufs werden 
ausgewertet in gnc_ab_import_context() in gnc-ab-utils.c (und dies wäre auch 
schon in der Lage, mehr als ein Konto korrekt zu verarbeiten! Wenn auch nur 
durch mehrmaliges Aufpoppen dieser Dialoge.). Die einzelnen Buchungen werden 
dann an den "generic transaction matcher" dialog übergeben, welcher dann das 
abschließende Fenster und den Import in die eigentlichen Konten übernimmt - 
dieser Dialog ist in src/import-export/import-main-matcher.h definiert, also 
nicht mehr aqbanking-spezifisch.

Gruß

Christian