Home > Artikel > Ausgabe 2/2012 > Bestellungen in Formularen verwalten

Bestellungen in Formularen verwalten

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Wer einmal einen Bestellvorgang auf Tabellenebene abgebildet und die entsprechenden Formulare und Berichte erstellt und verstanden hat, kann guten Gewissens behaupten, dass er kein Einsteiger mehr ist. Das Datenmodell erläutern wir im Artikel Bestellungen in Tabellen verwalten, die notwendigen Formulare stellt der vorliegende Artikel vor und um die Berichte kümmern wir uns im Artikel Bestellungen per Bericht ausgeben – es sind also nur noch wenige Schritte bis zum nächsten Level!

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1202_BestellungenInFormularen.mdb.

Bestellungen per Formular

Die folgenden Ausführungen beziehen sich auf das Datenmodell, dass wir im Artikel Bestellungen in Tabellen verwalten erstellt haben. Dieses enthält im wesentlichen eine Tabelle namens tblBestellungen, die grundlegende Bestellinformationen aufnimmt, eine Tabelle mit Artikeln (tblArtikel) sowie eine Tabelle namens tblBestellpositionen, mit der Sie die einzelnen Artikel einer Bestellung zuordnen können.

Für die Abbildung einer m:n-Beziehung bieten sich mehrere Konstellationen an, aber nur die Variante mit Haupt- und Unterformular ist sinnvoll. Dabei zeigt das Hauptformular die Daten der Tabelle tblBestellungen an.

Das Unterformular erfasst die bei der Bestellannahme anfallenden Bestellpositionen. Sie benötigen eigentlich noch weitere Formulare, etwa zur Verwaltung der Kunden oder der Artikel, diese beschreiben wir jedoch in weiteren Artikeln. Der vorliegende Artikel konzentriert sich auf die Eingabe der Bestelldaten.

Hauptformular

Das Hauptformular soll jeweils einen Datensatz der Tabelle tblBestellungen erfassen und auch das Unterformular zur Eingabe der Bestellpositionen aufnehmen. Legen Sie daher zunächst ein Formular namens frmBestellungen an und weisen Sie diesem die Tabelle tblBestellungen als Datenherkunft zu.

Ziehen Sie die drei Felder BestellungID, KundeID und Bestelldatum in den Detailbereich des Formulars (siehe Bild 1).

Hauptformular zur Eingabe der Bestelldaten

Bild 1: Hauptformular zur Eingabe der Bestelldaten

Ausrichten und anordnen können Sie die Steuerelemente später, wenn keine Änderungen mehr vorgenommen werden sollen.

Wenn Sie das Feld KundeID der Tabelle tblBestellungen wie im Artikel Bestellungen in Tabellen verwalten beschrieben als Nachschlagefeld ausgeführt haben, legt Access beim Hinzufügen des Feldes zum Formular automatisch ein Kombinationsfeld an, dass die gleichen Eigenschaften wie das entsprechende Nachschlagefeld aufweist (siehe Bild 2).

Auswahl des Kunden per Kombinationsfeld

Bild 2: Auswahl des Kunden per Kombinationsfeld

Kundendaten anzeigen

Gegebenenfalls möchten Sie nach der Auswahl des Kunden für eine Bestellung dessen aktuelle Adressdaten einsehen. Für diesen Fall verwenden wir ein Unterformular, dass alle notwendigen Daten anzeigt. Das Formular heißt sfmKundendaten und enthält die Tabelle tblKunden als Datenherkunft. Ziehen Sie alle Felder dieser Tabelle außer KundeID in den Detailbereich des Formulars und ordnen Sie diese etwa wie in Bild 3 an – wie gesagt, optische Anpassungen nehmen wir später vor.

Unterformular zur Anzeige der Kundendaten

Bild 3: Unterformular zur Anzeige der Kundendaten

Dann schließen Sie das Unterformular sfmKundendaten, öffnen das Formular frmBestellungen in der Entwurfsansicht und ziehen das Unterformular sfmKundendaten aus dem Datenbankfenster beziehungsweise Navigationsbereich in den Detailbereich des Hauptformulars. Platzieren es etwa so wie in Bild 4.

