-- Kontenabgleich Soll / Ist (Version 2) -- Prosoz 14 plus Version 4.14 -- Datenbank MSSQL 2000 -- Copyright, Joerg Burzeja, Kreis Lippe -- ***Anderungshistorie - 01.10.2007*** -- Beziehungsform Empfaenger bzw. Pflichtiger hinzugefügt -- Kontenstatus aktiv bzw. inaktiv hinzugefügt -- Kassenzeichen nicht mehr aus buzahl oder bustell, sondern aus hebuch -- Bereich nicht mehr aus buzahl oder bustell, sondern aus hebuch -- Performance verbessert -- ***Variablendeklaration*** declare @Tage decimal declare @sachgebiet decimal declare @vonBereich decimal declare @bisBereich decimal declare @abweichung decimal -- ******* h i e r a n p a s s e n ********** -- Sachgebiet set @sachgebiet = 2 -- Bereich (von) set @vonBereich = 2000 -- Bereich (bis) set @bisBereich = 2999 -- Festlegung Zeitraum letzte Buchung bustell / buzahl vor ... Tagen set @tage = 180 -- tolerierter Betrag in EURO bei Abweichung Soll / Ist set @abweichung = 10 -- ******* h i e r a n p a s s e n ********** -- 'Soll' minus 'Ist', wenn Differenzen SELECT MAX (ka.differenz)* -1 AS Forderung, ka.info AS Information, hb.bereich AS Bereichneu, e.bb AS Sachbearbeiter, vg.aktenzeichen AS Aktenzeichen, ad2.nachname AS Nachname_Hilfeempfaenger, ad2.vorname AS Vorname_Hilfeempfaenger, (case when ascii(hb.typ) = 69 then 'Empfänger' when ascii(hb.typ) = 85 then 'Pflichtiger' when ascii(hb.typ) = 101 then 'Empfänger' when ascii(hb.typ) = 117 then 'Pflichtiger' else hb.typ end) as [Beziehungsform], (case when ascii(hb.typ) = 69 then 'Konto aktiv' when ascii(hb.typ) = 85 then 'Konto aktiv' when ascii(hb.typ) = 101 then 'Konto inaktiv' when ascii(hb.typ) = 117 then 'Konto inaktiv' else hb.typ end) as [Status Konto], ad.nachname AS Nachname_Beteiligter, ad.vorname AS Vorname_Beteiligter, hb.ksz AS Kassenzeichenneu, convert (varchar (10), vg.endevorgang, 104) AS EndeVorgang, MAX (CONVERT (char, isnull (wv.wvdat, ''),104)) AS letzte_Wiedervorlage, MAX (CONVERT (char, isnull (wv.datae, ''),104)) AS letzte_Speicherung, ka.SOLL_Zahlungsanspruch, ka.SOLL_Verbindlichkeit, ka.IST_Einnahme, ka.IST_Ausgabe, ka.SOLL_MAXBuchung, ka.IST_MAXBuchung, vg.muendelnr_alt AS mnr, vg.vorgangsnummer, ka.bnr, ka.alte_adr, ka.neue_adr from (SELECT SUM ( (isnull (bsk.SOLL_Zahlungsanspruch, 0) - isnull (bsk.SOLL_Verbindlichkeit, 0)) - (isnull (bzk.IST_Ausgaben, 0) - isnull (bzk.IST_Einnahmen, 0)) ) AS Differenz, 'Differenz' AS Info, SUM (isnull (bsk.SOLL_Zahlungsanspruch, 0)) AS SOLL_Zahlungsanspruch, SUM (isnull (bsk.SOLL_Verbindlichkeit, 0)) AS SOLL_Verbindlichkeit, MAX (isnull (bsk.letzte_Buchung, '')) AS SOLL_MAXBuchung, SUM (isnull (bzk.IST_Ausgaben, 0)) AS IST_Ausgabe, SUM (isnull (bzk.IST_Einnahmen, 0)) AS IST_Einnahme, MAX (isnull (bzk.letzte_buchung,'') ) AS IST_MAXBuchung, MAX (isnull (bzk.Sachgebiet, '')) AS Sachgebiet, bzk.bnr AS bnr, MAX (bzk.mnr) AS mnr, MAX (isnull (bzk.adrnr, '')) AS alte_adr, MAX (isnull (an.adressnummer, '')) AS neue_adr from (SELECT SUM (CAST ( (CASE ASCII (bs.typ) WHEN 90 THEN round (isnull (bs.betrag, 0),2) + round (isnull (bs.rate, 0),2) WHEN 86 THEN round(-bs.betrag,2) WHEN 83 THEN 0 END ) AS decimal(20, 2))) AS SOLL_Zahlungsanspruch, SUM (CAST ( (CASE ASCII (bs.typ) WHEN 90 THEN 0 WHEN 86 THEN 0 WHEN 83 THEN round(bs.betrag,2) END ) AS decimal(20, 2))) AS SOLL_Verbindlichkeit, CONVERT (char, MAX (buchdat),104) AS letzte_Buchung, MAX (isnull (bs.sachgeb, '')) AS Sachgebiet, MAX (isnull (bs.mnr, '')) AS mnr, MAX (isnull (bs.adrnr, '')) AS adrnr, bs.bnr from bustell bs where bs.sachgeb = @sachgebiet GROUP BY bs.bnr ) AS bsk INNER JOIN (SELECT SUM (CAST ( (CASE ASCII (bz.typ) WHEN 69 THEN round(bz.betrag,2) WHEN 97 THEN round(-bz.betrag,2) WHEN 101 THEN 0 WHEN 65 THEN 0 END ) AS decimal(20, 2))) AS IST_Einnahmen, SUM (CAST ( (CASE ASCII (bz.typ) WHEN 69 THEN 0 WHEN 97 THEN 0 WHEN 65 THEN round(bz.betrag,2) WHEN 101 THEN round(-bz.betrag,2) END ) AS decimal(20, 2))) AS IST_Ausgaben, CONVERT (char, MAX (buchdat),104) AS letzte_Buchung, MAX (isnull (bz.sachgeb, '')) AS Sachgebiet, MAX (isnull (bz.mnr, '')) AS mnr, MAX (isnull (bz.adrnr, '')) AS adrnr, bz.bnr from buzahl bz GROUP BY bnr ) AS bzk ON (bsk.bnr=bzk.bnr) LEFT JOIN adr a ON (a.adrnr=bsk.adrnr) LEFT JOIN n_adrbezugalt aba ON (aba.adrnr_alt=a.adrnr) LEFT JOIN n_adressen an ON (an.adressnummer=aba.adrnr_neu) LEFT JOIN n_personendaten p ON (p.zuordnungsnummer=an.adressnummer) WHERE ((isnull (bsk.SOLL_Zahlungsanspruch, 0) - isnull (bsk.SOLL_Verbindlichkeit,0)) - (isnull (bzk.IST_Ausgaben, 0) - isnull (bzk.IST_Einnahmen, 0)) < -@abweichung OR (isnull (bsk.SOLL_Zahlungsanspruch, 0) - isnull (bsk.SOLL_Verbindlichkeit,0)) - (isnull (bzk.IST_Ausgaben, 0) - isnull (bzk.IST_Einnahmen, 0)) > @abweichung) AND bzk.sachgebiet = @sachgebiet AND bsk.letzte_buchung < (getdate () - @tage) AND bzk.letzte_buchung < (getdate () - @tage) GROUP BY bzk.bnr ) AS ka LEFT JOIN n_vorgang vg ON (vg.muendelnr_alt=ka.mnr) LEFT JOIN n_adressen ad ON (ad.adressnummer=neue_adr) LEFT JOIN bere e ON (vg.bereich=e.brs) LEFT JOIN n_wivorlext wl ON (vg.vorgangsnummer=wl.vorgangsnummer) LEFT JOIN wivorl wv ON (wl.snrext=wv.snr) LEFT JOIN (SELECT adresse AS adrhe, vorgang AS vorgang from n_vorgbeteiligte WHERE beteiligtenart = 7) AS vb_he ON (vb_he.vorgang=vg.vorgangsnummer) LEFT JOIN n_adressen ad2 ON (ad2.adressnummer=vb_he.adrhe) LEFT JOIN hebuch hb ON (ka.bnr = hb.lnr) WHERE (hb.bereich between @vonBereich AND @bisBereich AND hb.bereich = vg.bereich AND ka.differenz <> 0) GROUP BY hb.mnr, hb.typ, hb.ksz, hb.bereich, vg.aktenzeichen, endevorgang, ad2.nachname, ad2.vorname, ad.nachname, ad.vorname, e.bb, ad2.nachname, ad2.vorname, ka.info, ka.SOLL_Zahlungsanspruch, ka.SOLL_Verbindlichkeit, ka.IST_Ausgabe, ka.IST_Einnahme, ka.IST_MAXBuchung, ka.SOLL_MAXBuchung, vg.muendelnr_alt, vg.vorgangsnummer, ka.bnr, ka.alte_adr, ka.neue_adr -- keine Zahlung (kein Datensatz in buzahl) UNION ALL SELECT MAX (ka.differenz)* -1 AS Forderung, ka.info AS Information, hb.bereich AS Bereichneu, e.bb AS Sachbearbeiter, vg.aktenzeichen AS Aktenzeichen, ad2.nachname AS Nachname_Hilfeempfaenger, ad2.vorname AS Vorname_Hilfeempfaenger, (case when ascii(hb.typ) = 69 then 'Empfänger' when ascii(hb.typ) = 85 then 'Pflichtiger' when ascii(hb.typ) = 101 then 'Empfänger' when ascii(hb.typ) = 117 then 'Pflichtiger' else hb.typ end) as [Beziehungsform], (case when ascii(hb.typ) = 69 then 'Konto aktiv' when ascii(hb.typ) = 85 then 'Konto aktiv' when ascii(hb.typ) = 101 then 'Konto inaktiv' when ascii(hb.typ) = 117 then 'Konto inaktiv' else hb.typ end) as [Status Konto], ad.nachname AS Nachname_Beteiligter, ad.vorname AS Vorname_Beteiligter, hb.ksz AS Kassenzeichenneu, convert (varchar (10), vg.endevorgang, 104) AS EndeVorgang, MAX (CONVERT (char, isnull (wv.wvdat, ''),104)) AS letzte_Wiedervorlage, MAX (CONVERT (char, isnull (wv.datae, ''),104)) AS letzte_Speicherung, ka.SOLL_Zahlungsanspruch, ka.SOLL_Verbindlichkeit, ka.IST_Einnahme, ka.IST_Ausgabe, ka.SOLL_MAXBuchung, ka.IST_MAXBuchung, vg.muendelnr_alt AS mnr, vg.vorgangsnummer, ka.bnr, ka.alte_adr, ka.neue_adr from (SELECT SUM ( (isnull (bsk.SOLL_Zahlungsanspruch, 0) - isnull (bsk.SOLL_Verbindlichkeit, 0)) - (isnull (bzk.IST_Ausgaben, 0) - isnull (bzk.IST_Einnahmen, 0)) ) AS Differenz, 'noch nie Zahlung' AS Info, SUM (isnull (bsk.SOLL_Zahlungsanspruch, 0)) AS SOLL_Zahlungsanspruch, SUM (isnull (bsk.SOLL_Verbindlichkeit, 0)) AS SOLL_Verbindlichkeit, MAX (isnull (bsk.letzte_Buchung, '')) AS SOLL_MAXBuchung, SUM (isnull (bzk.IST_Ausgaben, 0)) AS IST_Ausgabe, SUM (isnull (bzk.IST_Einnahmen, 0)) AS IST_Einnahme, MAX (isnull (bzk.letzte_buchung,'') ) AS IST_MAXBuchung, MAX (isnull (bzk.Sachgebiet, '')) AS Sachgebiet, bsk.bnr AS bnr, MAX (bsk.mnr) AS mnr, MAX (isnull (bsk.adrnr, '')) AS alte_adr, MAX (isnull (an.adressnummer, '')) AS neue_adr from (SELECT SUM (CAST ( (CASE ASCII (bs.typ) WHEN 90 THEN round (isnull (bs.betrag, 0),2) + round (isnull (bs.rate, 0),2) WHEN 86 THEN round(-bs.betrag,2) WHEN 83 THEN 0 END ) AS decimal(20, 2))) AS SOLL_Zahlungsanspruch, SUM (CAST ( (CASE ASCII (bs.typ) WHEN 90 THEN 0 WHEN 86 THEN 0 WHEN 83 THEN round(bs.betrag,2) END ) AS decimal(20, 2))) AS SOLL_Verbindlichkeit, CONVERT (char, MAX (buchdat),104) AS letzte_Buchung, MAX (isnull (bs.sachgeb, '')) AS Sachgebiet, MAX (isnull (bs.mnr, '')) AS mnr, MAX (isnull (bs.adrnr, '')) AS adrnr, bs.bnr AS bnr from bustell bs where bs.sachgeb = @sachgebiet GROUP BY bs.bnr ) AS bsk LEFT JOIN (SELECT SUM (CAST ( (CASE ASCII (bz.typ) WHEN 69 THEN round(bz.betrag,2) WHEN 97 THEN round(-bz.betrag,2) WHEN 101 THEN 0 WHEN 65 THEN 0 END ) AS decimal(20, 2))) AS IST_Einnahmen, SUM (CAST ( (CASE ASCII (bz.typ) WHEN 69 THEN 0 WHEN 97 THEN 0 WHEN 65 THEN round(bz.betrag,2) WHEN 101 THEN round(-bz.betrag,2) END ) AS decimal(20, 2))) AS IST_Ausgaben, CONVERT (char, MAX (buchdat),104) AS letzte_Buchung, MAX (isnull (bz.sachgeb, '')) AS Sachgebiet, MAX (isnull (bz.mnr, '')) AS mnr, MAX (isnull (bz.adrnr, '')) AS adrnr, bz.bnr from buzahl bz GROUP BY bz.bnr ) AS bzk ON (bsk.bnr = bzk.bnr) LEFT JOIN adr a ON (a.adrnr=bsk.adrnr) LEFT JOIN n_adrbezugalt aba ON (aba.adrnr_alt=a.adrnr) LEFT JOIN n_adressen an ON (an.adressnummer=aba.adrnr_neu) LEFT JOIN n_personendaten p ON (p.zuordnungsnummer=an.adressnummer) WHERE ((isnull (bsk.SOLL_Zahlungsanspruch, 0) - isnull (bsk.SOLL_Verbindlichkeit,0)) - (isnull (bzk.IST_Ausgaben, 0) - isnull (bzk.IST_Einnahmen, 0)) < -@abweichung OR (isnull (bsk.SOLL_Zahlungsanspruch, 0) - isnull (bsk.SOLL_Verbindlichkeit,0)) - (isnull (bzk.IST_Ausgaben, 0) - isnull (bzk.IST_Einnahmen, 0)) > @abweichung) AND bzk.bnr IS NULL AND bsk.sachgebiet = @sachgebiet AND bsk.letzte_buchung < (getdate () - @tage) GROUP BY bsk.bnr ) AS ka LEFT JOIN n_vorgang vg ON (vg.muendelnr_alt=ka.mnr) LEFT JOIN n_adressen ad ON (ad.adressnummer=neue_adr) LEFT JOIN bere e ON (vg.bereich=e.brs) LEFT JOIN n_wivorlext wl ON (vg.vorgangsnummer=wl.vorgangsnummer) LEFT JOIN wivorl wv ON (wl.snrext=wv.snr) LEFT JOIN (SELECT adresse AS adrhe, vorgang AS vorgang from n_vorgbeteiligte WHERE beteiligtenart = 7) AS vb_he ON (vb_he.vorgang=vg.vorgangsnummer) LEFT JOIN n_adressen ad2 ON (ad2.adressnummer=vb_he.adrhe) LEFT JOIN hebuch hb ON (ka.bnr = hb.lnr) WHERE (hb.bereich between @vonBereich AND @bisBereich AND hb.bereich = vg.bereich AND ka.differenz <> 0) GROUP BY hb.mnr, hb.typ, hb.ksz, hb.bereich, vg.aktenzeichen, endevorgang, ad2.nachname, ad2.vorname, ad.nachname, ad.vorname, e.bb, ad2.nachname, ad2.vorname, ka.info, ka.SOLL_Zahlungsanspruch, ka.SOLL_Verbindlichkeit, ka.IST_Ausgabe, ka.IST_Einnahme, ka.IST_MAXBuchung, ka.SOLL_MAXBuchung, vg.muendelnr_alt, vg.vorgangsnummer, ka.bnr, ka.alte_adr, ka.neue_adr -- keine Anspruchstellung (kein Datensatz in bustell) UNION ALL SELECT MAX (ka.differenz)* -1 AS Forderung, ka.info AS Information, hb.bereich AS Bereichneu, e.bb AS Sachbearbeiter, vg.aktenzeichen AS Aktenzeichen, ad2.nachname AS Nachname_Hilfeempfaenger, ad2.vorname AS Vorname_Hilfeempfaenger, (case when ascii(hb.typ) = 69 then 'Empfänger' when ascii(hb.typ) = 85 then 'Pflichtiger' when ascii(hb.typ) = 101 then 'Empfänger' when ascii(hb.typ) = 117 then 'Pflichtiger' else hb.typ end) as [Beziehungsform], (case when ascii(hb.typ) = 69 then 'Konto aktiv' when ascii(hb.typ) = 85 then 'Konto aktiv' when ascii(hb.typ) = 101 then 'Konto inaktiv' when ascii(hb.typ) = 117 then 'Konto inaktiv' else hb.typ end) as [Status Konto], ad.nachname AS Nachname_Beteiligter, ad.vorname AS Vorname_Beteiligter, hb.ksz AS Kassenzeichenneu, convert (varchar (10), vg.endevorgang, 104) AS EndeVorgang, MAX (CONVERT (char, isnull (wv.wvdat, ''),104)) AS letzte_Wiedervorlage, MAX (CONVERT (char, isnull (wv.datae, ''),104)) AS letzte_Speicherung, ka.SOLL_Zahlungsanspruch, ka.SOLL_Verbindlichkeit, ka.IST_Einnahme, ka.IST_Ausgabe, ka.SOLL_MAXBuchung, ka.IST_MAXBuchung, vg.muendelnr_alt AS mnr, vg.vorgangsnummer, ka.bnr, ka.alte_adr, ka.neue_adr from (SELECT SUM ( (isnull (bsk.SOLL_Zahlungsanspruch, 0) - isnull (bsk.SOLL_Verbindlichkeit, 0)) - (isnull (bzk.IST_Ausgaben, 0) - isnull (bzk.IST_Einnahmen, 0)) ) AS Differenz, 'noch nie Anspruchstellung' AS Info, SUM (isnull (bsk.SOLL_Zahlungsanspruch, 0)) AS SOLL_Zahlungsanspruch, SUM (isnull (bsk.SOLL_Verbindlichkeit, 0)) AS SOLL_Verbindlichkeit, MAX (isnull (bsk.letzte_Buchung, '')) AS SOLL_MAXBuchung, SUM (isnull (bzk.IST_Ausgaben, 0)) AS IST_Ausgabe, SUM (isnull (bzk.IST_Einnahmen, 0)) AS IST_Einnahme, MAX (isnull (bzk.letzte_buchung,'') ) AS IST_MAXBuchung, MAX (isnull (bzk.Sachgebiet, '')) AS Sachgebiet, bzk.bnr AS bnr, MAX (bzk.mnr) AS mnr, MAX (isnull (bzk.adrnr, '')) AS alte_adr, MAX (isnull (an.adressnummer, '')) AS neue_adr from (SELECT SUM (CAST ( (CASE ASCII (bs.typ) WHEN 90 THEN round (isnull (bs.betrag, 0),2) + round (isnull (bs.rate, 0),2) WHEN 86 THEN round(-bs.betrag,2) WHEN 83 THEN 0 END ) AS decimal(20, 2))) AS SOLL_Zahlungsanspruch, SUM (CAST ( (CASE ASCII (bs.typ) WHEN 90 THEN 0 WHEN 86 THEN 0 WHEN 83 THEN round(bs.betrag,2) END ) AS decimal(20, 2))) AS SOLL_Verbindlichkeit, CONVERT (char, MAX (buchdat),104) AS letzte_Buchung, MAX (isnull (bs.sachgeb, '')) AS Sachgebiet, MAX (isnull (bs.adrnr, '')) AS adrnr, bs.bnr from bustell bs where bs.sachgeb = @sachgebiet GROUP BY bs.bnr ) AS bsk RIGHT OUTER JOIN (SELECT SUM (CAST ( (CASE ASCII (bz.typ) WHEN 69 THEN round(bz.betrag,2) WHEN 97 THEN round(-bz.betrag,2) WHEN 101 THEN 0 WHEN 65 THEN 0 END ) AS decimal(20, 2))) AS IST_Einnahmen, SUM (CAST ( (CASE ASCII (bz.typ) WHEN 69 THEN 0 WHEN 97 THEN 0 WHEN 65 THEN round(bz.betrag,2) WHEN 101 THEN round(-bz.betrag,2) END ) AS decimal(20, 2))) AS IST_Ausgaben, CONVERT (char, MAX (buchdat),104) AS letzte_Buchung, MAX (isnull (bz.sachgeb, '')) AS Sachgebiet, MAX (isnull (bz.mnr, '')) AS mnr, MAX (isnull (bz.adrnr, '')) AS adrnr, bz.bnr from buzahl bz WHERE bz.bereich between @vonBereich AND @bisBereich GROUP BY bz.bnr ) AS bzk ON (bsk.bnr = bzk.bnr) LEFT JOIN adr a ON (a.adrnr=bzk.adrnr) LEFT JOIN n_adrbezugalt aba ON (aba.adrnr_alt=a.adrnr) LEFT JOIN n_adressen an ON (an.adressnummer=aba.adrnr_neu) LEFT JOIN n_personendaten p ON (p.zuordnungsnummer=an.adressnummer) WHERE ((isnull (bsk.SOLL_Zahlungsanspruch, 0) - isnull (bsk.SOLL_Verbindlichkeit, 0)) - (isnull (bzk.IST_Ausgaben, 0) - isnull (bzk.IST_Einnahmen, 0)) < -@abweichung OR (isnull (bsk.SOLL_Zahlungsanspruch, 0) - isnull (bsk.SOLL_Verbindlichkeit, 0)) - (isnull (bzk.IST_Ausgaben, 0) - isnull (bzk.IST_Einnahmen, 0)) > @abweichung) AND bsk.bnr is Null AND bzk.sachgebiet = @sachgebiet AND bzk.letzte_buchung < (getdate () - @tage) GROUP BY bzk.bnr ) AS ka LEFT JOIN n_vorgang vg ON (vg.muendelnr_alt=ka.mnr) LEFT JOIN n_adressen ad ON (ad.adressnummer=neue_adr) LEFT JOIN bere e ON (vg.bereich=e.brs) LEFT JOIN n_wivorlext wl ON (vg.vorgangsnummer=wl.vorgangsnummer) LEFT JOIN wivorl wv ON (wl.snrext=wv.snr) LEFT JOIN (SELECT adresse AS adrhe, vorgang AS vorgang from n_vorgbeteiligte WHERE beteiligtenart = 7) AS vb_he ON (vb_he.vorgang=vg.vorgangsnummer) LEFT JOIN n_adressen ad2 ON (ad2.adressnummer=vb_he.adrhe) LEFT JOIN hebuch hb ON (ka.bnr = hb.lnr) WHERE (hb.bereich between @vonBereich AND @bisBereich AND vg.bereich = hb.bereich AND ka.differenz <> 0) GROUP BY hb.mnr, hb.typ, hb.ksz, hb.bereich, hb.bereich, vg.aktenzeichen, endevorgang, ad2.nachname, ad2.vorname, ad.nachname, ad.vorname, e.bb, ad2.nachname, ad2.vorname, ka.info, ka.SOLL_Zahlungsanspruch, ka.SOLL_Verbindlichkeit, ka.IST_Ausgabe, ka.IST_Einnahme, ka.IST_MAXBuchung, ka.SOLL_MAXBuchung, vg.muendelnr_alt, vg.vorgangsnummer, ka.bnr, ka.alte_adr, ka.neue_adr order by hb.bereich, vg.aktenzeichen