{"id":55000106,"date":"2003-04-01T00:00:00","date_gmt":"2020-05-06T15:17:25","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=106"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Getraenkeverwaltung_mit_Access","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/","title":{"rendered":"Getr&auml;nkeverwaltung mit Access"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/7cf1c5f97ec3445b9b26a9abf058de0f\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Klaus Giesen Wuppertal<\/b><\/p>\n<p><b>Jeder Mensch muss regelm&auml;&szlig;ig Fl&uuml;ssigkeit zu sich nehmen. Ist das nicht gew&auml;hrleistet, nehmen sein Wohlbefinden und damit auch seine Arbeitsleistung deutlich ab. Je nach Gr&ouml;&szlig;e eines Unternehmens stehen den Mitarbeitern unterschiedliche Getr&auml;nkequellen zur Verf&uuml;gung. In vielen F&auml;llen handelt es sich dabei um eine selbst organisierte Getr&auml;nkeausgabe, bei der Getr&auml;nke von Mitarbeitern eingekauft und an Kollegen verkauft werden. Die Frage, wer nun wie viele Getr&auml;nke welcher Sorte getrunken und damit auch zu bezahlen hat, ist rein organisatorischer Natur &#8211; und sicher ein Fall f&uuml;r eine Access-Musterl&ouml;sung, wie der vorliegende Beitrag zeigen wird.<\/b><\/p>\n<p>Die im Rahmen des vorliegenden Beitrags vorgestellte Musterl&ouml;sung dient der Verwaltung von beliebig vielen Getr&auml;nkesorten.<\/p>\n<p>Die Hauptproblematik liegt darin, den Bestand auf knapp werdende Getr&auml;nke zu &uuml;berwachen, um rechtzeitig aufzuf&uuml;llen.<\/p>\n<p>Die meisten Getr&auml;nke k&ouml;nnen eins zu eins weitergegeben werden &#8211; z. B. in Flaschen- oder Dosenform. Hier ist die &uuml;berwachung kein Problem.<\/p>\n<p>Andere Getr&auml;nke wie z. B. Kaffee oder Tee m&uuml;ssen erst zubereitet und in Portionen ausgegeben werden. Zus&auml;tzlich variiert die Anzahl der Portionen je Packungseinheit, was die Kalkulation erschwert &#8211; z. B. durch eine sich &auml;ndernde Menge Kaffeepulver je Tasse.<\/p>\n<h2>Erfassung ausgegebener Getr&auml;nke<\/h2>\n<p>Alle ausgegebenen Getr&auml;nke werden unter Angabe von Empf&auml;nger, Anzahl und Preis in der Datenbank gespeichert. Das geschieht in einem &uuml;bersichtlichen Formular inklusive Berechnung des aktuell offenen Betrages.<\/p>\n<h2>Rechnungsstellung<\/h2>\n<p>Die Rechnungsstellung kann zu jeder Zeit f&uuml;r beliebige Mitarbeiter erfolgen.<\/p>\n<p>In Rechnung gestellte Getr&auml;nke werden entsprechend markiert und nicht mehr angezeigt.<\/p>\n<p>Da eine solche Getr&auml;nkeausgabe in der Regel in &uuml;berschaubarem Rahmen unter Kollegen erfolgt, wird von der sofortigen Bezahlung offener Rechnungen ausgegangen.<\/p>\n<p>Dementsprechend beinhaltet die Anwendung keine Funktionalit&auml;t zur Verbuchung von Zahlungseing&auml;ngen usw.<\/p>\n<h2>Erg&auml;nzung der Getr&auml;nkevorr&auml;te<\/h2>\n<p>Um der Problematik des variierenden Kaffeeverbrauchs gerecht zu werden, ben&ouml;tigt die Anwendung bei den entsprechenden Getr&auml;nkesorten die Angabe eines Umrechnungsfaktors.<\/p>\n<p>Dieser Faktor gibt an, wie viele Einheiten man je Bestandseinheit des Ausgangsprodukts erh&auml;lt.<\/p>\n<h3>Kaffee<\/h3>\n<p>Da Kaffee in unterschiedlichen Packungsgr&ouml;&szlig;en erh&auml;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 &#8211; also werden 10g je Tasse ben&ouml;tigt.<\/p>\n<p><IMG height=\"392\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic001.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1:  Die Tabelle tblPersonal in der Entwurfsansicht<\/span><\/b><\/p>\n<h3>Andere Getr&auml;nke<\/h3>\n<p>Getr&auml;nke wie Cola, Fanta, Mineralwasser usw. haben fest definierte Bestandseinheiten, die genau einer ausgegebenen Einheit entsprechen: eine Flasche, eine Dose usw. <\/p>\n<h2>Bestands&uuml;berwachung<\/h2>\n<p>Damit ist die Problematik der Bestands&uuml;berwachung gekl&auml;rt. Mit festen Umrechnungsfaktoren zwischen gekauften Einheiten und ausgegebenen Portionen kann aufgrund der als verkauft gebuchten Getr&auml;nke relativ zuverl&auml;ssig auf notwendige Bestandserg&auml;nzungen aufmerksam gemacht werden. Dazu ist lediglich noch die Angabe von Grenzwerten f&uuml;r die einzelnen Getr&auml;nke n&ouml;tig. <\/p>\n<p>Damit ist die regelm&auml;&szlig;ige Versorgung der Mitarbeiter mit Getr&auml;nken gesichert. Wie wichtig das ist, erfahren Sie sp&auml;testens, wenn Sie einen Programmierer einen Tag auf Kaffeeentzug setzen &#8230;<\/p>\n<h2>Voreinstellungen<\/h2>\n<p>Als Grundlage f&uuml;r Berechnungen ben&ouml;tigt die Datenbank bestimmte Voreinstellungen, die zudem flexibel sein sollen. Dabei geht es um folgende Angaben:<\/p>\n<li>Anzahl der Tassen pro Gramm Kaffee<\/li>\n<li>Eingabe der Grenzwerte f&uuml;r die Hinweismeldung, dass eine Bestandserg&auml;nzung notwendig ist.<\/li>\n<h3>Hinweis<\/h3>\n<p>Sie finden die Beispieldatenbanken zu dieser Musterl&ouml;sung auf der Heft-CD f&uuml;r Access 97 (Getr&auml;nke97.mdb) und Access 2000 (Getr&auml;nke2000.mdb). <\/p>\n<p>Das Datenmodell der Musterl&ouml;sung besteht aus den vier Tabellen tblPersonal, tblGetraenkeVerbrauch, tblGetraenkeTyp und tblBestandsErgaenzung. In den folgenden Abschnitten lernen Sie die Tabellen kennen und erhalten Erl&auml;uterungen und Hinweise zu wichtigen Besonderheiten.<\/p>\n<h3>Die Tabelle tblPersonal<\/h3>\n<p>Die Tabelle tblPersonal enth&auml;lt die Stammdaten der Mitarbeiter mit Kontaktinformationen (siehe Bild 1).<\/p>\n<h3>Die TabelletblGetraenkeVerbrauch<\/h3>\n<p>Die Tabelle tblGetraenkeVerbrauch (siehe Bild 2) dient zur Erfassung der ausgegebenen Getr&auml;nke und einiger Zusatzinformationen wie Empf&auml;nger, Anzahl und Datum.<\/p>\n<p>Die Felder TypID und PersonalID dienen als Verkn&uuml;pfungsfelder zu den Tabellen tblGetraenketyp und tblPersonal.<\/p>\n<p>Zur Vereinfachung der sp&auml;teren Eingabe der entsprechenden Informationen werden beide Felder als Kombinationsfelder ausgef&uuml;hrt.<\/p>\n<p>Nehmen Sie die folgenden Einstellungen im Register Nachschlagen in den Feldeigenschaften des jeweiligen Feldes vor: Als Datensatzherkunft f&uuml;r das Feld TypID dient die Tabelle tblGetraenketyp. Stellen Sie au&szlig;erdem die Eigenschaften Spaltenanzahl und Spaltenbreite auf die Werte 2 und 0cm;4cm ein, damit nur die zweite Spalte angezeigt wird.<\/p>\n<p><IMG height=\"318\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic002.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2:  Die Tabelle tblGetraenkeVerbrauch in der Entwurfsansicht<\/span><\/b><\/p>\n<p><IMG height=\"315\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic003.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3:  Die Tabelle tblGetraenkeTyp in der Entwurfsansicht<\/span><\/b><\/p>\n<p>Als Datenherkunft f&uuml;r das Feld PersonalID dient die Abfrage qryFullname:<\/p>\n<pre>SELECT tblPersonal.PersonalID, [Nachname] & \", \" & [Vorname] AS Fullname FROM tblPersonal;<\/pre>\n<p>Die Eigenschaften Spaltenanzahl und Spaltenbreite erhalten die Werte 2 und 0cm;8cm.<\/p>\n<p>Durch diese &auml;nderungen stehen die beiden Felder bei der Verwendung in Formularen ohne weitere Ma&szlig;nahmen direkt als Kombinationsfelder zur Verf&uuml;gung.<\/p>\n<p>Neben diesen beiden Verkn&uuml;pfungsfeldern sind noch Felder f&uuml;r das Datum der Ausgabe und die Menge der ausgegebenen Einheiten vorhanden.<\/p>\n<p>Das Feld Einheiten erm&ouml;glicht sowohl die Verbuchung von Getr&auml;nken als auch die Berechnung der vom K&auml;ufer zu zahlenden Summe. Es besitzt den Standardwert 1, da immer mindestens ein Getr&auml;nk ausgegeben wird.<\/p>\n<p>Das Feld Datum ist zur bequemen Eingabe mit der Funktion Datum() als Standardwert versehen. Diese Funktion tr&auml;gt f&uuml;r jeden Datensatz das aktuelle Datum in das Feld Datum ein.<\/p>\n<p>Wichtig f&uuml;r die Funktionalit&auml;t der Musterl&ouml;sung ist noch das boolesche Feld Bezahlt, f&uuml;r das der Standardwert Nein eingestellt ist.<\/p>\n<p>Mit Hilfe des Feldes Bezahlt kann sichergestellt werden, dass verbrauchte Getr&auml;nke nur einmal bezahlt werden.<\/p>\n<p>Beim Ausdruck der Rechnung wird dieses Feld f&uuml;r abgerechnete Getr&auml;nke auf den Wert True bzw. Ja gesetzt.<\/p>\n<p>Die beiden Felder Einzelpreis und Umrechnungsfaktor haben eine besondere Bedeutung: <\/p>\n<table border=1>\n<tr>\n<td>\n<p><b>Feldname<\/b><\/p>\n<\/td>\n<td>\n<p><b>Beschreibung<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>TypPreis<\/p>\n<\/td>\n<td>\n<p>Der Verkaufspreis pro ausgegebener Einheit in Euro.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>TypMindestbestand<\/p>\n<\/td>\n<td>\n<p>Zahlenwert, der die Mindestvorratsmenge f&uuml;r einen Getr&auml;nketyp festlegt.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>TypUmrechnungsfaktor<\/p>\n<\/td>\n<td>\n<p>Erm&ouml;glicht die Ermittlung von Einheiten (Portionen) bei Halbfertigartikeln wie beispielsweise Kaffee. Limonade dagegen ist ein Fertigartikel und deshalb ist hier der Umrechnungsfaktor gleich 1.<\/p>\n<\/td>\n<\/tr>\n<\/table>\n<p><b>Tab. 1: Felder der Tabelle tblGetraenkeTyp mit Erl&auml;uterungen<\/b><\/p>\n<p>Da sich w&auml;hrend der Verwendung einer solchen Musterl&ouml;sung durchaus Ver&auml;nderungen bez&uuml;glich des Preises oder der Menge von ausgegebenen Portionen je Bestandseinheit ergeben k&ouml;nnen, m&uuml;ssen diese mit den ausgegebenen Getr&auml;nken gespeichert werden. Anderenfalls k&ouml;nnen z. B. folgende Probleme auftreten:<\/p>\n<li>Ein neuer Preis f&uuml;r ein Getr&auml;nk wirkt sich auf bereits ausgegebene Getr&auml;nke aus.<\/li>\n<li>Durch eine &auml;nderung des Umrechnungsfaktors (z. B. durch die Anschaffung neuer Kaffeetassen mit anderer F&uuml;llmenge) &auml;ndert sich die verbrauchte Menge der Bestandseinheiten r&uuml;ckwirkend f&uuml;r alle ausgegebenen Getr&auml;nke.<\/li>\n<h3>Die Tabelle tblGetraenkeTyp<\/h3>\n<p><IMG height=\"367\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic004.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4:  Die Tabelle tblBestandsErg&auml;nzung in der Entwurfsansicht<\/span><\/b><\/p>\n<p><IMG height=\"305\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic005.png\" width=\"493\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5:  Das Dialogfenster Beziehungen<\/span><\/b><\/p>\n<p>Die Tabelle tblGetraenkeTyp (siehe Bild 3) enth&auml;lt die Stammdaten zu den einzelnen Getr&auml;nketypen wie Kaffee, Limonade, Wasser usw.<\/p>\n<p>In Tab. 1 finden Sie eine n&auml;here Beschreibung zu den wichtigsten Feldern der Tabelle tblGetraenkeTyp.<\/p>\n<h3>Die TabelletblBestandsergaenzung<\/h3>\n<p>Die Tabelle tblBestandsergaenzung speichert die zugekauften Getr&auml;nke (siehe Bild 4). Sie ist also quasi die Warenannahme und stellt somit das Gegenst&uuml;ck zur Tabelle tblGetraenkeverbrauch dar.<\/p>\n<h2>Die Beziehungen zwischen denTabellen<\/h2>\n<p>Nach der Erstellung der Tabellen legen Sie deren Beziehungen zueinander im Dialogfenster Beziehungen fest. Die Musterl&ouml;sung enth&auml;lt zwei 1:n-Beziehungen, bei denen sich die Tabelle tblGetraenkeVerbrauch jeweils auf der n-Seite der Beziehung befindet (siehe Bild 5).<\/p>\n<p>Legen Sie f&uuml;r beide Beziehungen referentielle Integrit&auml;t fest. Aktivieren Sie auf keinen Fall die L&ouml;schweitergabe f&uuml;r eine der beiden Beziehungen. Anderenfalls f&uuml;hrt das L&ouml;schen z. B. eines Datensatzes der Tabelle tblPersonal zum Entfernen der entsprechenden Datens&auml;tze der Tabelle tblGetraenkeVerbrauch &#8211; was zu einer Verf&auml;lschung der Bestandsermittlung f&uuml;hren w&uuml;rde.<\/p>\n<p>Die Getr&auml;nkeverwaltung enth&auml;lt insgesamt sechs Formulare, die Sie in den folgenden Abschnitten n&auml;her kennen lernen werden.<\/p>\n<p><IMG height=\"250\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic006.png\" width=\"421\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6:  Das Formular frmHauptmenue<\/span><\/b><\/p>\n<h2>Das Hauptmen&uuml;<\/h2>\n<p>Das Formular frmHauptmenue ist die Schaltzentrale der Anwendung. Sie hat f&uuml;nf Schaltfl&auml;chen, von denen vier dem Aufrufen der weiteren Formulare dienen und eines dem Beenden der Anwendung (siehe Bild 6).<\/p>\n<h3>Wichtige Formulareigenschaften<\/h3>\n<p>Damit das Hauptformular nur &uuml;ber die entsprechende Schaltfl&auml;che zu schlie&szlig;en ist, stellen Sie einige Eigenschaften gem&auml;&szlig; Tab. 2 ein.<\/p>\n<h3>Hinweis<\/h3>\n<p><!--30percent--><\/p>\n<p>Die Einstellung der Eigenschaften Bildlaufleisten, Datensatzmarkierer, Navigationsschaltfl&auml;chen und Trennlinien werden &#8211; wie bei allen Formularen mit statischem Inhalt &#8211; nat&uuml;rlich auf Nein gesetzt. <\/p>\n<table border=1>\n<tr>\n<td>\n<p><b>Eigenschaft<\/b><\/p>\n<\/td>\n<td>\n<p><b>Einstellung<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Rahmenart<\/p>\n<\/td>\n<td>\n<p>Dialog<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Mit Systemfeldmen&uuml;<\/p>\n<\/td>\n<td>\n<p>Nein<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>MinMax Schaltfl&auml;chen<\/p>\n<\/td>\n<td>\n<p>Nein<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Schlie&szlig;en Schaltfl&auml;che<\/p>\n<\/td>\n<td>\n<p>Nein<\/p>\n<\/td>\n<\/tr>\n<\/table>\n<p><b>Tab. 2: Eigenschaftseinstellungen f&uuml;r das Formular frmHauptmenue<\/b><\/p>\n<h3>Praxis-Tipp<\/h3>\n<p>Trotz fehlender Schlie&szlig;en-Schaltfl&auml;che k&ouml;nnen Sie das Formular frmHauptmenue jederzeit mit der Tastenkombination Strg + F4 schlie&szlig;en. <\/p>\n<h2>Das Formular frmPersonal<\/h2>\n<p><IMG height=\"354\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic007.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7:  Das Formular frmPersonal<\/span><\/b><\/p>\n<p>Das Formular frmPersonal (siehe Bild 7) enth&auml;lt die Informationen zu den Mitarbeitern und ein Unterformular zur Anzeige der an den jeweiligen Mitarbeiter ausgegebenen und noch nicht abgerechneten Getr&auml;nke. Es enth&auml;lt au&szlig;erdem ein Feld zur Anzeige des Gesamtpreises der im Unterformular angezeigten ausgegebenen Getr&auml;nke.<\/p>\n<p>Der folgende Ausdruck verweist auf das entsprechende Feld des Unterformulars:<\/p>\n<pre>=frmGetraenkeverbrauch_Sub.Formular!Gesamtsumme\r\nPrivate Sub Form_Current()\r\n    Forms!frmPersonal!btnDruck.Enabled = _        IIf(Me.RecordsetClone.RecordCount &gt; 0, _        True, False)\r\nEnd Sub<\/pre>\n<p><b>Quellcode 3<\/b><\/p>\n<p>Im Formularfu&szlig; befinden sich zwei Schaltfl&auml;chen. Die Schaltfl&auml;che btnClose schlie&szlig;t das Formular frmPersonal und macht das Formular frmHauptmenue wieder sichtbar. Die daf&uuml;r verantwortliche Ereignisprozedur finden Sie in Quellcode 1. <\/p>\n<p>Das Schlie&szlig;en des Formulars l&ouml;st die Prozedur aus Quellcode 2 aus, die wiederum das Formular frmHauptmenue wieder sichtbar macht.<\/p>\n<h3>Die Schaltfl&auml;che btnDruck: Aktiv oder nicht<\/h3>\n<p>Das Ausdrucken einer Rechnung soll nur m&ouml;glich sein, wenn das Unterformular frmGetraenkeverbrauch_Sub nicht leer ist. Daher soll die Schaltfl&auml;che zum Starten des Druckvorgangs deaktiviert sein, wenn die Anzahl der Datens&auml;tze des Unterformulars 0 ist. <\/p>\n<p>Die &uuml;berpr&uuml;fung der Datensatzanzahl muss immer durchgef&uuml;hrt werden, wenn im Hauptformular ein anderer Mitarbeiter ausgew&auml;hlt wird oder wenn im Unterformular eine Aktion durchgef&uuml;hrt wird, die zur &auml;nderung des Status der Schaltfl&auml;che f&uuml;hren soll &#8211; also wenn die Anzahl der Datens&auml;tze 0 wird oder sich von 0 auf einen anderen Wert &auml;ndert.<\/p>\n<p>Die Prozedur, die beim Eintreten des Ereignisses Beim Anzeigen des Unterformulars ausgel&ouml;st wird, deckt beide F&auml;lle ab.<\/p>\n<pre>Private Sub btnClose_Click()\r\n    On Error Resume Next\r\n    DoCmd.Close acForm, Me.Name\r\nEnd Sub<\/pre>\n<p><b>Quellcode 1<\/b><\/p>\n<pre>Private Sub Form_Close()\r\n  Forms!frmHauptmenue.Visible = True\r\nEnd Sub<\/pre>\n<p><b>Quellcode 2<\/b><\/p>\n<p>Sie tritt sowohl bei einem Wechsel des Datensatzes im Hauptformular als auch bei allen &auml;nderungen der Datensatzanzahl im Unterformular in Aktion (s. Quellcode 3).<\/p>\n<p>Die einzige Anweisung der Prozedur verwendet die IIf-Funktion, um abh&auml;ngig von der Datensatzanzahl die Eigenschaft Aktiviert der Schaltfl&auml;che einzustellen.<\/p>\n<p>Der erste Teil der Funktion ermittelt die Anzahl der Datens&auml;tze und pr&uuml;ft, ob diese gr&ouml;&szlig;er als 0 ist. Ist der Ausdruck im ersten Teil wahr, gibt die Funktion den Ausdruck des zweiten Teils zur&uuml;ck, ansonsten den des dritten Teils.<\/p>\n<h3>Start des Ausdrucks einer Rechnung<\/h3>\n<p>Die Schaltfl&auml;che btnDruck l&ouml;st die Prozedur aus Quellcode 4 aus. Die Prozedur hat zwei Funktionen, die nach einer vorherigen Abfrage, ob die Rechnung auch tats&auml;chlich gedruckt werden soll, ausgef&uuml;hrt werden. Diese Abfrage enth&auml;lt auch den Hinweis, dass alle vorhandenen Datens&auml;tze nach Rechnungserstellung gel&ouml;scht werden.<\/p>\n<p>Die erste Funktion ist der Ausdruck der Rechnung. Sie bewirkt das &ouml;ffnen des Berichtes repGetraenkeRechnung in der Vorschauansicht. <\/p>\n<p>Die zweite Funktion resultiert aus der Annahme, dass gedruckte Rechnungen auch bezahlt werden und die berechneten Getr&auml;nke nicht mehr angezeigt werden m&uuml;ssen.<\/p>\n<p>Daher erfolgt im zweiten Schritt f&uuml;r alle ausgedruckten Datens&auml;tze die &auml;nderung des Wertes des Feldes Bezahlt der Tabelle tblGetraenkeVerbrauch auf den Wert True.<\/p>\n<p>Die Anweisung<\/p>\n<pre>DoCmd.SetWarnings = False<\/pre>\n<p>sorgt daf&uuml;r, dass Datensatz&auml;nderungen ohne Best&auml;tigung durch den Benutzer erfolgen k&ouml;nnen. Der vorherige Zustand wird durch die folgende Anweisung wiederhergestellt:<\/p>\n<pre>DoCmd.SetWarnings = True\r\nPrivate Sub btnDruck_Click()\r\n    Dim strSQL As String\r\n    Forms!frmPersonal!btnClose.SetFocus\r\n    If MsgBox(\"M&ouml;chten Sie die Rechnung f&uuml;r den ausgew&auml;hlten Mitarbeiter drucken\" _\r\n        & vbCrLf & \"Alle Datens&auml;tze werden nach Rechnungserstellung gel&ouml;scht!\", _\r\n        vbQuestion + vbOKCancel, \"Getr&auml;nkerechnung\") = vbOK Then\r\n        DoCmd.OpenReport \"repGetraenkeRechnung\", acViewPreview, , \"PersonalID = \" _            & Me.PersonalID\r\n        DoCmd.SetWarnings False\r\n        strSQL = \"UPDATE tblGetraenkeVerbrauch SET tblGetraenkeVerbrauch.Bezahlt \" _            & \"= True WHERE tblGetraenkeVerbrauch.Bezahlt=False \" & _\r\n            \"AND tblGetraenkeVerbrauch.PersonalID =\" & Me.PersonalID\r\n        DoCmd.RunSQL strSQL\r\n        Me![frmGetraenkeverbrauch_Sub].Requery\r\n        DoCmd.SetWarnings True\r\n    End If\r\nEnd Sub<\/pre>\n<p><b>Quellcode 4<\/b><\/p>\n<p><IMG height=\"191\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic008.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8:  Das Unterformular frmGetraenkeVerbrauch_Sub<\/span><\/b><\/p>\n<p>Nach der &auml;nderung erfolgt noch die Aktualisierung des Unterformulars durch die Requery-Methode des Unterformulars. <\/p>\n<h3>Praxis-Tipp<\/h3>\n<p>Die Aktualisierung des Unterformulars erfolgt nat&uuml;rlich auch, wenn Sie einfach die Requery-Methode des Hauptformulars ausf&uuml;hren. Dann wird allerdings auch der Inhalt des Hauptformulars aktualisiert &#8211; mit der Folge, dass im Hauptformular der erste Datensatz der Datenherkunft angezeigt wird. Und das ist in den meisten F&auml;llen nicht erw&uuml;nscht. <\/p>\n<h2>Das UnterformularfrmGetraenkeverbrauch_Sub<\/h2>\n<p>Die Eingabe der ausgegebenen Getr&auml;nke erfolgt im Unterformular frmGetraenkeVerbrauch_Sub (siehe Bild 8).<\/p>\n<h3>Datenherkunft des Unterformulars<\/h3>\n<p>Die Abfrage qryfrmGetraenkeverbrauch dient als Datenherkunft f&uuml;r das Unterformular. Sie basiert auf den Tabellen tblGetraenkeVerbrauch und tblGetraenkeTyp.<\/p>\n<p>Bemerkenswert sind vor allem die beiden Felder Bezahlt und Gesamtpreis. Das Feld Bezahlt dient zur Ermittlung der Datens&auml;tze, f&uuml;r die noch keine Rechnungsstellung erfolgt ist. Da bei der Rechnungsstellung alle in Rechnung gestellten Datens&auml;tze f&uuml;r dieses Feld den Wert True zugewiesen bekommen, verwendet die Abfrage das Kriterium False zur Ermittlung aller &uuml;brigen Datens&auml;tze.<\/p>\n<p>Das Feld Gesamtpreis enth&auml;lt das Produkt aus dem Einheitspreis und der Anzahl der ausgegebenen Getr&auml;nke. Der folgende Ausdruck f&uuml;hrt die Berechnung durch:<\/p>\n<pre>Gesamtpreis:ZCurrency([tblGetraenketyp.TypPreis]*[tblGetraenkeVerbrauch.Einheiten])<\/pre>\n<p>Den kompletten Aufbau der Abfrage k&ouml;nnen Sie der Abb. 9 entnehmen.<\/p>\n<h3>Aufbau des Formulars<\/h3>\n<pre>Private Sub TypID_AfterUpdate()\r\n    Me!Einzelpreis = DLookup(\"TypPreis\", \"tblGetraenkeTyp\", \"TypID = \" & Me!TypID)\r\nEnd Sub<\/pre>\n<p><b>Quellcode 5<\/b><\/p>\n<p><IMG height=\"189\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic009.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9:  Die Abfrage qryfrmGetraenkeAusgabe_Sub in der Entwurfsansicht<\/span><\/b><\/p>\n<p>Die Auswahl des Getr&auml;nks erfolgt &uuml;ber das Kombinationsfeld TypID. Alle anderen Felder werden vorbelegt, um die Eingabe so komfortabel wie m&ouml;glich zu gestalten. Im Feld Datum erscheint als Vorgabewert das aktuelle Systemdatum, das aber beliebig ge&auml;ndert werden kann.<\/p>\n<p>Das Feld Einzelpreis zeigt den Wert des Feldes Einzelpreis aus der Tabelle tblGetraenkeVerbrauch an. Beim Anlegen des neuen Datensatzes f&uuml;llt die Prozedur aus Quellcode 5 das Feld mit dem aktuellen Preis f&uuml;r das ausgew&auml;hlte Getr&auml;nk. Der Preis wird aus der Tabelle tblGetraenkeTyp ermittelt. <\/p>\n<p>Das Feld Einheiten dient zur Eingabe der gew&uuml;nschten Anzahl Getr&auml;nke. Es hat den Standardwert 1 und muss daher nur bearbeitet werden, wenn mehr als ein Getr&auml;nk ausgegeben wird.<\/p>\n<p>Das Feld Gesamtpreis zeigt das in der Datenherkunft ermittelte Produkt aus Preis und Anzahl an.<\/p>\n<p>Die Inhalte der Felder Preis und Gesamtpreis sollen durch den Benutzer nicht ver&auml;ndert werden. Daher sind die Eigenschaften Aktiviert und Gesperrt auf die Werte Nein bzw. Ja eingestellt. <\/p>\n<h2>Das Formular frmGetraenkeTyp<\/h2>\n<p>Das Anlegen neuer und das Bearbeiten vorhandener Getr&auml;nke erfolgt im Formular frmGetraenkeTyp (siehe Bild 10).<\/p>\n<p>Die Tabelle tblGetraenkeTyp dient als Datenherkunft des Formulars. Zu den angezeigten Informationen z&auml;hlen neben dem Namen des Getr&auml;nks der Preis, der Mindestbestand und der Umrechnungsfaktor.<\/p>\n<h3>Mindestbestand<\/h3>\n<p>Mit diesem Wert legen Sie fest, ab welchem Wert Sie von der Anwendung zur Bestanderg&auml;nzung aufgefordert werden.<\/p>\n<p><IMG height=\"292\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic010.png\" width=\"446\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10:  Das Formular frmGetraenkeTyp<\/span><\/b><\/p>\n<p><IMG height=\"292\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic011.png\" width=\"446\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 11:  Stammdaten f&uuml;r Flaschen<\/span><\/b><\/p>\n<p><IMG height=\"272\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic012.png\" width=\"312\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 12:  Das Formular frmBestandsergaenzung<\/span><\/b><\/p>\n<p>Als Einheit f&uuml;r die Angabe des Mindestbestands verwenden Sie die im Feld Einheit &#038; Kurzname angegebene Einheit. Bei Kaffee und &auml;hnlichen Getr&auml;nken ist das die Einheit Gramm (g), f&uuml;r andere Getr&auml;nke z. B. Flaschen oder Dosen (siehe Bild 11).<\/p>\n<p>Auf diese Weise k&ouml;nnen Sie f&uuml;r alle Getr&auml;nke beliebige Eckdaten festlegen, die anschlie&szlig;end als Parameter f&uuml;r die entsprechenden Berechnungen dienen.<\/p>\n<h3>Umrechnungsfaktor<\/h3>\n<p>Der Umrechnungsfaktor gibt die Anzahl der Portionen je Bestandseinheit an. Bei Einheiten wie Flaschen oder Dosen ist der Umrechnungsfaktor 1, da die Ausgabeeinheit der Bestandseinheit entspricht. Bei Kaffee ist die Bestandseinheit ein Gramm. Unter der Voraussetzung, dass f&uuml;r eine Tasse zehn Gramm Kaffeepulver ben&ouml;tigt werden, ergibt das einen Umrechnungsfaktor von 0,1. Das bedeutet, dass die Bestandmenge in Gramm multipliziert mit dem Faktor 0,1 die Anzahl der zur Verf&uuml;gung stehenden Tassen Kaffee ergibt.<\/p>\n<h3>Hinweis<\/h3>\n<p>Da zu jeder Getr&auml;nkeausgabe der aktuelle Umrechnungsfaktor gespeichert wird, k&ouml;nnen Sie diesen Faktor &#8211; genau wie die Getr&auml;nkepreise &#8211; ohne Probleme w&auml;hrend der Verwendung der Datenbank &auml;ndern. Bei der n&auml;chsten Getr&auml;nkeausgabe verwendet die Anwendung dann einfach den neuen Umrechnungsfaktor. <\/p>\n<h2>Das FormularfrmBestandsergaenzung<\/h2>\n<p>Im Formular frmBestandsergaenzung erfassen Sie neue Getr&auml;nkebest&auml;nde (siehe Bild 12). Als Datenherkunft f&uuml;r dieses Formular dient die Abfrage qryfrmBestandsergaenzung. <\/p>\n<h2>Das Formular frmBestand<\/h2>\n<p>Das Formular frmBestand informiert Sie in einem Meldungsfenster, ob Ihre Vorr&auml;te erg&auml;nzt werden m&uuml;ssen oder nicht (siehe Bild 14).<\/p>\n<p><IMG height=\"295\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic013.png\" width=\"400\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 13:  Das Formular frmBestand<\/span><\/b><\/p>\n<h3>Praxis-Tipp<\/h3>\n<p>F&uuml;r alle Felder in diesem Formular sind die Werte f&uuml;r die Eigenschaften Aktiviert auf Nein und Gesperrt auf Ja eingestellt. <\/p>\n<p>Das Formular berechnet f&uuml;r jede Getr&auml;nkeart den aktuellen Bestand aus den Bestandserg&auml;nzungen und Getr&auml;nkeausgaben und vergleicht diesen Wert mit dem angegebenen Mindestbestand. Wenn der aktuelle Bestand unter dem Mindestbestand liegt, erscheint eine entsprechende Meldung.<\/p>\n<p><IMG height=\"61\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic014.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 14:  Die Abfrage qryfrmBestand in der Datenblattansicht<\/span><\/b><\/p>\n<h3>Die Datenherkunft<\/h3>\n<p>Datenherkunft des Formulars ist die Abfrage qryfrmBestand (siehe Bild 14). Diese Abfrage nimmt alle notwendigen Berechnungen vor und ist auch f&uuml;r den Text im Feld Meldung des Formulars verantwortlich.<\/p>\n<h3>Hinweis<\/h3>\n<p>Einzelheiten zu dieser Abfrage finden Sie weiter unten. <\/p>\n<h3>Weitere wichtige Formulareigenschaften<\/h3>\n<p>Das Formular frmBestand ist als Endlosformular ausgelegt. Das mag auf den ersten Blick verwundern, hat aber einen guten Grund: Dadurch ist es m&ouml;glich, die Informationen zu allen vorhandenen Getr&auml;nken im Formular anzuzeigen.<\/p>\n<h2>Die Formularsteuerung derAnwendung<\/h2>\n<p>Das Formular frmBestand soll bei jedem Start der Datenbank ge&ouml;ffnet werden. Dazu stellen Sie im Feld Formular anzeigen: des Dialogs Start, den Sie &uuml;ber den Eintrag Extras ( Start der Men&uuml;leiste anzeigen k&ouml;nnen, den Namen dieses Formulars ein.<\/p>\n<p>Ein Klick auf die Schaltfl&auml;che Schlie&szlig;en im Formular frmBestand f&uuml;hrt die in Quellcode 2 abgedruckte Ereignisprozedur aus: Das Formular frmBestand wird geschlossen und das Formular frmHauptmenue ge&ouml;ffnet. Die weitere Formularsteuerung ist relativ simpel, weil lediglich vom frmHauptmenue zu einem anderen Formular und wieder zur&uuml;ck gewechselt wird.<\/p>\n<p>Beim &ouml;ffnen eines der Formulare &#8211; beispielsweise frmPersonal &#8211; soll das frmHauptmenue nicht etwa geschlossen, sondern lediglich unsichtbar geschaltet werden. Dies ist aus Gr&uuml;nden der Performance sinnvoller.<\/p>\n<pre>Private Sub btnClose_Click()\r\n    On Error Resume Next\r\n    DoCmd.Close acForm, Me.Name\r\n    DoCmd.OpenForm \"frmHauptmenue\"\r\nEnd Sub<\/pre>\n<p><b>Quellcode 2<\/b><\/p>\n<pre>Private Sub btnPersonal_Click()\r\n    DoCmd.OpenForm \"frmPersonal\"\r\n    Me.Visible = False\r\nEnd Sub<\/pre>\n<p><b>Quellcode 3<\/b><\/p>\n<p><IMG height=\"213\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic015.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 15:  Entwurfsansicht der Abfrage qrySummeGetraenkeverbrauch<\/span><\/b><\/p>\n<pre>Private Sub Form_Close()\r\n    Forms!frmHauptmenue.Visible = True\r\nEnd Sub<\/pre>\n<p><b>Quellcode 4<\/b><\/p>\n<p>Umgekehrt muss das Hauptmen&uuml; nach dem Schlie&szlig;en des aufgerufenen Formulars wieder sichtbar sein. Diese Funktionalit&auml;t erreichen Sie mit Hilfe der Visible-Eigenschaft.<\/p>\n<p>Die Ereignisprozedur, die beim Klicken auf eine der Schaltfl&auml;chen aufgerufen wird, &ouml;ffnet das betreffende Formular und schaltet das Formular frmHauptmenue unsichtbar. Diese Ereignisprozedur ist in Quellcode 3 abgedruckt.<\/p>\n<p>Beim Schlie&szlig;en eines der Formulare wird das Formular frmHauptmenue wieder sichtbar geschaltet (s. Quellcode 4).<\/p>\n<p>Bei der Arbeit mit Access f&uuml;hren bekanntlich oftmals verschiedene Wege zum Ziel, so beispielsweise auch bei der Durchf&uuml;hrung von Berechnungen.<\/p>\n<p>Au&szlig;er in VBA-Prozeduren k&ouml;nnen diese n&auml;mlich auch in entsprechend gestalteten Abfragen durchgef&uuml;hrt werden. Die beiden Abfragen zur Ermittlung des gesamten Verbrauchs sowie der gesamten Bestandserg&auml;nzung dienen dabei als Grundlage f&uuml;r die Berechnung des aktuellen Bestands und seinem Vergleich mit dem Sollbestand.<\/p>\n<h2>Die AbfrageqrySummeBestandsErgaenzung<\/h2>\n<p>Die Ermittlung der gesamten Bestandserg&auml;nzung erfolgt &uuml;ber die Abfrage aus Bild 16. Die Abfrage addiert die Packungsmengen aller nach dem Getr&auml;nketyp gruppierten Bestandserg&auml;nzungen.<\/p>\n<p><IMG height=\"313\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic016.png\" width=\"423\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 16:  Die Abfrage qrySummeBestandserg&auml;nzung in der Entwurfsansicht<\/span><\/b><\/p>\n<h2>Die AbfrageqrySummeGetraenkeVerbrauch<\/h2>\n<p>Die zweite Abfrage ist ein wenig aufw&auml;ndiger (siehe Bild 15). Um die verbrauchten von den hinzugekauften Getr&auml;nken subtrahieren zu k&ouml;nnen, m&uuml;ssen die verbrauchten Getr&auml;nke wieder in die Grundeinheiten zur&uuml;ckberechnet werden &#8211; im Fall von Kaffee also z. B. in die Einheit Gramm.<\/p>\n<p>Speziell f&uuml;r diese Aufgabe wurde in der Tabelle tblGetraenkeVerbrauch jeweils der aktuelle Umrechnungsfaktor gespeichert.<\/p>\n<p>Die Abfrage gruppiert die Datens&auml;tze nach Getr&auml;nketyp und Umrechnungsfaktor und multipliziert die Summe der gruppierten Verbrauchszahlen mit dem jeweiligen Umrechnungsfaktor.<\/p>\n<h2>Die Abfrage qryfrmBestand<\/h2>\n<p>Die Abfrage qryfrmBestand, deren Entwurfsansicht aus Platzgr&uuml;nden leider hier nicht abgebildet werden kann, nutzt nun die in diesen Abfragen berechneten Daten. Sie bezieht die eine Abfrage durch die Verwendung der Funktion DSum und die andere Abfrage direkt in die Datenherkunft ein.<\/p>\n<p><IMG height=\"291\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic017.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 17:  Die Abfrage qryrepGetraenkeRechnung in der Entwurfsansicht<\/span><\/b><\/p>\n<p>Die Abfrage gibt f&uuml;r jeden Getr&auml;nketyp einen Datensatz aus. In den Datens&auml;tzen erfolgt zun&auml;chst die Berechnung der Differenz aus verkauften und eingekauften Getr&auml;nkeeinheiten.<\/p>\n<p>Anschlie&szlig;end ermittelt die Abfrage, ob der Bestand gr&ouml;&szlig;er oder kleiner als der Mindestbestand des jeweiligen Getr&auml;nks ist, und f&uuml;llt ein Feld namens Meldung mit einem entsprechenden Text:<\/p>\n<pre>Meldung:Wenn([Mengen-Bestand(abs)]&gt;[TypMindestbestand];\"Bestand ist ok!\";\"Bestand zu gering! Bitte erg&auml;nzen!\")<\/pre>\n<h3>Hinweis<\/h3>\n<p>An dieser Stelle k&ouml;nnen auch die Meldungstexte leicht ge&auml;ndert werden. <\/p>\n<p>Der Bericht repGetraenkeRechnung dient zum Ausdruck einer detaillierten Rechnung, die die einzelnen Getr&auml;nkepositionen addiert und anschlie&szlig;end die Gesamtsumme ausgibt.<\/p>\n<p>In dieser Musterl&ouml;sung sind alle Gruppierungen und Berechnungen in die dem Bericht zugrunde liegende Abfrage verlagert worden.<\/p>\n<h2>Die Abfrage qryrepGetraenkeRechnung<\/h2>\n<p>Grundlage der Abfrage qryrepGetraenkeRechnung sind die beiden Tabellen tblGetraenkeVerbrauch und tblGetraenkeTyp (siehe Bild 17).<\/p>\n<p>Die Abfrage selektiert zun&auml;chst einmal alle nicht bezahlten Getr&auml;nke einer Person und gruppiert diese nach dem Getr&auml;nketyp.<\/p>\n<p>Au&szlig;erdem finden in dieser Abfrage noch zwei Berechnungen statt.<\/p>\n<p>Erstens wird f&uuml;r jeden Getr&auml;nketyp im Feld Anzahl mit Hilfe der Summenfunktion die Summe der verbrauchten Einheiten berechnet.<\/p>\n<p>Zweitens berechnet das Feld Rechnungsbetrag durch den Ausdruck<\/p>\n<pre>Rechnungsbetrag: Summe([tblGetraenkeVerbrauch.Einheiten]*[tblGetraenketyp.TypPreis])<\/pre>\n<p>den zu zahlenden Rechnungsbetrag f&uuml;r die einzelnen Getr&auml;nketypen.<\/p>\n<p><IMG height=\"284\" src=\"..\/fileadmin\/_temp_\/{59BF86D0-D18D-48B6-A610-B52E125B710B}\/pic018.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 18:  Der Bericht repGetraenkeRechnung in der Entwurfsansicht<\/span><\/b><\/p>\n<h2>Der Bericht repGetraenkeRechnung<\/h2>\n<p>Der Bericht repGetraenkeRechnung basiert auf der soeben vorgestellten Abfrage.<\/p>\n<p>Das berechnete Feld Gesamtbetrag im Berichtsfu&szlig; summiert mit dem folgenden Ausdruck die Gesamtsumme der Rechnung auf:<\/p>\n<pre>=Summe([Rechnungsbetrag])<\/pre>\n<p>Zus&auml;tzlich enth&auml;lt der Bericht noch das aktuelle Systemdatum und eine Seitenz&auml;hlung im Format Seite n von m im Seitenfu&szlig;.<\/p>\n<p>Die vorliegende Musterl&ouml;sung erm&ouml;glicht eine einfache und komfortable Erfassung von Getr&auml;nkeausgaben und deren Rechnungslegung.<\/p>\n<p>Dar&uuml;ber hinaus &uuml;berwacht sie den Verbrauch an Vorr&auml;ten und informiert den Anwender bei der Unterschreitung eines flexibel einstellbaren Schwellenwerts durch eine entsprechende Meldung.<\/p>\n<p>Mit der M&ouml;glichkeit, zu jedem Zeitpunkt die Preise f&uuml;r Getr&auml;nke und die Umrechnungsfaktoren &auml;ndern zu k&ouml;nnen, wartet die Musterl&ouml;sung mit einem gro&szlig;en Ma&szlig; an Flexibilit&auml;t auf.<\/p>\n<p>Damit bildet sie die Grundlage f&uuml;r zahlreiche Erweiterungsm&ouml;glichkeiten, wie die folgende Auflistung zeigt:<\/p>\n<li>Kontrolle von Ein- und Ausgaben und Verwaltung der Getr&auml;nkekasse<\/li>\n<li>Automatische Rechnungserstellung &uuml;ber einen vorher beliebig festlegbaren Zeitraum<\/li>\n<li>Verbuchung und &uuml;berwachung von Zahlungen<\/li>\n<li>Periodische Bestands&uuml;berpr&uuml;fung zur Laufzeit der Anwendung durch eine Timersteuerung mit flexibel einstellbaren Intervallen<\/li>\n<li>Verschiedene Eingabe&uuml;berpr&uuml;fungen und Plausibilit&auml;tskontrollen<\/li>\n<li>Ermittlung der tats&auml;chlich ben&ouml;tigten Menge Kaffeepulver je getrunkener Tasse Kaffee.<\/li>\n","protected":false},"excerpt":{"rendered":"<p>Jeder Mensch muss regelm&auml;&szlig;ig Fl&uuml;ssigkeit zu sich nehmen. Ist das nicht gew&auml;hrleistet, nehmen sein Wohlbefinden und damit auch seine Arbeitsleistung deutlich ab. Je nach Gr&ouml;&szlig;e eines Unternehmens stehen den Mitarbeitern unterschiedliche Getr&auml;nkequellen zur Verf&uuml;gung. In vielen F&auml;llen handelt es sich dabei um eine selbst organisierte Getr&auml;nkeausgabe, bei der Getr&auml;nke von Mitarbeitern eingekauft und an Kollegen verkauft werden. Die Frage, wer nun wie viele Getr&auml;nke welcher Sorte getrunken und damit auch zu bezahlen hat, ist rein organisatorischer Natur &#8211; und sicher ein Fall f&uuml;r eine Access-Musterl&ouml;sung, wie der vorliegende Beitrag zeigen wird.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66022003,662003,44000027],"tags":[],"class_list":["post-55000106","post","type-post","status-publish","format-standard","hentry","category-66022003","category-662003","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Getr&auml;nkeverwaltung mit Access - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Getr&auml;nkeverwaltung mit Access\" \/>\n<meta property=\"og:description\" content=\"Jeder Mensch muss regelm&auml;&szlig;ig Fl&uuml;ssigkeit zu sich nehmen. Ist das nicht gew&auml;hrleistet, nehmen sein Wohlbefinden und damit auch seine Arbeitsleistung deutlich ab. Je nach Gr&ouml;&szlig;e eines Unternehmens stehen den Mitarbeitern unterschiedliche Getr&auml;nkequellen zur Verf&uuml;gung. In vielen F&auml;llen handelt es sich dabei um eine selbst organisierte Getr&auml;nkeausgabe, bei der Getr&auml;nke von Mitarbeitern eingekauft und an Kollegen verkauft werden. Die Frage, wer nun wie viele Getr&auml;nke welcher Sorte getrunken und damit auch zu bezahlen hat, ist rein organisatorischer Natur - und sicher ein Fall f&uuml;r eine Access-Musterl&ouml;sung, wie der vorliegende Beitrag zeigen wird.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-06T15:17:25+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/7cf1c5f97ec3445b9b26a9abf058de0f\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"21\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Getraenkeverwaltung_mit_Access\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Getraenkeverwaltung_mit_Access\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Getr&auml;nkeverwaltung mit Access\",\"datePublished\":\"2020-05-06T15:17:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Getraenkeverwaltung_mit_Access\\\/\"},\"wordCount\":3921,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Getraenkeverwaltung_mit_Access\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/7cf1c5f97ec3445b9b26a9abf058de0f\",\"articleSection\":[\"2\\\/2003\",\"2003\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Getraenkeverwaltung_mit_Access\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Getraenkeverwaltung_mit_Access\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Getraenkeverwaltung_mit_Access\\\/\",\"name\":\"Getr&auml;nkeverwaltung mit Access - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Getraenkeverwaltung_mit_Access\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Getraenkeverwaltung_mit_Access\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/7cf1c5f97ec3445b9b26a9abf058de0f\",\"datePublished\":\"2020-05-06T15:17:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Getraenkeverwaltung_mit_Access\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Getraenkeverwaltung_mit_Access\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Getraenkeverwaltung_mit_Access\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/7cf1c5f97ec3445b9b26a9abf058de0f\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/7cf1c5f97ec3445b9b26a9abf058de0f\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Getraenkeverwaltung_mit_Access\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Getr&auml;nkeverwaltung mit Access\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Getr&auml;nkeverwaltung mit Access - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/","og_locale":"de_DE","og_type":"article","og_title":"Getr&auml;nkeverwaltung mit Access","og_description":"Jeder Mensch muss regelm&auml;&szlig;ig Fl&uuml;ssigkeit zu sich nehmen. Ist das nicht gew&auml;hrleistet, nehmen sein Wohlbefinden und damit auch seine Arbeitsleistung deutlich ab. Je nach Gr&ouml;&szlig;e eines Unternehmens stehen den Mitarbeitern unterschiedliche Getr&auml;nkequellen zur Verf&uuml;gung. In vielen F&auml;llen handelt es sich dabei um eine selbst organisierte Getr&auml;nkeausgabe, bei der Getr&auml;nke von Mitarbeitern eingekauft und an Kollegen verkauft werden. Die Frage, wer nun wie viele Getr&auml;nke welcher Sorte getrunken und damit auch zu bezahlen hat, ist rein organisatorischer Natur - und sicher ein Fall f&uuml;r eine Access-Musterl&ouml;sung, wie der vorliegende Beitrag zeigen wird.","og_url":"https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-06T15:17:25+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/7cf1c5f97ec3445b9b26a9abf058de0f","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"21\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Getr&auml;nkeverwaltung mit Access","datePublished":"2020-05-06T15:17:25+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/"},"wordCount":3921,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/7cf1c5f97ec3445b9b26a9abf058de0f","articleSection":["2\/2003","2003","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/","url":"https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/","name":"Getr&auml;nkeverwaltung mit Access - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/7cf1c5f97ec3445b9b26a9abf058de0f","datePublished":"2020-05-06T15:17:25+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/7cf1c5f97ec3445b9b26a9abf058de0f","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/7cf1c5f97ec3445b9b26a9abf058de0f"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Getraenkeverwaltung_mit_Access\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Getr&auml;nkeverwaltung mit Access"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000106","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000106"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000106\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000106"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000106"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}