[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