Hallo ArnoNym,
mir geht es ganz ähnlich, für meine Auswertungen brauche ich die Kategorien auch schriftlich in der Datenbank.
Zuerst wollte ich mir damit behelfen, die Umsätze in Hibiscus kategorieweise noch einmal explizit händisch zu setzen. Doch da waren auch immer wieder Umsätze (in grauer Farbe) bei denen das nicht über das Kontext-Menü möglich war.
Ich habe noch nicht raus gefunden was diese "grauen" Umsätze auszeichnet, in der Datenbank sehen sie genau so aus wie die "normalen" (Eingabe/Ausgabe) Umsätze.
Ich habe das für mich nun über die SQL-Schiene gelöst:
Laut dem Quellcode in der Klasse UmsatzTypImpl.java werden die Verwendungszwecke (3 Stück) ohne Seperator zusammen gehängt.
Im H2-Datenbankmanagementsystem gibt es dafür die Fuktion CONCAT ( string , string,....).
Die regulären Ausdrücke müssen für SQL angepasst werden d.h. ".*?" wird zu %
Dazu ein kleines Beispiel:
Ich habe die Kategorie "Betriebskosten" mit der ID=3 und dem PATTERN (.*?D.*?REWAG.*?)
Im SQL-Statement durchsuche ich die zusammengehängten Verwndungszwecke mit:
Code
CONCAT(ZWECK, ZWECK2, ZWECK3) LIKE '%D%REWAG%'
Im Quellcode werden auch noch die Felder EMPFAENGER_NAME, EMPFAENGER_KONTO, KOMMENTAR und ART durchsucht.
Ich selbst habe es dann noch auf ein bestimmtes Konto eingeschränkt und sicherheitshalber noch auf die unkategorisierten Umsätze
Das Statement (erst mal nur der Abruf) sähe nach obigem Beispiel folgendermaßen aus:
Code
select * from UMSATZ where
UMSATZTYP_ID is Null
and KONTO_ID = 1
and (
CONCAT(ZWECK, ZWECK2, ZWECK3) LIKE '%D%REWAG%'
or EMPFAENGER_NAME LIKE '%D%REWAG%'
or EMPFAENGER_KONTO LIKE '%D%REWAG%'
or KOMMENTAR LIKE '%D%REWAG%'
or ART LIKE '%D%REWAG%'
)
order by Datum;
Die gleiche where-Klausel verwende ich dann für das update-Statement:
Code
update UMSATZ set UMSATZTYP_ID = 3 where ......
Um das ganze nun weiter zu verallgemeinern braucht man eine mit der UMSATZTYP-Tabelle verknüpfte Spalte (VARCHAR) für das SQL-Pattern (im Beispiel: %D%REWAG%)
z. B.:
Code
CREATE TABLE UMSATZTYP_SQL_PATTERN
(
UMSATZTYP_ID INTEGER,
SQL_PATTERN VARCHAR
);
Nachdem man dort alle abgewandelten Pattern eingepflegt hat, kann man dann mit einem Sub-Statement die benötigten Suchmuster automatisiert einsetzen:
Code
select usp.SQL_PATTERN from UMSATZTYP as ut join UMSATZTYP_SQL_PATTERN as usp on ut.ID = usp.UMSATZTYP_ID where ....
Das alles ist nun nicht der Weisheit letzter Schluß, aber für meine Belange kann ich mit dieser Lösung leben.