"einfache" Lagerdatenbank

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

imnamendesherrn
Beiträge: 9
Registriert: Do, 26.04.2012 15:31

"einfache" Lagerdatenbank

Beitrag von imnamendesherrn »

Hallo,

ich bin schon eine ganze Zeit im Netz unterwegs und versuche ein einfaches Warenwirtschaftsprogramm "zu stricken".

Meine Erfahrungen mit Access sind schon ein wenig eingestaubt. Mit Excel kenne ich mich ziemlich gut aus. Ich habe einige Erfahrungen mit VBA und einfachen Makros.

Folgendes habe ich geplant:

Ich möchte gerne für unser Lager ein besseren Überblick schaffen. Das wichtigste ist mir die Bedienbarkeit. Ich weiß es gibt hunderttausend WaWis aber die sind mir alle viel zu komplex. Ich brauche keine Rechnungserstellung etc.

Der Lagerist soll zunächst ein Hauptmenu haben mit folgenden Auswahlmöglichkeiten:

Bestand
Zugang
Abgang
Verbauch

-> Auswahl Zugang

Hier soll eine Eingabemaske erscheinen mit folgenden Feldern:

zunächst wäre eine Suchfunktion für den Artikel hilfreich:
z.B. über Artikelnummer des Lieferanten oder eigene Artikelnummer oder über ein weiteres Auswahlverfahren z.B.

Dropdown
- Kategorie 1 (z.B. Auto, LKW oder Bus)
Dropdown
- Kategorie 2 (z.B. Reifen, Scheibe, Tür)
Dropdown
- Kategorie 3 (z.B. vorne, hinten, links, rechts)

wobei sich die Kategorien 2 und 3 natürlich anpassen soll, jenachdem was vorher ausgewählt wurde.

Dann wenn der Artikel erscheint sollen noch die Felder

Lieferant (Dropdown)
Menge (Stück, Kilo, Liter, Meter)
Preis
und ein Hinweisfeld (z.B. für Ergänzungen -> hier wenn besondere Boni etc. gewährt wurden) eingegeben werden.

Dann ein Button speichern und der Bestand soll entsprechend verändert werden.

-> Auswahl Abgang

Hier soll eine Eingabemaske erscheinen mit folgenden Feldern:

zunächst wäre eine Suchfunktion für den Artikel hilfreich:
z.B. über Artikelnummer des Lieferanten oder eigene Artikelnummer oder über ein weiteres Auswahlverfahren z.B.

Dropdown
- Kategorie 1 (z.B. Auto, LKW oder Bus)
Dropdown
- Kategorie 2 (z.B. Reifen, Scheibe, Tür)
Dropdown
- Kategorie 3 (z.B. vorne, hinten, links, rechts)

wobei sich die Kategorien 2 und 3 natürlich anpassen soll, jenachdem was vorher ausgewählt wurde.

Dann wenn der Artikel erscheint sollen noch die Felder

Verbraucher (Dropdown)
Menge (Stück, Kilo, Liter, Meter)
und ein Hinweisfeld (z.B. für Ergänzungen) ausgefüllt werden.

Dann ein Button speichern und der Bestand soll entsprechend verändert werden.

Wenn ich soweit erstmal wäre könnte ich mir sicher erstmal wieder nee ganze Zeit helfen.

Ich bin gerne bereit das fertige (oder teilfertige) Produkt hier zu teilen.

Vielen Dank für eure Bemühungen. Ich weiß es wirklich zu schätzen.
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: "einfache" Lagerdatenbank

Beitrag von RobertG »

Ich fange erst einmal mit einem kleinen Ansatz an: Schau Dir doch einmal die Beispieldatenbank zum Suchen und Filtern an:
Da ist etwas mit Listfeldern und Filterung und etwas mit Texteingabe und Suche dabei.

Gruß

Robert
imnamendesherrn
Beiträge: 9
Registriert: Do, 26.04.2012 15:31

Re: "einfache" Lagerdatenbank

Beitrag von imnamendesherrn »

Ok,

ich versuchs dann mal Schrittweise.

Ich habe meine Beispieldatenbank angefügt.

