Getränkeverwaltung mit Access

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Klaus Giesen Wuppertal

Jeder Mensch muss regelmäßig Flüssigkeit zu sich nehmen. Ist das nicht gewährleistet, nehmen sein Wohlbefinden und damit auch seine Arbeitsleistung deutlich ab. Je nach Größe eines Unternehmens stehen den Mitarbeitern unterschiedliche Getränkequellen zur Verfügung. In vielen Fällen handelt es sich dabei um eine selbst organisierte Getränkeausgabe, bei der Getränke von Mitarbeitern eingekauft und an Kollegen verkauft werden. Die Frage, wer nun wie viele Getränke welcher Sorte getrunken und damit auch zu bezahlen hat, ist rein organisatorischer Natur – und sicher ein Fall für eine Access-Musterlösung, wie der vorliegende Beitrag zeigen wird.

Die im Rahmen des vorliegenden Beitrags vorgestellte Musterlösung dient der Verwaltung von beliebig vielen Getränkesorten.

Die Hauptproblematik liegt darin, den Bestand auf knapp werdende Getränke zu überwachen, um rechtzeitig aufzufüllen.

Die meisten Getränke können eins zu eins weitergegeben werden – z. B. in Flaschen- oder Dosenform. Hier ist die überwachung kein Problem.

Andere Getränke wie z. B. Kaffee oder Tee müssen erst zubereitet und in Portionen ausgegeben werden. Zusätzlich variiert die Anzahl der Portionen je Packungseinheit, was die Kalkulation erschwert – z. B. durch eine sich ändernde Menge Kaffeepulver je Tasse.

Erfassung ausgegebener Getränke

Alle ausgegebenen Getränke werden unter Angabe von Empfänger, Anzahl und Preis in der Datenbank gespeichert. Das geschieht in einem übersichtlichen Formular inklusive Berechnung des aktuell offenen Betrages.

Rechnungsstellung

Die Rechnungsstellung kann zu jeder Zeit für beliebige Mitarbeiter erfolgen.

In Rechnung gestellte Getränke werden entsprechend markiert und nicht mehr angezeigt.

Da eine solche Getränkeausgabe in der Regel in überschaubarem Rahmen unter Kollegen erfolgt, wird von der sofortigen Bezahlung offener Rechnungen ausgegangen.

Dementsprechend beinhaltet die Anwendung keine Funktionalität zur Verbuchung von Zahlungseingängen usw.

Ergänzung der Getränkevorräte

Um der Problematik des variierenden Kaffeeverbrauchs gerecht zu werden, benötigt die Anwendung bei den entsprechenden Getränkesorten die Angabe eines Umrechnungsfaktors.

Dieser Faktor gibt an, wie viele Einheiten man je Bestandseinheit des Ausgangsprodukts erhält.

Kaffee

Da Kaffee in unterschiedlichen Packungsgrößen erhältlich ist, setzt die Anwendung eine denkbar kleine Bestandseinheit an: ein Gramm. Als Umrechnungsfaktor verwendet die Anwendung z. B. den Wert 0,1, was bedeutet: aus einem Gramm Kaffeepulver wird 1/10 Tasse Kaffee – also werden 10g je Tasse benötigt.

Bild 1: Die Tabelle tblPersonal in der Entwurfsansicht

Andere Getränke

Getränke wie Cola, Fanta, Mineralwasser usw. haben fest definierte Bestandseinheiten, die genau einer ausgegebenen Einheit entsprechen: eine Flasche, eine Dose usw.

Bestandsüberwachung

Damit ist die Problematik der Bestandsüberwachung geklärt. Mit festen Umrechnungsfaktoren zwischen gekauften Einheiten und ausgegebenen Portionen kann aufgrund der als verkauft gebuchten Getränke relativ zuverlässig auf notwendige Bestandsergänzungen aufmerksam gemacht werden. Dazu ist lediglich noch die Angabe von Grenzwerten für die einzelnen Getränke nötig.

