Access: Feld Lagerbestand fortlaufend bei Buchungen ändern

Nordseekutter

Newbie
Registriert
Aug. 2023
Beiträge
1
Moin,


habe folgendes Problem:


Lademittelarttabelle mit den Feldern:
ArtikelID (Prrimärkey), SAP-Code, Bezeichnung


Kundetabelle mit den Feldern:
KundeID (Prrimärkey), KundeName, KundeStrasse, KundeOrt, KundeLand


Bestandstabelle mit den Feldern:
BestandsID (Prrimärkey), KundeID, ArtikelID, Jahresanfangsbestand, Jahresendbestand, AktuellerBestand (berechnet durch Jahresanfangsbestand-Jahresendbestand)


BuchungID (Prrimärkey) , Buchungsdatum, VersenderID, EmpfaengerID, Lieferscheinnummer


Buchungspostentabelle mit den Feldern:
BuchungspostenID (Prrimärkey), BuchungID, ArtikelID, Versandmenge, Empfangsmenge, BeschaedigteMenge, VerkaufteMenge


Beim Buchungsformular erfasse ich das Buchungsdatum, Versender, Empfaenger und im Unterformular Artikel, Versandmenge,Empfangsmenge,BeschaedigteMenge,VerkaufteMenge


Ich möchte nun direkt bei der Eingabe das Feld AktuellerBestand der Bestandstabelle auf der Grundlager der Eingaben im Unterformular im Buchungsformular fortlaufend direkt ändern.


Also bei jeder Buchung:


Aktueller Bestand des Versender - Versandmenge - Beschaedigte Menge - VerkaufteMenge
Aktueller Bestand des Empfaenger + Empfangsmenge - BeschaedigteMenge


Kann mir jemand sagen wie ich in Access das Feld AktuellerBestand in der Bestandsliste je Kundenartikel bei der Eingabe direkt ändern kann.


Danke im Voraus für Eure mühe.


Nordseekutter
 
Ich würde den Bestand immer Live berechnen aus Anfangsbestand + alle Transaktionen innerhalb des Jahres - sprich Lagererhöhung durch Einkauf, Lagerreduzierung durch Verkauf.

Den Bestand fix zu speichern fände ich an der Stelle eher unsexy. Über die Transaktionen hast du eine gute Historie und den fixen Bestandswert kannst du dann über Transaktionen + Inventurzählung dann korrekt ermitteln lassen.

Wenn der Bestand direkt per Eingabe geändert wird, dann kannst du sehr schwierig fehlerhafte Erfassungen durch den Anwender abfangen. Denke da immer daran, dass dein Programm so stabil sein muss mit der Logik, dass der Anwender dein Programm nicht zerschießen kann.
 
  • Gefällt mir
Reaktionen: Raijin und floq0r
Da bin ich bei @_killy_

Wenn man Informationen wie einen Bestand, der eigentlich das Ergebnis einer Auswertung ist, als separaten Wert speichert, muss man höllisch aufpassen, um sich keine Fehler in der Datenbank einzuhandeln. Ansonsten kann es im worst case passieren, dass zB eine Buchung nebst Buchungsposten nicht in die Datenbank eingefügt wird (zB unvollständige oder fehlerhafte Eingabe), der aktuelle Bestand aber trotzdem aktualisiert wird, obwohl die vorherige Buchung ja gar nicht eingetragen wurde. Wenn da kein ordentliches Errorhandling stattfindet, entstehen Datenfehler, die am Ende nur schwierig nachzuvollziehen sind, wenn die Zahlen bei der Inventur, o.ä. nicht stimmen.

Auch muss man berücksichtigen was passiert, wenn zB Buchungen geändert werden, weil man einen Zahlendreher hatte, o.ä. Die Buchung wird korrigiert, aber im Zweifelsfalle wird der Bestand anschließend nicht mehr korrekt nachgezogen und ist somit vollkommen unbrauchbar.

Robuster wäre es da, wenn man den Jahresanfangsbestand einmalig festhält und den aktuellen Bestand aus den Buchungen des aktuellen Jahres live berechnet. Unter anderem für sowas gibt es ja die Sum-Funktion, die Spalten einer Select-Anweisung Summieren kann, um beispielsweise alle Buchungen des laufenden Jahres für einen Versender/Empfänger zu selecten und die Mengen in den Buchungen addiert. Packt man das als Stored Procedure in die Access-DB rein, kann man den aktuellen Bestand überall dort, wo man ihn benötigt, live berechnen lassen.
 
Zurück
Oben