{"id":55000737,"date":"2010-08-01T00:00:00","date_gmt":"2020-05-22T22:07:07","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=737"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Preise_und_Mehrwertsteuer_verwalten","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Preise_und_Mehrwertsteuer_verwalten\/","title":{"rendered":"Preise und Mehrwertsteuer verwalten"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/f18bd62aa4894e2da373157f99761a31\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Eine besondere Anforderung an das Datenmodell und die Gestaltung der Formulare zur Bearbeitung der Daten stellt sich immer dann, wenn sich der Inhalt eines oder mehrerer Felder &auml;ndert, die bereits mit anderen Tabellen verkn&uuml;pft wurden. Ein Beispiel sind Bestellungen, und hier speziell die Preise von Artikeln: Diese werden meist mit der Zeit teurer, oder der Mehrwertsteuersatz &auml;ndert sich und hin und wieder gibt es W&auml;hrungsreformen. Welche Probleme dies mit sich bringt und wie Sie diese l&ouml;sen, zeigt dieser Beitrag.<\/b><\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Bestellungen verwalten &#8211; naive Variante<\/p>\n<p>Eine Artikeltabelle enth&auml;lt mindestens Informationen wie den Artikelnamen und den Preis des Artikels (s. Bild 2). Zur Vereinfachung verwenden wir zun&auml;chst keine separate Kundentabelle, deren Eintr&auml;ge wir &uuml;ber ein Fremdschl&uuml;sselfeld in der Tabelle <b>tblBestellungen <\/b>ausw&auml;hlen, sondern einfach nur ein Feld namens <b>Kunde <\/b>&#8211; dieses soll lediglich den Namen des Kunden aufnehmen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Die denkbar einfachste Variante einer Artikeltabelle<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Eine weitere Tabelle speichert die Basisdaten einer Bestellung.<\/span><\/b><\/p>\n<p>Wie kombinieren wir nun eine Bestellung mit den gew&uuml;nschten Artikeln Durch eine weitere Tabelle namens <b>tblBestellpositionen<\/b>. Diese enth&auml;lt zwei Fremdschl&uuml;sselfelder: Das erste hei&szlig;t <b>BestellungID <\/b>und verkn&uuml;pft die Tabelle mit dem Feld <b>BestellungID <\/b>der Tabelle <b>tblBestellungen<\/b>, das zweite hei&szlig;t <b>ArtikelID <\/b>und sorgt daf&uuml;r, dass Sie einer Bestellung Eintr&auml;ge aus der Tabelle <b>tblArtikel <\/b>zuweisen k&ouml;nnen. Das Feld <b>ArtikelID <\/b>der Tabelle <b>tblBestellpositionen <\/b>legen Sie als Nachschlagefeld aus, welches die Felder <b>ArtikelID <\/b>und <b>Artikel <\/b>der Tabelle <b>tblArtikel <\/b>enth&auml;lt &#8211; dies spart sp&auml;ter bei der Formulargestaltung einige Arbeit. Ein drittes Feld namens <b>Anzahl <\/b>enth&auml;lt die Anzahl des jeweiligen Artikels f&uuml;r diese Bestellung. Den Entwurf dieser Tabelle zeigt Bild 4 aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Die Tabelle tblBestellpositionen kombiniert Bestellungen und Artikel.<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Datenmodell der naiven Variante der Bestellverwaltung<\/span><\/b><\/p>\n<p>Sie finden diese Version der Bestellverwaltung &uuml;brigens in der Beispieldatei <b>PreiseVerwalten_1.mdb<\/b>. Da wir sp&auml;ter andere Versionen mit ge&auml;nderten Datenmodellen vorstellen, haben wir f&uuml;r jede Version eine eigene Beispieldatenbank angelegt.<\/p>\n<p>Das Verwalten von Bestellungen geschieht in Haupt- und Unterformular. Das Hauptformular verwendet die Tabelle <b>tblBestellungen<\/b> als Datenherkunft und zeigt all ihre Felder an. Das Unterformular verwendet die Abfrage aus AbbBild 5. 5 als Datenherkunft. Diese Abfrage enth&auml;lt alles, was wir brauchen: Das Feld <b>ArtikelID <\/b>der Tabelle <b>tblBestellpositionen<\/b>, um den gew&uuml;nschten Artikel auszuw&auml;hlen, das Feld <b>Anzahl <\/b>sowie das Feld <b>Preis <\/b>der Tabelle <b>tblArtikel <\/b>&#8211; diese soll nach dem Ausw&auml;hlen des Artikels den Preis beisteuern. Das erste Feld, <b>BestellungID<\/b>, wird im Unterformular nicht angezeigt, aber es soll die Beziehung zum Datensatz im Hauptformular herstellen &#8211; mehr dazu gleich.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic005.png\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Die neue Datenherkunft f&uuml;r das Unterformular<\/span><\/b><\/p>\n<p>Wenn Sie das Unterformular <b>sfmBestellungen <\/b>erstellt und mit den drei Feldern <b>ArtikelID<\/b>, <b>Anzahl <\/b>und <b>Preis <\/b>versehen haben, k&ouml;nnen Sie es zum Hauptformular hinzuf&uuml;gen. Dazu &ouml;ffnen Sie das Formular <b>frmBestellungen <\/b>in der Entwurfsansicht und ziehen das Unterformular <b>sfmBestellungen <\/b>per Drag and Drop aus dem Datenbankfenster (Access 2003 und &auml;lter) beziehungsweise dem Navigationsbereich (Access 2007 und j&uuml;nger) in den Detailbereich. Das Ergebnis soll etwa wie in Bild 6 aussehen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic006.png\" alt=\"pic006.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Entwurfsansicht des Formulars frmBestellungen mit dem Unterformular sfmBestellungen<\/span><\/b><\/p>\n<p>Wie sorgen Sie daf&uuml;r, dass das Unterformular nur solche Artikel anzeigt, die Sie f&uuml;r eine bestimmte Bestellung angelegt haben Dies erledigt Access unter den gegebenen Umst&auml;nden automatisch: Es erkennt, dass das Unterformular eine Datenherkunft enth&auml;lt, deren Fremdschl&uuml;sselfeld mit dem Prim&auml;rschl&uuml;sselfeld der Datenherkunft des Hauptformulars verkn&uuml;pft ist, und stellt die beiden Eigenschaften <b>Verkn&uuml;pfen von <\/b>und <b>Verkn&uuml;pfen nach <\/b>des Unterformular-Steuerelements auf die Namen der an der Verkn&uuml;pfung beteiligten Felder ein.<\/p>\n<p>Wenn Sie das Formular nun in der Formularansicht &ouml;ffnen und im Hauptformular eine Bestellung angelegt haben, k&ouml;nnen Sie &uuml;ber das Kombinationsfeld im Unterformular ganz einfach Artikel zur Bestellung hinzuf&uuml;gen (s. Bild 8).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic007.png\" alt=\"pic007.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Eingabe der Artikel einer Bestellung<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic008.png\" alt=\"pic008.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8: Die Einstellung des Standardwerts sorgt daf&uuml;r, dass das Feld beim Anlegen eines neuen Datensatzes den angegebenen Wert erh&auml;lt.<\/span><\/b><\/p>\n<p><b>Meldung bei doppelten Artikeln vermeiden<\/b><\/p>\n<p>Da wir weiter oben einen zusammengesetzten, eindeutigen Index f&uuml;r die beiden Felder <b>BestellungID <\/b>und <b>ArtikelID <\/b>der Tabelle <b>tblBestellpositionen <\/b>erstellt haben, zeigt Access eine Meldung an, wenn Sie versuchen, einen Artikel der gleichen Bestellung zweimal zuzuweisen.<\/p>\n<p>Diese Meldung ist f&uuml;r den Benutzer jedoch unter Umst&auml;nden nicht besonders aussagekr&auml;ftig, sodass wir diese durch eine eigene Meldung ersetzen. Auf diese Meldung k&ouml;nnen Sie im Ereignis <b>Bei Fehler <\/b>des Unterformulars reagieren. W&auml;hlen Sie f&uuml;r diese Eigenschaft des Unterformulars den Wert <b>[Ereignisprozedur] <\/b>aus und klicken Sie auf die Schaltfl&auml;che mit den drei Punkten. Der VBA-Editor &ouml;ffnet sich und zeigt gleich eine leere Prozedur an, die Access beim Auftreten eines Fehlers im Formular ausf&uuml;hrt.<\/p>\n<p>Erg&auml;nzen Sie diese Prozedur wie in <a href=\"#anker-44-anchor\">Listing 1<\/a>. Die erste Zeile pr&uuml;ft die Fehlernummer, die in unserem Fall <b>3022 <\/b>lautet. Die Fehlernummer finden Sie heraus, indem Sie in der gleichen Prozedur ganz oben die folgende Zeile einf&uuml;gen:<\/p>\n<pre>MsgBox &quot;Fehlernummer: &quot; &amp; DataErr<\/pre>\n<p class=\"listingueberschrift\">Listing 1: Abfangen des Fehlers, der beim mehrfachen Anlegen eines Artikels in derselben Bestellung ausgel&ouml;st wird<\/p>\n<pre>Private Sub Form_Error(DataErr As Integer, Response As Integer)\r\n    If DataErr = 3022 Then\r\n        MsgBox &quot;Sie haben diesen Artikel bereits zur Bestellung hinzugef&uuml;gt.&quot; &amp; vbCrLf &amp; vbCrLf _\r\n        &amp; &quot;&auml;ndern Sie die Anzahl, um den Artikel mehrfach zu bestellen.&quot;, _\r\n        vbOKOnly + vbExclamation, &quot;Doppelter Artikel&quot;\r\n        Me.Undo\r\n        Response = acDataErrContinue\r\n    End If\r\nEnd Sub<\/pre>\n<p>Die erste Zeile innerhalb der <b>If&#8230;Then<\/b>-Bedingung gibt eine Meldung aus, die den Benutzer darauf hinweist, dass er einen bereits vorhandenen Artikel zur Bestellung hinzugef&uuml;gt hat (s. Bild 9). Die zweite macht die zuletzt am aktuell bearbeiteten Datensatz durchgef&uuml;hrten &auml;nderungen r&uuml;ckg&auml;ngig (beim Neuanlegen einer Bestellposition wird diese wieder entfernt, und wenn der Benutzer den Artikel einer bereits bestehenden Bestellposition ge&auml;ndert hat, wird der zuvor ausgew&auml;hlte Artikel wiederhergestellt). Fertig: Sie k&ouml;nnen nun einfache Bestellungen eingeben.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic009.png\" alt=\"pic009.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9: Diese Meldung erscheint, wenn ein Artikel mehrfach zu einer Bestellung hinzugef&uuml;gt wird.<\/span><\/b><\/p>\n<p><b>Probleme beim &auml;ndern des Preises<\/b><\/p>\n<p>Mit der aktuellen L&ouml;sung geben Sie die Daten ein, die beispielsweise zum Erstellen von Berichten zur Ausgabe von Bestellscheinen oder Rechnungen n&ouml;tig sind (mit Ausnahme der Kundendaten: Wir haben hier nur den Kundennamen in die Tabelle <b>tblBestellungen <\/b>eingetragen &#8211; normalerweise w&uuml;rden wir hier auf eine Tabelle namens <b>tblKunden <\/b>mit den detaillierten Kundendaten verweisen).<\/p>\n<p>Diese L&ouml;sung funktioniert so lange zuverl&auml;ssig, bis sich der Preis eines Artikels &auml;ndert, der bereits in einer Bestellung erfasst wurde. Nehmen wir an, Sie h&auml;tten eine Bestellung aufgenommen, bei der ein Artikel 10 Euro kostet, und dem Kunden eine anschlie&szlig;end eine entsprechende Rechnung geschickt. Kurze Zeit sp&auml;ter erh&ouml;ht sich der Preis des Artikels auf 11 Euro. Der Kunde meldet sich, weil er die Rechnung verlegt hat und eine Kopie der Rechnung ben&ouml;tigt. Diese l&auml;sst sich aus der Anwendung heraus nun zwar noch erstellen, allerdings wird der neue Preis von 11 Euro f&uuml;r den Artikel ausgewiesen.<\/p>\n<p><b>Behandlung von Preis&auml;nderungen<\/b><\/p>\n<p>Grunds&auml;tzlich gibt es mehrere M&ouml;glichkeiten, das Problem zu umgehen. Die erste und einfachste ist, dass die Rechnung als PDF-Dokument ausgegeben und archiviert wird. Damit w&auml;re dem Auftragnehmer und auch dem Kunden gedient, denn beide k&ouml;nnen nun auf eine korrekte Version der Rechnung zugreifen.<\/p>\n<p><!--30percent--><\/p>\n<p>Sobald der Benutzer der Bestellverwaltung jedoch einmal eine Statistik etwa &uuml;ber den Umsatz erstellen m&ouml;chte und dabei die Tabellen <b>tblBestellungen<\/b>, <b>tblBestellpositionen <\/b>und <b>tblArtikel <\/b>hinzuzieht, erh&auml;lt er nach einer Preis&auml;nderung eines Artikels, der in einer Bestellung enthalten ist, ein falsches Ergebnis. Also m&uuml;ssen wir einen anderen Weg finden, um die Preise in irgendeiner Weise zu speichern. Dabei gibt es zwei Varianten:<\/p>\n<p class=\"aufz-hlung\">&euro;&#162; Die einfachere Variante verwendet ein Feld in der Tabelle <b>tblBestellpositionen<\/b>, das den zum Zeitpunkt der Bestellung g&uuml;ltigen Preis f&uuml;r den Artikel enth&auml;lt.<\/p>\n<p class=\"aufz-hlung\">&euro;&#162; Die zweite M&ouml;glichkeit ist das Speichern der verschiedenen Preise f&uuml;r einen Artikel im Laufe der Zeit. Dazu ist eine weitere Tabelle n&ouml;tig, welche den Preis und den Zeitraum der G&uuml;ltigkeit des Preises enth&auml;lt.<\/p>\n<p><b>Preis in der Bestellposition speichern<\/b><\/p>\n<p>Die Variante mit dem zus&auml;tzlichen Preis-Feld hat zus&auml;tzlich den Charme, dass Sie einen Preis je nach Kunde oder auch nach Bestellmenge mit einem individuellen Rabatt versehen k&ouml;nnen. Der Nachteil ist, dass es keine genauen Informationen dar&uuml;ber gibt, wann und wie sich der Preis eines Artikels im Laufe der Zeit ge&auml;ndert hat. Sie k&ouml;nnen lediglich den aktuellen Preis in der Tabelle <b>tblArtikel <\/b>betrachten. Einen zeitlichen Verlauf des Preises erhalten Sie nicht: Selbst das Kontrollieren aller in der Tabelle <b>tblBestellpositionen <\/b>gespeicherten Datens&auml;tze f&uuml;r diesen Artikel liefert keine genauen Informationen, wenn Sie dort auch die individuelle Rabattierung erlauben. Bild 10 zeigt die &auml;nderung der Tabelle <b>tblBestellpositionen<\/b> f&uuml;r diese Variante (diese Version finden Sie &uuml;brigens in der Beispieldatenbank <b>PreiseVerwalten_2.mdb<\/b>).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic010.png\" alt=\"pic010.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10: Die Tabelle tblBestellpositionen mit einem zus&auml;tzlichen Feld zum Speichern eines individuellen Artikelpreises<\/span><\/b><\/p>\n<p>Desweiteren &auml;ndert sich die Datenherkunft des Unterformulars im Formular <b>frmBestellungen<\/b>. Die Abfrage <b>qryBestellpositionen <\/b>sieht nunmehr wie in Bild 11 aus. Die Tabelle <b>tblArtikel<\/b> wird dort gar nicht mehr ben&ouml;tigt, da das f&uuml;r die Bestellung relevante Feld <b>Preis <\/b>bereits in der Tabelle <b>tblBestellpositionen <\/b>enthalten ist.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic011.png\" alt=\"pic011.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 11: Datenherkunft des Unterformulars zur Anzeige der Bestellpositionen<\/span><\/b><\/p>\n<p>Fehlt noch eine kleine &auml;nderung im Unterformular <b>sfmBestellungen<\/b>. Damit der Benutzer den Preis des Artikels nicht jedes Mal selbst eintragen muss, soll standardm&auml;&szlig;ig der aktuell in der Tabelle <b>tblArtikel <\/b>gespeicherte Preis in das Feld <b>Preis<\/b> der Tabelle <b>tblBestellpositionen <\/b>geschrieben werden. Dies gelingt leider nicht &uuml;ber die Einstellung eines entsprechenden Standardwerts, da diese Eigenschaft nur statische Werte oder Access-Funktionen, aber keine benutzerdefinierten Funktionen erlaubt. Wir m&uuml;ssen also daf&uuml;r sorgen, dass das Unterformular beim Anlegen eines neuen Datensatzes in der Tabelle <b>tblBestellpositionen <\/b>und hier speziell nach dem Ausw&auml;hlen eines neuen Artikels den aktuellen Preis des hinzugef&uuml;gten Artikels ausliest und diesen in das Feld <b>Preis <\/b>eintr&auml;gt.<\/p>\n<p>Das richtige Ereignis hierf&uuml;r hei&szlig;t <b>Nach Aktualisierung <\/b>und wird durch das Kombinationsfeld zur Anzeige des Artikels ausgel&ouml;st.<\/p>\n<p>Die fertige Prozedur sieht wie folgt aus und verwendet die <b>DLookup<\/b>-Funktion, um den Inhalt des Feldes <b>Preis <\/b>aus der Tabelle <b>tblArtikel <\/b>f&uuml;r den Datensatz auszulesen, dessen <b>ArtikelID <\/b>mit dem aktuellen Wert des Kombinationsfeldes &uuml;bereinstimmt:<\/p>\n<pre>Private Sub ArtikelID_AfterUpdate()\r\n    Me!Preis = DLookup(&quot;Preis&quot;, &quot;tblArtikel&quot;, _\r\n    &quot;ArtikelID = &quot; &amp; Me!ArtikelID)\r\nEnd Sub<\/pre>\n<p>Der Benutzer kann diesen Preis dann nach seinem Gusto mit einem Rabatt versehen.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Preis in Abh&auml;ngigkeit von der Zeit speichern<\/p>\n<p>Die detaillierte Notation des Preisverlaufs &uuml;ber eine zus&auml;tzliche Tabelle der Preise der verschiedenen Artikel liefert hier exaktere Informationen. Sie k&ouml;nnen in dieser Tabelle den Preis zu einem bestimmten Zeitpunkt eindeutig ermitteln. Und auch auf die individuelle Rabattierung eines Artikels brauchen Sie nicht zu verzichten: Dies ist weiterhin m&ouml;glich, und zwar &uuml;ber ein daf&uuml;r vorgesehenes Feld in der Tabelle <b>tblBestellpositionen<\/b>, das den Rabatt in Prozent enth&auml;lt.<\/p>\n<p>Schauen wir uns zun&auml;chst die notwendigen &auml;nderungen am Datenmodell an, damit die Preise zeitabh&auml;ngig gespeichert werden k&ouml;nnen &#8211; die Version der Beispieldatenbank finden Sie in der Datei <b>PreiseVerwalten_3.mdb<\/b>. Das Feld <b>Preis<\/b> kann in der Tabelle <b>tblArtikel <\/b>entfallen, da wir es in eine weitere Tabelle namens <b>tblPreise <\/b>auslagern. Diese sieht wie in Bild 13. Auch in der Tabelle <b>tblBestellpositionen <\/b>ist kein Platz mehr f&uuml;r eine Preisangabe. Da es f&uuml;r jeden Artikel mehrere Preise geben kann, ben&ouml;tigt die Tabelle ein Fremdschl&uuml;sselfeld zur Verkn&uuml;pfung mit dem jeweiligen Artikel. F&uuml;r die Angabe des Zeitraums gibt es wiederum verschiedene M&ouml;glichkeiten:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic012.png\" alt=\"pic012.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 12: Preise der Artikel in Abh&auml;ngigkeit vom Datum<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic013.png\" alt=\"pic013.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 13: Aktuelle Version des Datenmodells der Anwendung<\/span><\/b><\/p>\n<p class=\"aufz-hlung\">&euro;&#162; Sie geben Startdatum und Enddatum des G&uuml;ltigkeitszeitraums eines Preises f&uuml;r einen Artikel an.<\/p>\n<p class=\"aufz-hlung\">&euro;&#162; Sie geben nur das Startdatum des G&uuml;ltigkeitszeitraumes des Preises eines Artikels an.<\/p>\n<p class=\"aufz-hlung\">&euro;&#162; Sie geben nur das Enddatum des G&uuml;ltigkeitszeitraums des Preises eines Artikels an.<\/p>\n<p>Alle Varianten haben Vor- und Nachteile. Die erste Variante beispielsweise ist fehleranf&auml;llig. So kann es passieren, dass es einen Zeitraum gibt, f&uuml;r den ein Artikel gar keinen Preis hat. Oder die Zeitr&auml;ume zweier Preisangaben &uuml;berschneiden sich &#8211; beides w&auml;re keine gute Grundlage f&uuml;r die zuverl&auml;ssige Lieferung von Daten.<\/p>\n<p>Wenn Sie nur das Startdatum des G&uuml;ltigkeitszeitraums oder nur das Enddatum eingeben, erhalten Sie auch nicht auf jeden Fall zu jedem Zeitpunkt nur einen g&uuml;ltigen Preis. Es kann auch sein, dass der Benutzer zwei Preise f&uuml;r ein und dasselbe Start- oder Enddatum eintr&auml;gt.<\/p>\n<p>In allen drei F&auml;llen ist die Ermittlung des jeweils g&uuml;ltigen Preises mit Aufwand verbunden: Bereits die Anzeige des aktuellen Preises im Unterformular des Formulars <b>frmBestellungen <\/b>zieht eine entsprechend aufwendigere Abfrage als in der zuvor beschriebenen Version nach sich. Und auch die sp&auml;tere Auswertung kann nicht gleich &uuml;ber einen in der Tabelle <b>tblBestellpositionen <\/b>enthaltenen Preis erfolgen, sondern muss &uuml;ber den Umweg von <b>tblArtikel <\/b>und <b>tblPreise <\/b>geschehen.<\/p>\n<p>Wir schauen uns die L&ouml;sung zun&auml;chst unter Angabe des kompletten G&uuml;ltigkeitszeitraums des Preises f&uuml;r einen Artikel an, also unter Verwendung der Felder <b>GueltigVon <\/b>und <b>GueltigBis<\/b>.<\/p>\n<p><b>Artikelpreise verwalten<\/b><\/p>\n<p>Bevor wir uns der Umgestaltung des Formulars <b>frmBestellungen <\/b>und dort speziell des Unterformulars <b>sfmBestellungen <\/b>widmen, m&uuml;ssen wir &uuml;berhaupt eine M&ouml;glichkeit schaffen, Preise und Zeitr&auml;ume f&uuml;r die Preise einzugeben.<\/p>\n<p>Dies geschieht ebenfalls in einer Kombination aus Haupt- und Unterformular. Das Hauptformular hei&szlig;t <b>frmArtikel <\/b>und verwendet die Tabelle <b>tblArtikel <\/b>als Datenherkunft. Das Unterformular <b>sfmArtikel <\/b>basiert auf einer Abfrage, die alle Felder der Tabelle <b>tblPreise <\/b>enth&auml;lt, wobei diese nach dem Feld <b>GueltigVon <\/b>aufsteigend sortiert werden (s. Bild 14).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic014.png\" alt=\"pic014.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 14: Die Datenherkunft des Unterformulars sfmArtikel sortiert die Preise eines Artikels nach dem Beginn des G&uuml;ltigkeitszeitraums.<\/span><\/b><\/p>\n<p>Das Unterformular zeigt die drei Felder <b>Preis<\/b>, <b>GueltigVon <\/b>und <b>GueltigNach <\/b>der Tabelle <b>tblPreise <\/b>an. Durch die Eigenschaften <b>Verkn&uuml;pfen von <\/b>und <b>Verkn&uuml;pfen nach <\/b>des Unterformularsteuerelements zeigt das Unterformular nur diejenigen Preise an, die zum aktuell im Hauptformular angezeigten Artikel geh&ouml;ren (s. Bild 15).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic015.png\" alt=\"pic015.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 15: Dieses Formular dient der Eingabe der Preise eines Artikels und der entsprechenden G&uuml;ltigkeitszeitr&auml;ume.<\/span><\/b><\/p>\n<p><b>Bestellformular f&uuml;r Preise mit G&uuml;ltigkeitszeitr&auml;umen nachr&uuml;sten<\/b><\/p>\n<p>Nun wenden wir uns der Anpassung des Unterformulars <b>sfmBestellungen <\/b>zu. Zun&auml;chst ben&ouml;tigen wir eine Datenherkunft, welche die Auswahl der Artikel f&uuml;r die aktuelle Bestellung erm&ouml;glicht und f&uuml;r jeden Artikel den Preis anzeigt, der zum im Feld <b>Bestelldatum <\/b>des Hauptformulars angegebenen Zeitpunkt g&uuml;ltig ist. Die Abfrage aus Bild 16 liefert genau diese Datens&auml;tze.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic016.png\" alt=\"pic016.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 16: Diese Abfrage liefert einen Artikel samt aktuell g&uuml;ltigem Preis.<\/span><\/b><\/p>\n<p>Wenn wir diese Abfrage als Datenherkunft des Unterformulars <b>sfmBestellungen <\/b>einstellen, erscheint f&uuml;r eine bereits vorhandene Bestellung auch der richtige Preis f&uuml;r eine Bestellposition (s. Bild 17). Allerdings lassen sich damit keine neuen Bestellpositionen anlegen, da die zugrunde liegende Abfrage nicht aktualisierbar ist.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic018.png\" alt=\"pic018.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 17: Bestellpositionen mit Preisen aus G&uuml;ltigkeitszeitr&auml;umen lassen sich nicht aktualisieren und auch nicht neu anlegen.<\/span><\/b><\/p>\n<p>Aus diesem Dilemma kommen wir nur heraus, wenn wir ein Feld namens <b>Preis<\/b> in der Tabelle <b>tblBestellpositionen <\/b>belassen und den Preis f&uuml;r diesen Artikel aus der Tabelle <b>tblPreise <\/b>beim Ausw&auml;hlen des Artikels einer Bestellposition ermitteln und in dieses Feld eintragen. Dies scheint insgesamt ein brauchbarer Kompromiss: Immerhin erhalten wir so die M&ouml;glichkeit zur&uuml;ck, den Preis individuell je nach Kunde und\/oder Menge anzupassen, und f&uuml;hren gleichzeitig eine Historie der Preise der Artikel mit.<\/p>\n<p>Wir wechseln von der in einer Sackgasse steckenden Beispieldatenbank <b>PreiseVerwalten_3.mdb <\/b>zur finalen Version <b>PreiseVerwalten_4.mdb <\/b>und nehmen dort weitere &auml;nderungen vor.<\/p>\n<p>Zun&auml;chst f&uuml;gen wir der Tabelle <b>tblBestellpositionen <\/b>wieder das Feld <b>Preis <\/b>hinzu. Dann &auml;ndern wir die Abfrage, die als Datenherkunft f&uuml;r das Unterformular <b>sfmBestellungen<\/b> dient, zur&uuml;ck auf den Stand aus Bild 11. In dieser Version der Beispieldatenbank ben&ouml;tigen wir eine Ereignisprozedur, die nach dem Aktualisieren des Kombinationsfeldes zur Auswahl des Artikels einer Bestellposition ausgel&ouml;st wird. Diese hat den Preis aus den Artikelstammdaten ausgelesen und diesen in das Feld <b>Preis <\/b>des aktuellen Datensatzes der Tabelle <b>tblBestellpositionen <\/b>eingetragen.<\/p>\n<p>Auch hier ben&ouml;tigen wir wieder eine solche Prozedur. Sie soll in diesem Fall allerdings nicht den Preis aus der Tabelle <b>tblArtikel<\/b>, sondern aus der Tabelle <b>tblPreise <\/b>auslesen &#8211; und zwar aus dem Datensatz, welcher dem aktuellen Artikel entspricht und dessen G&uuml;ltigkeitszeitraum zum Bestelldatum aus dem Hauptformular passt. Diese Prozedur sieht wie in <a href=\"#anker-38-anchor\">Listing 2<\/a> aus und verwendet eine Hilfsvariable namens <b>strBestelldatum<\/b>, um das Bestelldatum aus dem Hauptformular auszulesen und dieses mithilfe der Funktion <b>SQLDatum <\/b>in ein unter SQL lesbares Format zu bringen. Die <b>DLookup<\/b>-Funktion liefert den Preis aus der Tabelle <b>tblPreise<\/b>, der zum ausgew&auml;hlten Artikel passt, dessen Feld <b>GueltigVon <\/b>einen Wert enth&auml;lt, der kleiner als das Bestelldatum aus dem Hauptformular ist, und dessen Feld <b>GueltigBis <\/b>entweder gr&ouml;&szlig;er als das Bestelldatum ist oder den Wert <b>Null <\/b>aufweist &#8211; dies w&uuml;rde bedeuten, dass es f&uuml;r diesen Preis noch kein Enddatum gibt.<\/p>\n<p class=\"listingueberschrift\">Listing 2: Aktualisieren des aktuell g&uuml;ltigen Preises f&uuml;r eine Bestellposition<\/p>\n<pre>Private Sub ArtikelID_AfterUpdate()\r\n    Dim strBestelldatum As String\r\n    strBestelldatum = SQLDatum(Me.Parent!Bestelldatum)\r\n    Me!Preis = DLookup(&quot;Preis&quot;, &quot;tblPreise&quot;, &quot;ArtikelID = &quot; &amp; Me.ArtikelID &amp; &quot; AND GueltigVon &lt;= &quot; _\r\n    &amp; strBestelldatum &amp; &quot; AND (GueltigBis &gt;= &quot; &amp; strBestelldatum &amp; &quot; OR GueltigBis IS NULL)&quot;)\r\nEnd Sub<\/pre>\n<p><b>Das Mehrwertsteuer-Problem<\/b><\/p>\n<p>Die in einer Artikelliste gespeicherten Preise sind in der Regel Nettopreise &#8211; das ist allein deshalb sinnvoll, weil man sonst bei einer &auml;nderung des Mehrwertsteuersatzes gleich alle Preise &auml;ndern m&uuml;sste. Damit dies nicht geschieht, weisen Sie einem Artikel fr&uuml;hestens die Mehrwertsteuer zu, wenn Sie eine Bestellung aufnehmen &#8211; gegebenenfalls ist sogar die Rechnungsstellung der richtige Zeitpunkt (immerhin gibt es in Zeiten der Mehrwertsteuerumstellung sicher Auftr&auml;ge, die vor der Umstellung erfasst und erst danach in Rechnung gestellt werden).<\/p>\n<p>Die g&auml;ngigen Mehrwertsteuers&auml;tze speichern Sie in einer eigenen Tabelle namens <b>tblMehrwertsteuersaetze<\/b>. Diese enth&auml;lt lediglich einen Prim&auml;rschl&uuml;ssel und das Feld f&uuml;r die Angabe der Mehrwertsteuer. Dieses Feld ist ein W&auml;hrungsfeld, dessen Format wir wie in Bild 18 auf <b>Prozent<\/b> ge&auml;ndert haben. Der Datentyp <b>W&auml;hrung <\/b>steuert die notwendige Genauigkeit bei.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic020.png\" alt=\"pic020.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 18: Tabelle zum Speichern der Mehrwertsteuers&auml;tze<\/span><\/b><\/p>\n<p>Man k&ouml;nnte genau wie bei den Preisen auch eine Historie &uuml;ber den Verlauf der Mehrwertsteuers&auml;tze einbauen. Dies w&uuml;rde jedoch den Rahmen dieses Beitrags sprengen; au&szlig;erdem &auml;ndern sich die S&auml;tze so selten, dass die meisten Anwendungen wahrscheinlich ohnehin maximal eine &auml;nderung erleben.<\/p>\n<p>Stattdessen legen wir f&uuml;r jeden Artikel einen Standardmehrwertsteuersatz fest. Aktuell gibt es ohnehin nur zwei Mehrwertsteuers&auml;tze, n&auml;mlich 7 % und 19 %.<\/p>\n<p>Daf&uuml;r legen wir in der Tabelle <b>tblArtikel <\/b>ein Feld namens <b>MehrwertsteuersatzID <\/b>an, das wir als Nachschlagefeld zur Auswahl der Datens&auml;tze der Tabelle <b>tblMehrwertsteuersaetze <\/b>verwenden (s. Bild 19). Dieses Feld m&uuml;ssen Sie auch im Formular <b>frmArtikel <\/b>nachpflegen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic019.png\" alt=\"pic019.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 19: Der Standardmehrwertsteuersatz eines Artikels landet in der Tabelle tblArtikel.<\/span><\/b><\/p>\n<p>Schlie&szlig;lich m&uuml;ssen wir noch daf&uuml;r sorgen, dass der Standardmehrwertsteuersatz beim Anlegen einer neuen Bestellposition in der Tabelle <b>tblBestellpositionen <\/b>landet. Hier erstellen wir wiederum kein Fremdschl&uuml;sselfeld, das lediglich auf die Tabelle <b>tblMehrwertsteuersaetze <\/b>verweist, sondern tragen den tats&auml;chlich im entsprechenden Datensatz dieser Tabelle gespeicherten Wert ein.<\/p>\n<p>Auf diese Weise stellen Sie sicher, dass fr&uuml;here Bestellungen und Rechnungen durch anschlie&szlig;ende &auml;nderung des Mehrwertsteuersatzes nicht beeinflusst werden.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Bestellformular um Mehrwertsteuer erweitern<\/p>\n<p>Die Mehrwertsteuer soll auch im Bestellformular angezeigt werden. Dazu f&uuml;gen Sie der Abfrage <b>qrySfmBestellpositionen <\/b>das entsprechende Feld aus der Tabelle <b>tblArtikel <\/b>hinzu. Dies erledigen Sie ebenfalls im Unterformular <b>sfmBestellungen<\/b>, wobei Sie nochmals pr&uuml;fen sollten, ob die Eigenschaft <b>Format <\/b>dieses Feldes auf <b>Prozentzahl <\/b>eingestellt ist. Anschlie&szlig;end erweitern Sie die Ereignisprozedur <b>Nach Aktualisierung <\/b>des Kombinationsfeldes <b>ArtikelID <\/b>noch um die folgenden Zeilen:<\/p>\n<pre>Dim lngMwStID As Long\r\nlngMwStID = DLookup(&quot;MehrwertsteuersatzID&quot;, &quot;tblArtikel&quot;, &quot;ArtikelID = &quot; &amp; Me!ArtikelID)\r\nMe!Mehrwertsteuersatz = DLookup(&quot;Mehrwertsteuersatz&quot;, &quot;tblMehrwertsteuersaetze&quot;, &quot;MehrwertsteuersatzID = &quot; &amp; lngMwStID)<\/pre>\n<p>Die erste Zeile deklariert eine Hilfsvariable, die zweite f&uuml;gt dieser Variablen die ID des Mehrwertsteuersatzes f&uuml;r den ausgew&auml;hlten Artikel hinzu. Mithilfe dieses Wertes holt die folgende <b>DLookup<\/b>-Funktion den <b>Mehrwertsteuersatz <\/b>aus der Tabelle <b>tblMehrwertsteuersaetze <\/b>und tr&auml;gt diesen in das Feld <b>Mehrwertsteuersatz <\/b>des Formulars ein. Damit sind unsere Arbeiten an den verschiedenen Ans&auml;tzen f&uuml;r das Eingeben von Bestellungen und damit verbundenen Preisen und Mehrwertsteuers&auml;tzen beendet &#8211; den aktuellen Stand des Formulars <b>frmBestellungen <\/b>zeigt Bild 20.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/ZeitabhaengigeDaten_5-web-images\/pic021.png\" alt=\"pic021.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 20: Das Formular frmBestellungen zeigt nun auch die Mehrwertsteuer an.<\/span><\/b><\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Zusammenfassung und Ausblick<\/p>\n<p>Die Verwaltung von Artikeln, Preisen, Mehrwertsteuers&auml;tzen und der darauf aufbauenden Bestellungen und Rechnungen ist keinesfalls trivial. Viele Anf&auml;nger d&uuml;rften sich an diesem Thema die Z&auml;hne ausbei&szlig;en.<\/p>\n<p>Dieser Beitrag hat verschiedene Ans&auml;tze gezeigt, die eines gemeinsam haben: Jeder ist ausbauf&auml;hig und es gibt gen&uuml;gend spezielle Anforderungen, die einen Ausbau erforderlich machen.<\/p>\n<p>Ein Beispiel ist die Rabattierung von Artikeln: Die vorliegenden L&ouml;sungen sparen dieses Thema insoweit aus, als das man den Preis eines Artikels f&uuml;r jede Bestellung, also in Abh&auml;ngigkeit vom Kunden und von der Menge der bestellten Artikel, individuell festlegen kann &#8211; der Standardpreis dient hier nur als Vorschlag.<\/p>\n<p>Rabatte k&ouml;nnten Sie aber auch allgemein festlegen: Beispielsweise k&ouml;nnen Sie Kunden aufbauend auf dem bisherigen Umsatz grunds&auml;tzlich einen Rabatt einr&auml;umen, oder vielleicht gibt es auch Aktionszeitr&auml;ume, in denen jeder Artikel rabattiert wird. Dieses Thema werden wir gegebenenfalls an anderer Stelle weiterf&uuml;hren.<\/p>\n<p>Auch das Erstellen der Berichte f&uuml;r die Bestellung und die Rechnung kann in einer der folgenden Ausgaben ein Thema werden &#8211; schlie&szlig;lich ist beispielsweise die Frage, ob Bestell- und Rechnungsdaten nur einmal pro Bestellung gespeichert werden oder zus&auml;tzlich in entsprechende Tabellen f&uuml;r die Rechnungspositionen &uuml;bernommen werden, ein sehr interessantes Thema.<\/p>\n<p>Schlie&szlig;lich l&auml;sst sich auch das Formular zur Eingabe der Bestellungen noch erweitern: Dort k&ouml;nnen Sie beispielsweise noch die Anzeige der aktuellen Bestellsumme integrieren oder die Summe der Mehrwertsteuer anzeigen &#8211; aufgeteilt nach den verschiedenen Mehrwertsteuers&auml;tzen, versteht sich.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>PreiseVerwalten_4.mdb<\/p>\n<p>PreiseVerwalten_1.mdb<\/p>\n<p>PreiseVerwalten_2.mdb<\/p>\n<p>PreiseVerwalten_3.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{71A4341A-E92B-454D-9CCD-A2AB6DB51AFD}\/aiu_737.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine besondere Anforderung an das Datenmodell und die Gestaltung der Formulare zur Bearbeitung der Daten stellt sich immer dann, wenn sich der Inhalt eines oder mehrerer Felder &auml;ndert, die bereits mit anderen Tabellen verkn&uuml;pft wurden. Ein Beispiel sind Bestellungen, und hier speziell die Preise von Artikeln: Diese werden meist mit der Zeit teurer, oder der Mehrwertsteuersatz &auml;ndert sich und hin und wieder gibt es W&auml;hrungsreformen. Welche Probleme dies mit sich bringt und wie Sie diese l&ouml;sen, zeigt dieser Beitrag.<\/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":[662010,66042010,44000027],"tags":[],"class_list":["post-55000737","post","type-post","status-publish","format-standard","hentry","category-662010","category-66042010","category-Loesungen"],"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>Preise und Mehrwertsteuer verwalten - 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\/Preise_und_Mehrwertsteuer_verwalten\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Preise und Mehrwertsteuer verwalten\" \/>\n<meta property=\"og:description\" content=\"Eine besondere Anforderung an das Datenmodell und die Gestaltung der Formulare zur Bearbeitung der Daten stellt sich immer dann, wenn sich der Inhalt eines oder mehrerer Felder &auml;ndert, die bereits mit anderen Tabellen verkn&uuml;pft wurden. Ein Beispiel sind Bestellungen, und hier speziell die Preise von Artikeln: Diese werden meist mit der Zeit teurer, oder der Mehrwertsteuersatz &auml;ndert sich und hin und wieder gibt es W&auml;hrungsreformen. Welche Probleme dies mit sich bringt und wie Sie diese l&ouml;sen, zeigt dieser Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Preise_und_Mehrwertsteuer_verwalten\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:07:07+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg08.met.vgwort.de\/na\/f18bd62aa4894e2da373157f99761a31\" \/>\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=\"20\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Preise_und_Mehrwertsteuer_verwalten\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Preise_und_Mehrwertsteuer_verwalten\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Preise und Mehrwertsteuer verwalten\",\"datePublished\":\"2020-05-22T22:07:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Preise_und_Mehrwertsteuer_verwalten\\\/\"},\"wordCount\":3770,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Preise_und_Mehrwertsteuer_verwalten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/f18bd62aa4894e2da373157f99761a31\",\"articleSection\":[\"2010\",\"4\\\/2010\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Preise_und_Mehrwertsteuer_verwalten\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Preise_und_Mehrwertsteuer_verwalten\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Preise_und_Mehrwertsteuer_verwalten\\\/\",\"name\":\"Preise und Mehrwertsteuer verwalten - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Preise_und_Mehrwertsteuer_verwalten\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Preise_und_Mehrwertsteuer_verwalten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/f18bd62aa4894e2da373157f99761a31\",\"datePublished\":\"2020-05-22T22:07:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Preise_und_Mehrwertsteuer_verwalten\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Preise_und_Mehrwertsteuer_verwalten\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Preise_und_Mehrwertsteuer_verwalten\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/f18bd62aa4894e2da373157f99761a31\",\"contentUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/f18bd62aa4894e2da373157f99761a31\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Preise_und_Mehrwertsteuer_verwalten\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Preise und Mehrwertsteuer verwalten\"}]},{\"@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":"Preise und Mehrwertsteuer verwalten - 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\/Preise_und_Mehrwertsteuer_verwalten\/","og_locale":"de_DE","og_type":"article","og_title":"Preise und Mehrwertsteuer verwalten","og_description":"Eine besondere Anforderung an das Datenmodell und die Gestaltung der Formulare zur Bearbeitung der Daten stellt sich immer dann, wenn sich der Inhalt eines oder mehrerer Felder &auml;ndert, die bereits mit anderen Tabellen verkn&uuml;pft wurden. Ein Beispiel sind Bestellungen, und hier speziell die Preise von Artikeln: Diese werden meist mit der Zeit teurer, oder der Mehrwertsteuersatz &auml;ndert sich und hin und wieder gibt es W&auml;hrungsreformen. Welche Probleme dies mit sich bringt und wie Sie diese l&ouml;sen, zeigt dieser Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Preise_und_Mehrwertsteuer_verwalten\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:07:07+00:00","og_image":[{"url":"http:\/\/vg08.met.vgwort.de\/na\/f18bd62aa4894e2da373157f99761a31","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"20\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Preise_und_Mehrwertsteuer_verwalten\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Preise_und_Mehrwertsteuer_verwalten\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Preise und Mehrwertsteuer verwalten","datePublished":"2020-05-22T22:07:07+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Preise_und_Mehrwertsteuer_verwalten\/"},"wordCount":3770,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Preise_und_Mehrwertsteuer_verwalten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/f18bd62aa4894e2da373157f99761a31","articleSection":["2010","4\/2010","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Preise_und_Mehrwertsteuer_verwalten\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Preise_und_Mehrwertsteuer_verwalten\/","url":"https:\/\/access-im-unternehmen.de\/Preise_und_Mehrwertsteuer_verwalten\/","name":"Preise und Mehrwertsteuer verwalten - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Preise_und_Mehrwertsteuer_verwalten\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Preise_und_Mehrwertsteuer_verwalten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/f18bd62aa4894e2da373157f99761a31","datePublished":"2020-05-22T22:07:07+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Preise_und_Mehrwertsteuer_verwalten\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Preise_und_Mehrwertsteuer_verwalten\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Preise_und_Mehrwertsteuer_verwalten\/#primaryimage","url":"http:\/\/vg08.met.vgwort.de\/na\/f18bd62aa4894e2da373157f99761a31","contentUrl":"http:\/\/vg08.met.vgwort.de\/na\/f18bd62aa4894e2da373157f99761a31"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Preise_und_Mehrwertsteuer_verwalten\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Preise und Mehrwertsteuer verwalten"}]},{"@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\/55000737","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=55000737"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000737\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000737"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000737"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000737"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}