Damit ist die regelmäßige Versorgung der Mitarbeiter mit Getränken gesichert. Wie wichtig das ist, erfahren Sie spätestens, wenn Sie einen Programmierer einen Tag auf Kaffeeentzug setzen …

Voreinstellungen

Als Grundlage für Berechnungen benötigt die Datenbank bestimmte Voreinstellungen, die zudem flexibel sein sollen. Dabei geht es um folgende Angaben:

  • Anzahl der Tassen pro Gramm Kaffee
  • Eingabe der Grenzwerte für die Hinweismeldung, dass eine Bestandsergänzung notwendig ist.
  • Hinweis

    Sie finden die Beispieldatenbanken zu dieser Musterlösung auf der Heft-CD für Access 97 (Getränke97.mdb) und Access 2000 (Getränke2000.mdb).

    Das Datenmodell der Musterlösung besteht aus den vier Tabellen tblPersonal, tblGetraenkeVerbrauch, tblGetraenkeTyp und tblBestandsErgaenzung. In den folgenden Abschnitten lernen Sie die Tabellen kennen und erhalten Erläuterungen und Hinweise zu wichtigen Besonderheiten.

    Die Tabelle tblPersonal

    Die Tabelle tblPersonal enthält die Stammdaten der Mitarbeiter mit Kontaktinformationen (siehe Bild 1).

    Die TabelletblGetraenkeVerbrauch

    Die Tabelle tblGetraenkeVerbrauch (siehe Bild 2) dient zur Erfassung der ausgegebenen Getränke und einiger Zusatzinformationen wie Empfänger, Anzahl und Datum.

    Die Felder TypID und PersonalID dienen als Verknüpfungsfelder zu den Tabellen tblGetraenketyp und tblPersonal.

    Zur Vereinfachung der späteren Eingabe der entsprechenden Informationen werden beide Felder als Kombinationsfelder ausgeführt.

    Nehmen Sie die folgenden Einstellungen im Register Nachschlagen in den Feldeigenschaften des jeweiligen Feldes vor: Als Datensatzherkunft für das Feld TypID dient die Tabelle tblGetraenketyp. Stellen Sie außerdem die Eigenschaften Spaltenanzahl und Spaltenbreite auf die Werte 2 und 0cm;4cm ein, damit nur die zweite Spalte angezeigt wird.

    Bild 2: Die Tabelle tblGetraenkeVerbrauch in der Entwurfsansicht

    Bild 3: Die Tabelle tblGetraenkeTyp in der Entwurfsansicht

    Als Datenherkunft für das Feld PersonalID dient die Abfrage qryFullname:

    SELECT tblPersonal.PersonalID, [Nachname] & ", " & [Vorname] AS Fullname FROM tblPersonal;

    Die Eigenschaften Spaltenanzahl und Spaltenbreite erhalten die Werte 2 und 0cm;8cm.

    Durch diese änderungen stehen die beiden Felder bei der Verwendung in Formularen ohne weitere Maßnahmen direkt als Kombinationsfelder zur Verfügung.

    Neben diesen beiden Verknüpfungsfeldern sind noch Felder für das Datum der Ausgabe und die Menge der ausgegebenen Einheiten vorhanden.

    Das Feld Einheiten ermöglicht sowohl die Verbuchung von Getränken als auch die Berechnung der vom Käufer zu zahlenden Summe. Es besitzt den Standardwert 1, da immer mindestens ein Getränk ausgegeben wird.

    Das Feld Datum ist zur bequemen Eingabe mit der Funktion Datum() als Standardwert versehen. Diese Funktion trägt für jeden Datensatz das aktuelle Datum in das Feld Datum ein.

    Wichtig für die Funktionalität der Musterlösung ist noch das boolesche Feld Bezahlt, für das der Standardwert Nein eingestellt ist.

    Mit Hilfe des Feldes Bezahlt kann sichergestellt werden, dass verbrauchte Getränke nur einmal bezahlt werden.

    Beim Ausdruck der Rechnung wird dieses Feld für abgerechnete Getränke auf den Wert True bzw. Ja gesetzt.

    Die beiden Felder Einzelpreis und Umrechnungsfaktor haben eine besondere Bedeutung:

    Feldname

    Beschreibung

    TypPreis

    Der Verkaufspreis pro ausgegebener Einheit in Euro.

    TypMindestbestand

    Zahlenwert, der die Mindestvorratsmenge für einen Getränketyp festlegt.

    TypUmrechnungsfaktor

    Ermöglicht die Ermittlung von Einheiten (Portionen) bei Halbfertigartikeln wie beispielsweise Kaffee. Limonade dagegen ist ein Fertigartikel und deshalb ist hier der Umrechnungsfaktor gleich 1.

    Tab. 1: Felder der Tabelle tblGetraenkeTyp mit Erläuterungen

    Da sich während der Verwendung einer solchen Musterlösung durchaus Veränderungen bezüglich des Preises oder der Menge von ausgegebenen Portionen je Bestandseinheit ergeben können, müssen diese mit den ausgegebenen Getränken gespeichert werden. Anderenfalls können z. B. folgende Probleme auftreten:

  • Ein neuer Preis für ein Getränk wirkt sich auf bereits ausgegebene Getränke aus.
  • Durch eine änderung des Umrechnungsfaktors (z. B. durch die Anschaffung neuer Kaffeetassen mit anderer Füllmenge) ändert sich die verbrauchte Menge der Bestandseinheiten rückwirkend für alle ausgegebenen Getränke.
  • Die Tabelle tblGetraenkeTyp

    Bild 4: Die Tabelle tblBestandsErgänzung in der Entwurfsansicht

    Bild 5: Das Dialogfenster Beziehungen

    Die Tabelle tblGetraenkeTyp (siehe Bild 3) enthält die Stammdaten zu den einzelnen Getränketypen wie Kaffee, Limonade, Wasser usw.

    In Tab. 1 finden Sie eine nähere Beschreibung zu den wichtigsten Feldern der Tabelle tblGetraenkeTyp.

    Die TabelletblBestandsergaenzung

    Die Tabelle tblBestandsergaenzung speichert die zugekauften Getränke (siehe Bild 4). Sie ist also quasi die Warenannahme und stellt somit das Gegenstück zur Tabelle tblGetraenkeverbrauch dar.

    Die Beziehungen zwischen denTabellen

    Nach der Erstellung der Tabellen legen Sie deren Beziehungen zueinander im Dialogfenster Beziehungen fest. Die Musterlösung enthält zwei 1:n-Beziehungen, bei denen sich die Tabelle tblGetraenkeVerbrauch jeweils auf der n-Seite der Beziehung befindet (siehe Bild 5).

    Legen Sie für beide Beziehungen referentielle Integrität fest. Aktivieren Sie auf keinen Fall die Löschweitergabe für eine der beiden Beziehungen. Anderenfalls führt das Löschen z. B. eines Datensatzes der Tabelle tblPersonal zum Entfernen der entsprechenden Datensätze der Tabelle tblGetraenkeVerbrauch – was zu einer Verfälschung der Bestandsermittlung führen würde.

    Die Getränkeverwaltung enthält insgesamt sechs Formulare, die Sie in den folgenden Abschnitten näher kennen lernen werden.

    Bild 6: Das Formular frmHauptmenue

    Das Hauptmenü

    Das Formular frmHauptmenue ist die Schaltzentrale der Anwendung. Sie hat fünf Schaltflächen, von denen vier dem Aufrufen der weiteren Formulare dienen und eines dem Beenden der Anwendung (siehe Bild 6).

    Wichtige Formulareigenschaften

    Damit das Hauptformular nur über die entsprechende Schaltfläche zu schließen ist, stellen Sie einige Eigenschaften gemäß Tab. 2 ein.

    Hinweis

    Die Einstellung der Eigenschaften Bildlaufleisten, Datensatzmarkierer, Navigationsschaltflächen und Trennlinien werden – wie bei allen Formularen mit statischem Inhalt – natürlich auf Nein gesetzt.

    Eigenschaft

    Einstellung

    Rahmenart

    Dialog

    Mit Systemfeldmenü

    Nein

    MinMax Schaltflächen

    Nein

    Schließen Schaltfläche

    Nein

    Tab. 2: Eigenschaftseinstellungen für das Formular frmHauptmenue

    Praxis-Tipp

    Trotz fehlender Schließen-Schaltfläche können Sie das Formular frmHauptmenue jederzeit mit der Tastenkombination Strg + F4 schließen.

    Das Formular frmPersonal

    Bild 7: Das Formular frmPersonal

    Das Formular frmPersonal (siehe Bild 7) enthält die Informationen zu den Mitarbeitern und ein Unterformular zur Anzeige der an den jeweiligen Mitarbeiter ausgegebenen und noch nicht abgerechneten Getränke. Es enthält außerdem ein Feld zur Anzeige des Gesamtpreises der im Unterformular angezeigten ausgegebenen Getränke.

    Der folgende Ausdruck verweist auf das entsprechende Feld des Unterformulars:

    =frmGetraenkeverbrauch_Sub.Formular!Gesamtsumme
    Private Sub Form_Current()
        Forms!frmPersonal!btnDruck.Enabled = _        IIf(Me.RecordsetClone.RecordCount > 0, _        True, False)
    End Sub

    Quellcode 3

    Im Formularfuß befinden sich zwei Schaltflächen. Die Schaltfläche btnClose schließt das Formular frmPersonal und macht das Formular frmHauptmenue wieder sichtbar. Die dafür verantwortliche Ereignisprozedur finden Sie in Quellcode 1.

    Das Schließen des Formulars löst die Prozedur aus Quellcode 2 aus, die wiederum das Formular frmHauptmenue wieder sichtbar macht.

    Die Schaltfläche btnDruck: Aktiv oder nicht

    Das Ausdrucken einer Rechnung soll nur möglich sein, wenn das Unterformular frmGetraenkeverbrauch_Sub nicht leer ist. Daher soll die Schaltfläche zum Starten des Druckvorgangs deaktiviert sein, wenn die Anzahl der Datensätze des Unterformulars 0 ist.

    Die überprüfung der Datensatzanzahl muss immer durchgeführt werden, wenn im Hauptformular ein anderer Mitarbeiter ausgewählt wird oder wenn im Unterformular eine Aktion durchgeführt wird, die zur änderung des Status der Schaltfläche führen soll – also wenn die Anzahl der Datensätze 0 wird oder sich von 0 auf einen anderen Wert ändert.

    Die Prozedur, die beim Eintreten des Ereignisses Beim Anzeigen des Unterformulars ausgelöst wird, deckt beide Fälle ab.

    Private Sub btnClose_Click()
        On Error Resume Next
        DoCmd.Close acForm, Me.Name
    End Sub

    Quellcode 1

    Private Sub Form_Close()
      Forms!frmHauptmenue.Visible = True
    End Sub

    Quellcode 2

    Sie tritt sowohl bei einem Wechsel des Datensatzes im Hauptformular als auch bei allen änderungen der Datensatzanzahl im Unterformular in Aktion (s. Quellcode 3).

    Die einzige Anweisung der Prozedur verwendet die IIf-Funktion, um abhängig von der Datensatzanzahl die Eigenschaft Aktiviert der Schaltfläche einzustellen.

    Der erste Teil der Funktion ermittelt die Anzahl der Datensätze und prüft, ob diese größer als 0 ist. Ist der Ausdruck im ersten Teil wahr, gibt die Funktion den Ausdruck des zweiten Teils zurück, ansonsten den des dritten Teils.

    Start des Ausdrucks einer Rechnung

    Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

    Testzugang

    eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

    diesen und alle anderen Artikel mit dem Jahresabo

    Schreibe einen Kommentar