Mein Problem ist die Kategorisierung!

Ich habe dazu unterschiedliche Tabellen angelegt. Ich habe mich für diesen Weg entschieden, da ich das am übersichtlichsten finde und es später sehr viele Unterkategorien werden. Ist das falsch bzw. gibt es eine bessere Lösung?

Ich habe glaube ich habe das Thema Fremd ID verstanden - wenn auch noch nicht konsequent umgesetzt.

Was möchte ich gerne?

Im Formular "Neuer Artikel" möchte ich den neuen Artikel den Kategorien zu ordnen.

Wenn ich nun die Hauptkategorie ausgewählt habe möchte ich im neuen Listenfeld die nächsten passenden Unterkategorien angezeigt bekommen.

Ich habe auch was passendes gefunden: http://www.oooforum.de/viewtopic.php?f=8&t=52566 aber ich kann es in meiner Datenbank nicht umsetzen?

Ich bin über Unterstützung und Hilfe sehr glücklich.
Zuletzt geändert von imnamendesherrn am Mo, 07.05.2012 12:06, insgesamt 1-mal geändert.
imnamendesherrn
Beiträge: 9
Registriert: Do, 26.04.2012 15:31

Re: "einfache" Lagerdatenbank

Beitrag von imnamendesherrn »

So,

ich habe nun noch FK_ID zugeordnet und die Beziehungen erfasst.
Zuletzt geändert von imnamendesherrn am Mi, 09.05.2012 11:26, insgesamt 1-mal geändert.
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: "einfache" Lagerdatenbank

Beitrag von RobertG »

Du hast eine Tabelle "tblBestand". In dieser Tabelle speicherst Du zur Zeit als Text "Kategorie". Gleichzeitig definierst Du in separaten Tabellen jede Menge Kategorien, teilweise in abgestufter Form. Mindestens "Reifen", "Zubehör" und "Ersatzteile" müssen über einen Fremdschlüssel mit der Tabelle "tblBestand" verbunden werden. 'Mindestens' deshalb, weil über die Tabelle "Ersatzteile" (ich kürze einfach einmal die Namen) ja auf die anderen damit verbundenen Kategorien zurück geschlossen werden kann. Aber was machst Du, wenn keine Ersatzteile existieren? Dann fehlt dieser Strang oder Du brauchst auch ein Feld für die "Baugruppen".

Die Beziehung der Kategorien zueinander lässt sich mit einer Filtertabelle erstellen. Die enthält dann einen einfachen Primärschlüssel und für jede Kategorie-ID ein Feld. Mit Hilfe dieser Tabelle "Filter" erstellst Du dann Deine Listfelder:

Code: Alles auswählen

SELECT "KategorieName", "ID_Fahrzeuge" FROM "tblKategorienFahrzeuge" AS "tblKategorienFahrzeuge" WHERE "FK_ID_Haupt" = ( SELECT "Kat1" FROM "Filter" )
Mit so einer Abfrage ist z.B. das Listenfeld für die Fahrzeuge zu bestücken.
Du kannst die Listenfelder über Buttons aktualisieren lassen oder aber das Ganze per Makro laufen lassen (Formular abspeichern, Listfelder aktualisieren, Formular neu laden ...). Aber solange nicht klar ist, was in der "tblBestand" letztlich abgespeichert wird, hat hier eine genauere Ausführung keinen Sinn.

Gruß

Robert
imnamendesherrn
Beiträge: 9
Registriert: Do, 26.04.2012 15:31

Re: "einfache" Lagerdatenbank

Beitrag von imnamendesherrn »

Hallo Robert,

vielen Dank für deine Antwort.

Zunächst kurz zur Erklärung:

In der Tabelle "tblBestand" war die Spalte "Kategorie" zur Zeit nur als Platzhalter gedacht. Denn hier liegt ja nun mein Problem.

Vielleicht denke ich hier ja auch zu kompliziert und es gibt eine ganz andere oder/und einfachere Lösung.

Ich möchte gerne, dass im Formular neuer Artikel der neue Artikel einer Kategorie zu geordnet wird (ist ja klar)
Die Aufschlüsselung ist ja aus der Beispieldatenbank bekannt.

