Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Offene Posten: Artikel mit LIST anhägen vervielfacht Summe (https://www.delphipraxis.net/195124-offene-posten-artikel-mit-list-anhaegen-vervielfacht-summe.html)

BlueStarHH 4. Feb 2018 11:44

Datenbank: Firebird • Version: 2.5 • Zugriff über: IBDAC

Offene Posten: Artikel mit LIST anhägen vervielfacht Summe
 
Hallo,

ich habe folgende 3 Tabellen aus denen ich nicht bezahlte Rechnungen ermitteln möchte:

Code:
FibuBuchung (hier sind alle Zahlungen enthalten)
------------
Gegenkonto
Konto
Betrag
...

Vorgang (hier sind alle Rechungen enthalten)
-------
VgNr
Brutto
...

VorgangPos (hier sind alle Positionen der Rechnungen enthalten)
-----------
PosNr
VgNr
Artikel
...

Das mache ich bisher so. Das klappt auch:

SQL-Code:
select
  v.VgNr,
  v.brutto,
  sum(case
    when gegenkonto >= 10000 and gegenkonto <= 69999 then Betrag
    when konto >= 10000 and konto <= 69999 then -Betrag
    end)
  as Offen
from
  FibuBuchung b
left join
  Vorgang v on b.vgnr = v.vgnr
group by
  v.VgNr,
  v.brutto
order by
  v.VgNr
Ergebnis ist dann z.B.
Code:
VgNr       Brutto   Offen
2018-0038  10.234 -10.234
2018-0078     123     -50
Nun möchte ich zu jedem Vorgang (=Rechnung) die zugehörigen Positionen (=Artikel) in einer weiteren Spalte ausgeben:

Code:
VgNr       Brutto   Offen Positionen
2018-0038  10.234 -10.234 PC, Monitor, Fax
2018-0078     123     -50 Tastatur, Maus
Dazu habe ich den SQL-Ausdruck wie folgt ergänzt:

SQL-Code:
select
  v.VgNr,
  v.brutto,
  sum(case
    when gegenkonto >= 10000 and gegenkonto <= 69999 then Betrag
    when konto >= 10000 and konto <= 69999 then -Betrag
    end)
  as Offen,
  LIST (VorgangPos.Artikel, ', ') as Positionen  <---- NEU
from
  FibuBuchung b
left join
  Vorgang v on b.vgnr = v.vgnr
left join                                        <---- NEU
  VorgangPos on v.VgNr = VorgangPos.VgNr         <---- NEU
group by
  v.VgNr,
  v.brutto
order by
  v.VgNr
Das ergibt folgendes Problem:
Zwar sind die Positionen und aufgelsitet, der offene Betrag wird aber so oft aufsummiert, wie es Positionen gibt. Gibt es z.B. 3 Position, ist der offene Betrag 3x so hoch wie er eigentlich sein sollte:

Code:
VgNr       Brutto   Offen Positionen
2018-0038  10.234 -30.702 PC, Monitor, Fax
2018-0078     123    -100 Tastatur, Maus
Wer kann helfen? Vielen Dank im Voraus!

Delphi.Narium 4. Feb 2018 14:33

AW: Offene Posten: Artikel mit LIST anhägen vervielfacht Summe
 
Durch diese Zeilen
SQL-Code:
left join                                       <---- NEU
  VorgangPos on v.VgNr = VorgangPos.VgNr        <---- NEU
bekommst Du im Select pro Vorgang soviele Zeilen, wie es Vorgangspositionen gibt. Dementsprechend wird beim Summieren dann auch der Betrag "zuviel summiert".

Kann es nicht testen, aber eventuell könnte das ein Ansatz sein:
SQL-Code:
select
  v.VgNr,
  v.brutto,
  Offen,
  LIST (VorgangPos.Artikel, ', ') as Positionen
from
(
  select
    v.VgNr,
    v.brutto,
    sum(case
      when gegenkonto >= 10000 and gegenkonto <= 69999 then Betrag
      when konto >= 10000 and konto <= 69999 then -Betrag
      end)
    as Offen
  from
    FibuBuchung b
  left join
    Vorgang v on b.vgnr = v.vgnr
  group by
    v.VgNr,
    v.brutto
) a,
left join                                      
  VorgangPos on a.VgNr = VorgangPos.VgNr        
order by
  a.VgNr

BlueStarHH 4. Feb 2018 17:55

AW: Offene Posten: Artikel mit LIST anhägen vervielfacht Summe
 
Danke, damit klappt es!

jobo 5. Feb 2018 06:52

AW: Offene Posten: Artikel mit LIST anhägen vervielfacht Summe
 
mal eine blöde Frage, was sind das für Bedingungen, bei denen Du den Betrag ausgibst, Vorzeichen änderst?
Und was geschieht, wenn die Bedingungen nicht erfüllt sind?

Zitat:

Zitat von BlueStarHH (Beitrag 1393069)
...
Das klappt auch:

SQL-Code:
select
  v.VgNr,
  v.brutto,
  sum(case
    when gegenkonto >= 10000 and gegenkonto <= 69999 then Betrag
    when konto >= 10000 and konto <= 69999 then -Betrag
    end)
  as Offen
from
  FibuBuchung b
...
...


mkinzler 5. Feb 2018 07:18

AW: Offene Posten: Artikel mit LIST anhägen vervielfacht Summe
 
Es scheint sich um eine Datevkonforme Buchhaltung zu handeln.
10000-69999: Debitoren, 70000-99999: Kreditoren.

Normalfall Buchung Umsatz an Debitor. Wenn also Debitor in Konto ist, dann handelt es sich um einen Storno, Umkehrung durch S/H oder Betrag ist negativ. Deshalb wird dieser in der OPOS-Aufstellung negiert.

BlueStarHH 5. Feb 2018 07:23

AW: Offene Posten: Artikel mit LIST anhägen vervielfacht Summe
 
mkinzler war schneller und liegt richtig.

jobo 5. Feb 2018 08:03

AW: Offene Posten: Artikel mit LIST anhägen vervielfacht Summe
 
Ach, trotz Kaffee total gepennt!
Nicht dass ich Datev konforme Buchhaltung kenne, aber ich habe nicht mal geschnallt, dass es bei den Kriterien um Buchungsschlüssel geht.
Sorry & Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz