2.5k Aufrufe
Gefragt in Datenbanken von
hallo Zusammen,
ich habe einen Warenbestand und erhalte Abrufe.
Zur Zeit werden die Abrufe einfach eingelesen und die jeweiligen Mengen vom Bestand abgezogen.
-
Problem:
Es wird mehr bestellt, als Lager vorhanden ist.
-
Meine Idee ist nun, dass ich die Daten aus der Excel-Tabelle einlese und nach dem System "wer-zuerst-kommt-malt-zuerst" wird so lange jede Zeile eingelesen, bis der Bestand des Artikels auf "0" ist. Alle weiteren Bestellungen für diesen Bestand werden einfach ignoriert. (es muss dabei nicht aufgezeigt werden, was ignoriert wird) Es reicht, dass nur die Bestellungen eingelesen werden.
Wie kann ich also nun eine Prüfung einrichten, die Verhindert, dass mein Bestand im Access unter "0" fällt?
Zur Zeit wird einfach alles übernommen und ich habe überall minus-Bestände.. was ich dann tatsächlich verfügen kann ist somit nicht ersichtlich.
kennt ihr da eine Einstellung?

Vielen Dank

Kai

3 Antworten

0 Punkte
Beantwortet von lorf55 Mitglied (699 Punkte)
Hallo Kai,
dazu würde es reichen, mit Excel-Query morgens eine Abfrage der
Access-Datenbank zu machen und und denn von den angezeigten
Lagerwerten zu verkaufen bis sie alle sind.

Dafür richtest du über ODBC (Einstellungen - Systemsteuerung -
Verwaltung - Datenquellen(ODBC) bei XP) die Abfrage des
Lagerbestandes der Access-Datenbank als Datenquelle (hier für
Excel, aber eigentlich für beliebige Programme) ein.
In Excel erstellt man eine Abfrage der Access-Datenbank mit
Excel-Query über Daten - Externe Daten - Neue Abfrage erstellen ...
unter Datenbanken Microsoft Access wählen, OK, Dateiname der
Datenbank suchen, OK, Tabellen oder Spalten oder Abfragen
aussuchen, OK usw. bis "Fertig stellen" durchklicken.
Denn plazierst du die Ergebnisse an beliebiger Stelle im Datenblatt
und hast die Daten deiner Access-DB in Excel.
Eventuell musst du Query nachinstallieren.

Jetzt kriegst du zwar deine Daten von Access, kannst aber noch
nicht einfach aktualisieren.

Um deine Daten in Access zu aktualisieren, machst du in Access
eine Tabellen-Verknüpfung für das Excel-Tabellenblatt, das die
Query-Abfrage enthält. Dadurch kannst du von Access auf deine
Excel-Tabelle zugreifen. Die Daten sind aber noch nicht in Access
verarbeitet. Dazu musst du in Access eine UPDATE-Abfrage der
verknüpften Excel-Tabelle auf deinen Lagerbestand erstellen.

Abschließend muss nur noch diese Abfrage von irgendwem
ausgelöst werden, entweder von Hand oder über einen Timer in der
Access-Datenbank. Denn könnten sogar mehrere gleichzeitig
verkaufen. Den Timer müsste man mit VBA anstellen. Eventuell
kann man das Update noch über DDE auslösen. Das weiß ich aber
nicht.

Na mal sehen, was andere dazu meinen.
Gruß
lorf
0 Punkte
Beantwortet von ralfh Mitglied (227 Punkte)
Hallo, interessantes Thema !

Wie wäre es denn, wenn die Bestellungen die über den Lagerbestand hinaus gehen, als Vorbestellung hinterlegt werden ? Jede Bestellung ist doch Umsatz, oder ?
Beispiel:
Lagerbestand Ware X = 10
Bestellung Ware X = 15

Vorbestellung erwünscht Ja /Nein

Wenn Ja, ab mit den Daten in einer Tabelle, wenn die DB relational Aufgebaut ist, werden Lieferanten hinterlegt sein, sodass man über eine (Teil-)automatisierte Warenanforderung nach denken könnte.

Um VBA und SQL wirst Du, wenn Du eine vernüftige Lösung haben möchtest nicht herum kommen.

Gruß Ralf
0 Punkte
Beantwortet von rahi Experte (1.4k Punkte)
Hallo Kai,

Hier noch ein paar Tipps/Vorschläge

1. Lese die Excel-Datei in eine Zwischentabelle (gleiche Struktur wie die Haupttabelle), da richten sie ja zunächst keinen "Schaden" an
2. Danach geht du in VBA mit einen Cursor durch die Zwischentabelle und übernimmst den jeweiligen Datensatz, sofern der Bestand nicht unter 0 sinkt.
3. Damit hast du sogar die Möglichkeit, die Buchungen zu optimieren (nicht das abs. Optimum!), wenn du die Bestellungen bezogen auf die Bestellmengen absteigend sortierst.
4. Weiterhin könntest du in der Zwischentabelle z.B. zwei weitere Felder aufnehmen, in die du die Übernahme bzw. die Abweisung mit Datum und Status dokumentierst
5. Das Ganze kosten dich etwa 40-50 Zeilen Code.

Gruß
Ralf
...