Ich stelle mir das so vor (keine Ahnung ob das richtig ist)

Kombinationsfeld Hauptkategorie - Kombinationsfeld deshalb falls nochmal eine neue dazu kommt)
Kombinationsfeld Unterkategorie 1 (Inhalt je nach Auswahl der Hauptkategorie)
Kombinationsfeld Unterkategorie 2 (Inhalt je nach Auswahl der Unterkategorie 1)
usw. (Ich kann noch nicht genau sagen wieviele es werden)

Sicherlich müssen ich dann in der Tabelle "tblBestand" auch noch die Spalten Unterkategorien 1 - n eingepflegt werden. Oder die Listfelder zusammen ergeben einen Schlüssel der dann in der Spalte Kategorie abgelegt wird.

Ich dachte ich mache zu jeder Unterkategorie eine einzelne Tabelle und verknüpfe die dann. Ist das Falsch? Sollte alles in eine Tabelle?

Oder gibt es ein Listfeld in dem ich den ganzen Kategoriebaum abbilden kann?

Fragen über Fragen!

Ich finde leider auch keine Beispieldatenbank aus der ich das abschauen kann.

Gruß und schon mal vielen Dank für Antworten
imnamendesherrn
Beiträge: 9
Registriert: Do, 26.04.2012 15:31

Re: "einfache" Lagerdatenbank

Beitrag von imnamendesherrn »

So ich habe mein Problem gelöst.

Dank http://www.oooforum.de/viewtopic.php?f= ... 4f#p196750

bin ich nun weiter. Ich hatte vorher eine alte OOO Version installiert. Mit der ganz neuen funktioniert alles bestens.

Nun stehe ich vor einer weiteren Herausforderung:

Ich habe jeweils eine Tabelle Bestand (Anfangsbestand), Zugang (über ein Formular werden viele neue Datensätze hinzugefügt) und Verbrauch.
Alle haben eine Spalte mit einer ArtikelID

Wie kann ich nun in einer Abfrage den aktuellen Bestand anzeigen lassen.

Danke!
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: "einfache" Lagerdatenbank

Beitrag von RobertG »

Du hast doch die ArtikelID als einheitliche Kennung. Dann kannst Du doch aus jeder Tabelle gruppiert nach der ArtikelID die Summe anzeigen lassen.
So nach der Art

Code: Alles auswählen

SELECT SUM("Anzahl") FROM "Verbrauch" GROUP BY "ArtikelID"
Dies kannst Du zusammen in einer Abfrage kombinieren, indem Du eine karrelierende Unterabfrage nutzt:

Code: Alles auswählen

SELECT DISTINCT "ArtikelID",  (SELECT SUM("Anzahl") FROM "Bestand" WHERE "ArtikelID" = "a"."ArtikelID") AS "Erst_Bestandssumme",  (SELECT SUM("Anzahl") FROM "Zugang" WHERE "ArtikelID" = "a"."ArtikelID") AS "Zugangssumme" ,  (SELECT SUM("Anzahl") FROM "Verbrauch" WHERE "ArtikelID" = "a"."ArtikelID") AS "Verbrauchssumme" FROM "Bestand" AS "a"
Schließlich geht auch noch der Rest innerhalb dieser Abfrage. Übersichtlicher wird es aber, wenn Du daraus eine Ansicht machst und dann mit

Code: Alles auswählen

SELECT "ArtikelID", ("Erst_Bestandssumme" + "Zugang" - "Verbrauch") AS "Restbestand" FROM "Ansicht"
Dir den jeweiligen Artikelbestand anzeigen lässt.

Gruß

Robert
imnamendesherrn
Beiträge: 9
Registriert: Do, 26.04.2012 15:31

Re: "einfache" Lagerdatenbank

Beitrag von imnamendesherrn »

Hallo Robert,

vielen Dank für deine Ausführungen, die ich super umsetzen konnte. Nun habe ich auch verstanden wie die Abfragen funktionieren und was das mit dem SQL-Code aufsich hat, bzw. wo ich den eintragen muss.

Mühsam ernährt sich das Eichhörnchen ;-)

