Neu Extern erstelltes SQL - Angebot falsche Werte

Oliver PP

Gut bekanntes Mitglied
28. April 2021
116
15
Hallo,
wir haben in unseren Angeboten und Rechnungen:

Listenpreis - Rabatt - Einzelpreis - Endpreis gesamt

Nun aber ist bei den Angeboten der Einzelpreis falsch berechnet.
Ich komme mit SQL (ist das doch oder? ) nicht weiter.
Sieht jemand wo der Fehler sein könnte in der Formel?

Bei Rechnungen geht es so:
LocCurrL$ ((SalesOrderPosition.NetPricePerUnit - (JTL_DirectQuery ("SELECT CAST(fVKNetto * (fRabatt / 100.0) AS DECIMAL(25,13)) AS DiscountValueNET FROM Verkauf.tAuftragPosition WHERE kAuftragPosition = "+str$(SalesOrderPosition.InternalId,0,0)+""))), JTL_GetCulture(Report.CountryISO, Report.LanguageISO, Report.CurrencyISO))

Bei Angeboten ist folgender Befehl drin aber der bringt ein falsches Ergebnis:
LocCurrL$ ((SalesQuotationPosition.NetPricePerUnit - (JTL_DirectQuery ("SELECT CAST(tBestellpos.nAnzahl * tBestellpos.fVKNetto - tBestellpos.nAnzahl * tBestellpos.fVKNetto * (1.0 - tBestellpos.fRabatt / 100.0) AS DECIMAL(25,13)) AS DiscountValueNET FROM tBestellpos WHERE kBestellPos = "+str$(SalesQuotationPosition.InternalId,0,0)+""))), JTL_GetCulture(Report.CountryISO, Report.LanguageISO, Report.CurrencyISO))

DANKE!
 

Anhänge

  • falscher Einzelpreis.jpg
    falscher Einzelpreis.jpg
    21,4 KB · Aufrufe: 4

sjk

Sehr aktives Mitglied
16. Januar 2019
545
248
Also die zweite Query für die Angebote ergibt überhaupt keinen Sinn. Die zieht den Rabattbetrag auf Positionsebene vom Nettolistenpreis ab, statt den Rabatt pro Stück zu berechnen.
So kommst du auch auf die 141,09 € in deinem Beispiel:
DirectQuery: (2 * 207,48 €) - (2 * 207,48 € * (1 - 16 /100 )) = 66,39 €
Und dann 207,48 € - 66,39 € = 141,09 €
Je höher die Anzahl einer Position also, desto falscher wird das Ergebnis weil immer die Gesamtersparnis auf Positionsebene vom Nettolistenpreis angezogen wird.

Im Gegensatz dazu multipliziert die erste Query für die Rechnung ganz einfach den Nettoeinzelpreis mit dem Rabattfaktor (also den Rabattbetrag pro einzelnem Produkt) und zieht diesen vom Nettolistenpreis ab.

Ich kann das nicht testen, aber das müsste eigentlich funktionieren:
SQL:
LocCurrL$ (
  JTL_DirectQuery (
    "SELECT CAST(fVKNetto * (1.0 - fRabatt / 100.0) AS DECIMAL(25,13))
     FROM tBestellpos
     WHERE kBestellPos = "+str$(SalesQuotationPosition.InternalId, 0, 0)+"
  "),
  JTL_GetCulture(Report.CountryISO, Report.LanguageISO, Report.CurrencyISO)
)