Intern: Ermittlung Fehlverrechnungen in Gebührenjournalen per SQL

Gilt für
Antwort

Fehlverrechnungen (durch früheres Löschen bereits verrechneter Buchungsposten, i.e. Gebühr mit Zahlung) werden datenbankübergreifend durch eine Auswertung per SQL-Befehl festgestellt. Hierfür wird pro Benutzernr die Summe von BETRAG (Gebühren, Zahlungen) der Summe der Beträge aus der Spalte OFFEN gegenübergestellt.

Um herauszufinden, ob viele aktuell aktive Leser betroffen sind und auch, um diese bevorzugt zu bereinigen, wird zusätzlich noch das Datum der letzte Ausleihe aus dem Benutzerdatensatz BIBLBENUTZER sowie das Datum der letzten Buchung aus dem Gebührenjournal BENUTZERKONTEN geholt und sortiert angezeigt.

Oracle

select bb.benutzernr,bb.ausweisnr,TO_CHAR(bb.letzteausleihe, 'dd.mm.yyyy') as letzteausl,
TO_CHAR(MAX(bk.buchungsdatum), 'dd.mm.yyyy') as letztebuchung,
sum(bk.betrag) as kontosaldo,sum(NVL(bk.offen,betrag)) AS summeoffen
from biblbenutzer bb, benutzerkonten bk where bb.benutzernr=bk.benutzernr
group by bb.benutzernr,bb.ausweisnr,bb.letzteausleihe having sum(bk.betrag)<>sum(NVL(bk.offen,betrag))
 order by letzteausleihe desc, letztebuchung desc;

 

MSSQL

select bb.benutzernr,bb.ausweisnr,CONVERT(nvarchar, bb.letzteausleihe, 104) as letzteausl,CONVERT(nvarchar,
 MAX(bk.buchungsdatum), 104) as letztebuchung,
 REPLACE(CAST(sum(bk.betrag) AS varchar(18)), '.', ',') as kontosaldo,
REPLACE(CAST(sum(ISNULL(bk.offen,betrag)) AS varchar(18)), '.', ',') as summeoffen
from biblbenutzer bb, benutzerkonten bk where bb.benutzernr=bk.benutzernr
group by bb.benutzernr,bb.ausweisnr,bb.letzteausleihe having sum(bk.betrag)<>sum(ISNULL(bk.offen,betrag))
 order by letzteausleihe desc, letztebuchung desc
Weitere Informationen

Leer vs. Null vs. 0,00

Da eine Summe der Beträge aus der Spalte "offen" gebildet wird und sich Nullwerte (Feld ist leer) nicht summieren lassen und BTP bei leerem OFFEN-Feld dort den Wert aus dem Feld BETRAG im Gebührenjournal einblendet, müssen leere offen-Felder speziell behandelt werden (einen Wert erhält OFFEN bei neuen Buchungen erst, wenn der Tagesabschluss gelaufen oder sie bezahlt werden):

Wie kann man sich das Benutzerkonto auf Datenbankebene (ohne Programmoberfläche) anschauen?
Der Befehl ist datenbanksystem-unabhängig; statt 0124567 wird eine Benutzernr aus der ersten Treffermenge mit den fehlverrechneten Konten verwendet:

select nr, buchungsdatum, buchungszeit, buchung, betrag, offen, kasse, ausgleich, login_name, zweigstelle, buchungsbez, mediennr from benutzerkonten
 where benutzernr='0124567' order by buchungsdatum desc, buchungszeit, nr; 
Seiten ID
43503