Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
negative Lagerbestände verhindern
zurück: Textmarker - saveas etc. weiter: InputBox Cursor ans Ende Stellen Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Offen Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
imix
Im Profil kannst Du frei den Rang ändern


Verfasst am:
24. Apr 2014, 16:41
Rufname:

negative Lagerbestände verhindern - negative Lagerbestände verhindern

Nach oben
       Version: Office 2007

Guten Tag,

wahrscheinlich gibt es für mein Problem in diesem Forum bereits eine Lösung und ich bin nur zu dumm diese zu finden. Aber ich durchsuche dieses Forum und das gesamte Internet schon seit zwei Stunden und habe mich daher entschlossen nun hier meinen ersten Beitrag zu verfassen. Sollte ich gegen irgendwelche Forumsregeln verstoßen, bitte ich dies zu entschuldigen und mich darauf hinzuweisen. Confused

Nun zu meinem Problem:
Ich habe eine Datenbank die Lagerbestände von Laborproben wiedergibt und diese pflegen soll. Ich habe mich dazu entschlossen(wie es hier im Forum häufig empfohlen wird) nur die Bewegungsdaten in einer Tabelle tblZuAbgang zu speichern und daraufhin in einer Abfrage den Bestand zu berechnen. Die Abfrage enthält die Probenbezeichnung, den Lagerort und den Zu-oder Abgang. Dies lässt sich gut berechnen ,gezielt und detailiert aufrufen und darstellen. Ich bin damit sehr zufrieden. Rolling Eyes

In einem Formular (fmlZuAbgang) erzeuge ich per Button neue Datensätze für tblZuAbgang und speichere diese mit einem zweiten Button.
Da das Feld "Gesamtsumme von intZuAbgang" sich nun in einer Abfrage befindet lässt sich keine Gültigkeitsregel erstellen. Somit ist es derweil in meiner Datenbank möglich negative Lagerbestände zu erzeugen.

Deswegen habe ich dem Formular fmlZuAbgang nach dem aktualisieren mit meinen sehr schlechten VBA Kenntnissen dies hier hinzugefügt:
Code:
Private Sub Form_AfterUpdate()
    If Nz((abfrageName.Datenfeld), 0) <= 0 Then ' 0+-1
        Me.Undo
        MsgBox "Bestand ist nicht groß genug."
    End If
End Sub
Der Code ist wild aus dem Internet zusammenkopiert und ich mache hier mit Sicherheit was ziemlich falsch, bin leider nicht gut genug zu um zu erkennen wie das wirklich zu laufen hat. Laughing

Ich hoffe sehr, dass ihr mir da weiter helfen könnt.
Vielen Dank im Vorraus

imix
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
24. Apr 2014, 17:27
Rufname:

AW: negative Lagerbestände verhindern - AW: negative Lagerbestände verhindern

Nach oben
       Version: Office 2007

Hallo,

wenn Du "AfterUpdate" verwendest, wurde der Datensatz bereits gespeichert, entsprechend kannst Du kein Undo mehr auslösen, das geht nur, solange noch nicht gespeichert wurde, z.B. in "BeforeUpdate". Und da ist für gewöhnlich auch der beste Ort, um eine Validierung durchzuführen, sprich: Alles zu testen, was den aktuellen Datensatz betrifft, bevor man speichert (daher hat der BeforeUpdate-Event einen Cancel-Parameter, den man auf "True" setzen kann, womit das Speichern verhindert wird, wenn irgendetwas im aktuellen Datensatz nicht so ist, wie es sein sollte).

Da Du ja den alten Bestand berechnen kannst, mußt Du darauf nur die aktuelle Eingabe des Users addieren (was bei einem negativen Wert ja gleichbedeutend mit abziehen ist) und dann testen, ob das Ergebnis kleiner 0 ist. Dann kannst Du den User darauf hinweisen und ihm die Entscheidung überlassen, ob er weiter an dem Datensatz editieren will oder ob ein Undo stattfinden soll (es ist SEHR frustrierend, wenn man alles eingegeben hat, das Programm sagt, daß etwas falsch ist und dann einfach alle Eingaben ohne Rückfrage selbst wieder entfernt, also immer MsgBox verwenden).