Nun ist mir aber aufgefallen, dass mir nur die Bestände in der Abfrage angezeigt werden wo die Artikelnummer jeweils in allen drei Abfragetabellen (Bestand, Verbrauch, Zugang) vorhanden ist. Es kann natürlich sein, dass es einen Anfangsbestand gibt, aber lange Zeit keine Bestandsveränderung.

Natürlich möchte ich auch diese Bestände mit angezeigt bekommen.

Hast du eine Lösung?

Nochmals vielen Dank bis hierhin.

Gruß
Timo
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: "einfache" Lagerdatenbank

Beitrag von RobertG »

Hallo Timo,

ich nehme einmal den Code, aus dem die Ansicht besteht und stelle da etwas um:

Code: Alles auswählen

SELECT DISTINCT "ArtikelID",  IFNULL((SELECT SUM("Anzahl") FROM "Bestand" WHERE "ArtikelID" = "a"."ArtikelID"),0) AS "Erst_Bestandssumme",  IFNULL((SELECT SUM("Anzahl") FROM "Zugang" WHERE "ArtikelID" = "a"."ArtikelID"),0) AS "Zugangssumme" ,  IFNULL((SELECT SUM("Anzahl") FROM "Verbrauch" WHERE "ArtikelID" = "a"."ArtikelID"),0) AS "Verbrauchssumme" FROM "Bestand" AS "a"
Für viele Leute, die vorher mit Tabellenkalkulationen gearbeitet haben, ist es selbstverständlich, dass ein leeres Feld einfach als 0 angesehen wird. Datenbanken sind da etwas präziser. Kombiniere ich etwas mit einem leeren Feld, so wird daraus - nichts. Das Feld bleibt einfach leer. Ein leeres Feld wird als NULL deklariert.
Mit der Funktion IFNULL('Ausdruck, der erscheinen soll - wenn der NULL ist erscheint der andere', 0) weise ich so dem leeren Feld die Zahl 0 zu. Wenn Du also keinen Verbrauch hast, dann wird der als 0 ausgegeben.

Gruß

Robert
imnamendesherrn
Beiträge: 9
Registriert: Do, 26.04.2012 15:31

Re: "einfache" Lagerdatenbank

Beitrag von imnamendesherrn »

Hallo Robert,

vielen Dank für den Code. Es klappt alles wie ich es mir vorstelle.

Anbei die aktuelle Beispieldatenbank.

Nun habe ich aber immer noch das Problem mit den ComboBoxen.

Ich habe das Beispiel Listboxen.odb ja erfolgreich bei einer vorherigen Version eingebaut, aber folgendes gefällt mir nicht.

Ich möchte keine Listboxen sondern Comboboxen verwenden, damit der User so auch neue Kategorien anlegen kann. Außerdem gibt es das Problem, dass trotz des Codes SELECT DISTINCT Kategorien doppelt angezeigt werden, da in den anderen Spalten unterschiedliche Werte stehen.

Also nochmal kurz:

Kombinationsfeld 1 soll Kombinationsfeld 2 beeinflussen. Jede Kategorie soll nur einmal angezeigt werden. Wenn gewünschte Unterkategorie nicht vorhanden - dann manuelle Eingabe und Speicherung in Tabelle. Kombinationsfeld 2 beeinflußt dann Kombinationsfeld 3 usw.

Übrigens das Makro in der Beispieldatenbank bezieht sich NUR auf das Formular "Neuer Artikel" und dort auf die Kombinationsfelder Hauptkategorie und Unterkategorie 1.

Ich habe mir schon echt viele Gedanken gemacht und getestet. Eventuell muss ich ja doch wieder für jeder Unterkategorie einzelne Tabellen machen?

Wer kann helfen?
imnamendesherrn
Beiträge: 9
Registriert: Do, 26.04.2012 15:31

Re: "einfache" Lagerdatenbank

Beitrag von imnamendesherrn »

Sorry musste erst einen Anhang hier löschen.
Dateianhänge
Lagerverwaltung.zip
(44.51 KiB) 470-mal heruntergeladen
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: "einfache" Lagerdatenbank

Beitrag von RobertG »