Herstellen der Verknüpfung zwischen Haupt- und Unterformular

Bild 4: Herstellen der Verknüpfung zwischen Haupt- und Unterformular

Wenn Sie nun das Unterformular-Steuerelement markieren, zeigt das Eigenschaftsfenster auf der Registerseite Daten wahrscheinlich für die beiden Eigenschaften Verknüpfen von und Verknüpfen nach den Wert KundeID an. Sollte dies nicht der Fall sein, holen Sie diese Einstellung nach.

Damit sorgen Sie dafür, dass nach dem Auswählen eines Kunden mit dem Kombinationsfeld der entsprechende Kundendatensatz im Unterformular sfm­Kundendaten angezeigt wird (siehe Bild 5).

Synchronisieren des ausgewählten Kunden mit dem Unterformular sfmKundendaten

Bild 5: Synchronisieren des ausgewählten Kunden mit dem Unterformular sfmKundendaten

Unterformular zur Anzeige der Bestellungen

Die Bestellungen werden ebenfalls in einem Unterformular angezeigt. Allerdings liegt hier keine 1:n-Beziehung wie bei den Tabellen tblBestellungen und tblKunden vor, sondern scheinbar eine m:n-Beziehung.

Warum scheinbar? Nun: Das Unterformular zur Anzeige der Bestellpositionen enthält in der Tat nur Daten der Verknüpfungstabelle tblBestellpositionen. Die Artikel, die über die Verknüpfungstabelle mit dem Datensatz der Tabelle tblBestellungen des Hauptformulars verknüpft werden, erscheinen nur in Form des im Nachschlagefeld ArtikelID der Tabelle tblBestellpositionen angezeigten Artikelnamens.

Die Datenherkunft des Unterformulars sfmBestellpositionen beschränkt sich daher auch die Tabelle tblBestellpositionen – legen Sie diese Tabelle also als Datenherkunft eines neuen Formulars namens sfmBestellpositionen fest.

Ziehen Sie die Felder ArtikelID, Einzelpreis, Mehrwertsteuersatz, Anzahl und Rabatt in den Entwurf des Formulars sfmBestellpositionen (siehe Bild 6).

Unterformular zur Eingabe von Bestellpositionen

Bild 6: Unterformular zur Eingabe von Bestellpositionen

Stellen Sie außerdem die Eigenschaft Standardansicht für dieses Formular auf den Wert Datenblatt ein. Diese Ansicht zeigt alle Steuerelemente an, die sich im Detailbereich des Formulars befinden, daher dürfen Sie Felder wie BestellpositionID oder BestellungID gar nicht erst hinzu. Es reicht, wenn diese in der Datenherkunft enthalten sind, um etwa den Inhalt des Unterformulars über das Fremdschlüsselfeld BestellungID des Unterformulars mit dem Hauptformular zu verknüpfen.

Beachten Sie, dass auch hier das Feld ArtikelID als Kombinationsfeld ausgeführt wird. Auf diese Weise können Sie später leicht den gewünschten Artikel zu einer Bestellung hinzufügen.

In der Datenblattansicht verwendet Access die Bezeichnungsfelder als Spaltenüberschriften. Sie sollten diese daher vorher entsprechend anpassen – so können Sie Mehrwertsteuersatz in MwSt.-Satz ändern oder ArtikelID in Artikel.

Nun schließen Sie das Unterformular sfmBestellpositionen, öffnen das Formular frmBestellungen in der Entwurfsansicht und ziehen das Unterformular aus dem Datenbankfenster beziehungsweise dem Navigationsbereich von Access in den Detailbereich des Hauptformulars.

Markieren Sie das Unterformular-Steuerelement, um zu prüfen, ob das Eigenschaftsfenster für die beiden Eigenschaften Verknüpfen von und Verknüpfen nach jeweils den Wert BestellungID anzeigt (siehe Bild 7). Nur dann zeigt das Unterformular genau die Bestellpositionen zum im Hauptformular enthaltenen Bestellvorgang an. Sollten diese Eigenschaften nicht den Wert BestellungID enthalten, stellen Sie diese nun entsprechend ein.

Haupt- und Unterformular in der Entwurfsansicht

Bild 7: Haupt- und Unterformular in der Entwurfsansicht

