{"id":55000885,"date":"2013-06-01T00:00:00","date_gmt":"2020-05-22T21:35:45","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=885"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Flexible_Bestellungen_Formulare","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Flexible_Bestellungen_Formulare\/","title":{"rendered":"Flexible Bestellungen: Formulare"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/f1d70d5d96f5421f8f77dfaa8a564d56\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Die flexible Handhabung von Bestellungen, Lieferungen und Rechnungen basiert auf einem ausgefeilten Datenmodell. Genauso wichtig ist die Bereitstellung einer Benutzeroberfl&auml;che, die alle M&ouml;glichkeiten des Datenmodells aussch&ouml;pft. In diesem Beitrag lernen Sie die Formulare kennen, die das Aufnehmen von Bestellungen nach Kunde und Kostenstelle, die Erfassung von Lieferungen und die flexible Erstellung von Rechnungen erlauben.<\/b><\/p>\n<p>Im Beitrag <b>Flexible Bestellungen: Datenmodell <\/b>(<b>www.access-im-unternehmen.de\/882<\/b>)haben wir das Datenmodell einer einfachen Bestellverwaltung, n&auml;mlich der S&uuml;dsturm-Datenbank, so erweitert, dass Sie damit neben den eigentlichen Bestelldaten einige weitere Daten erfassen k&ouml;nnen:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Alle Kostenstellen eines Kunden<\/li>\n<li class=\"aufz-hlung\">Kostenstelle f&uuml;r jede Bestellposition<\/li>\n<li class=\"aufz-hlung\">Lieferungen<\/li>\n<li class=\"aufz-hlung\">Lieferpositionen<\/li>\n<li class=\"aufz-hlung\">Rechnungen<\/li>\n<li class=\"aufz-hlung\">Rechnungspositionen<\/li>\n<\/ul>\n<p>Diese Daten werden so in Tabellen abgelegt, dass Lieferungen und Rechnungen recht flexibel verarbeitet werden k&ouml;nnen. Wenn Sie das Datenmodell aufgestellt haben, steht das Fundament &#8211; es liegt jedoch noch einige Arbeit vor Ihnen. Wir gehen einmal davon aus, dass wir ein herk&ouml;mmliches Formular zur Erfassung der Bestellungen verwenden. Dieses wollen wir an dieser Stelle nicht n&auml;her beschreiben, sondern uns gleich auf die &uuml;brigen Formulare st&uuml;rzen, mit denen Sie die Lieferungen und die Rechnungsstellung organisieren.<\/p>\n<p><b>Der Optimalfall<\/b><\/p>\n<p>Im besten Fall liegen immer alle bestellbaren Artikel in ausreichender Anzahl vor. Wenn Sie eine Anwendung programmieren, die diesen Fall abdecken soll, sind Sie quasi bereits fertig &#8211; Sie k&ouml;nnen die Lieferscheine und die Rechnungen direkt aus den Bestelldaten f&uuml;llen und verarbeiten. Nun kommen einige von Ihnen und sagen: &#8222;Diesen Optimalfall kann es nicht geben! Niemand kann voraussehen, ob nicht irgendein Wahnsinniger auf einmal Tausende von Exemplaren eines bestimmten, schlecht lagerbaren Artikels bestellt!&euro; &#8211; &#8222;Doch, das geht! Haben Sie mal mit Downloadartikeln wie eBooks oder Software gehandelt&euro;<\/p>\n<p>Sie sehen: Nichts ist unm&ouml;glich. Wir wollen uns aber nicht auf diesen (nicht mehr allzu seltenen) Fall reduzieren, sondern etwas schaffen, mit dem auch die &uuml;brigen Menschen etwas anfangen k&ouml;nnen.<\/p>\n<p><b>Wenn das Regal leer ist<\/b><\/p>\n<p>In diesem Fall kommt fr&uuml;her oder sp&auml;ter eine Bestellung, die nicht sofort komplett beliefert werden kann, weil Artikel nicht mehr in ausreichender Zahl vorr&auml;tig sind. Dies kann man auch durch eine sorgf&auml;ltige Pflege der verf&uuml;gbaren Artikel nicht gew&auml;hrleisten. Mittlerweile h&auml;ngen so viele Abnehmer wie Onlineshop, Telefonverkauf, eBay et cetera an einer Warenwirtschaft, dass es sich kaum verhindern l&auml;sst, dass ein Artikel einmal mehr verkauft wird als er vorhanden ist.<\/p>\n<p>Doch das soll kein Problem sein: Zwar ist es f&uuml;r einen Kunden &auml;rgerlich, wenn er den gew&uuml;nschten Artikel nicht in der angegebenen Zeit erh&auml;lt, aber besser etwas sp&auml;ter als gar nicht.<\/p>\n<p>Also sehen wir in der Anwendung die M&ouml;glichkeit vor, dass eine Bestellung nicht vollst&auml;ndig geliefert werden kann. Gleichzeitig sollten wir den Fall abfangen, dass ein Kunde zwei oder mehr Bestellungen aufgibt, die in einer einzigen Lieferung durchgef&uuml;hrt werden k&ouml;nnen.<\/p>\n<p>Beim Zusammenstellen der Lieferungen betrachten wir also nicht die Bestellung eines Kunden, sondern alle bestellten und offenen Bestellungen dieses Kunden. Dabei kann es nat&uuml;rlich auch sein, dass ein Kunde an einem Tag eine Bestellung durchf&uuml;hrt, die bis auf eine Position auch versendet wird. Am n&auml;chsten Tag bestellt er erneut etwas. Praktischerweise soll der fehlende Artikel vom Vortag direkt mit dieser Sendung verschickt werden.<\/p>\n<p><b>Von der Bestellposition zur Lieferposition<\/b><\/p>\n<p>Um dies zu erledigen, brauchen wir ein Formular, das alle offenen Bestellpositionen eines Kunden anzeigt und diese zur &Uuml;bernahme in einer Lieferung anbietet. Dazu ben&ouml;tigen wir zumindest eine Liste aller offenen Bestellpositionen. Wie verarbeiten wir diese dann weiter Es w&auml;ren beispielsweise folgende Optionen denkbar:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Die Positionen werden in einem Unterformular in der Datenblattansicht aufgelistet und mit einem zus&auml;tzlichen Steuerelement versehen, mit dem die zu liefernden Positionen markiert werden k&ouml;nnen.<\/li>\n<li class=\"aufz-hlung\">Wir verwenden zwei Listenfelder, wobei die Eintr&auml;ge der Tabelle <b>tblBestellpositionen<\/b> in einer Liste angezeigt werden und die zu liefernden Positionen in die andere Liste gezogen werden.<\/li>\n<li class=\"aufz-hlung\">Man k&ouml;nnte auch zwei Unterformulare (oben f&uuml;r die bestellten Artikel, unten f&uuml;r die zu liefernden Artikel) verwenden, wobei die Eintr&auml;ge des oberen per Doppelklick zum unteren Unterformular hinzugef&uuml;gt werden.<\/li>\n<\/ul>\n<p>Weiter hinten schauen wir uns an, wie die dritte L&ouml;sung umgesetzt wird. Sie erlaubt es gleichzeitig, die Anzahl der bestellten und der zu liefernden Artikel anzuzeigen und per bedingter Formatierung Fehlmengen farbig hervorzuheben.<\/p>\n<p><b>Rechnungen erstellen<\/b><\/p>\n<p>Schlie&szlig;lich sollen noch die Rechnungen erstellt werden. Dies erfolgt auf Basis der gelieferten Artikel. Diese werden ja komplett in der Tabelle <b>tblLieferpositionen <\/b>gespeichert, die &uuml;ber die Tabelle <b>tblLieferungen <\/b>weitere Informationen &uuml;ber den Lieferzeitpunkt referenziert.<\/p>\n<p>Ein Formular soll nun alle noch nicht bezahlten Lieferpositionen eines Kunden anzeigen und deren Auswahl f&uuml;r die Zusammenstellung der Rechnungspositionen erlauben. Auch dieses Formular sehen wir uns weiter unten im Detail an.<\/p>\n<p><b>Formular zum Zusammenstellen von Lieferungen<\/b><\/p>\n<p>Das Formular <b>frmLieferungen<\/b> zeigt die einzelnen Lieferungsdatens&auml;tze an und enth&auml;lt zwei Unterformulare. Das erste Unterformular hei&szlig;t <b>frmBestellpositionenOffen <\/b>und soll alle Eintr&auml;ge der Tabelle <b>tblPositionen<\/b> anzeigen, die noch nicht oder noch nicht vollst&auml;ndig geliefert wurden. Das bedeutet, dass wir alle Datens&auml;tze der Tabelle <b>tblLieferpositionen <\/b>heranziehen m&uuml;ssen, deren Feld <b>PositionID <\/b>die jeweilige Bestellposition referenziert, und deren Mengen vergleichen. Ist die Menge der gelieferten Artikel geringer als die bestellte, soll das Formular den Eintrag der Tabelle <b>tblPositionen <\/b>anzeigen.<\/p>\n<p>Das zweite Unterformular hei&szlig;t <b>frmLieferpositionen <\/b>und zeigt alle zur aktuellen Lieferung geh&ouml;renden Datens&auml;tze an. Der Aufbau des Formulars soll zun&auml;chst wie in Bild 1 aussehen, um die betroffenen Daten &uuml;berhaupt darzustellen. Sp&auml;ter legen wir Steuerelemente an, mit denen die Bestellpositionen leicht in die Lieferpositionen &uuml;bertragen werden k&ouml;nnen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FlexibleBestellungenFormulare-web-images\/pic007.png\" alt=\"pic007.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Erster Entwurf des Formulars frmLieferungen mit den zu liefernden und den in der aktuellen Lieferung enthaltenen Datens&auml;tzen<\/span><\/b><\/p>\n<p><b>Das Hauptformular frmLieferungen<\/b><\/p>\n<p>Das Hauptformular <b>frmLieferungen <\/b>ist an die Tabelle <b>tblLieferungen <\/b>gebunden und zeigt alle Felder dieser Tabelle im oberen Abschnitt des Detailbereichs an. Das Formular dient zum Anlegen neuer Lieferungen, kann aber auch zum Ansehen und Bearbeiten vorhandener Lieferungen dienen.<\/p>\n<p><b>Das Unterformular sfmBestellpositionenOffen <\/b><\/p>\n<p>Das oberste Unterformular des Hauptformulars <b>frmLieferungen <\/b>soll alle offenen Bestellpositionen f&uuml;r den im Hauptformular ausgew&auml;hlten Kunden anzeigen. Die Hauptaufgabe besteht nun darin, eine geeignete Datenherkunft f&uuml;r das Formular zu ermitteln.<\/p>\n<p>Diese soll alle Datens&auml;tze der Tabelle <b>tblPositionen <\/b>liefern, die noch nicht durch entsprechende Datens&auml;tze in der Tabelle <b>tblLieferpositionen <\/b>als vollst&auml;ndig ausgeliefert gekennzeichnet sind.<\/p>\n<p>Dazu eine kurze Erl&auml;uterung des Datenmodells: Dort gibt es neben der &uuml;blichen Tabelle zur Erfassung der Bestellpositionen, <b>tblPositionen<\/b>, eine &auml;hnliche Tabelle zur Eingabe der Lieferpositionen einer Lieferung (<b>tblLieferpositionen<\/b>).<\/p>\n<p>Diese referenziert direkt Bestellpositionen in der Tabelle <b>tblPositionen<\/b> und gibt an, wie viele der dort aufgef&uuml;hrten Mengen die Lieferung enth&auml;lt. Es kann also mehrere Lieferpositionen zu einer Bestellposition geben. Erst wenn die Summe der in jeder Lieferposition angegebenen Menge von Artikeln gleich der Menge der bestellten Artikel ist, soll die Bestellposition nicht mehr im oberen Unterformular angezeigt werden.<\/p>\n<p>Die ben&ouml;tigte Abfrage muss also die Summe der Menge der Artikel aller Lieferpositionen zusammenfassen, die sich auf eine Bestellposition beziehen, und pr&uuml;fen, ob deren Menge noch kleiner als die bestellte Menge ist.<\/p>\n<p>Dazu verwenden wir eine Abfrage mit einer Gruppierung. Diese sieht im Entwurf wie in Bild 2 aus und enth&auml;lt die drei Tabellen <b>tblBestellungen<\/b>, <b>tblPositionen <\/b>und <b>tblLieferpositionen<\/b>. Aus der Tabelle <b>tblBestellungen <\/b>bezieht die Abfrage das Bestelldatum sowie das Feld <b>KundeID<\/b>. &Uuml;ber dieses wollen wir sp&auml;ter alle Datens&auml;tze zu einem bestimmten Kunden ermitteln. Die Tabelle <b>tblPositionen <\/b>liefert die Felder <b>PositionID<\/b>, <b>ArtikelID <\/b>und <b>Menge<\/b>. Aus <b>tblLieferpositionen <\/b>stammt schlie&szlig;lich das Feld <b>Menge<\/b>.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FlexibleBestellungenFormulare-web-images\/pic008.png\" alt=\"pic008.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Formular zur Ermittlung der Summen der gelieferten Artikel zu einer Bestellposition<\/span><\/b><\/p>\n<p>Nun kann es sein, dass die Tabelle <b>tblLieferpositionen <\/b>keinen, einen oder mehrere Datens&auml;tze zu den in der Tabelle <b>tblPositionen <\/b>enthaltenen Bestellpositionen enth&auml;lt.<\/p>\n<p>Wenn keine Lieferposition vorliegt, geschieht ohne weitere Vorkehrungen Folgendes: Die Abfrage liefert keinen Datensatz zur&uuml;ck, da sie nur solche Daten anzeigt, f&uuml;r die in allen als Datenherkunft dienenden Tabellen Daten enthalten sind. Damit fielen aber gerade solche Bestellpositionen weg, die noch nicht geliefert wurden &#8211; was nicht gerade das Ziel dieser Abfrage ist.<\/p>\n<p>Damit es keine Rolle spielt, ob es bereits Lieferungen zu einer Bestellposition gibt oder nicht, passen wir also wie in der Abbildung die Verkn&uuml;pfungseigenschaften f&uuml;r die Beziehung zwischen den Tabellen <b>tblPositionen <\/b>und <b>tblBestellpositionen <\/b>an. Auf diese Weise bleibt das Feld <b>GelieferteMenge <\/b>der Abfrage schlicht leer, wenn kein passender Datensatz in der Tabelle <b>tblLieferpositionen <\/b>vorliegt.<\/p>\n<p>Der zweite Fall ist, dass es genau eine Lieferung f&uuml;r eine Bestellposition gibt. Das ist der Optimalfall: Bei der Lieferung wurde die gew&uuml;nschte Menge Artikel ber&uuml;cksichtigt, das Feld <b>Menge <\/b>enth&auml;lt in beiden Tabellen den gleichen Wert.<\/p>\n<p>Dummerweise erfolgen Lieferungen auch einzelner Bestellpositionen in mehreren Rutschen, sodass wir die Menge aller zu einer Bestellposition geh&ouml;renden Lieferpositionen summieren m&uuml;ssen. Und damit kommen wir zum Sinn einer Gruppierung in der Abfrage. Richten Sie diese ein, beispielsweise mit dem Eintrag <b>Summen <\/b>des Kontextmen&uuml;s des Abfrage-Entwurfsrasters, und legen Sie f&uuml;r das Feld <b>GelieferteMenge <\/b>in der Zeile <b>Funktion <\/b>den Wert <b>Summe <\/b>und in allen anderen Feldern den Wert <b>Gruppierung <\/b>fest.<\/p>\n<p>Angenommen, die Tabelle <b>tblLieferpositionen <\/b>enth&auml;lt einige manuell hinzugef&uuml;gte Datens&auml;tze wie in Bild 3 (analog haben wir zuvor einen passenden Datensatz in der Tabelle <b>tblLieferungen <\/b>angelegt). Dort wird mit dem Feld <b>BestellpositionID <\/b>die Bestellposition referenziert, auf die sich die unter <b>Menge <\/b>angegebene Anzahl gelieferter Artikel bezieht.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FlexibleBestellungenFormulare-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Beispieldaten f&uuml;r die Tabelle tblLieferpositionen<\/span><\/b><\/p>\n<p><!--30percent--><\/p>\n<p>In der Abfrage <b>qrySfmBestellpositionenOffenBase<\/b> sollten dann die Anzahlen der bestellten und der gelieferten Artikel gegen&uuml;bergestellt werden. Und genau so funktioniert es, wie Bild 4 zeigt. Dort erscheint genau f&uuml;r die drei Artikel, deren Lieferung wir manuell in die Tabelle <b>tblLieferpositionen <\/b>eingetragen haben, je ein Datensatz.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FlexibleBestellungenFormulare-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Anzeige der bestellten und der gelieferten Menge Artikel in der Datenherkunft eines Unterformulars<\/span><\/b><\/p>\n<p><b>Abfrage der Abfrage<\/b><\/p>\n<p>Das entspricht allerdings noch nicht vollst&auml;ndig dem gew&uuml;nschten Ergebnis: Wir wollten ja nur diejenigen Bestellpositionen erhalten, deren Lieferung noch nicht vollst&auml;ndig ausgef&uuml;hrt wurde.<\/p>\n<p>Also f&uuml;gen wir zum Feld <b>BestellteMenge<\/b> noch ein Kriterium hinzu, das in der bereits mit <b>GROUP BY <\/b>versehenen Abfrage als <b>HAVING<\/b>-Bedingung integriert wird:<\/p>\n<pre>&gt;Nz(Summe([tblLieferpositionen].[Menge]);0)<\/pre>\n<p>Damit erhalten wir das gew&uuml;nschte Ergebnis &#8211; die oberen beiden Datens&auml;tze der Abbildung verschwinden.<\/p>\n<p><b>Unterformular zur Anzeige der aktuellen Lieferpositionen<\/b><\/p>\n<p>Das Unterformular <b>sfmLieferpositionen <\/b>soll alle bereits zur im Hauptformular angezeigten Lieferung gelieferten Artikel auflisten. Die Datenherkunft des Formulars soll die <b>LieferpositionID<\/b>, das Bestelldatum, den Artikel und die gelieferte Menge als anzuzeigende Werte zur&uuml;ckgeben. Au&szlig;erdem ben&ouml;tigen wir im Unterformular noch das Feld <b>LieferungID<\/b>, um nur die Lieferpositionen zur aktuellen Lieferung des Hauptformulars herauszufiltern. Die Abfrage enth&auml;lt die drei verkn&uuml;pften Tabellen <b>tblBestellungen <\/b>(f&uuml;r das Bestelldatum), <b>tblBestellpositionen <\/b>und <b>tblLieferpositionen<\/b> (s. Bild 5).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FlexibleBestellungenFormulare-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Datenherkunft des Unterformulars zur Anzeige der erledigten Lieferpositionen einer Lieferung<\/span><\/b><\/p>\n<p>In den Detailbereich des Unterformulars nehmen Sie die Felder wie in Bild 6 auf und schlie&szlig;en das Unterformular.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FlexibleBestellungenFormulare-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Unterformular zur Anzeige der erledigten Lieferpositionen<\/span><\/b><\/p>\n<p><b>Haupt- und Unterformulare zusammenf&uuml;hren<\/b><\/p>\n<p>Folgt der interessanteste Schritt: Das Einf&uuml;gen der Unterformulare in das Hauptformular. &Ouml;ffnen Sie das Hauptformular <b>frmLieferungen <\/b>in der Entwurfsansicht und ziehen Sie die beiden Unterformulare <b>sfmLieferpositionenOffen <\/b>und <b>sfmLieferpositionen <\/b>untereinander in den Detailbereich des Formulars.<\/p>\n<p>Ein Wechsel in die Formularansicht zeigt, dass das Unterformular <b>sfmLieferpositionenOffen<\/b> noch nicht mit dem Hauptformular synchronisiert wird &#8211; normalerweise f&uuml;llt Access die beiden Eigenschaften <b>Verkn&uuml;pfen von <\/b>und <b>Verkn&uuml;pfen nach<\/b> des Unterformular-Steuerelements automatisch, wenn es eine Beziehung zwischen den Daten aus Haupt- und Unterformular erkennt.<\/p>\n<p>Dies ist in diesem Fall nicht m&ouml;glich &#8211; es gibt keine gemeinsamen Felder.<\/p>\n<p>Das Unterformular soll alle anstehenden Lieferpositionen f&uuml;r den Kunden der Lieferung im Hauptformular anzeigen. Also stellen Sie die entsprechenden Eigenschaften wie in Bild 7 jeweils auf das Feld <b>KundeID <\/b>ein.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FlexibleBestellungenFormulare-web-images\/pic009.png\" alt=\"pic009.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Herstellen der Synchronisierung zwischen Haupt- und Unterformular<\/span><\/b><\/p>\n<p>Beim Hinzuf&uuml;gen des Unterformulars <b>sfmLieferpositionen <\/b>hat es Access einfacher: Die Daten des Unterformulars sind &uuml;ber das Feld <b>LieferungID <\/b>mit dem gleichnamigen Feld des Hauptformulars verkn&uuml;pft, also wird dieses automatisch f&uuml;r die Verkn&uuml;pfungseigenschaften festgelegt.<\/p>\n<p>Ein Wechseln in die Formularansicht zeigt anhand der wenigen Beispieldatens&auml;tze in den Tabellen <b>tblLieferungen <\/b>und <b>tblLieferpositionen<\/b>, dass beide Formulare die gew&uuml;nschten Daten anzeigen (s. Bild 8). Im oberen Formular erscheinen alle bestellten, aber noch nicht vollst&auml;ndig gelieferten Positionen &#8211; und das gefiltert nach den Bestellungen des aktuellen Kunden. Das untere Formular zeigt alle bereits vollst&auml;ndig gelieferten Positionen an. Teilweise gelieferte Positionen erscheinen in beiden Listen, wobei oben die gesamte Bestellmenge und die bereits gelieferte Menge angezeigt werden.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FlexibleBestellungenFormulare-web-images\/pic005.png\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8: Haupt- und Unterformular arbeiten wie gew&uuml;nscht.<\/span><\/b><\/p>\n<p><b>Neue Lieferung anlegen<\/b><\/p>\n<p>Wenn Sie einen neuen Datensatz der Tabelle <b>tblLieferungen <\/b>im Hauptformular anzeigen, bleiben beide Unterformulare leer. Dies &auml;ndert sich erst, wenn Sie einen Wert f&uuml;r das Feld <b>KundeID <\/b>im Hauptformular ausw&auml;hlen. Das Unterformular <b>sfmLieferpositionenOffen <\/b>zeigt dann alle Lieferpositionen zur neuen Bestellung an.<\/p>\n<p>Nun ben&ouml;tigen wir nur noch eine einfache Methode, um die Positionen dieser Lieferung festzulegen. Eine Idee w&auml;re, einfach die Anzahl der zu liefernden Artikel in das Feld <b>Geliefert <\/b>des oberen Unterformulars einzutragen. Dummerweise basiert dieses Unterformular jedoch auf einer gruppierten Abfrage, die keine Aktualisierung zul&auml;sst.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Lieferung bearbeiten<\/p>\n<p>Nun fehlt nur noch eine entscheidende Funktion &#8211; n&auml;mlich die zum Hinzuf&uuml;gen der bestellten Positionen zu den gelieferten Positionen. Dabei ist zu ber&uuml;cksichtigen, dass entweder alle oder eine bestimmte Anzahl der Artikel einer Bestellposition in eine Lieferung aufgenommen werden k&ouml;nnen. Da diese Funktion f&uuml;r jeden Artikel einzeln angeboten werden soll, gibt es folgende M&ouml;glichkeiten:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Der Benutzer markiert die zu bearbeitende Bestellposition und klickt dann auf eine Schaltfl&auml;che zum Hinzuf&uuml;gen zur Lieferliste.<\/li>\n<li class=\"aufz-hlung\">Der Benutzer klickt einfach auf den Bestelldatensatz, um einen einzigen Artikel, und doppelt, um alle Artikel zur Lieferliste hinzuzuf&uuml;gen.<\/li>\n<li class=\"aufz-hlung\">Wir stellen f&uuml;r jede Zeile zwei Schaltfl&auml;chen bereit, mit welcher der Benutzer einen oder alle Artikel der aktuellen Bestellpositionen zur Lieferung hinzuf&uuml;gen kann.<\/li>\n<\/ul>\n<p>Der erste Vorschlag bedeutet je nach Anzahl der Bestellpositionen eine Menge Mausbewegungen. Der zweite ist gut, allerdings wenig intuitiv. Der dritte ist optimal, aber schwer umzusetzen. Wie soll man Schaltfl&auml;chen in der Datenblattansicht unterbringen<\/p>\n<p><b>Per Schaltfl&auml;che liefern<\/b><\/p>\n<p>Wir probieren es dennoch &#8211; auch wenn absehbar ist, dass das Ergebnis eher zweckorientiert als h&uuml;bsch aussehen wird. Statt Schaltfl&auml;chen soll jeder Eintrag des oberen Formulars am Ende einmal ein Feld mit dem Wert <b>+ <\/b>und einmal mit dem Wert <b>++ <\/b>enthalten.<\/p>\n<p>Damit dies f&uuml;r jeden Datensatz gelingt, m&uuml;ssen wir diese Zeichenketten in die als Datenherkunft verwendete Abfrage integrieren. Dies erledigen Sie, indem Sie die Abfrage <b>qrySfmBestellpositionenOffnen <\/b>wie in Bild 9 anpassen. F&uuml;gen Sie einfach zwei Felder hinzu, welche die folgenden Ausdr&uuml;cke enthalten:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FlexibleBestellungenFormulare-web-images\/pic006.png\" alt=\"pic006.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9: Datenherkunft zur Anzeige von + und ++ anpassen<\/span><\/b><\/p>\n<pre>PlusEins: &quot;+&quot;\r\nPlusAlle: &quot;++&quot;<\/pre>\n<p>Diese beiden Felder m&uuml;ssen Sie nat&uuml;rlich auch zum Detailbereich des Unterformulars <b>sfmBestellpositionenOffen <\/b>hinzuf&uuml;gen. Damit als Spalten&uuml;berschrift ebenfalls die Zeichenketten <b>+ <\/b>und <b>++ <\/b>erscheinen, stellen Sie die Bezeichnungsfelder im Entwurf des Unterformulars wie in Bild 10 ein.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FlexibleBestellungenFormulare-web-images\/pic010.png\" alt=\"pic010.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10: Hinzuf&uuml;gen der &#8222;Schaltfl&auml;chen&euro; zum Unterformular<\/span><\/b><\/p>\n<p>Diese als Schaltfl&auml;chenersatz angelegten Textfelder erscheinen, wenn Sie die Ausrichtung zentrieren, wie in Bild 11.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FlexibleBestellungenFormulare-web-images\/pic011.png\" alt=\"pic011.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 11: Unterformular mit Schaltfl&auml;chen zum Hinzuf&uuml;gen von Bestellpositionen zur Lieferung<\/span><\/b><\/p>\n<p>Nun soll die erste &#8222;Schaltfl&auml;che&euro; (+) eines jeden Datensatzes daf&uuml;r sorgen, dass ein Artikel der aktuellen Bestellposition zu einer bestehenden oder noch anzulegenden Lieferposition hinzugef&uuml;gt wird. Die zweite (++) soll alle verbleibenden Artikel der aktuellen Bestellposition zur Lieferung hinzuf&uuml;gen. Dazu legen Sie f&uuml;r die Ereignisprozedur <b>Beim Klicken <\/b>der beiden Textfelder jeweils eine neue Ereignisprozedur an. Die Prozedur zum Hinzuf&uuml;gen eines einzigen Artikels zu einer Lieferposition sieht so aus:<\/p>\n<pre>Private Sub PlusEins_Click()\r\n    ArtikelAnLieferposition 1\r\nEnd Sub<\/pre>\n<p>Sie ruft eine weitere Prozedur namens <b>ArtikelAnLieferposition <\/b>auf, welche die Anzahl der zu &uuml;bertragenden Artikel als Parameter erwartet &#8211; in diesem Fall genau einer. Die zweite Prozedur besitzt ein paar Zeilen mehr. Das liegt daran, dass sie erst noch ermitteln muss, wie viele Artikel die aktuelle Bestellposition enth&auml;lt und welche Menge schon geliefert ist. Daraus bildet sie die Differenz und &uuml;bergibt das Ergebnis ebenfalls an die Prozedur <b>ArtikelAnLieferposition<\/b>:<\/p>\n<pre>Private Sub PlusAlle_Click()\r\n    Dim lngMenge As Long\r\n    lngMenge = Me!BestellteMenge - Nz(Me!GelieferteMenge)\r\n    ArtikelAnLieferposition lngMenge\r\nEnd Sub<\/pre>\n<p>Fehlt noch die von beiden Ereignisprozeduren referenzierte Prozedur. Diese sieht wie in <span class=\"verweis-ohneumbruch\"><a href=\"#anker-71-anchor\">Listing 1<\/a><\/span> aus und erwartet die Menge der zur Lieferung hinzuzuf&uuml;genden Artikel als Parameter. Die Prozedur pr&uuml;ft, ob der mit <b>lngMenge <\/b>&uuml;bergebene Wert &uuml;berhaupt gr&ouml;&szlig;er <b>0 <\/b>ist. Falls nicht, ist nichts zu tun und die Prozedur endet, da die Bedingung nicht erf&uuml;llt wurde.<\/p>\n<p class=\"listingueberschrift\">Listing 1: Eintragen neuer Daten in die Tabelle tblLieferpositionen<\/p>\n<pre>Private Sub ArtikelAnLieferposition(lngMenge As Long)\r\n    Dim db As DAO.Database\r\n    Dim strSQL As String\r\n    If lngMenge &gt; 0 Then\r\n        Set db = CurrentDb\r\n        strSQL = &quot;UPDATE tblLieferpositionen SET Menge = Menge + &quot; &amp; lngMenge _\r\n            &amp; &quot; WHERE LieferungID = &quot; &amp; Me.Parent!lieferungID &amp; &quot; AND BestellpositionID = &quot; _\r\n            &amp; Me!BestellpositionID\r\n        db.Execute strSQL, dbFailOnError\r\n        If db.RecordsAffected = 0 Then\r\n            strSQL = &quot;INSERT INTO tblLieferpositionen(LieferungID, BestellpositionID, Menge) &quot; _\r\n                &amp; &quot;VALUES(&quot; &amp; Me.Parent.lieferungID &amp; &quot;, &quot; &amp; Me!BestellpositionID &amp; &quot;, &quot; &amp; lngMenge &amp; &quot;)&quot;\r\n            db.Execute strSQL, dbFailOnError\r\n        End If\r\n        Set db = Nothing\r\n        Me.Requery\r\n        Me.Parent!sfmLieferpositionen.Form.Requery\r\n    End If\r\nEnd Sub<\/pre>\n<p>Ist <b>lngMenge <\/b>gr&ouml;&szlig;er als <b>0<\/b>, stellt die Prozedur zun&auml;chst einen SQL-Ausdruck f&uuml;r den Fall zusammen, dass bereits eine Lieferungsposition f&uuml;r diese Bestellposition angelegt wurde. Diese <b>UPDATE<\/b>-Abfrage f&uuml;gt dem Feld <b>Menge <\/b>die in <b>lngMenge <\/b>enthaltene Anzahl Artikel hinzu, und zwar f&uuml;r Datens&auml;tze, deren Feld <b>LieferungID <\/b>zum aktuell im Hauptformular bearbeiten Datensatz aus der Tabelle <b>tblLieferungen <\/b>stammt und deren <b>BestellpositionID <\/b>mit dem gleichnamigen Feld der aktuellen Bestellposition &uuml;bereinstimmt.<\/p>\n<p>Nach der Ausf&uuml;hrung dieser Abfrage pr&uuml;ft die Prozedur, wie viele Datens&auml;tze davon betroffen waren. Lautet der Wert <b>0<\/b>, liegt wohl noch kein Lieferdatensatz f&uuml;r diesen Bestelldatensatz vor. In diesem Fall legt die Prozedur mit einer <b>INSERT INTO<\/b>-Abfrage einen entsprechenden neuen Datensatz an und tr&auml;gt f&uuml;r diesen auch gleich die mit <b>lngMenge <\/b>&uuml;bergebene Menge Artikel ein. Schlie&szlig;lich aktualisiert die Abfrage mit der <b>Requery<\/b>-Methode noch das aktuelle Formular und schlie&szlig;lich auch das Unterformular zur Anzeige der Lieferpositionen.<\/p>\n<p>Fertig &#8211; Lieferungen lassen sich nun ganz einfach mit wenigen Mausklicks zusammenstellen.<\/p>\n<p><b>Rechnungen verwalten<\/b><\/p>\n<p>Der letzte Punkt zum Thema Formular sind die Formulare zur Rechnungsverwaltung. Auch hier finden Sie wieder ein Hauptformular und zwei Unterformulare. Das Hauptformular hei&szlig;t <b>frmRechnungen<\/b> und zeigt die Hauptdaten der Rechnung an. Die Daten stammen aus den Feldern <b>RechnungID<\/b>, <b>KundeID <\/b>und <b>Rechnungsdatum <\/b>der Tabelle <b>tblRechnungen<\/b>. Die drei Felder bringen wir im oberen Bereich des Formulars <b>frmRechnungen <\/b>unter.<\/p>\n<p>Darunter folgt ein Unterformular namens <b>sfmLieferpositionenOffen<\/b>. Dieses soll alle Eintr&auml;ge der Tabelle <b>tblLieferungen <\/b>anzeigen, die zu dem f&uuml;r die neue Rechnung ausgew&auml;hlten Kunden geh&ouml;ren und noch nicht bezahlt wurden.<\/p>\n<p>Schlie&szlig;lich soll das untere Unterformular namens <b>sfmRechnungspositionen <\/b>alle Rechnungspositionen f&uuml;r die im Hauptformular angezeigte Rechnung anzeigen. Bevor wir auf die Details eingehen, finden Sie in in Bild 12 den Entwurf von Haupt- und Unterformularen im &Uuml;berblick.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FlexibleBestellungenFormulare-web-images\/pic012.png\" alt=\"pic012.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 12: Formulare zum Verwalten der Rechnungen im Entwurf<\/span><\/b><\/p>\n<p><b>Unterformular mit offenen Positionen<\/b><\/p>\n<p>Das Unterformular <b>sfmLieferpositionenOffen <\/b>soll alle Datens&auml;tze der Tabelle <b>tblLieferpositionen <\/b>anzeigen, die noch nicht in einer Rechnung erfasst wurden.<\/p>\n<p>In diesem Fall sollten nicht wie bei den Lieferpositionen eine Bestellposition auf mehrere Lieferpositionen aufgeteilt werden. Stattdessen entspricht jede Rechnungsposition genau einer Lieferposition.<\/p>\n<p>Die als Datenherkunft f&uuml;r das Unterformular verwendete Abfrage hei&szlig;t <b>qryFrmLieferpositionenOffen<\/b> und sieht wie in Bild 13 aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FlexibleBestellungenFormulare-web-images\/pic013.png\" alt=\"pic013.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 13: Datenherkunft der f&uuml;r die Abrechnung bereitstehenden Bestellpositionen<\/span><\/b><\/p>\n<p>Damit alle wichtigen Informationen zur Lieferposition vorliegen, liefert die Abfrage Daten aus den Tabellen <b>tblLieferungen<\/b>, <b>tblBestellpositionen <\/b>und <b>tblLieferpositionen<\/b>. Die Tabelle <b>tblRechnungspositionen <\/b>hat nur eine Aufgabe: Die Abfrage soll keine Datens&auml;tze liefern, f&uuml;r die bereits eine Rechnungsposition existiert. Dies ist genau dann der Fall, wenn die Tabelle <b>tblRechnungspositionen <\/b>den entsprechenden Eintrag der Tabelle <b>tblLieferpositionen <\/b>&uuml;ber das Fremdschl&uuml;sselfeld <b>LieferpositionID <\/b>referenziert.<\/p>\n<p>Damit die Abfrage alle Datens&auml;tze liefert &#8211; auch solche, f&uuml;r die es keinen passenden Eintrag in der Tabelle <b>tblRechnungspositionen <\/b>gibt -, stellen Sie die Verkn&uuml;pfungseigenschaften f&uuml;r die Beziehung zwischen den Tabellen <b>tblRechnungspositionen <\/b>und <b>tblLieferpositionen <\/b>entsprechend ein.<\/p>\n<p>Die Abfrage liefert nun alle Datens&auml;tze der Tabelle <b>tblLieferpositionen<\/b>, auch solche, f&uuml;r die kein Eintrag in der Tabelle <b>tblRechnungspositionen <\/b>vorliegt (s. Bild 14).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FlexibleBestellungenFormulare-web-images\/pic014.png\" alt=\"pic014.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 14: Lieferpositionen, von denen bereits eine als Rechnungsposition markiert ist<\/span><\/b><\/p>\n<p>Somit m&uuml;ssen wir nun nur noch diejenigen Datens&auml;tze aus dem Ergebnis herausfiltern, die bereits in einer Rechnung enthalten sind. Kein Problem: Dazu f&uuml;gen Sie dem Feld <b>RechnungspositionID <\/b>als Kriterium den Ausdruck <b>Ist Null <\/b>hinzu.<\/p>\n<p>&auml;hnlich wie beim Formular zur Verwaltung von Lieferungen soll das obere Unterformular auch wieder nur solche Lieferpositionen anzeigen, die zu dem aktuell im Hauptformular angezeigten Kunden geh&ouml;ren. Dazu stellen Sie wiederum die beiden Eigenschaften <b>Verkn&uuml;pfen von <\/b>und <b>Verkn&uuml;pfen nach <\/b>auf den Wert <b>KundeID <\/b>ein.<\/p>\n<p><b>Unterformular zur Anzeige der Rechnungspositionen<\/b><\/p>\n<p>Das Unterformular <b>sfmRechnungspositionen <\/b>soll alle bereits der Rechnung zugewiesenen Rechnungen ausgeben. Dazu verwendet es als Datenherkunft die Abfrage <b>qrySfmRechnungen<\/b> (s. Bild 15). Die Abfrage liefert die Felder <b>RechnungspositionID <\/b>und <b>RechnungID <\/b>aus der Tabelle <b>tblRechnungspositionen <\/b>und die Felder <b>ArtikelID<\/b>, <b>KostenstelleID<\/b>, <b>Einzelpreis<\/b>, <b>Rabatt <\/b>und <b>Mehrwertsteuer <\/b>aus der Tabelle <b>tblBestellpositionen<\/b>. Fehlt noch die <b>Menge<\/b>. Die entnehmen wir nat&uuml;rlich nicht der Tabelle <b>tblBestellpositionen<\/b>, denn sie kann ja auf mehrere Eintr&auml;ge der Tabelle <b>tblLieferpositionen <\/b>aufgeteilt worden sein. Genau diese Tabelle liefert auch den fehlenden Wert f&uuml;r die Rechnungsdatens&auml;tze.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FlexibleBestellungenFormulare-web-images\/pic015.png\" alt=\"pic015.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 15: Die Datenherkunft des Unterformulars sfmRechnungspositionen<\/span><\/b><\/p>\n<p><b>Von der Lieferung zur Rechnung<\/b><\/p>\n<p>Es fehlt wiederum eine M&ouml;glichkeit, Lieferdatens&auml;tze schnell zur aktuellen Rechnung hinzuzuf&uuml;gen. Im Gegensatz zur vorherigen Aufgabenstellung sollen diesmal nur komplette Lieferdatens&auml;tze in Rechnungsdatens&auml;tze &uuml;berf&uuml;hrt werden. Also f&uuml;gen wir der Abfrage <b>qrySfmLieferpositionenOffen <\/b>ein Feld mit folgendem Inhalt hinzu:<\/p>\n<pre>ZurRechnung: &quot;Zur Rechnung&quot;<\/pre>\n<p>Im Formularentwurf des Unterformulars <b>sfmLieferpositionenOffen <\/b>legen Sie ein entsprechendes Textfeld f&uuml;r dieses Feld an. Versehen Sie es wieder mit einer Prozedur f&uuml;r die Ereigniseigenschaft <b>Beim Klicken<\/b> (s. Bild 16).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FlexibleBestellungenFormulare-web-images\/pic016.png\" alt=\"pic016.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 16: Verwalten von Rechnungen<\/span><\/b><\/p>\n<p>Diese ben&ouml;tigt nur eine <b>INSERT INTO<\/b>-Anweisung, um der Tabelle <b>tblRechnungspositionen <\/b>einen neuen Datensatz hinzuzuf&uuml;gen. Dieser enth&auml;lt als <b>RechnungID <\/b>den Wert des gleichnamigen Feldes des &uuml;bergeordneten Formulars und als <b>LieferpositionID <\/b>den Wert des aktuellen Datensatzes.<\/p>\n<p>Anschlie&szlig;end aktualisiert die Prozedur noch die beiden Unterformulare, damit der Lieferdatensatz scheinbar von einem zum anderen Unterformular verschoben wird (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-76-anchor\">Listing 2<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 2: Eintragen neuer Daten in die Tabelle tblRechnungspositionen<\/p>\n<pre>Private Sub ZurRechnung_Click()\r\n    Dim db As DAO.Database\r\n    Set db = CurrentDb\r\n    db.Execute &quot;INSERT INTO tblRechnungspositionen(RechnungID, LieferpositionID) VALUES(&quot; _\r\n        &amp; Me.Parent!rechnungID &amp; &quot;, &quot; &amp; Me!LieferpositionID &amp; &quot;)&quot;, dbFailOnError\r\n    Me.Requery\r\n    Me.Parent!sfmRechnungspositionen.Form.Requery\r\n    Set db = Nothing\r\nEnd Sub<\/pre>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Damit sind wir am Ende dieses grundlegenden Teils zur Beschreibung der Formulare zum Verwalten von Bestellungen, Lieferungen und Rechnungen angelangt.<\/p>\n<p>Es gibt noch eine Reihe von M&ouml;glichkeiten, diese Formulare optisch und funktionell zu optimieren.<\/p>\n<p>So k&ouml;nnte man etwa noch Schaltfl&auml;chen hinzuf&uuml;gen, mit denen man gleichzeitig alle Bestellungen zu einer Lieferung oder Lieferungen zu einer Rechnung hinzuf&uuml;gen kann. Hier ging es jedoch zun&auml;chst um die grundlegenden Techniken, die im Datenmodell gelieferten Tabellen mit entsprechenden Formularen zu f&uuml;llen.<\/p>\n<p>In einem weiteren Teil sehen wir uns noch an, wie die Berichte f&uuml;r die einzelnen Zwischenst&auml;nde erstellt werden k&ouml;nnen &#8211; also beispielsweise ein Lieferschein oder eine Rechnung.<\/p>\n<p>Zus&auml;tzlich sehen wir dort noch M&ouml;glichkeiten vor, gelieferte oder in Rechnung gestellte Positionen als solche zu markieren.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>FlexibleBestellungen.mdb<\/p>\n<p>FlexibleBestellungen.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{045FD94E-3FE6-434D-B4C2-588E291B53C2}\/aiu_885.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die flexible Handhabung von Bestellungen, Lieferungen und Rechnungen basiert auf einem ausgefeilten Datenmodell. Genauso wichtig ist die Bereitstellung einer Benutzeroberfl&auml;che, die alle M&ouml;glichkeiten des Datenmodells aussch&ouml;pft. In diesem Beitrag lernen Sie die Formulare kennen, die das Aufnehmen von Bestellungen nach Kunde und Kostenstelle, die Erfassung von Lieferungen und die flexible Erstellung von Rechnungen erlauben.<\/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":[662013,66032013,44000023],"tags":[],"class_list":["post-55000885","post","type-post","status-publish","format-standard","hentry","category-662013","category-66032013","category-Mit_Formularen_arbeiten"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Flexible Bestellungen: Formulare - 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\/Flexible_Bestellungen_Formulare\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Flexible Bestellungen: Formulare\" \/>\n<meta property=\"og:description\" content=\"Die flexible Handhabung von Bestellungen, Lieferungen und Rechnungen basiert auf einem ausgefeilten Datenmodell. Genauso wichtig ist die Bereitstellung einer Benutzeroberfl&auml;che, die alle M&ouml;glichkeiten des Datenmodells aussch&ouml;pft. In diesem Beitrag lernen Sie die Formulare kennen, die das Aufnehmen von Bestellungen nach Kunde und Kostenstelle, die Erfassung von Lieferungen und die flexible Erstellung von Rechnungen erlauben.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Flexible_Bestellungen_Formulare\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:35:45+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/f1d70d5d96f5421f8f77dfaa8a564d56\" \/>\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\\\/Flexible_Bestellungen_Formulare\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Flexible_Bestellungen_Formulare\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Flexible Bestellungen: Formulare\",\"datePublished\":\"2020-05-22T21:35:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Flexible_Bestellungen_Formulare\\\/\"},\"wordCount\":3949,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Flexible_Bestellungen_Formulare\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/f1d70d5d96f5421f8f77dfaa8a564d56\",\"articleSection\":[\"2013\",\"3\\\/2013\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Flexible_Bestellungen_Formulare\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Flexible_Bestellungen_Formulare\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Flexible_Bestellungen_Formulare\\\/\",\"name\":\"Flexible Bestellungen: Formulare - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Flexible_Bestellungen_Formulare\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Flexible_Bestellungen_Formulare\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/f1d70d5d96f5421f8f77dfaa8a564d56\",\"datePublished\":\"2020-05-22T21:35:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Flexible_Bestellungen_Formulare\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Flexible_Bestellungen_Formulare\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Flexible_Bestellungen_Formulare\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/f1d70d5d96f5421f8f77dfaa8a564d56\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/f1d70d5d96f5421f8f77dfaa8a564d56\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Flexible_Bestellungen_Formulare\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Flexible Bestellungen: Formulare\"}]},{\"@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":"Flexible Bestellungen: Formulare - 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\/Flexible_Bestellungen_Formulare\/","og_locale":"de_DE","og_type":"article","og_title":"Flexible Bestellungen: Formulare","og_description":"Die flexible Handhabung von Bestellungen, Lieferungen und Rechnungen basiert auf einem ausgefeilten Datenmodell. Genauso wichtig ist die Bereitstellung einer Benutzeroberfl&auml;che, die alle M&ouml;glichkeiten des Datenmodells aussch&ouml;pft. In diesem Beitrag lernen Sie die Formulare kennen, die das Aufnehmen von Bestellungen nach Kunde und Kostenstelle, die Erfassung von Lieferungen und die flexible Erstellung von Rechnungen erlauben.","og_url":"https:\/\/access-im-unternehmen.de\/Flexible_Bestellungen_Formulare\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:35:45+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/f1d70d5d96f5421f8f77dfaa8a564d56","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\/Flexible_Bestellungen_Formulare\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Flexible_Bestellungen_Formulare\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Flexible Bestellungen: Formulare","datePublished":"2020-05-22T21:35:45+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Flexible_Bestellungen_Formulare\/"},"wordCount":3949,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Flexible_Bestellungen_Formulare\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/f1d70d5d96f5421f8f77dfaa8a564d56","articleSection":["2013","3\/2013","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Flexible_Bestellungen_Formulare\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Flexible_Bestellungen_Formulare\/","url":"https:\/\/access-im-unternehmen.de\/Flexible_Bestellungen_Formulare\/","name":"Flexible Bestellungen: Formulare - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Flexible_Bestellungen_Formulare\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Flexible_Bestellungen_Formulare\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/f1d70d5d96f5421f8f77dfaa8a564d56","datePublished":"2020-05-22T21:35:45+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Flexible_Bestellungen_Formulare\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Flexible_Bestellungen_Formulare\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Flexible_Bestellungen_Formulare\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/f1d70d5d96f5421f8f77dfaa8a564d56","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/f1d70d5d96f5421f8f77dfaa8a564d56"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Flexible_Bestellungen_Formulare\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Flexible Bestellungen: Formulare"}]},{"@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\/55000885","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=55000885"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000885\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000885"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000885"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000885"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}