@r.a.r.e. @SLINGSHOT @AQURO @GG290 DRINGENDE WARNUNG - Eurer SQL ist NICHT OK.
Es wird nicht berücksichtigt, dass Rechnungspositionen Rabatte enthalten können und im Falle von Rabatten falscher Gewinn ausgewiesen.
Auch wird mit tArtikel.fEKNetto der stets aktuelle EK genommen und eben nicht der, der zum Zeitpunkt der Rechnungserstellung gültig war, was das Ergebnis weiter erheblich verfälschen kann, wenn sich der EK verändert.
Auch das hier in der Ermittlung des Gewinns ist KOMPLETT falsch
Code:
ROUND((fAnzahl*(SELECT ROUND(fVKNetto,2) FROM dbo.tArtikel AS a WHERE a.kArtikel = rp.kArtikel)) - (fAnzahl*(SELECT fEKNetto FROM dbo.tArtikel AS a WHERE a.cArtNr = rp.cArtNr)),2) AS Gewinn
weil hier nicht der VK an den Kunden genommen wird, um dann davon den EK abzuziehen.
Statt dessen wird die Menge in der Rechnung * aktueller StandardNettoVK des Artikels genommen, was aber NICHT der VK der Rechnungsposition sein muß, insb. nicht unter Berücksichtigung der zeitlichen Veränderung des Artikels.
Das hier beschränkt auch mitnichten auf die letzten 1000 Tage: SELECT TOP 1000
Der ganze Aufbau mit vielen Sub-Selects wirkt ungehobelt und wenn man sich Rechnung.tRechnungPosition mal im Detail anschaut, ist 75% von dem SQL unnötig und zudem falsch.
Wirklich, dringender Rat:
Anhänge oder Thread löschen. Bevor mit dem Code noch großer Mist errechnet wird für wichtige Dinge.
Wo kommt das Ding her?
ChatGPT?!?
Bitte nicht böse verstehen, aber sowas geht gar nicht.
Auf Basis solcher Exporte treffen User Entscheidungen (oder melden was ans Finanzamt oder so) und hier Gezeigtes ist abgrundtief falsch (!), und zeugt von massiv fehlendem Wissen um die JTL Datenstruktur und SQL.