Vielen Dank für Eure schnellen Antworten!
Artikel und Leistung kann ich nicht zusammenfassen. Der Preis hängt ab von der Einheit (hier Behältergröße), vom Artikel (hier Abfallart)
und der Leistung (z.B. Leeren). Die Leerung eines Behälters gleicher Größe hängt ab von der darin enthaltenen Abfallart. Es könnte aber statt der Leistung "Leeren" eine andere Leistung z.B. "Sortieren" zum Tragen kommen, die dann wieder einen anderen Preis hat.
@ cruiser
Der Tabellenname "Auftragsposition" ist etwas unglücklich gewählt - es handelt sich nicht um den tatsächlich aufgeführten Auftrag sondern nur um die Definition einer Auftragsposition, die für viele Kunden zutreffen kann:
PosID = 1: 1.100 Ltr. - Gewerbeaball - leeren
PosID = 2: 1.100 Ltr. - Altpapier - leeren
In der Tabelle Preise wird dann der Preis für den jeweiligen Kunden eingetragen:
Code:
KuNr = 10100: PosID = 1 - Preis = 30,00€
KuNr = 10100: PosID = 2 - Preis = 10,00€
KuNr = 10310: PosID = 1 - Preis = 29,50€
KuNr = 11201: PosID = 2 - Preis = 11,50€
Die tatsächlich ausgeführten Aufträge werden dann in einer eigenen Tabelle erfasst:
Code:
KuNr Datum Anzahl Position Preis RechnNr
10100 02.03.06 3 PosID 1=1.100 Ltr. Gewerbeabfall 30,00
Zum besseren Verständnis eine Zusammenfassung des Ganzen:
Die Kombinantion aus EInheit, Artikel und Leistung ergibt theoretisch sicher mehrere Hundertausend Möglichkeiten, da es alleine mehr als 1000 verschiedene Abfallarten (nach Abfallverezichnis) gibt. Davon werden aber sicher nur wenige hundert insgesamt und beim einzelnen Kunden selten mehr als fünf tatsächlich benötigt.
Es gibt einen Musterkunden, dem für die häufigsten Kombinationen (= mögliche Auftragspositionen) ein Standardpreis zugeordnet wird. Diese Positionen können für einen Teil der Kunden verwendet werden. Jedem Kunden kann aber ein individueller Preis oder eine Kombination aus Standardpreis und individuellem Preis zugeordnet werden. Deshalb wird in der Tabelle "Preise" die Kundennummer erfasst. In dieser Tabelle kann jede Position beliebig oft vorkommen (im Extremfall für jeder Kunden einmal), da die Kunden unterschiedliche Preise haben. Jeder Kunde wiederum kann mehrmals vorkommen, wenn bei ihm mehrere der möglichen Auftragspositionen vorkommen können.
Für die Disposition wird eine DispositionsPosition angelegt, in der der Kunde, die zu erbringende Leistung und das geplante Ausführungsdatum erfasst werden. Ist der Auftrag ausgeführt, wird die Disposition in die endgültige Auftragsposition überführt, in der u.a. erfasst sind:
Auftragsnummer des Auftrags, dem diese Position zugeordnet ist (für einen Kunden können mehrere Aufträge bestehen)
Kunde (kann sich ggf. aus der Auftragsnummer ableiten)
Standort (ein Kunde kann mehrere Standorte z.B. mehrere Lokale haben)
Anzahl
erbrachte Leistung (Preis ergibt sich aus der PosID in der Tabelle "Preise")
Ausführungsdatum
Rechnungsnummer (wird bei der Abrechnung eingefügt)
Zum Zeitpunkt der Rechnungsstellung wird die Tabelle mit den ausgeführten Aufträgen dann Kunde für Kunde nach durchgeführten Aufträgen durchsucht. In den Auftragspositionen wird die Rechnungsnumer hinterlegt und die Rechnung entsprechend der gewünschten Sortierkriterien (z.B. nach Datum, nach Standort und Datum, etc.) erstellt.
Das ist natürlich nur ein erster Entwurf - es müssen sicher noch einige Dinge berücksichtigt werden. Aber irgendwo muss ich ja einmal anfangen.
@ Mikhal
Ich sehe keine Möglichkeit, die Beziehung zum Kunden aus der Tabelle "Preise" heraus zu nehmen. Ich muss ja die unterschiedlichen Preise für ein und dieselbe Leistung den jeweiligen Kunden zuordnen können. Sonst müsste ich ja für jeden Kunden eine eigene Tabelle mit Preisen erstellen.
Preiserhöhungen sind für uns immer problematisch, da niemals eine lineare Preiserhöhung für eine Leistung erfolgt. Preiserhöhungen sind individuell für den einzelnen Kunden und erfolgen in der Regel auch zu unterschiedlichen Zeitpunkten. Ich kann ggf. den Standardpreis für einzelne Leistungen relativ einfach ändern. Für Kunden die individuelle Preise haben, bleibt nur die Möglichkeit, sich die für den Kunden hinterlegten Preise anzeigen zu lassen und die zu ändern, bei denen es erforderlich ist.
Nochmals vielen Dank für Eure Beteiligung. - Ich werde sicher noch mit dem einen oder anderen Problem hier auftauchen müssen.
mfg gfjs