Ich nehme erst einmal einen Teil Deiner Mail um etwas zu klären:
imnamendesherrn hat geschrieben: Ich möchte keine Listboxen sondern Comboboxen verwenden, damit der User so auch neue Kategorien anlegen kann.
Ich habe dazu Makroprozeduren geschrieben, die mit Comboboxen und versteckten Feldern Listboxen ersetzen. Dann kann ich eingeben, es wird eine Abfrage durchgeführt, das entsprechende Schlüsselfeld entweder herausgelesen oder durch Neueintrag erst erstellt und dann in die versteckten Felder eingetragen. Beim Start wird aus dem versteckten Feld der Wert gelesen und danach die Combobox eingestellt.

Damit erreiche ich, dass eben nicht an verschiedenen Stellen der gleiche Text verwaltet werden muss, sondern nur die Fremdschlüssel eingetragen werden.

Da ich das Ganze auch für Listfelder mit zwei angezeigten Einträgen (z.B. Nachname, Vorname) erstellt habe ist es etwas umfangreich, also nicht hier einfach als Code einzublenden. Ich habe das hier in einer Beispieldatenbank integriert: http://robert.familiegrosskopf.de/downl ... Makros.odb

Die von Dir angefügte Datenbank kann ich mir heute mangels weiterer Zeit nicht ansehen.

Gruß

Robert
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: "einfache" Lagerdatenbank

Beitrag von RobertG »

Ich habe mir einmal den Code angesehen und etwas geändert. Wie es kommt, dass Du damit überhaupt sicher auf das Formular zugreifen konntest kann ich nicht sagen.

Code: Alles auswählen

Sub S_FillCombobox5
dim ssql as string
oform = Thiscomponent.drawpage.forms.getByname("MainForm")
oKombinationsfeld4 = oform.getByName("Kombinationsfeld4")
s_selection = oKombinationsfeld4.CurrentValue'Ausgewählten Wert aus Listbox 1 auslesen
oKombinationsfeld5 = oform.getByName("Kombinationsfeld5")
ssql= "SELECT DISTINCT ""Unterkategorie 1"" FROM ""tblArtikel"" Where ""Hauptkategorie"" ='"+s_selection+"'"
oKombinationsfeld5.ListSource=ssql
oKombinationsfeld5.refresh()
End Sub
Ich habe also zum einen das Array rausgenommen. Wozu ein Array, wenn sowieso nur ein String weitergegeben wird.
Dann habe ich ListSourceType rausgenommen, weil Du den ja schon festgelegt hattest. Du hattest Da eine Zahl '3' stehen. Zumindest bei Formularen ist hier die '2' der Typ 'SQL'. Aber auch damit gab es Probleme.
Du solltest jetzt nur darauf achten, dass Du lediglich ein Formular mit dem Namen "MainForm" hast. Und vielleicht solltest Du auch die Variablen vorher definieren - sonst kommt bei entsprechender Grundeinstellung nur heraus, dass die Variable nicht definiert ist und der Code nicht ausgeführt wird.
Jedenfalls läuft Dein Ansinnen mit diesem Makro jetzt.

Gruß

Robert
imnamendesherrn
Beiträge: 9
Registriert: Do, 26.04.2012 15:31

Re: "einfache" Lagerdatenbank

Beitrag von imnamendesherrn »

Hallo Robert,

vielen Dank für deinen Beitrag es klappt genau so wie ich es mir vorgestellt habe.

Trotz intensiver Suche und probieren bekomme ich aber folgendes Prob nicht gelöst:

Im Formular Verbrauch habe ich nun die Suchfunktion eingebaut. Das klappt auch alles.

Aber ich schaffe es nicht, dass der im Ergebnisformular ausgewählte Artikel auch angenommen wird.

Ich möchte das die Felder Artikelnummer, Bezeichnung und Einheit automatisch im Formualr gefüllt werden und bei der Speicherung des neuen Datensatzes übernommen werden.

Kannst du mir auch dabei helfen?

Danke
Timo
Dateianhänge
Lagerverwaltung.zip
(64.58 KiB) 475-mal heruntergeladen
Antworten