{"id":55001277,"date":"2020-12-01T00:00:00","date_gmt":"2021-01-27T22:08:52","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1277"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"XRechnung_Teil_1_Rechnungen_generieren","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/XRechnung_Teil_1_Rechnungen_generieren\/","title":{"rendered":"XRechnung, Teil 1: Rechnungen generieren"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/c20a28ed5b6c4065b72c77de93c56cbf\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>XRechnung ist ein Standard f&uuml;r das Einreichen von Rechnungen bei &ouml;ffentlichen Auftr&auml;gen. Sinn und Zweck dieses Standards ist, das &Uuml;bermitteln von Rechnungsdaten auf eine Weise zu erlauben, dass diese automatisiert eingelesen und verarbeitet werden k&ouml;nnen. Wie das X in XRechnung vermuten l&auml;sst, steckt dahinter ein Austausch der Daten im XML-Format. Die Vorlage f&uuml;r XRechnung liefert die europ&auml;ische Norm EN 16931. Wie die Daten strukturiert werden m&uuml;ssen, haben wir dem Dokument &#8222;Spezifikation XRechnung Standard und Extension&#8220; entnommen, das &ouml;ffentlich einsehbar ist. Als Grundlage f&uuml;r die Zusammenstellung der XRechnung verwenden wir ein herk&ouml;mmliches Datenmodell einer Bestell- oder Rechnungsverwaltung. In diesem ersten Teil zeigen wir, wie die Daten aus den Tabellen der Beispieldatenbank in ein XRechnung-kompatibles XML-Dokument umgewandelt werden und wie Sie dieses validieren k&ouml;nnen.<\/b><\/p>\n<p>Das Dokument Spezifikation <b>XRechnung Standard und Extension <\/b>liefert alle f&uuml;r die Erstellung von XRechnungen erforderlichen Informationen. Dazu geh&ouml;ren die Struktur, die zu verwendenden Datentypen et cetera. Wir werden in diesem Beitrag nicht alle Aspekte umsetzen, daher hier der Link zu diesem Dokument f&uuml;r den Fall, dass Sie weitere Elemente hinzuf&uuml;gen m&ouml;chten:<\/p>\n<pre>https:\/\/www.xoev.de\/sixcms\/media.php\/13\/200-XRechnung-2020-06-30.pdf<\/pre>\n<p>Sollte das Dokument nicht mehr unter diesem Link verf&uuml;gbar sein, suchen Sie im Internet nach dem Titel des Dokuments <b>XRechnung Standard und Extension<\/b>.<\/p>\n<p><b>Validieren der XRechnung<\/b><\/p>\n<p>Bevor wir beginnen, den Code zum Zusammenstellen der XRechnung zu programmieren, schauen wir uns an, wo wir die erstellen XRechnungen validieren k&ouml;nnen. Immerhin wollen wir wissen, ob das Ergebnis auch vom Rechnungsempf&auml;nger verarbeitet werden kann. Es gibt eine Reihe Online-Validatoren, zum Beispiel diesen hier:<\/p>\n<pre>https:\/\/www.epoconsulting.com\/erechnung\/xrechnung-validator<\/pre>\n<p>Hier geben Sie das zu pr&uuml;fende XML-Dokument in ein Textfeld ein und klicken auf die Schaltfl&auml;che <b>Validieren<\/b>.<\/p>\n<p>Praktischerweise stellt diese Webseite auch zwei Beispielrechnungen im XML-Format bereit, die Sie kopieren und validieren k&ouml;nnen.<\/p>\n<p><b>Aufbau des Datenmodells<\/b><\/p>\n<p>Das Datenmodell haben wir so aufgebaut, dass wir die Daten leicht f&uuml;r die Erstellung der XRechnung im XML-Format nutzen k&ouml;nnen. Es sieht in der &Uuml;bersicht wie in Bild 1 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/pic_1277_004.png\" alt=\"Datenmodell der Beispieldatenbank\" width=\"700\" height=\"508,2802\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Datenmodell der Beispieldatenbank<\/span><\/b><\/p>\n<p>Die Tabelle <b>tblKontakte <\/b>enth&auml;lt die Daten der Rechnungssteller und der Rechnungsempf&auml;nger. Da in der XRechnung der Ansprechpartner in einem Feld angegeben wird, haben wir es uns hier einfach gemacht und auch nur ein Feld namens <b>Ansprechpartner <\/b>statt <b>Vorname <\/b>und <b>Nachname <\/b>hinterlegt. In dieser Tabelle sind auch die Kontodaten des jeweiligen Kontakts hinterlegt.<\/p>\n<p>Die Tabelle <b>tblRechnungen <\/b>enth&auml;lt die Basisdaten einer Rechnung. Dazu geh&ouml;ren das Rechnungsdatum, die W&auml;hrung und ein Feld f&uuml;r die Kundenreferenz. Au&szlig;erdem w&auml;hlen wir einige Informationen aus Nachschlagefeldern f&uuml;r Fremdschl&uuml;sselfelder aus. Dazu geh&ouml;rt der Rechnungstyp. Die daf&uuml;r verf&uuml;gbaren Werte speichern wir in einer weiteren Tabelle namens <b>tblRechnungstypen<\/b> (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/pic_1277_005.png\" alt=\"Tabelle mit den Rechnungstypen\" width=\"424,7115\" height=\"267,301\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Tabelle mit den Rechnungstypen<\/span><\/b><\/p>\n<p>Au&szlig;erdem enth&auml;lt die Tabelle <b>tblRechnungen <\/b>zwei Fremdschl&uuml;sselfelder, mit denen Daten aus der Tabelle <b>tblKontakte <\/b>ausgew&auml;hlt werden k&ouml;nnen &#8211; und zwar <b>Ver-kaeu-fer-ID <\/b>und <b>KaeuferID<\/b>. Um dies im Beziehungen-Fenster abzubilden, haben wir die Tabelle <b>tblKontakte <\/b>zwei Mal hinzugef&uuml;gt, einmal unter dem Originalnamen und einmal unter <b>tblKontakte_1<\/b>.<\/p>\n<p>Die Tabelle <b>tblPositionen <\/b>nimmt die Rechnungspositionen auf. Zum Zuordnen einer Position zu einer Rechnung enth&auml;lt sie das Fremdschl&uuml;sselfeld <b>RechnungID<\/b>. Au&szlig;erdem speichert sie die Bezeichnung der Position, den Einzelpreis, den Mehrwertsteuersatz und die Menge. Den Mehrwertsteuersatz geben wir durch die Auswahl eines der Eintr&auml;ge der Tabelle <b>tblMehrwertsteuersaetze <\/b>f&uuml;r das Fremdschl&uuml;sselfeld <b>MehrwertsteuersatzID <\/b>an.<\/p>\n<p><b>Aufbau einer XRechnung<\/b><\/p>\n<p>Wie bei XML-Dokumenten &uuml;blich, ist die XRechnung hierarchisch aufgebaut. Das Root-Element hei&szlig;t dabei <b>Invoice <\/b>und definiert gleich noch die f&uuml;r das Dokument g&uuml;ltigen Namespaces:<\/p>\n<pre>&lt;ubl:Invoice xmlns:ubl=\"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2\" xmlns:cac=\"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2\" xmlns:cbc=\"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xsi:schemaLocation=\"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http:\/\/docs.oasis-open.org\/ubl\/os-UBL-2.1\/xsd\/maindoc\/UBL-Invoice-2.1.xsd\"&gt;<\/pre>\n<p>Danach folgen einige Elemente, welche Basisdaten einer Rechnung abbilden. Da wir zun&auml;chst eine valide Rechnung erstellen und nicht direkt alle m&ouml;glichen Elemente einbeziehen wollen, werfen wir zun&auml;chst einen Blick auf die notwendigen Elemente.<\/p>\n<p>Das Dokument <b>XRechnung Standard und Extension<\/b> liefert im Kapitel <b>Detailbeschreibung<\/b> eine &Uuml;bersicht der Elemente und vor allem der erwarteten Anzahl der Elemente. Diese wird dort in der &Uuml;bersicht in eckigen Klammern angegeben. Die Rechnungsnummer zum Beispiel muss immer angegeben werden:<\/p>\n<pre>-Invoice number : Identifier <\/pre>\n<p>Die Angabe des Zahlungsziels hingegen ist nicht verpflichtend:<\/p>\n<pre>-Payment due date : Date [0..1]<\/pre>\n<p><b>[0..1] <\/b>bedeutet, dass das Element gar nicht oder einmal vorkommen darf.<\/p>\n<p>Auf diese Weise finden wir heraus, ob Elemente &uuml;berhaupt angegeben werden m&uuml;ssen und stellen so unsere minimal ben&ouml;tigten Elemente zusammen. Der Hintergrund ist, dass wir die dort einzuf&uuml;genden Informatinen auch in unserem Datenmodell finden m&uuml;ssen.<\/p>\n<p>Gegebenfalls k&ouml;nnten wir die Daten der Rechnung, die immer gleich sind, weil es sich um die Daten des Rechnungsstellers handelt, einfach fest im Code verdrahten. Aber wir wollen nicht, dass wir f&uuml;r jede &Auml;nderung den Entwurf des Codes anpassen m&uuml;ssen.<\/p>\n<p><b>Abweichungen zwischen Standard und Umsetzung<\/b><\/p>\n<p>Wenn wir die Bezeichnungen der Felder im PDF-Dokument <b>XRechnung Standard und Extension<\/b> anschauen und diese mit denen vergleichen, die als Beispieldokumente unter <b>https:\/\/www.epoconsulting.com\/erechnung\/xrechnung-validator <\/b>bereitstehen, stellen wir einige Unterschiede fest. Diese sind zu erkl&auml;ren, da wohl das .xsl-Dokument unter folgendem Link zum Transformieren des einen in das andere Dokument verwendet wird:<\/p>\n<pre>https:\/\/github.com\/itplr-kosit\/xrechnung-visualization\/blob\/master\/src\/xsl\/ubl-invoice-xr.xsl<\/pre>\n<p>Wir werden also per VBA direkt in das Format der Beispieldokumente exportieren.<\/p>\n<p><b>Erster Test<\/b><\/p>\n<p>Wir wollen uns an das finale Dokument herantasten und erstellen erstmal das <b>Invoice<\/b>-Element mit einigen Unterelementen. Dazu erstellen wir ein provisorisches Formular mit einigen Rechnungsdaten aus dem Datenmodell (siehe Bild 3). Das Hauptformular zeigt die Daten der Tabelle &#8211;<b>tblRechnungen <\/b>an und erlaubt die Auswahl der verkn&uuml;pften Daten f&uuml;r die Felder <b>RechnungstypID<\/b>, <b>VerkaeuferID <\/b>und <b>KaeuferID <\/b>per Kombinationsfeld.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/pic_1277_001.png\" alt=\"Formular zum Zusammenstellen einer Rechnung\" width=\"549,6265\" height=\"440,4294\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Formular zum Zusammenstellen einer Rechnung<\/span><\/b><\/p>\n<p>Das Unterformular zeigt die Daten der verkn&uuml;pften Tabelle <b>tblPositionen <\/b>an.<\/p>\n<p>Ein weiteres Formular, das wir hier nicht abgebildet haben, hei&szlig;t <b>frmKontakt <\/b>und erlaubt die einfache Eingabe neuer Kontakte.<\/p>\n<p>Auf Komfort wie das Anzeigen dieses Formulars vom Formular <b>frmRechnung <\/b>haben wir an dieser Stelle verzichtet.<\/p>\n<p>F&uuml;r die Schaltfl&auml;che <b>cmdXRechnungErstellen <\/b>hinterlegen wir die Prozedur aus Listing 1. Diese verwendet zwei Hilfsfunktionen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdXRechnungErstellen_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>objXML<span style=\"color:blue;\"> As <\/span>DOMDocument60\r\n     <span style=\"color:blue;\">Dim <\/span>objInvoice<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Set<\/span> objXML = <span style=\"color:blue;\">New<\/span> DOMDocument60\r\n     <span style=\"color:blue;\">Set<\/span> objInvoice = CreateSubElement(objXML, \"ubl:Invoice\")\r\n     CreateAttribute objInvoice, \"xmlns:ubl\", \"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2\"\r\n     CreateAttribute objInvoice, \"xmlns:cac\", \"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2\"\r\n     CreateAttribute objInvoice, \"xmlns:cbc\", \"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2\"\r\n     CreateAttribute objInvoice, \"xmlns:xsi\", \"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n     CreateAttribute objInvoice, \"xsi:schemaLocation\", \"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 \" _\r\n         & \"http:\/\/docs.oasis-open.org\/ubl\/os-UBL-2.1\/xsd\/maindoc\/UBL-Invoice-2.1.xsd\"\r\n     CreateSubElement objInvoice, \"cbc:CustomizationID\", \"urn:cen.eu:en16931:2017#compliant#urn:\" _\r\n         & \"xoev-de:kosit:standard:xrechnung_1.2\"\r\n     CreateSubElement objInvoice, \"cbc:ID\", Me!RechnungID\r\n     CreateSubElement objInvoice, \"cbc:IssueDate\", Format(Me!Rechnungsdatum, \"yyyy-mm-dd\")\r\n     CreateSubElement objInvoice, \"cbc:InvoiceTypeCode\", Me!RechnungstypID\r\n     objXML.Save CurrentProject.Path & \"XRechnung.xml\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Erster Test zum Zusammenstellung der XRechnung<\/span><\/b><\/p>\n<ul>\n<li><b>CreateSubElement <\/b>legt ein neues Element unterhalb des mit dem ersten Parameter &uuml;bergebenen Elements an. Der zweite Parameter gibt den Namen an, der dritte den Wert, soweit dieser zugewiesen werden soll. Die Funktion gibt das neue <b>IXMLDomNode<\/b>-Element als Ergebnis zur&uuml;ck.<\/li>\n<li><b>CreateAttribute <\/b>legt ein Attribut f&uuml;r das mit dem ersten Parameter &uuml;bergebene Element an. Der zweite Parameter nimmt den Namen des zu erstellenden Attributs entgegen, der dritte den Wert.<\/li>\n<\/ul>\n<p>Die Prozedur <b>cmdXRechnungErstellen_Click <\/b>erstellt ein neues XML-Dokument des Typs <b>DOMDocument60<\/b>. Damit dies gelingt, m&uuml;ssen wir noch einen Verweis auf die Bibliothek <b>Microsoft XML, v6.0<\/b> hinzuf&uuml;gen. Das erledigen Sie mit dem <b>Verweise<\/b>-Dialog, den Sie mit dem Men&uuml;eintrag <b>Extras|Verweise <\/b>des VBA-Editors &ouml;ffnen (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/pic_1277_002.png\" alt=\"Verweis auf die XML-Bibliothek\" width=\"499,6607\" height=\"393,9009\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Verweis auf die XML-Bibliothek<\/span><\/b><\/p>\n<p>Danach f&uuml;gt die Prozedur mit der Funktion <b>CreateSubElement <\/b>ein neues Element des Typs <b>ubl:Invoice <\/b>hinzu und referenziert dieses mit der Variablen <b>objInvoice<\/b>.<\/p>\n<p>Die Referenz ben&ouml;tigen wir, damit wir unter dem <b>ubl:Invoice<\/b>-Element noch weitere Attribute und Elemente hinzuf&uuml;gen k&ouml;nnen.<\/p>\n<p>Das erledigen wir mit den folgenden Aufrufen der <b>CreateAttribute<\/b>-Funktion. Anschlie&szlig;end f&uuml;gen wir die Elemente <b>CustomizationID <\/b>mit dem Wert hinzu, den wir in der Beispielrechnung gefunden haben.<\/p>\n<p>Au&szlig;erdem f&uuml;gen wir aus der Tabelle <b>tblRechnungen <\/b>die Werte der Felder <b>RechnungID<\/b>, <b>Rechnungsdatum <\/b>und <b>RechnungstypID <\/b>hinzu. Das Datum formatieren wir noch entsprechend auf <b>yyyy-mm-dd<\/b>.<\/p>\n<p>Danach speichern wir das neue XML-Dokument mit der <b>Save<\/b>-Methode von <b>objXML <\/b>im Verzeichnis der aktuellen Datenbank. Die so gespeicherte Datei laden wir dann zum Validieren auf die Seite aus Bild 5 hoch (oder die Seite eines anderen Anbieters, falls gew&uuml;nscht).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/pic_1277_003.png\" alt=\"Validieren der Rechnung\" width=\"700\" height=\"834,8328\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Validieren der Rechnung<\/span><\/b><\/p>\n<p>Die Validierung dauert einige Sekunden l&auml;nger, als man erwarten w&uuml;rde &#8211; vermutlich m&ouml;chte der Anbieter verhindern, dass die Validierung automatisiert genutzt wird.<\/p>\n<p>Das Ergebnis liefert uns eine Liste der Elemente, die noch fehlen beziehungsweise die ung&uuml;ltige Werte enthalten. Hieran wollen wir uns nun orientieren und die fehlenden Informationen hinzuf&uuml;gen beziehungsweise die falschen Daten korrigieren.<\/p>\n<p>Allerdings zeigt sich schon nach dem Hinzuf&uuml;gen eines der fehlenden Elemente, dass die Meldung wohl immer angezeigt wird, wenn auch nur ein Element der aufgelisteten Elemente fehlt. Au&szlig;erdem finden wir im Dokument <b>XRechnung Standard und Extension <\/b>heraus, dass das <b>Note<\/b>-Element beispielsweise gar kein Pflichtelement ist.<\/p>\n<p>Das macht die Korrektur auf Basis des Validierungsergebnisses nicht leichter. Also arbeiten wir uns lieber anhand des Beispieldokuments, das erfolgreich validiert werden konnte, durch die geforderten Daten.<\/p>\n<p>Wir f&uuml;gen nun zun&auml;chst alle noch fehlenden Elemente hinzu, die im Dokument <b>XRechnung Standard und Extension <\/b>als Pflichtelement angegeben werden.<\/p>\n<p><b>Erweiterung um die fehlenden Elemente<\/b><\/p>\n<p>Bevor wir die Funktionalit&auml;t erweitern, gliedern wir die Anweisungen zum Erstellen der XRechnung in eine eigene Prozedur namens <b>XRechnungErstellen <\/b>aus, der wir lediglich den Prim&auml;rschl&uuml;ssel f&uuml;r die Rechnung &uuml;bergeben. Den Aufruf dieser Funktion f&uuml;gen wir dann in der Ereignisprozedur ein:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdXRechnungErstellen_Click()\r\n     XRechnungErstellen Me!RechnungID\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Wir erweitern die Prozedur, die durch die Schaltfl&auml;che <b>cmdXRechnungErstellen_Click <\/b>aufgerufen wird, zun&auml;chst um einige Variablen.<\/p>\n<p>Die meisten davon sollen Elemente des Typs <b>IXMLDomNode <\/b>aufnehmen &#8211; entweder, weil wir noch weitere Unterelemente anlegen wollen, f&uuml;r die wir das &uuml;bergeordnete Element referenzieren m&uuml;ssen und\/oder weil wir Attribute zu dem referenzierten Element hinzuf&uuml;gen wollen:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>XRechnungErstellen(lngRechnungID<span style=\"color:blue;\"> As Long<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>objXML<span style=\"color:blue;\"> As <\/span>DOMDocument60\r\n     <span style=\"color:blue;\">Dim <\/span>objInvoice<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objOrderreference<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objContractDocumentReference<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objProjectReference<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objAccountingSupplierParty<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objParty<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objPostalAddress<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objCountry<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objPartyTaxScheme<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objTaxScheme<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objPartyLegalEntity<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objContact<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objAccountingCustomerParty<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objPaymentMeans<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objPayeeFinancialAccount<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objPaymentTerms<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objFinancialInstitutionBranch<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objTaxTotal<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objTaxAmount<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objTaxSubtotal<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objTaxableAmount<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objTaxCategory<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objLegalMonetaryTotal<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objLineExtensionAmount<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objTaxExclusiveAmount<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objTaxInclusiveAmount<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objPayableAmount<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objInvoiceLine<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objInvoicedQuantity<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objItem<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objSellersItemIdentification<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objClassifiedTaxCategory<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objPrice<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>objPriceAmount<span style=\"color:blue;\"> As <\/span>IXMLDOMNode\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rstRechnung<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>rstPositionen<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>rstVerkaeufer<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>rstKaeufer<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>rstMehrwertsteuersaetze<span style=\"color:blue;\"> As <\/span>DAO.Recordset<\/pre>\n<p><!--30percent--><\/p>\n<p><b>rstPositionen <\/b>schlie&szlig;lich soll die Rechnungspositionen aufnehmen, die wir in einem Unterformular anzeigen. Diese durchlaufen wir, weil wir auch die Rechnungspositionen in Form geeigneter Elemente zum XML-Dokument hinzuf&uuml;gen wollen.<\/p>\n<p><b>rstVerkaeufer <\/b>nimmt die Daten des Eintrags der Tabelle <b>tblKontakte <\/b>auf, dessen Prim&auml;rschl&uuml;sselfeld mit dem Wert des Feldes <b>VerkaeuferID <\/b>des aktuellen Datensatzes aus <b>rstRechnung <\/b>&uuml;bereinstimmt.<\/p>\n<p>&Auml;hnlich sieht es beim Recordset <b>rstKaeufer <\/b>aus, der den passenden Datensatz zum Feld <b>KaeuferID <\/b>aus <b>rstRechnung <\/b>aufweist. Mit <b>rstMehrwertsteuersaetze <\/b>durchlaufen wir sp&auml;ter beim Summieren der Mehrwertsteuer die Positionen verschiedener Mehrwertsteuers&auml;tze.<\/p>\n<p>Zu diesem Zweck ben&ouml;tigen wir auch noch die folgenden drei Variablen. <b>curMwStGesamt <\/b>nimmt die Summe der Mehrwertsteuer f&uuml;r die Rechnung auf und mit <b>curBetragJeSatz <\/b>und <b>curMwStJeSatz <\/b>nehmen wir die Summe des steuerbaren Betrags und der Mehrwertsteuer je Mehrwertsteuersatz auf. <b>curNettoGesamt <\/b>enth&auml;lt die Nettosumme aller Positionen:<\/p>\n<pre>     <span style=\"color:blue;\">Dim <\/span>curMwStGesamt<span style=\"color:blue;\"> As Currency<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>curBetragJeSatz<span style=\"color:blue;\"> As Currency<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>curMwStJeSatz<span style=\"color:blue;\"> As Currency<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>curNettoGesamt<span style=\"color:blue;\"> As Currency<\/span><\/pre>\n<p><b>Recordsets mit Daten f&uuml;llen<\/b><\/p>\n<p>Anschlie&szlig;end f&uuml;llt die Prozedur die Recordsets mit den Daten aus den entsprechenden Tabellen. Die ben&ouml;tigten Anweisungen finden Sie in Listing 2.<\/p>\n<pre>...\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rstRechnung = db.OpenRecordset(\"SELECT * FROM tblRechnung WHERE RechnungID = \" & lngRechnungID, dbOpenDynaset)\r\n     <span style=\"color:blue;\">Set<\/span> rstPositionen = db.OpenRecordset(\"SELECT * FROM tblPositionen WHERE RechnungID = \" & lngRechnungID, dbOpenDynaset)\r\n     <span style=\"color:blue;\">Set<\/span> rstVerkaeufer = db.OpenRecordset(\"SELECT * FROM tblKontakte WHERE KontaktID = \" & rstRechnung!VerkaeuferID, _\r\n         dbOpenDynaset)\r\n     <span style=\"color:blue;\">Set<\/span> rstKaeufer = db.OpenRecordset(\"SELECT * FROM tblKontakte WHERE KontaktID = \" & rstRechnung!KaeuferID, _\r\n         dbOpenDynaset)\r\n...<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: F&uuml;llen der Recordsets<\/span><\/b><\/p>\n<p>Hier f&uuml;llen wir als Erstes <b>rstRechnung <\/b>und <b>rstPositionen<\/b>. Mit den Feldern <b>VerkaeuferID <\/b>und <b>KaeuferID <\/b>aus <b>rstRechnung <\/b>k&ouml;nnen wir dann die Recordsets <b>rstVer-kaeufer <\/b>und <b>rstKaeufer <\/b>f&uuml;llen.<\/p>\n<p><b>Dokument erstellen<\/b><\/p>\n<p>Danach erstellen wir das neue Dokument, das wir mit <b>objXML <\/b>referenzieren, und legen das Root-Element an (<b>objInvoice<\/b>).<\/p>\n<p>Au&szlig;erdem f&uuml;gen wir die bereits bekannten Namespace-Angaben hinzu (siehe Listing 3).<\/p>\n<pre>...\r\n     <span style=\"color:blue;\">Set<\/span> objXML = <span style=\"color:blue;\">New<\/span> DOMDocument60\r\n     <span style=\"color:blue;\">Set<\/span> objInvoice = CreateSubElement(objXML, \"ubl:Invoice\")\r\n     CreateAttribute objInvoice, \"xmlns:ubl\", \"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2\"\r\n     CreateAttribute objInvoice, \"xmlns:cac\", \"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2\"\r\n     CreateAttribute objInvoice, \"xmlns:cbc\", \"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2\"\r\n     CreateAttribute objInvoice, \"xmlns:xsi\", \"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n     CreateAttribute objInvoice, \"xsi:schemaLocation\", \"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 \" _\r\n         & \"http:\/\/docs.oasis-open.org\/ubl\/os-UBL-2.1\/xsd\/maindoc\/UBL-Invoice-2.1.xsd\"\r\n     CreateSubElement objInvoice, \"cbc:CustomizationID\", \"urn:cen.eu:en16931:2017#compliant#urn:xoev-de:\" _\r\n         & \"kosit:standard:xrechnung_1.2\"\r\n...<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Erstellen des Dokuments und Hinzuf&uuml;gen der Namespace-Angaben<\/span><\/b><\/p>\n<p><b>Basisdaten der Rechnung<\/b><\/p>\n<p>Im folgenden Block f&uuml;gen wir die allgemeinen Rechnungsdaten ein sowie einige weitere ben&ouml;tigte Elemente, die wir hier noch nicht f&uuml;llen (siehe Listing 4).<\/p>\n<pre>...\r\n     CreateSubElement objInvoice, \"cbc:ID\", rstRechnung!RechnungID\r\n     CreateSubElement objInvoice, \"cbc:IssueDate\", Format(rstRechnung!Rechnungsdatum, \"yyyy-mm-dd\")\r\n     CreateSubElement objInvoice, \"cbc:InvoiceTypeCode\", rstRechnung!RechnungstypID\r\n     CreateSubElement objInvoice, \"cbc:DocumentCurrencyCode\", \"EUR\"\r\n     CreateSubElement objInvoice, \"cbc:BuyerReference\", rstRechnung!Kundenreferenz\r\n     <span style=\"color:blue;\">Set<\/span> objOrderreference = CreateSubElement(objInvoice, \"cac:OrderReference\")\r\n     CreateSubElement objOrderreference, \"cbc:ID\"\r\n     <span style=\"color:blue;\">Set<\/span> objContractDocumentReference = CreateSubElement(objInvoice, \"cac:ContractDocumentReference\")\r\n     CreateSubElement objContractDocumentReference, \"cbc:ID\"\r\n     <span style=\"color:blue;\">Set<\/span> objProjectReference = CreateSubElement(objInvoice, \"cac:ProjectReference\")\r\n     CreateSubElement objProjectReference, \"cbc:ID\"\r\n...<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Hinzuf&uuml;gen von Basisdaten f&uuml;r die Rechnung<\/span><\/b><\/p>\n<p>Die allgemeinen Rechnungsdaten beziehen wir aus den Feldern des Recordsets <b>rstRechnung<\/b>, zum Beispiel:<\/p>\n<ul>\n<li><b>cbc:ID<\/b>: wird mit <b>rstRechnung!RechnungID <\/b>gef&uuml;llt,<\/li>\n<li><b>cbc:IssueDate<\/b>: wird mit <b>rstRechnung!Rechnungsdatum <\/b>gef&uuml;llt und so weiter.<\/li>\n<\/ul>\n<p>Die &uuml;brigen hier angegebenen Elemente wie <b>cac:Order-Reference<\/b>, <b>cac:ContractDocumentReference <\/b>oder <b>cac:ProjectReference <\/b>k&ouml;nnen Sie nachtr&auml;glich mit Daten aus einer der vorhandenen oder neuen Tabellen f&uuml;llen, indem Sie jeweils den dritten Parameter der <b>CreateSubElement<\/b>-Prozedur mit einem Verweis auf den zu verwendenden Wert f&uuml;llen. F&uuml;r einen Beispieldatensatz sieht dieser Abschnitt nach dem Erstellen wie folgt aus:<\/p>\n<pre>&lt;cbc:ID&gt;1234&lt;\/cbc:ID&gt;\r\n&lt;cbc:IssueDate&gt;2020-09-24&lt;\/cbc:IssueDate&gt;\r\n&lt;cbc:InvoiceTypeCode&gt;380&lt;\/cbc:InvoiceTypeCode&gt;\r\n&lt;cbc:DocumentCurrencyCode&gt;EUR&lt;\/cbc:DocumentCurrencyCode&gt;\r\n&lt;cbc:BuyerReference&gt;1234&lt;\/cbc:BuyerReference&gt;\r\n&lt;cac:OrderReference&gt;\r\n   &lt;cbc:ID\/&gt;\r\n&lt;\/cac:OrderReference&gt;\r\n&lt;cac:ContractDocumentReference&gt;\r\n   &lt;cbc:ID\/&gt;\r\n&lt;\/cac:ContractDocumentReference&gt;\r\n&lt;cac:ProjectReference&gt;\r\n   &lt;cbc:ID\/&gt;\r\n&lt;\/cac:ProjectReference&gt;<\/pre>\n<p><b>Angabe der Verk&auml;uferdaten<\/b><\/p>\n<p>Die Angaben zum Verk&auml;ufer, also zum Rechnungssteller, f&uuml;gen wir mit den Anweisungen aus Listing 5 zusammen. Das &uuml;bergeordnete Element hei&szlig;t <b>cac:AccountingSupplierParty<\/b>. Darunter werden die &uuml;brigen Elemente teils in mehreren Verschachtelungen angelegt, sodass das Ergebnis f&uuml;r diesen Bereich wie folgt aussieht:<\/p>\n<pre>...\r\n     <span style=\"color:blue;\">Set<\/span> objAccountingSupplierParty = CreateSubElement(objInvoice, \"cac:AccountingSupplierParty\")\r\n     <span style=\"color:blue;\">Set<\/span> objParty = CreateSubElement(objAccountingSupplierParty, \"cac:Party\")\r\n     <span style=\"color:blue;\">Set<\/span> objPostalAddress = CreateSubElement(objParty, \"cac:PostalAddress\")\r\n     CreateSubElement objPostalAddress, \"cbc:StreetName\", rstVerkaeufer!Strasse\r\n     CreateSubElement objPostalAddress, \"cbc:AdditionalStreetName\"\r\n     CreateSubElement objPostalAddress, \"cbc:CityName\", rstVerkaeufer!Ort\r\n     CreateSubElement objPostalAddress, \"cbc:PostalZone\", rstVerkaeufer!PLZ\r\n     <span style=\"color:blue;\">Set<\/span> objCountry = CreateSubElement(objPostalAddress, \"cac:Country\")\r\n     CreateSubElement objCountry, \"cbc:IdentificationCode\", DLookup(\"LandKuerzel\", \"tblLaender\", \"LandID = \" _\r\n         & rstVerkaeufer!LandID)\r\n     <span style=\"color:blue;\">Set<\/span> objPartyTaxScheme = CreateSubElement(objParty, \"cac:PartyTaxScheme\")\r\n     CreateSubElement objPartyTaxScheme, \"cbc:CompanyID\", rstVerkaeufer!UStIdNr\r\n     <span style=\"color:blue;\">Set<\/span> objTaxScheme = CreateSubElement(objPartyTaxScheme, \"cac:TaxScheme\")\r\n     CreateSubElement objTaxScheme, \"cbc:ID\", \"VAT\"\r\n     <span style=\"color:blue;\">Set<\/span> objPartyLegalEntity = CreateSubElement(objParty, \"cac:PartyLegalEntity\")\r\n     CreateSubElement objPartyLegalEntity, \"cbc:RegistrationName\", rstVerkaeufer!Firma\r\n     <span style=\"color:blue;\">Set<\/span> objContact = CreateSubElement(objParty, \"cac:Contact\")\r\n     CreateSubElement objContact, \"cbc:Name\", rstVerkaeufer!Ansprechpartner\r\n     CreateSubElement objContact, \"cbc:Telephone\", rstVerkaeufer!Telefon\r\n     CreateSubElement objContact, \"cbc:ElectronicMail\", rstVerkaeufer!EMail\r\n...<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Hinzuf&uuml;gen der Daten des K&auml;ufers\/Rechnungsempf&auml;ngers<\/span><\/b><\/p>\n<pre>&lt;cac:AccountingSupplierParty&gt;\r\n   &lt;cac:Party&gt;\r\n     &lt;cac:PostalAddress&gt;\r\n       &lt;cbc:StreetName&gt;Borkhofer Str. 17&lt;\/cbc:StreetName&gt;\r\n       &lt;cbc:AdditionalStreetName\/&gt;\r\n       &lt;cbc:CityName&gt;Duisburg&lt;\/cbc:CityName&gt;\r\n       &lt;cbc:PostalZone&gt;47137&lt;\/cbc:PostalZone&gt;\r\n       &lt;cac:Country&gt;\r\n         &lt;cbc:IdentificationCode&gt;DE&lt;\/cbc:IdentificationCode&gt;\r\n       &lt;\/cac:Country&gt;\r\n     &lt;\/cac:PostalAddress&gt;\r\n     &lt;cac:PartyTaxScheme&gt;\r\n       &lt;cbc:CompanyID&gt;DE121212121&lt;\/cbc:CompanyID&gt;\r\n       &lt;cac:TaxScheme&gt;\r\n         &lt;cbc:ID&gt;VAT&lt;\/cbc:ID&gt;\r\n       &lt;\/cac:TaxScheme&gt;\r\n     &lt;\/cac:PartyTaxScheme&gt;\r\n     &lt;cac:PartyLegalEntity&gt;\r\n       &lt;cbc:RegistrationName&gt;Andr&eacute; Minhorst Verlag&micro;                                   &lt;\/cbc:RegistrationName&gt;\r\n     &lt;\/cac:PartyLegalEntity&gt;\r\n     &lt;cac:Contact&gt;\r\n       &lt;cbc:Name&gt;Andr&eacute; Minhorst&lt;\/cbc:Name&gt;\r\n       &lt;cbc:Telephone&gt;0203-123123&lt;\/cbc:Telephone&gt;\r\n       &lt;cbc:ElectronicMail&gt;andre@minhorst.com&lt;\/cbc:ElectronicMail&gt;\r\n     &lt;\/cac:Contact&gt;\r\n   &lt;\/cac:Party&gt;\r\n&lt;\/cac:AccountingSupplierParty&gt;<\/pre>\n<p>In diesem Abschnitt arbeiten wir verst&auml;rkt mit verschachtelten Elementen. Wir legen zum Beispiel die Objekte <b>obj-AccountingSupplierParty<\/b>, <b>objParty <\/b>und <b>objPostalAddress <\/b>als Unterobjekte anderer Objekte an, bevor wir &uuml;berhaupt Daten eingeben. Diese stammen dann aus dem Recordset <b>rstVerkaeufer<\/b>. Beim Element <b>cbc:IdentificationCode <\/b>m&uuml;ssen wir einen L&auml;ndercode wie <b>DE <\/b>f&uuml;r Deutschland angeben. Diesen haben wir in der Tabelle <b>tblLaender <\/b>gespeichert. Die Tabelle <b>tblKontakte <\/b>beziehungsweise auch das Recordset <b>rstVerkaeufer <\/b>enthalten ein Fremdschl&uuml;sselfeld namens <b>LandID <\/b>zu dieser Tabelle. Die Prozedur liest per <b>DLookup <\/b>den Wert des Feldes <b>LandKuerzel <\/b>zu dem Datensatz mit dem Wert im Feld <b>LandID <\/b>aus.<\/p>\n<p><b>Angabe der K&auml;uferdaten<\/b><\/p>\n<p>Die Angabe der K&auml;uferdaten stellen wir mit den Zeilen aus Listing 6 zusammen. Der Aufbau dieser Zeilen ist praktisch identisch mit denen f&uuml;r das Zusammenstellen der Verk&auml;uferdaten. Das Ergebnis sieht f&uuml;r unseren Beispieldatensatz wie folgt aus:<\/p>\n<pre>...\r\n     <span style=\"color:blue;\">Set<\/span> objAccountingCustomerParty = CreateSubElement(objInvoice, \"cac:AccountingCustomerParty\")\r\n     <span style=\"color:blue;\">Set<\/span> objParty = CreateSubElement(objAccountingCustomerParty, \"cac:Party\")\r\n     <span style=\"color:blue;\">Set<\/span> objPostalAddress = CreateSubElement(objParty, \"cac:PostalAddress\")\r\n     CreateSubElement objPostalAddress, \"cbc:StreetName\", rstKaeufer!Strasse\r\n     CreateSubElement objPostalAddress, \"cbc:AdditionalStreetName\"\r\n     CreateSubElement objPostalAddress, \"cbc:CityName\", rstKaeufer!Ort\r\n     CreateSubElement objPostalAddress, \"cbc:PostalZone\", rstKaeufer!PLZ\r\n     <span style=\"color:blue;\">Set<\/span> objCountry = CreateSubElement(objPostalAddress, \"cac:Country\")\r\n     CreateSubElement objCountry, \"cbc:IdentificationCode\", DLookup(\"LandKuerzel\", \"tblLaender\", \"LandID = \" _\r\n         & rstVerkaeufer!LandID)\r\n     <span style=\"color:blue;\">Set<\/span> objPartyTaxScheme = CreateSubElement(objParty, \"cac:PartyTaxScheme\")\r\n     CreateSubElement objPartyTaxScheme, \"cbc:CompanyID\", rstKaeufer!UStIdNr\r\n     <span style=\"color:blue;\">Set<\/span> objTaxScheme = CreateSubElement(objPartyTaxScheme, \"cac:TaxScheme\")\r\n     CreateSubElement objTaxScheme, \"cbc:ID\", \"VAT\"\r\n     <span style=\"color:blue;\">Set<\/span> objPartyLegalEntity = CreateSubElement(objParty, \"cac:PartyLegalEntity\")\r\n     CreateSubElement objPartyLegalEntity, \"cbc:RegistrationName\", rstKaeufer!Firma\r\n     <span style=\"color:blue;\">Set<\/span> objContact = CreateSubElement(objParty, \"cac:Contact\")\r\n     CreateSubElement objContact, \"cbc:Name\", rstKaeufer!Ansprechpartner\r\n     CreateSubElement objContact, \"cbc:Telephone\", rstKaeufer!Telefon\r\n     CreateSubElement objContact, \"cbc:ElectronicMail\", rstKaeufer!EMail\r\n...<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 6: Hinzuf&uuml;gen der Daten des Verk&auml;ufers\/Rechnungsstellers<\/span><\/b><\/p>\n<pre>&lt;cac:AccountingCustomerParty&gt;\r\n   &lt;cac:Party&gt;\r\n     &lt;cac:PostalAddress&gt;\r\n       &lt;cbc:StreetName&gt;Teststr. 1&lt;\/cbc:StreetName&gt;\r\n       &lt;cbc:AdditionalStreetName\/&gt;\r\n       &lt;cbc:CityName&gt;Berlin&lt;\/cbc:CityName&gt;\r\n       &lt;cbc:PostalZone&gt;12121&lt;\/cbc:PostalZone&gt;\r\n       &lt;cac:Country&gt;\r\n         &lt;cbc:IdentificationCode&gt;DE&lt;\/cbc:IdentificationCode&gt;\r\n       &lt;\/cac:Country&gt;\r\n     &lt;\/cac:PostalAddress&gt;\r\n     &lt;cac:PartyTaxScheme&gt;\r\n       &lt;cbc:CompanyID&gt;DE232323232&lt;\/cbc:CompanyID&gt;\r\n       &lt;cac:TaxScheme&gt;\r\n         &lt;cbc:ID&gt;VAT&lt;\/cbc:ID&gt;\r\n       &lt;\/cac:TaxScheme&gt;\r\n     &lt;\/cac:PartyTaxScheme&gt;\r\n     &lt;cac:PartyLegalEntity&gt;\r\n       &lt;cbc:RegistrationName&gt;M&uuml;ller AG &lt;\/cbc:RegistrationName&gt;\r\n     &lt;\/cac:PartyLegalEntity&gt;\r\n     &lt;cac:Contact&gt;\r\n       &lt;cbc:Name&gt;Klaus M&uuml;ller&lt;\/cbc:Name&gt;\r\n       &lt;cbc:Telephone&gt;0123-2121212&lt;\/cbc:Telephone&gt;\r\n       &lt;cbc:ElectronicMail&gt;klaus@mueller.de &lt;\/cbc:ElectronicMail&gt;\r\n     &lt;\/cac:Contact&gt;\r\n   &lt;\/cac:Party&gt;\r\n&lt;\/cac:AccountingCustomerParty&gt;<\/pre>\n<p><b>Angabe der Zahlungsdaten<\/b><\/p>\n<p>Die Zahlungsdaten beinhalten verschiedene Informationen. Welche dies sind, h&auml;ngt davon ab, welche Zahlungsart gew&auml;hlt wird. Wir wollen dies hier etwas vereinfachen und stellen den Fall f&uuml;r eine &Uuml;berweisung durch den K&auml;ufer vor. Dazu m&uuml;ssen wir als Erstes diese Zahlungsart festlegen. Dazu ben&ouml;tigen wir einen Zahlencode, welcher den Angaben aus der Norm unter dem folgenden Link entspricht:<\/p>\n<pre>https:\/\/www.unece.org\/trade\/untdid\/d10a\/tred\/tred4461.htm<\/pre>\n<p>Hier finden wir f&uuml;r den Eintrag <b>Debit transfer <\/b>den Zahlenwert <b>31<\/b>. Die Bezahlmethode sowie den Text Debit transfer tragen wir fest in den Code zum Erstellen des folgenden Abschnitts ein. Danach folgen aus dem Recordset <b>rstVerkaeufer <\/b>die IBAN und der Kontoinhaber f&uuml;r das Ziel der &Uuml;berweisung (siehe Listing 7).<\/p>\n<pre>...\r\n     <span style=\"color:blue;\">Set<\/span> objPaymentMeans = CreateSubElement(objInvoice, \"cac:PaymentMeans\")\r\n     CreateSubElement objPaymentMeans, \"cbc:PaymentMeansCode\", \"31\"\r\n     CreateSubElement objPaymentMeans, \"cbc:PaymentID\", \"Debit transfer\"\r\n     <span style=\"color:blue;\">Set<\/span> objPayeeFinancialAccount = CreateSubElement(objPaymentMeans, \"cac:PayeeFinancialAccount\")\r\n     CreateSubElement objPayeeFinancialAccount, \"cbc:ID\", rstVerkaeufer!IBAN\r\n     CreateSubElement objPayeeFinancialAccount, \"cbc:Name\", rstVerkaeufer!Kontoinhaber\r\n     <span style=\"color:blue;\">Set<\/span> objFinancialInstitutionBranch = CreateSubElement(objPayeeFinancialAccount, \"cac:FinancialInstitutionBranch\")\r\n     CreateSubElement objFinancialInstitutionBranch, \"cbc:ID\"\r\n     <span style=\"color:blue;\">Set<\/span> objPaymentTerms = CreateSubElement(objInvoice, \"cac:PaymentTerms\")\r\n     CreateSubElement objPaymentTerms, \"cbc:Note\"\r\n...<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 7: Hinzuf&uuml;gen der Daten zur Bezahlmethode und Bezahlung  <\/span><\/b><\/p>\n<p>Das Ergebnis dieses Abschnitts liest sich so:<\/p>\n<pre>&lt;cac:PaymentMeans&gt;\r\n   &lt;cbc:PaymentMeansCode&gt;31&lt;\/cbc:PaymentMeansCode&gt;\r\n   &lt;cbc:PaymentID&gt;Debit transfer&lt;\/cbc:PaymentID&gt;\r\n   &lt;cac:PayeeFinancialAccount&gt;\r\n     &lt;cbc:ID&gt;DE23232323232323232323&lt;\/cbc:ID&gt;\r\n     &lt;cbc:Name&gt;Klaus M&uuml;ller&lt;\/cbc:Name&gt;\r\n     &lt;cac:FinancialInstitutionBranch&gt;\r\n       &lt;cbc:ID\/&gt;\r\n     &lt;\/cac:FinancialInstitutionBranch&gt;\r\n   &lt;\/cac:PayeeFinancialAccount&gt;\r\n&lt;\/cac:PaymentMeans&gt;\r\n&lt;cac:PaymentTerms&gt;\r\n   &lt;cbc:Note\/&gt;\r\n&lt;\/cac:PaymentTerms&gt;<\/pre>\n<p><b>Angabe der Steuern<\/b><\/p>\n<p>Danach stellen wir die steuerrelevanten Informationen zusammen. Hier ist etwas Rechenaufwand erforderlich, denn wir m&uuml;ssen ermitteln, welche Betr&auml;ge mit welchen Steuers&auml;tzen in den Positionen der Rechnung auftauchen und diese nach Steuers&auml;tzen gruppieren und summieren.<\/p>\n<p>Insgesamt ben&ouml;tigen wir die folgenden Informationen:<\/p>\n<ul>\n<li>die gesamte Mehrwertsteuer der Rechnung<\/li>\n<li>f&uuml;r jeden Steuersatz die Summe des steuerbaren Betrags und der Mehrwertsteuer f&uuml;r diesen Betrag<\/li>\n<\/ul>\n<p>Dazu formulieren wir den Teil der Prozedur aus Listing 8. Hier erstellen wir zuerst die zwei Elemente <b>cac:TaxTotal <\/b>und <b>cbc:TaxAmount<\/b>, wobei wir den Wert f&uuml;r <b>cbc:TaxAmount <\/b>zun&auml;chst mit <b>0.00 <\/b>f&uuml;llen. Die Summe erg&auml;nzen wir nach der Berechnung der Steuern. Au&szlig;erdem legen wir als W&auml;hrung f&uuml;r <b>cbc:TaxAmount <\/b>mit dem Attribut <b>currencyID <\/b>den Wert <b>EUR <\/b>fest.<\/p>\n<pre>...\r\n     <span style=\"color:blue;\">Set<\/span> objTaxTotal = CreateSubElement(objInvoice, \"cac:TaxTotal\")\r\n     <span style=\"color:blue;\">Set<\/span> objTaxAmount = CreateSubElement(objTaxTotal, \"cbc:TaxAmount\", \"0.0\")\r\n     CreateAttribute objTaxAmount, \"currencyID\", \"EUR\"\r\n     <span style=\"color:blue;\">Set<\/span> rstMehrwertsteuersaetze = db.OpenRecordset(\"SELECT * FROM tblMehrwertsteuersaetze\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rstMehrwertsteuersaetze.EOF\r\n         curBetragJeSatz = Nz(DSum(\"Einzelpreis * Menge\", \"tblPositionen\", \"RechnungID = \" & rstRechnung!RechnungID _\r\n             & \" AND MehrwertsteuersatzID = \" & rstMehrwertsteuersaetze!MehrwertsteuersatzID), 0)\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> curBetragJeSatz = 0<span style=\"color:blue;\"> Then<\/span>\r\n             curMwStJeSatz = curBetragJeSatz * rstMehrwertsteuersaetze!Mehrwertsteuersatz\r\n             curMwStGesamt = curMwStGesamt + curMwStJeSatz\r\n             <span style=\"color:blue;\">Set<\/span> objTaxSubtotal = CreateSubElement(objTaxTotal, \"cac:TaxSubtotal\")\r\n             <span style=\"color:blue;\">Set<\/span> objTaxableAmount = CreateSubElement(objTaxSubtotal, \"cbc:TaxableAmount\", _\r\n                 <span style=\"color:blue;\">Replace<\/span>(Format(curBetragJeSatz, \"0.00\"), \",\", \".\"))\r\n             CreateAttribute objTaxableAmount, \"currencyID\", \"EUR\"\r\n             <span style=\"color:blue;\">Set<\/span> objTaxAmountSub = CreateSubElement(objTaxSubtotal, \"cbc:TaxAmount\", _\r\n                 <span style=\"color:blue;\">Replace<\/span>(Format(curBetragJeSatz, \"0.00\"), \",\", \".\"))\r\n             CreateAttribute objTaxAmountSub, \"currencyID\", \"EUR\"\r\n             <span style=\"color:blue;\">Set<\/span> objTaxCategory = CreateSubElement(objTaxSubtotal, \"cac:TaxCategory\")\r\n             CreateSubElement objTaxCategory, \"cbc:ID\", \"S\"\r\n             CreateSubElement objTaxCategory, \"cbc:Percent\", CStr(Nz(rstMehrwertsteuersaetze!Mehrwertsteuersatz, 0) * 100)\r\n             <span style=\"color:blue;\">Set<\/span> objTaxScheme = CreateSubElement(objTaxCategory, \"cac:TaxScheme\")\r\n             CreateSubElement objTaxScheme, \"cbc:ID\", \"VAT\"\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         rstMehrwertsteuersaetze.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     objTaxAmount.Text = <span style=\"color:blue;\">Replace<\/span>(CStr(curMwStGesamt), \",\", \".\")\r\n...<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 8: Ermitteln der Mehrwertsteuer  <\/span><\/b><\/p>\n<p>Danach erstellen wir ein Recordset auf Basis der Tabelle <b>tblMehrwertsteuersaetze<\/b>, um alle Mehrwertsteuers&auml;tze zu durchlaufen.<\/p>\n<p>In der entsprechenden <b>Do While<\/b>-Schleife ermitteln wir zun&auml;chst mit <b>DSum <\/b>den Nettobetrag aller Positionen mit dem aktuellen Mehrwertsteuersatz f&uuml;r die aktuelle Rechnung und tragen diesen Wert in die Variable <b>curBetragJeSatz <\/b>ein.<\/p>\n<p>Wenn dieser Wert nicht <b>0 <\/b>ist, ermitteln wir auf Basis dieses Wertes und dem aktuellen Mehrwertsteuersatz die Mehrwertsteuer f&uuml;r diesen Satz, der in der Variablen <b>curMwStJeSatz <\/b>landet. In <b>curMwStGesamt <\/b>summieren wir diese Werte &uuml;ber alle Mehrwertsteuers&auml;tze auf.<\/p>\n<p>Danach f&uuml;gen wir einige weitere Elemente zum XML-Dokument hinzu, die im Endergebnis f&uuml;r unsere Beispielrechnung mit zwei Positionen wie folgt aussehen:<\/p>\n<pre>&lt;cac:TaxTotal&gt;\r\n   &lt;cbc:TaxAmount currencyID=\"EUR\"&gt;4.64&lt;\/cbc:TaxAmount&gt;\r\n   &lt;cac:TaxSubtotal&gt;\r\n     &lt;cbc:TaxableAmount currencyID=\"EUR\"&gt;12 &lt;\/cbc:TaxableAmount&gt;\r\n     &lt;cbc:TaxAmount currencyID=\"EUR\"&gt;0.84&lt;\/cbc:TaxAmount&gt;\r\n     &lt;cac:TaxCategory&gt;\r\n       &lt;cbc:ID&gt;S&lt;\/cbc:ID&gt;\r\n       &lt;cbc:Percent&gt;19&lt;\/cbc:Percent&gt;\r\n       &lt;cac:TaxScheme&gt;\r\n         &lt;cbc:ID&gt;VAT&lt;\/cbc:ID&gt;\r\n       &lt;\/cac:TaxScheme&gt;\r\n     &lt;\/cac:TaxCategory&gt;\r\n   &lt;\/cac:TaxSubtotal&gt;\r\n   &lt;cac:TaxSubtotal&gt;\r\n     &lt;cbc:TaxableAmount currencyID=\"EUR\"&gt;20 &lt;\/cbc:TaxableAmount&gt;\r\n     &lt;cbc:TaxAmount currencyID=\"EUR\"&gt;3.8&lt;\/cbc:TaxAmount&gt;\r\n     &lt;cac:TaxCategory&gt;\r\n       &lt;cbc:ID&gt;S&lt;\/cbc:ID&gt;\r\n       &lt;cbc:Percent&gt;19&lt;\/cbc:Percent&gt;\r\n       &lt;cac:TaxScheme&gt;\r\n         &lt;cbc:ID&gt;VAT&lt;\/cbc:ID&gt;\r\n       &lt;\/cac:TaxScheme&gt;\r\n     &lt;\/cac:TaxCategory&gt;\r\n   &lt;\/cac:TaxSubtotal&gt;\r\n&lt;\/cac:TaxTotal&gt;<\/pre>\n<p>Zu beachten ist hier, dass wir die Zahlenwerte aus den W&auml;hrungsfeldern sowie die berechneten Werte jeweils mit der Funktion <b>Format <\/b>formatieren und dann noch das Dezimaltrennzeichen mit der <b>Replace<\/b>-Funktion von Komma in Punkt &auml;ndern.<\/p>\n<p><b>Angabe der Rechnungssummen<\/b><\/p>\n<p>Nun folgen die Summen der Rechnung, die wie folgt verschl&uuml;sselt sind:<\/p>\n<ul>\n<li><b>LineExtensionAmount<\/b>: Gesamtbetrag der Rechnungspositionen, allerdings ohne Umsatzsteuer und einschlie&szlig;lich aller Nachl&auml;sse und Abgaben wie beispielswiese Skonti.<\/li>\n<li><b>TaxExclusiveAmount<\/b>: Gesamtbetrag der Rechnung ohne Umsatzsteuer<\/li>\n<li><b>TaxInclusiveAmount<\/b>: Gesamtbetrag der Rechnung mit Umsatzsteuer<\/li>\n<li><b>PayableAmount<\/b>: Zu zahlender Betrag.<\/li>\n<\/ul>\n<p>Wir haben es im Beispiel bei diesen Positionen belassen. Sie k&ouml;nnen noch weitere Elemente hinzuf&uuml;gen, die Sie im Dokument <b>Rechnung Standard und Extension<\/b> unter <b>Gruppe DOCUMENT TOTALS <\/b>finden.<\/p>\n<p>Das Ergebnis soll wie folgt aussehen:<\/p>\n<pre>&lt;cac:LegalMonetaryTotal&gt;\r\n   &lt;cbc:LineExtensionAmount currencyID=\"EUR\"&gt;32&lt;\/cbc:LineExtensionAmount&gt;\r\n   &lt;cbc:TaxExclusiveAmount currencyID=\"EUR\"&gt;32&lt;\/cbc:TaxExclusiveAmount&gt;\r\n   &lt;cbc:TaxInclusiveAmount currencyID=\"EUR\"&gt;36.64&lt;\/cbc:TaxInclusiveAmount&gt;\r\n   &lt;cbc:PayableAmount currencyID=\"EUR\"&gt;36.64&lt;\/cbc:PayableAmount&gt;\r\n&lt;\/cac:LegalMonetaryTotal&gt;<\/pre>\n<p>Dazu verwenden wir die Zeilen aus Listing 9. Hier berechnen wir die Summe der Nettobetr&auml;ge mit dem Produkt aus Einzelpreis und Menge je Position und schreiben das Ergebnis in die Variable <b>curNettoGesamt<\/b>.<\/p>\n<pre>...\r\n     curNettoGesamt = DSum(\"Einzelpreis * Menge\", \"tblPositionen\", \"RechnungID = \" & rstRechnung!RechnungID)\r\n     <span style=\"color:blue;\">Set<\/span> objLegalMonetaryTotal = CreateSubElement(objInvoice, \"cac:LegalMonetaryTotal\")\r\n     <span style=\"color:blue;\">Set<\/span> objLineExtensionAmount = CreateSubElement(objLegalMonetaryTotal, \"cbc:LineExtensionAmount\", _\r\n         <span style=\"color:blue;\">Replace<\/span>(CStr(curNettoGesamt), \",\", \".\"))\r\n     CreateAttribute objLineExtensionAmount, \"currencyID\", \"EUR\"\r\n     <span style=\"color:blue;\">Set<\/span> objTaxExclusiveAmount = CreateSubElement(objLegalMonetaryTotal, \"cbc:TaxExclusiveAmount\", _\r\n         <span style=\"color:blue;\">Replace<\/span>(CStr(curNettoGesamt), \",\", \".\"))\r\n     CreateAttribute objTaxExclusiveAmount, \"currencyID\", \"EUR\"\r\n     <span style=\"color:blue;\">Set<\/span> objTaxInclusiveAmount = CreateSubElement(objLegalMonetaryTotal, \"cbc:TaxInclusiveAmount\", _\r\n         <span style=\"color:blue;\">Replace<\/span>(CStr(curNettoGesamt + curMwStGesamt), \",\", \".\"))\r\n     CreateAttribute objTaxInclusiveAmount, \"currencyID\", \"EUR\"\r\n     <span style=\"color:blue;\">Set<\/span> objPayableAmount = CreateSubElement(objLegalMonetaryTotal, \"cbc:PayableAmount\", _\r\n         <span style=\"color:blue;\">Replace<\/span>(CStr(curNettoGesamt + curMwStGesamt), \",\", \".\"))\r\n     CreateAttribute objPayableAmount, \"currencyID\", \"EUR\"\r\n...<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 9: Ermitteln der Rechnungssummen  <\/span><\/b><\/p>\n<p>Dann legt die Prozedur ein Element namens <b>cac:Legal-Mone-taryTotal <\/b>an und darunter die vier weiter oben beschriebenen Elemente mit den jeweiligen Werten.<\/p>\n<p><b>Angabe der Rechnungspositionen<\/b><\/p>\n<p>Schlie&szlig;lich ben&ouml;tigen wir noch die detaillierten Rechnungspositionen. Diese landen in jeweils einem Element namens <b>cac:InvoiceLine<\/b>.<\/p>\n<p>Das Element hat folgende Unterelemente:<\/p>\n<ul>\n<li><b>cbc:ID<\/b>: Positionsnummer<\/li>\n<li><b>cbc:InvoicedQuantity<\/b>: Menge inklusive Einheit im Attribut <b>unitCode<\/b><\/li>\n<li><b>cbc:LineExtensionAmount<\/b>: Betrag f&uuml;r diese Position<\/li>\n<li><b>cac:Item|cbc:Description<\/b>: Beschreibung der Position<\/li>\n<li><b>cac:Item|cbc:Name<\/b>: Name der Position<\/li>\n<\/ul>\n<p>Schlie&szlig;lich folgen noch die Angabe des verwendeten Steuersatzes und der Einzelpreis (<b>cac:Price|cbc:PriceAmount<\/b>). Das Ergebnis soll insgesamt wie folgt aussehen:<\/p>\n<pre>&lt;cac:InvoiceLine&gt;\r\n   &lt;cbc:ID&gt;1&lt;\/cbc:ID&gt;<\/pre>\n<p>F&uuml;r <b>unitCode <\/b>gibt es hunderte von Codes, die wir hier nicht aufz&auml;hlen wollen. Sie finden diese schnell, wenn Sie im Internet nach <b>unitCode <\/b>und <b>XPP <\/b>suchen.<\/p>\n<p>Wir verwenden <b>XPP <\/b>f&uuml;r <b>St&uuml;ck<\/b>:<\/p>\n<pre>   &lt;cbc:InvoicedQuantity unitCode=\"XPP\"&gt;1&lt;\/cbc:InvoicedQuantity&gt;\r\n     &lt;cbc:LineExtensionAmount currencyID=\"EUR\"&gt;12 &lt;\/cbc:LineExtensionAmount&gt;\r\n     &lt;cac:Item&gt;\r\n       &lt;cbc:Description\/&gt;\r\n       &lt;cbc:Name&gt;Position 1&lt;\/cbc:Name&gt;\r\n       &lt;cac:ClassifiedTaxCategory&gt;\r\n         &lt;cbc:ID&gt;S&lt;\/cbc:ID&gt;\r\n         &lt;cbc:Percent&gt;7&lt;\/cbc:Percent&gt;\r\n         &lt;cac:TaxScheme&gt;\r\n           &lt;cbc:ID&gt;VAT&lt;\/cbc:ID&gt;\r\n         &lt;\/cac:TaxScheme&gt;\r\n       &lt;\/cac:ClassifiedTaxCategory&gt;\r\n     &lt;\/cac:Item&gt;\r\n     &lt;cac:Price&gt;\r\n       &lt;cbc:PriceAmount currencyID=\"EUR\"&gt;12 &lt;\/cbc:PriceAmount&gt;\r\n     &lt;\/cac:Price&gt;\r\n   &lt;\/cac:InvoiceLine&gt;\r\n   &lt;cac:InvoiceLine&gt;\r\n     &lt;cbc:ID&gt;2&lt;\/cbc:ID&gt;\r\n     &lt;cbc:InvoicedQuantity unitCode=\"XPP\"&gt;2 &lt;\/cbc:InvoicedQuantity&gt;\r\n     &lt;cbc:LineExtensionAmount currencyID=\"EUR\"&gt;20 &lt;\/cbc:LineExtensionAmount&gt;\r\n     &lt;cac:Item&gt;\r\n       &lt;cbc:Description\/&gt;\r\n       &lt;cbc:Name&gt;Position 2&lt;\/cbc:Name&gt;\r\n       &lt;cac:ClassifiedTaxCategory&gt;\r\n         &lt;cbc:ID&gt;S&lt;\/cbc:ID&gt;\r\n         &lt;cbc:Percent&gt;19&lt;\/cbc:Percent&gt;\r\n         &lt;cac:TaxScheme&gt;\r\n           &lt;cbc:ID&gt;VAT&lt;\/cbc:ID&gt;\r\n         &lt;\/cac:TaxScheme&gt;\r\n       &lt;\/cac:ClassifiedTaxCategory&gt;\r\n     &lt;\/cac:Item&gt;\r\n     &lt;cac:Price&gt;\r\n       &lt;cbc:PriceAmount currencyID=\"EUR\"&gt;10 &lt;\/cbc:PriceAmount&gt;\r\n     &lt;\/cac:Price&gt;\r\n   &lt;\/cac:InvoiceLine&gt;<\/pre>\n<p>Diese Zeilen setzen wir mit dem Code aus Listing 10 zusammen. Hier durchlaufen wir in einer Schleife alle Eintr&auml;ge des Recordsets <b>rstPositionen<\/b>. Dabei erstellen wir zuerst das Unterobjekt <b>cac:InvoiceLine<\/b>, das genau eine Rechnungsposition abbildet.<\/p>\n<pre>...\r\n    <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rstPositionen.EOF\r\n         <span style=\"color:blue;\">Set<\/span> objInvoiceLine = CreateSubElement(objInvoice, \"cac:InvoiceLine\")\r\n         CreateSubElement objInvoiceLine, \"cbc:ID\", CStr(rstPositionen.AbsolutePosition + 1)\r\n         <span style=\"color:blue;\">Set<\/span> objInvoicedQuantity = CreateSubElement(objInvoiceLine, \"cbc:InvoicedQuantity\", rstPositionen!Menge)\r\n         CreateAttribute objInvoicedQuantity, \"unitCode\", \"XPP\"\r\n         <span style=\"color:blue;\">Set<\/span> objLineExtensionAmount = CreateSubElement(objInvoiceLine, \"cbc:LineExtensionAmount\", _\r\n             <span style=\"color:blue;\">Replace<\/span>(CStr(Nz(rstPositionen!Einzelpreis * rstPositionen!Menge, 0)), \",\", \".\"))\r\n         CreateAttribute objLineExtensionAmount, \"currencyID\", \"EUR\"\r\n         <span style=\"color:blue;\">Set<\/span> objItem = CreateSubElement(objInvoiceLine, \"cac:Item\")\r\n         CreateSubElement objItem, \"cbc:Description\"\r\n         CreateSubElement objItem, \"cbc:Name\", rstPositionen!Bezeichnung\r\n         <span style=\"color:blue;\">Set<\/span> objClassifiedTaxCategory = CreateSubElement(objItem, \"cac:ClassifiedTaxCategory\")\r\n         CreateSubElement objClassifiedTaxCategory, \"cbc:ID\", \"S\"\r\n         CreateSubElement objClassifiedTaxCategory, \"cbc:Percent\", <span style=\"color:blue;\">Replace<\/span>(CStr(Nz(DLookup(\"Mehrwertsteuersatz\", _\r\n             \"tblMehrwertsteuersaetze\", \"MehrwertsteuersatzID = \" & rstPositionen!MehrwertsteuersatzID), 0) * 100), \",\", \".\")\r\n         <span style=\"color:blue;\">Set<\/span> objTaxScheme = CreateSubElement(objClassifiedTaxCategory, \"cac:TaxScheme\")\r\n         CreateSubElement objTaxScheme, \"cbc:ID\", \"VAT\"\r\n         <span style=\"color:blue;\">Set<\/span> objPrice = CreateSubElement(objInvoiceLine, \"cac:Price\")\r\n         <span style=\"color:blue;\">Set<\/span> objPriceAmount = CreateSubElement(objPrice, \"cbc:PriceAmount\", _\r\n             <span style=\"color:blue;\">Replace<\/span>(CStr(Nz(rstPositionen!Einzelpreis, 0)), \",\", \".\"))\r\n         CreateAttribute objPriceAmount, \"currencyID\", \"EUR\"\r\n         rstPositionen.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n...<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 10: Ermitteln der Rechnungspositionen<\/span><\/b><\/p>\n<p>Darunter legen wir die Positionsnummer (<b>cbc:ID<\/b>), die Menge (<b>cbc:InvoicedQuantity<\/b>) und als Attribut <b>unitCode <\/b>die Einheit an. Au&szlig;erdem f&uuml;gen wir den Einzelpreis in <b>cbc:LineExtensionAmount <\/b>ein. In einem weiteren Unterelement namens <b>cac:item <\/b>landen dann die Beschreibung, der Name sowie die Steuerinformationen. Zum Abschluss speichern wir das XML-Dokument noch und beenden die Prozedur:<\/p>\n<pre>    objXML.Save CurrentProject.Path & \"XRechnung.xml\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit erhalten wir ein XRechnung-kompatibles XML-Dokument, dass Sie unter der oben angegebenen Adresse validieren lassen und anschlie&szlig;end an den Rechnungsversender schicken k&ouml;nnen.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Nachdem wir im ersten Teil die Erstellung einer XRechnung programmiert haben, zeigen wir im zweiten Teil, wie Sie diese nach Erhalt in das Datenmodell einer Datenbank einlesen k&ouml;nnen.<\/p>\n<p>Im dritten und letzten Schritt wollen wir die eingelesenen Daten noch mithilfe eines Access-Berichts als Rechnung ausgeben.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>XRechnung.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/3B86F366-5DE3-497E-B287-5D46A3B14BC0\/aiu_1277.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>XRechnung ist ein Standard f&uuml;r das Einreichen von Rechnungen bei &ouml;ffentlichen Auftr&auml;gen. Sinn und Zweck dieses Standards ist, das &Uuml;bermitteln von Rechnungsdaten auf eine Weise zu erlauben, dass diese automatisiert eingelesen und verarbeitet werden k&ouml;nnen. Wie das X in XRechnung vermuten l&auml;sst, steckt dahinter ein Austausch der Daten im XML-Format. Die Vorlage f&uuml;r XRechnung liefert die europ&auml;ische Norm EN 16931. Wie die Daten strukturiert werden m&uuml;ssen, haben wir dem Dokument &#8222;Spezifikation XRechnung Standard und Extension&#8220; entnommen, das &ouml;ffentlich einsehbar ist. Als Grundlage f&uuml;r die Zusammenstellung der XRechnung verwenden wir ein herk&ouml;mmliches Datenmodell einer Bestell- oder Rechnungsverwaltung. In diesem ersten Teil zeigen wir, wie die Daten aus den Tabellen der Beispieldatenbank in ein XRechnung-kompatibles XML-Dokument umgewandelt werden und wie Sie dieses validieren k&ouml;nnen.<\/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":[662020,66062020,44000027],"tags":[],"class_list":["post-55001277","post","type-post","status-publish","format-standard","hentry","category-662020","category-66062020","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>XRechnung, Teil 1: Rechnungen generieren - 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\/XRechnung_Teil_1_Rechnungen_generieren\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"XRechnung, Teil 1: Rechnungen generieren\" \/>\n<meta property=\"og:description\" content=\"XRechnung ist ein Standard f&uuml;r das Einreichen von Rechnungen bei &ouml;ffentlichen Auftr&auml;gen. Sinn und Zweck dieses Standards ist, das &Uuml;bermitteln von Rechnungsdaten auf eine Weise zu erlauben, dass diese automatisiert eingelesen und verarbeitet werden k&ouml;nnen. Wie das X in XRechnung vermuten l&auml;sst, steckt dahinter ein Austausch der Daten im XML-Format. Die Vorlage f&uuml;r XRechnung liefert die europ&auml;ische Norm EN 16931. Wie die Daten strukturiert werden m&uuml;ssen, haben wir dem Dokument &quot;Spezifikation XRechnung Standard und Extension&quot; entnommen, das &ouml;ffentlich einsehbar ist. Als Grundlage f&uuml;r die Zusammenstellung der XRechnung verwenden wir ein herk&ouml;mmliches Datenmodell einer Bestell- oder Rechnungsverwaltung. In diesem ersten Teil zeigen wir, wie die Daten aus den Tabellen der Beispieldatenbank in ein XRechnung-kompatibles XML-Dokument umgewandelt werden und wie Sie dieses validieren k&ouml;nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/XRechnung_Teil_1_Rechnungen_generieren\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-27T22:08:52+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/c20a28ed5b6c4065b72c77de93c56cbf\" \/>\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=\"27\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XRechnung_Teil_1_Rechnungen_generieren\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XRechnung_Teil_1_Rechnungen_generieren\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"XRechnung, Teil 1: Rechnungen generieren\",\"datePublished\":\"2021-01-27T22:08:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XRechnung_Teil_1_Rechnungen_generieren\\\/\"},\"wordCount\":3151,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XRechnung_Teil_1_Rechnungen_generieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/c20a28ed5b6c4065b72c77de93c56cbf\",\"articleSection\":[\"2020\",\"6\\\/2020\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/XRechnung_Teil_1_Rechnungen_generieren\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XRechnung_Teil_1_Rechnungen_generieren\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XRechnung_Teil_1_Rechnungen_generieren\\\/\",\"name\":\"XRechnung, Teil 1: Rechnungen generieren - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XRechnung_Teil_1_Rechnungen_generieren\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XRechnung_Teil_1_Rechnungen_generieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/c20a28ed5b6c4065b72c77de93c56cbf\",\"datePublished\":\"2021-01-27T22:08:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XRechnung_Teil_1_Rechnungen_generieren\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/XRechnung_Teil_1_Rechnungen_generieren\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XRechnung_Teil_1_Rechnungen_generieren\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/c20a28ed5b6c4065b72c77de93c56cbf\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/c20a28ed5b6c4065b72c77de93c56cbf\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XRechnung_Teil_1_Rechnungen_generieren\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"XRechnung, Teil 1: Rechnungen generieren\"}]},{\"@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":"XRechnung, Teil 1: Rechnungen generieren - 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\/XRechnung_Teil_1_Rechnungen_generieren\/","og_locale":"de_DE","og_type":"article","og_title":"XRechnung, Teil 1: Rechnungen generieren","og_description":"XRechnung ist ein Standard f&uuml;r das Einreichen von Rechnungen bei &ouml;ffentlichen Auftr&auml;gen. Sinn und Zweck dieses Standards ist, das &Uuml;bermitteln von Rechnungsdaten auf eine Weise zu erlauben, dass diese automatisiert eingelesen und verarbeitet werden k&ouml;nnen. Wie das X in XRechnung vermuten l&auml;sst, steckt dahinter ein Austausch der Daten im XML-Format. Die Vorlage f&uuml;r XRechnung liefert die europ&auml;ische Norm EN 16931. Wie die Daten strukturiert werden m&uuml;ssen, haben wir dem Dokument \"Spezifikation XRechnung Standard und Extension\" entnommen, das &ouml;ffentlich einsehbar ist. Als Grundlage f&uuml;r die Zusammenstellung der XRechnung verwenden wir ein herk&ouml;mmliches Datenmodell einer Bestell- oder Rechnungsverwaltung. In diesem ersten Teil zeigen wir, wie die Daten aus den Tabellen der Beispieldatenbank in ein XRechnung-kompatibles XML-Dokument umgewandelt werden und wie Sie dieses validieren k&ouml;nnen.","og_url":"https:\/\/access-im-unternehmen.de\/XRechnung_Teil_1_Rechnungen_generieren\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-01-27T22:08:52+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/c20a28ed5b6c4065b72c77de93c56cbf","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"27\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/XRechnung_Teil_1_Rechnungen_generieren\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/XRechnung_Teil_1_Rechnungen_generieren\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"XRechnung, Teil 1: Rechnungen generieren","datePublished":"2021-01-27T22:08:52+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/XRechnung_Teil_1_Rechnungen_generieren\/"},"wordCount":3151,"commentCount":2,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/XRechnung_Teil_1_Rechnungen_generieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/c20a28ed5b6c4065b72c77de93c56cbf","articleSection":["2020","6\/2020","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/XRechnung_Teil_1_Rechnungen_generieren\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/XRechnung_Teil_1_Rechnungen_generieren\/","url":"https:\/\/access-im-unternehmen.de\/XRechnung_Teil_1_Rechnungen_generieren\/","name":"XRechnung, Teil 1: Rechnungen generieren - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/XRechnung_Teil_1_Rechnungen_generieren\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/XRechnung_Teil_1_Rechnungen_generieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/c20a28ed5b6c4065b72c77de93c56cbf","datePublished":"2021-01-27T22:08:52+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/XRechnung_Teil_1_Rechnungen_generieren\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/XRechnung_Teil_1_Rechnungen_generieren\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/XRechnung_Teil_1_Rechnungen_generieren\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/c20a28ed5b6c4065b72c77de93c56cbf","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/c20a28ed5b6c4065b72c77de93c56cbf"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/XRechnung_Teil_1_Rechnungen_generieren\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"XRechnung, Teil 1: Rechnungen generieren"}]},{"@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\/55001277","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=55001277"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001277\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}