Marco S.: FIFO Prinzip mit Datenbank umsetzen

Hallo zusammen

Ich möchte ein FIFO Prinzip mit Hilfe einer Datenbank (Access) und VBA umsetzen. Dabei geht es um Käufe und Verkäufe von Produkten, wobei nur verkauft werden kann was zu einem bestimmten Zeitpunkt auch tatsächlich als Bestand vorhanden war. Ausserdem muss immer das Produkt als erstes verkauft welches als erstes gekauft worden ist. Bsp:

01.01.2010 Kauf, 2 Stück, Preis 10.00
01.02.2010 Kauf, 4 Stück, Preis 12.00
01.03.2010 Verkauf, 4 Stück, Preis 11.00

(Gewinn: 4*11-2*10-2*12 = 0)

Ich suche nun nach einer geeigneten Strutur/Logik um das Ganze möglichst einfach abzubilden. Habe bisher zwei Varianten:

A)
Tabelle mit Käufen
Tabelle mit Verkäufen
Tabelle mit Stück (verlinkt mit Käufen/Verkäufen)

=> Jedes gekaufte Stück wird als solches in der Datenbank als Datensatz erfasst. Vorteil: Mit Hilfe von DB Abfragen kann relativ einfach ermittelt werden, welches Stück wann gekauft wurde und ob es bereits wieder verkauft worden ist. Problematik: Es können keine Teilstücke abgebildet werden (z.B. 3.52 Stück). Ausserdem ist das Ganze relativ langsam wenn man 1 Mio Stück eines Produktes kauft.

B)
Tabelle mit Käufen (wobei hier ein Attribut "Bestand" erforderlich ist)
Tabelle mit Verkäufen

=> Bei jedem Verkauf wird rechnerisch (VBA) ermittelt, wie viele Stücke eines Kaufs noch im Bestand sind und dann der "Bestand" entsprechend angepasst. Problematik: Relativ komplexe Berechnungen, insbesondere dann wenn nachträglich Käufe und Verkäufe (unsortiert) in eingegeben oder wieder herausgelöscht werden (z.B. wenn nachträglich die gekaufte Anzahl Stück reduziert wird, allerdings bereits Verkäufe getätigt worden sind, dann muss der ganze Bestand neu berechnet werden. Dasselbe gilt auch wenn Käufe  nicht nach Datum sortiert eingegeben werden).

Ich bin mir sicher die Problematik einer solchen FIFO Implementierung ist nicht neu - welche Lösungsansätze gibt es? Tipps? Empfehlungen?

Danke!

Gruss Marco

  1. Ausserdem ist das Ganze relativ langsam wenn man 1 Mio Stück eines Produktes kauft.

    Halte dir nicht einzelne Stück, sondern den Kauf als solches. Dabei hältst du jeweils den aktuellen Bestand pro Kauf, also das war grad noch übrig ist.
    Davon kannst du dann vom ältesten bis zum neusten sortiert so lange was wegnehmen, bis die angegebene Stückzahl erreicht ist.