Multilager Bestandspflege
Liebes Team,
Ich habe eine Tabelle "Artikel" (mit Artikelnr, Artikelbezeichnung....) und eine Tabelle "Lager" (mit Lagerbezeichnung, Lagerort, Strasse).
In einer 3. Tabelle "Lagerbewegungen" möchte ich nun die Bestände (Anzahl Artikel pro Lager) schreiben. Dort eingebunden sind Verknüpfungen zu Tabelle "Lager" und Tabelle "Artikel".
Der Anwender wählt in einer Form, in welchem Lager er für welchen Artikel den Bestand (Anzahl der Artikel) ändern möchte.
Wenn nun in der Tabelle "Lagerbewegungen" bereits ein Datenpaar mit gleicher Angabe für das Feld Lagerbezeichnung und das Feld Artikelbezeichnung existiert, dann möchte ich dort das Feld "Bestand" aktualisieren. Wenn es noch nicht existiert, so möchte ich einen neuen Datensatz in die Tabelle Lagerbewegungen schreiben.
Wie kann ich per Select einen vorhandenen Datensatz mit "gleichem Artikel" und "gleichem Lager wie in der Form "Zu-oder Abgangsbuchung" gewählt" auswählen, in den ich den neuen Bestand eintrage ?
Wie kann ich ermitteln, wenn noch kein Datensatz mit "gleichem Artikel" und "gleichem Lager wie in der Form "Zu-oder Abgangsbuchung" gewählt gibt ?
Kann mir jemand helfen ?
Gruß Dirk
Hier meine ersten Ideen eines Codes im "Buchen"-Button einer Zu/Abgangs-Lagerbuchung
.
let jetztlager := Lagerorte.'Lager Bezeichnung'; (jetztlager ist das gewählte Lager in dem der Lagerbestand korrigiert werden soll)
let jetztartikel := '3_Artikel'.'Produkt Name'; (jetztartikel ist der gewählte Artikel dazu)
let Neuer Bestand := Wert des Eingabefeldes
select Lagerbewegungen where Artikelbez = jetztartikel und Lagerort = jetztlager;
????;
'Lagerbewegungen'.Bestand = NeuerBestand (...des gewählten Records)
oder Add neuen Datensatz "Lagerort"+"Artikel"+"Bestand"
so irgendwie stelle ich mir den Code im "Buchen" - Button einer Lager Zu/Abbuchungsform vor
PS Gibt es ausführliche Literatur mit Codebeispielen diverser allgemeiner Beispiele? Ich möchte das lernen !
Manual, Youtube Tutorials usw. geben nicht so viel her, im Manual sind sehr wenige Codebeispiele
13 Antworten
-
Hallo in die Runde,
leider hab ich bisher kein Feedback bekommen, ich sehe aber, dass die meisten anderen es bekommen haben und mein Anliegen auch bereits vielfach gelesen wurde.
Ich bin neu hier - sagt mir bitte - habe ich etwas falsch gemacht ? Verstoß gegen Forumsrichtlinien ? Oder hab ich es zu kompliziert dargestellt ?
Gruß Dirk
-
Hallo Dirk, nein, es liegt nicht an dir. Aber es ist halt viel Text zu lesen und zu interpretieren, und wenn man gerade wenig Zeit hat, nimmt man sich vor, später noch mal in Ruhe zu schauen, vergisst es dann jedoch, zumal der Beitrag durch andere Postings in der Liste nach hinten rutscht. Aus den Augen, aus dem Sinn ...
Das kann in einem Userforum schon mal passieren, ist aber wie gesagt nichts Persönliches. Auch jetzt habe ich keine spontane Lösung, diesen Thread aber gebookmarkt, so dass ich ihn nicht vergessen kann. Sollte sich also zwischenzeitlich niemand anders deiner Fragen angenommen haben, melde ich mich später, spätestens morgen, noch mal dazu.
-
Große Freude, danke Dir !
Wenn ich wenigstens wüßte, wie ich in einer Tabelle einen Datensatz auswählen kann, an dem ich 1 Feldinhalt ändern möchte, wär es schon ein Schritt weiter.
Was gibt eine Select - Anweidung zurück, wenn kein entsprechender Datensatz gefunden wurde ?
Gruß Dirk
-
Hallo Dirk, mir ist auch nach nun mehrfachem Lesen das Datenmodell nicht ganz klar. In der Tabelle "Lagerbewegungen" soll nicht jeder Zu- oder Abgang erfasst, sondern jeweils der aktuelle Bestand pro Lager und Artikel gespeichert werden? Das heißt, die Tabelle "Lagerbewegungen" besteht im Grunde nur aus den Verknüpfungen zu "Artikel" und "Lager" sowie einem numerischen Feld für den Bestand? Vereinfacht dargestellt, könnten die Tabellen demnach folgende Inhalte haben?
Tabelle Artikel:
1) 001 Hammer
2) 002 ZangeTabelle Lager:
1) Lager A
2) Lager B
3) Lager CTabelle Lagerbewegungen:
1) Lager A, 001 Hammer, 100
2) Lager B, 001 Hammer, 50
3) Lager B, 002 Zange, 80
4) Lager C, 002 Zange, 40Wenn die Tabelle "Lagerbewegungen" jeweils N:1 mit "Artikel" und "Lager" verknüpft ist, dann könnte man aus beiden letztgenannten Tabellen ja direkt auf die verknüpften "Lagerbewegungen" zugreifen und den Bestandswert dort ändern. Wozu also das Formular und der Button? Und wo genau soll dieser Button platziert werden?
Um aber wenigstens eine deiner Fragen konkret zu beantworten: Wenn beim "select" kein Datensatz der Bedingung entspricht, lautet der Rückgabewert 0.
-
Das Formular fragt ab, welcher Lagerzu- oder Abgang von welchem Artikel in welchem Lager erfolgt. Mit dem Button soll es dann vollzogen werden ( Datensatzeintrag).
Ansonsten hast Du es genau richtig wiedergegeben, was ich tun möchte. Danke schon mal vorab ! Gruß Dirk -
Wahrscheinlich bin ich schwer von Begriff, aber noch mal: Was genau soll nun erfasst werden? Der neue Bestand nach einem Zu-/Abgang oder die Menge des Zu-/Abgangs? Also: Wenn sich 100 Stück von Artikel "001 Hammer" in "Lager A" befinden und dort 20 Stück entnommen werden, soll dann 80 oder 20 eingetippt werden? Und wo soll das eingetippt werden, also in welchem Formular bzw. welcher Tabelle?
Und falls die Menge des Zu-/Abgangs erfasst werden soll, also 20, was passiert dann mit diesem Wert? Soll der nach dem Neuberechnen des Bestandes "vergessen" oder auch irgendwo gespeichert werden? In der Tabelle "Lagerbewegungen" ginge das ja nicht, weil die zwar so heißt, aber offenbar für jede Lager-Artikel-Kombination nur einen Datensatz mit dem jeweiligen Bestandswert vorsieht, der jeweils aktualisiert wird (also treffender "Lagerbestände" hieße).
-
Du bist nicht schwer von Begriff :) - ich erkläre offensichtlich schlecht ! Genau so wie Du schreibst ist es richtig. Und das da mal 20 eingegeben wurde, das schreib ich in eine Protokolldatei, da hab ich kein Programmierproblem. Aber irgendwo muß ja der User die 20 eingeben können (--> Form).
Stell Dir einfach vor, Du bist ein Lagerverwalter des Lagers A. Du bekommst 20 Stk. Ware XY in die Hand gedrückt und sollst es einlagern. Ab ins Regal damit und am Handy oder PC die 20 Stk. eintragen.
Du hattest noch 5 Stk Ware XY bereits im Regal, buchst also 20 zu deinem Lager dazu ( ohne nochmal im Regal nachzählen zu müssen, was da schon ist), dann sinds neu also 25. Das muß iirgendwo (in einer Form) am PC oder Handy vom User eingebbar sein und wird dann in der Datenbank gespeichert, damit jeder Mitarbeiter an seinem PC oder Handy sieht, aah - da sind im Lager A vom Artikel XY jetzt 25 Stk da. Aber es gibt halt mehrere Lager und mehrere Artikel.
Es könnten Lager zusätzlich "angemietet" werden und neue Artikel ins Sortiment aufgenommen werden.Also, der neue Bestand soll eingetragen werden. Das 20 Stk. irgendwo dazu gekommen sind, schreibe ich einfach mit Datum u. Login des Benutzer, Lagerort und Artikel in eine Protokolldatei, die einfach fortgeschrieben wird. Da hab ich kein Programmier-Problem --> einfach ne Tabelle und dann nen neuen Datensatz dazu, fertig.
Aber die Table Lagerbewegungen , die muß eindeutig sein, pro Artikel und Lagerort, und da steht drin was wovon wie oft in welchem Lager ist Der Name "Lagerbewegungen" ist vielleicht etwas ungeschickt. Nenne es "Lagerbestände".
Also nehmen wir Deine Tabellenbeispiele:
Tabelle Artikel:
1) 001 Hammer
2) 002 ZangeTabelle Lager:
1) Lager A
2) Lager B
3) Lager CTabelle Lagerbewegungen:
1) Lager A, 001 Hammer, 100
2) Lager B, 001 Hammer, 50
3) Lager B, 002 Zange, 80
4) Lager C, 002 Zange, 40Jetzt kommt meintswegen in Lager A ne Lieferung von 20 Stk 001 Hammer, dann muß die Tabelle Lagerbewegungen anschließend nach der Zubuchung durch den User so aussehen:
Tabelle Lagerbewegungen:
1) Lager A, 001 Hammer, 120
2) Lager B, 001 Hammer, 50
3) Lager B, 002 Zange, 80
4) Lager C, 002 Zange, 40Wären die aber im Lager B eingelagert worden, dann sähe die Tabelle so aus:
Tabelle Lagerbewegungen:
1) Lager A, 001 Hammer, 100
2) Lager B, 001 Hammer, 70
3) Lager B, 002 Zange, 80
4) Lager C, 002 Zange, 40und wenn 75 Stk. eines neuen Produkts dazu kommen (z.B. 003 Bohrer ) , die in Lager B reinkommen, dann sieht es so aus:
Tabelle Lagerbewegungen:
1) Lager A, 001 Hammer, 100
2) Lager B, 001 Hammer, 50
3) Lager B, 002 Zange, 80
4) Lager C, 002 Zange, 40
5) Lager B, 003 Bohrer, 75Vorher muß der Artikel natürlich in der Artikel-Table eingepflegt werden, sodass die so aussieht:
Tabelle Artikel:
1) 001 Hammer
2) 002 Zange
3) 003 BohrerWenn ich es weiterhin schleht erklärt habe, scheue Dich nicht zu fragen ! Ich bin froh, dass Du mir hilfst !
Gruß Dirk
-
Achso, und wenn der Rückgabewert 0 ist, dann ist in dem abgefragten Lager vom abgefragten Artikel bisher nichts eingelagert worden, also Bestand = 0
Ist der Rückgabewert nummerisch 0 oder NULL oder ein Leerstring '' ? -
Hallo Dirk, bei der Tabellenbezeichnung ging es mir nicht um Wortklauberei. Du darfst deine Tabellen und Felder selbstverständlich nennen, wie du willst. Aber missverständliche Bezeichnungen können halt die Kommunikation erschweren. Denn als "Lagerbewegungen" werden üblicherweise Zu- und Abgänge von Waren bezeichnet. Deshalb reite ich so penetrant darauf rum.
Unklar ist auch, welche Bedeutung die Felder "Lagerbezeichnung", "Lagerort" und "Strasse" haben. Sind innerhalb eines Lagers noch verschiedene Lagerplätze (Räume, Regale, Fächer ...) zu berücksichtigen? Oder sind das nur verschiedene Informationen zu ein und demselben Lager?
Um nun aber nicht endlos weiter spekulieren und im Trüben fischen zu müssen, habe ich einfach mal eine DB mit einer simplen Lagerverwaltung nach obigen Vorgaben erstellt. Die Tabelle "Lagerbewegungen" habe ich aus o. g. Gründen allerdings in "Lagerbestände" umbenannt und den Namen "Lagerbewegungen" für eine neue Tabelle mit dem Formular zum Erfassen der Zu-/Abgänge benutzt. Dieses Formular kann sowohl aus dem Artikel- wie auch dem Lager-Datensatz aufgerufen werden. Die Zu-/Abgänge werden dabei wie gewünscht nicht gespeichert (obwohl sich das m. E. anbieten würde). Vielleicht hilft dir das weiter:
https://www.dropbox.com/s/84lmez30946hoem/Dirk_Lagerbewegung.ninox?dl=0
PS: Beim select-Rückgabewert hatte ich mich übrigens vertan: Die Ziffer "0" gilt nur beim Entfernen einer Verknüpfung, der Rückgabewert beim "select" ist ggf. "null". Das ist leider sehr unsystematisch.
-
Erst mal vielen Dank für diesen VOLLTREFFER ! Das funktioniert super. Jetzt muss ich es noch dezailliert auf die Bedürfnisse anpassen, das krieg ich vernutlich selbst hin.
Falls ich da noch Probleme krieg, melde ich mich nochmal.
Die Lagerbezeichnung ist eine Kurzbezeichnung, dann brauchts auf dem Handy nicht soviel Platz, und ist im firmeninternen Chargon ausreichend.
Ort und Strasse sind Felder, die für die weitere Nutzung der App nützlich werden. Nämlich wenn dann noch möglich wird, beim Lieferanten zu bestellen, dann braucht der Lieferant die Lieferadresse.Natürlich möchte ich Zu/Abgänge als Historie speichern, aber ich wollte Dir nicht zuviel Arbeit machen, denn das kriege ich (hoffentlich) selbst hin, sonst komm ich nochmal auf Dich zu.Was bin ich Dir schuldig ?
Gruß Dirk
-
Hör nicht auf Populisten, Extremisten und Verschwörungstheoretiker. Das wäre mir Lohn genug. ;)
-
Das wird befolgt ! Danke Dir ! Gruß Dirk
-
Hallo Copytester, ich würde mich über eine Mail von Dir freuen. Oder möchtest Du anonym bleiben ?
Gruß Dirk
Content aside
- vor 3 JahrenZuletzt aktiv
- 13Antworten
- 1048Ansichten