Ein weiterer Haken besteht natürlich darin, daß möglicherweise mehrere Benutzer das gleiche Teil auslagern wollen. Wenn sie das zum gleichen Zeitpunkt machen, muß man sich eine Methode einfallen lassen, zu verhindern, daß beide 10 von 10 Teilen ausbuchen können, dann wäre das Ergebnis wieder -10, obwohl beide den Lagerbestand von 10 gesehen haben.
Auch hier ist "BeforeUpdate" richtig, man muß hier nochmal die Abfrage zur Berechnung der vorhandenen Menge starten und so das aktuellste Ergebnis ermitteln. Strenggenommen müßte hier sogar eine Transaktion gestartet werden, um sicherzustellen, daß alle Schritte (auslesen des Bestandes, vergleichen, ausbuchen) hintereinander erledigt werden, ohne von anderen Usern unterbrochen zu werden. Das geht auch in Access, aber das ist fortgeschrittene Programmierung. Wenn Du nur wenige User hast (oder nur einen), dann ist der Aufwand nicht nötig, da das exakt zeitgleiche Ausbuchen dann schon sehr unwahrscheinlich ist.

Gruß

Christian
Blackpit
Im Profil kannst Du frei den Rang ändern


Verfasst am:
24. Apr 2014, 17:37
Rufname:

AW: negative Lagerbestände verhindern - AW: negative Lagerbestände verhindern

Nach oben
       Version: Office 2007

Abgesehen vom falschen Ereignis gibt es noch ein Problem in Deinem Code
Code:
    If Nz((abfrageName.Datenfeld), 0) <= 0 Then
geht so nicht. Der Zugriff auf ein Feld einer Tabelle/Abfrage kann so nicht erfolgen. Hierzu musst Du einen Domänen-Funktion verwenden z.B. DLOOKUP o.a.

Aber ich sehe noch weitere Hürden.
Melde Dich doch zum Beitritt in der UPLOAD-Gruppe an ("Benutzergruppen") und lade eine abgespeckt, anonymisierte Beispiel-DB hoch.

Gruß

BP
imix
Im Profil kannst Du frei den Rang ändern


Verfasst am:
25. Apr 2014, 10:19
Rufname:

AW: negative Lagerbestände verhindern - AW: negative Lagerbestände verhindern

Nach oben
       Version: Office 2007

Vielen Dank erstmal für eure Antworten.
Das Event vor der Aktualisierung zu triggern scheint sehr sinnvoll. Smile
Aber wie Blackpit bemerkte scheint der Code auch fehlerhaft zu sein, da die Abfrage so nicht funktioniert. Ich bekomme keine Fehlermeldung. Die Datenbank macht einfach weiter als hätte ich keine Ereignisprozedur hinzugefügt.

Ich lese mich erstmal über dieses Dlookup schlau während ich auf die Mitgliedschafft in der Upload-Gruppe warte. Dann werde ich eine lightversion der Datenbank hochladen.

Was die Nutzerzahl angeht: Ich erwarte eine Nutzung von maximal 3 Personen, die im direkten Kontakt zueinander stehen und über den Tag verteilt vllt. zusammen 5-6 Einträge in tblZuAbgang produzieren. Gleichzeitige Einträge halte ich für sehr unwahrscheinlich und würde da erstmal keine Schritte in diese Richtung unternehmen wollen. Aber vielen Dank, dass du dir so viele Gedanken zu meinem Projekt machst Smile

Na dann bis zum Upload der Datenbank

Mit freundlichen Grüßen !
KlausMz
Moderator Access


Verfasst am:
25. Apr 2014, 10:27
Rufname:
Wohnort: Irgendwo in der Pfalz

AW: negative Lagerbestände verhindern - AW: negative Lagerbestände verhindern

Nach oben
       Version: Office 2007

Hallo,
Zitat:
Na dann bis zum Upload der Datenbank
und konvertiere die DB nach Access2003, Du hast dann mehr Helfer.
_________________
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
imix
Im Profil kannst Du frei den Rang ändern


Verfasst am:
28. Apr 2014, 11:24
Rufname:

AW: negative Lagerbestände verhindern - AW: negative Lagerbestände verhindern

Nach oben
       Version: Office 2007

Hi,

ich habe hier in der Zip eine abgespeckte und anonymisierte Version der DB für 2007 und 2003. Sie sind von Antivira auf Viren überprüft.

In meinem ersten Post beschrieb ich, wie die relevanten Formulare und Tabellen heißen. Den Großteil der unrelevanten Dinge sollten eh raus gelöscht sein (hoffe ich).

Im ersten Post schrieb ich von tblZuAbgang. Hier heißt sie aber tblZuAbgangRO, weil wegen ist so. Razz

EDIT 1: ....
EDIT 2: Das Problem aus Edit 1 ist gelöst und gelöscht weil es mir peinlich ist Smile

Vielen Dank für eure Hilfe im Vorraus erstmal.

