Prolog: Wenn jemand diesen Post liest, bitte gebt ein Lebenszeichen von euch! ;)
Heute mal wieder eine richtig "deep down the rabbit hole" Sache: Einkauf will eine Auswertung über die den Bestellwert haben und ich darf den Bestellpreis nachrechnen um auf den Wert zu kommen der auf der Bestellung abgedruckt wird. Da die einfache Rechnung "Nettopreis * Bestellmenge" (Werte aus der EKPO) bei gerundetem Nettopreis manchmal eine Differenz zu dem in der Bestellung abgedruckt Wert ergibt, ist das Ergebnis ein Problem.
Frage ist:
Gibt es einen Funktionsbaustein dem ich Materialnummer, Lieferant, Datum, Kalkulationsschema und/oder dergleichen zuwerfen kann, der mir die Kalkulation durchführt und den fertigen/richtigen Wert ausgibt?
Also von Vorne: Was ich bisher rausgefunden habe ist dass es diverse Kalkilationsschemata im Einkauf gibt und jedes Schema wiederum aus einer Liste von Konditionen besteht (SPRO -> Materialwirtschaft -> Einkauf -> Konditionen -> Preisfindung festlegen -> Kalkulationsschema festlegen - Einkauf). Jede Kondition beinhaltet wiederum die genauen Angaben wie viel "drauf gerechnet werden soll". Also PB00 als Grundpreis, ZXXX erster Aufschlag mit 0,01€ pro Stk und ZYYY zweiter Aufschlag mit 0,05€ pro Kg.
Anscheinend geht ja die Preisfindung her und rechnet das Kalkulationsschema durch und kommt auf einen Wert der in der Bestellung abgedruckt wird. Dieser wiederum wird durch die Bestellmenge geteilt und in gerundeter Form als Nettopreis in der EKPO abgespeichert. Plus natürlich gerundeter Nettopreis * Bestellmenge als Nettowert. Sollte ich mich schon hier irren bitte gerne korrigieren ;)
- Bei manchen Bestellungen (wenn die Rundung "richtig" rechnet) entspricht der Nettowert auch dem in der Bestellung abgedruckten Wert.
- Bei den Bestellungen auf Positionssicht gibt es in den Konditionen auch immer eine Zeile mit KondArt WOTB der bei Fällen ohne Rundungsdifferenz auch den Wert aus der Bestellung hat und bei Rundungsdifferenzen eben den Wert aus Nettopreis * Bestellmenge hat. Dieser unterscheidet sich wie gesag in dem Fall von dem Wert der in dem ausgedruckten Bestelldokument steht (der in die Auswertung fließen soll).
Grundsätzlich wäre es für mich kein Problem mit den Kontionstypen über die KONH+KONP Tabellen die entspreche Werte zu ermitteln und zu verrechnen. Mein Problem ist nur: Ich weiß nicht wie die Preisfindung bei der Erstellung der Bestellung funktioniert.
Irgendwo muss doch hinterlegt sein dass bei Erstellung der Bestellung das Schema ZKND001 genommen wird und in dem steht dann meinetwegen Konditionssätze PB00, ZX1, ZX2, ZX3 verwendet werden. Worauf dann die Preisfindung die Konditionen durchrechnet und zu einem Ergebnis bekommt. Jedoch finde ich keinen Ansatzpunkt wodurch ich zu einer Bestellung das verwendete Kalkulationsschema finde.
Wäre wirklich für jede Hilfe dankebar!
Mfg Radinator
Die Preisfindung läuft über Funktionsbaustein PRICING (zumindest für Auftrag und Faktura, glaube für Bestellungen auch 🙂), der hat natürlich eine komplexe Schnittstelle, hier gibt es ein Beispiel wie es versorgt werden kann:
danke dir für den Link auf den anderen Thread. Leider hab ich für den PRICING FuBa keine Verwendung gefunden da man u.A. auch Kundennummer und so braucht und es hier um Bestellungen (also genau die andere Seite) geht.
Da ich relativ verzweifelt war hab ich auch mal auf StackOverflow gefragt und wurde auf den FuBa BAPI_PO_CREATE1 hingewiesen.
Dieser erstellt eine Bestellung, man kann aber mit einem Flag einen Testrun angeben (PO Dokument wird damit nicht gespeichert).
Hier war leider der Aufwand etwas zu hoch und da ich nicht "den aktuellen Preis" (also was das Zeug kosten würde wenn ich jetzt eine Bestellung mache) sondern was das Material gekostet hat als "damals" bestellt wurde wissen wollte bin ich über den Verwendungsnachweis der Tabelle POCOND auf den FuBa BAPI_PO_GETDETAIL1 gestoßen. Dieser liefert zu einer Bestellnummer in Tabellenform alle notwendingen Daten.
Unter anderen auch eine Tabelle wo die ganzen Konditionen mit Werten drinnen steht. Hier kann ich einfach einen SELECT bzw ein READ TABLE machen und mir die Zeilen rausgreifen die ich brauche.
Damit hat sich die Frage soweit erledigt :)
Danke nochmal und LG
Radinator