Anschließend können Sie bereits in die Formularansicht des Formulars frmBestellungen wechseln und die erste Bestellung anlegen (siehe Bild 8). Dazu wählen Sie im Hauptformular zunächst den Kunden aus und tragen das Bestelldatum ein. Danach wählen Sie mit dem Kombinationsfeld des Unterformulars sfmBestellpositionen die gewünschten Artikel für die Bestellung aus. Leider fehlt hier noch etwas: Die Felder Einzelpreis und Mehrwertsteuersatz werden noch nicht automatisch mit den Daten des ausgewählten Artikels gefüllt. Das Feld Anzahl könnten Sie mit dem Wert 1 vorbelegen, das Feld Rabatt mit dem Wert 0%.

Anlegen der ersten Bestellungen

Bild 8: Anlegen der ersten Bestellungen

Preis und Co. übernehmen

Damit das Unterformular gleich nach der Auswahl eines Artikels die gewünschten Werte für die Felder Einzelpreis, Mehrwertsteuersatz, Anzahl und Rabatt einträgt, wählen Sie für die Ereigniseigenschaft Nach Aktualisierung des Kombinationsfeldes ArtikelID (das Sie vorher auch noch in cboArtikelID umbenennen sollten) den Wert [Ereignisprozedur] aus und klicken dann auf die Schaltfläche mit den drei Punkten rechts von der Eigenschaft.

Es öffnet sich der VBA-Editor, der gleich die leere Ereignisprozedur anzeigt, die beim Auslösen des Ereignisses aufgerufen wird. Dieser Prozedur fügen Sie einige Zeilen hinzu, sodass diese anschließend wie in Listing 1 aussieht. Die erste Anweisung ermittelt mit der DLookup-Funktion den Wert des Mehrwertsteuersatz für den Datensatz der Tabelle tblArtikel, deren Feld ArtikelID mit dem entsprechenden Wert des aktuellen Eintrags des Kombinationsfeldes cboArtikelID übereinstimmt.

Private Sub cboArtikelID_AfterUpdate()

     Me!Mehrwertsteuersatz = DLookup("Mehrwertsteuersatz", "tblArtikel", "ArtikelID = " & Me!ArtikelID)

     Me!Einzelpreis = DLookup("Einzelpreis", "tblArtikel", "ArtikelID = " & Me!ArtikelID)

     Me!Anzahl = 1

     Me!Rabatt = 0

End Sub

Listing 1: Füllen der Felder einer neuen Bestellposition

Das Gleiche erledigt die zweite Zeile für den Einzelpreis. Die dritte Zeile stellt die Anzahl auf den Wert 1 und die vierte den Wert des Feldes Rabatt auf 0 ein. Danach können Sie die Artikel erneut auswählen oder neue Artikel hinzufügen, um die Daten nachzutragen (siehe Bild 9).

Übernahme von Artikeldaten und Einstellen von Standardwerten

Bild 9: Übernahme von Artikeldaten und Einstellen von Standardwerten

Keine Bestellpositionen ohne Bestellung

Wenn der Benutzer eine neue Bestellung anlegt, kann er im aktuellen Zustand des Formulars Bestellpositionen anlegen, ohne die eigentlichen Bestelldaten im Hauptformular einzugeben. Dadurch fügt er Einträge zur Tabelle tblBestellpositionen hinzu, die nicht mit der Tabelle tblBestellungen verknüpft sind, weil das Fremdschlüsselfeld BestellungID den Wert NULL hat. Dies führt dazu, dass auf diese Weise eingegebene Datensätze im Nirwana landen und zumindest nicht mehr über das Formular frmBestellungen aufgerufen werden können.

Gegenmaßnahmen für diesen Fall haben wir bereits im Artikel Datensätze in Unterformularen anlegen vorgestellt. Davon wählen wir für die aktuelle Konstellation die zweite Variante aus und deaktivieren das Unterformular einfach solange, bis der Benutzer entsprechende Daten im Hauptformular eingetragen hat. Dazu legen Sie drei Prozeduren für die Ereignisse Beim Anzeigen, Bei Geändert und Bei Rückgängig des Hauptformulars an:

Private Sub Form_Current()

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!