Mit freundlichen Grüßen

imix



userimix_negativerLagerbestand.zip
 Beschreibung:

Download
 Dateiname:  userimix_negativerLagerbestand.zip
 Dateigröße:  245 KB
 Heruntergeladen:  3 mal

imix
Im Profil kannst Du frei den Rang ändern


Verfasst am:
30. Apr 2014, 14:11
Rufname:

AW: negative Lagerbestände verhindern - AW: negative Lagerbestände verhindern

Nach oben
       Version: Office 2007

Hey Leute,
ich darf mit Stolz verkünden, dass meine VBA Fertigkeiten in den letzten Tagen so weit gestiegen sind, dass ich das Problem nun lösen konnte. Ich bedanke mich dennoch sehr für Eure Mühen.

Es läuft nun über den Dlookup - Befehl jedoch ohne Kriterien, da die gewünschten Kriterien derweil schon in der Entwurfsansicht der Abfrage stehen.
Mag vielleicht nicht die eleganteste Lösung sein, aber immerhin funktioniert das so Smile

Hier der Kerncode: (Die MsgBox - Befehle sind der annonymisierung wegen abgeändert.)
Code:

Dim abfneg As Integer
abfneg = Nz(DLookup("Menge", "abfLagerbestand"), 0)

If abfneg + [Forms]![fmlZuAbgang]![intZuAbgang] < 0 Then
MsgBox ("Fehler! ... etc.")
else
DoCmd.Save
MsgBox ("Eintrag gespeichert!")
End If


Mein Code ist in Wirklichkeit noch größer, aber enthält nur noch Dinge zur Formatierung und Eingabe in das Formular und nicht relevant für jemanden der das selbe Problem googelt. Smile

Mit freundlichen Grüßen

Imix
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Eingabe von bestimmten Zeichen in Feld verhindern 3 Imperate 98 13. Jan 2014, 21:26
Imperate Eingabe von bestimmten Zeichen in Feld verhindern
Keine neuen Beiträge Access Tabellen & Abfragen: Parameterwert Anzeige verhindern 7 hady79 189 21. Aug 2012, 11:50
hady79 Parameterwert Anzeige verhindern
Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten. Access Tabellen & Abfragen: negative Zeiten errechnen 1 aa 395 04. Okt 2011, 13:33
KlausMz negative Zeiten errechnen
Keine neuen Beiträge Access Tabellen & Abfragen: Duplikate verhindern in concat-Textfeld 2 MeKi77 189 05. Jul 2011, 10:58
MeKi77 Duplikate verhindern in concat-Textfeld
Keine neuen Beiträge Access Tabellen & Abfragen: Meldung verhindern: Die Zeilenanzahl-Eigenschaft muss einen. 0 cvbcologne 597 17. Feb 2011, 10:30
cvbcologne Meldung verhindern: Die Zeilenanzahl-Eigenschaft muss einen.
Keine neuen Beiträge Access Tabellen & Abfragen: Runden von nachkommastelle verhindern ! 14 adamth 2225 15. Sep 2009, 14:28
jens05 Runden von nachkommastelle verhindern !
Keine neuen Beiträge Access Tabellen & Abfragen: Duplikate auf Tabellenebene verhindern 7 Thomas2007 703 25. Jul 2009, 12:03
Crimson Duplikate auf Tabellenebene verhindern
Keine neuen Beiträge Access Tabellen & Abfragen: AutoWert in Access springt auf negative Werte 4 Hautstaender71 1407 02. März 2009, 21:49
Hautstaender71 AutoWert in Access springt auf negative Werte
Keine neuen Beiträge Access Tabellen & Abfragen: Negative zahlen aus Tabelle entfernen 13 eiskalterengel 293 12. Dez 2008, 09:12
eiskalterengel Negative zahlen aus Tabelle entfernen
Keine neuen Beiträge Access Formulare: verhindern dass bei formular schließen datensatz angefügt... 2 peterW_ 792 30. Aug 2007, 10:33
PeterW verhindern dass bei formular schließen datensatz angefügt...
Keine neuen Beiträge Access Formulare: im formular das anlegen von neuen datensätzen verhindern 2 alik 794 08. Aug 2007, 20:55
alik im formular das anlegen von neuen datensätzen verhindern
Keine neuen Beiträge Access Tabellen & Abfragen: Artikel reservieren und Doppelverkäufe verhindern - how to? 3 Fräulein_Schönfeld 1413 27. Jul 2007, 01:45
Willi Wipp Artikel reservieren und Doppelverkäufe verhindern - how to?
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Excel Tipps