Rechnung in XML Format
Hallo
Ich bin dabei eine komplette Rechnung in XML Fromat dar zu stellen und habe ein problem bei den Rechnung positionen. Hier sollte eine Schleife durchlaufen und alle benötigten informationen wie Artikelnamme, Preis, Menge usw auslesen und in der XML Datei ein zu tragen. Anbei ein Muster wie das etwa aussehen sollte.
Rechnungpositionen ist eine untertabelle von der Rechnungen Tabelle
Würde mich über Eure Unterstützung sehr freuen
Gruß Richard
'XML Lieferant / Empfaenger' := formatXML([{
Empfaenger: {
stadt : 'Dane Klienta'.'Miejscowość',
strasse: 'Dane Klienta'.Ulica,
firmenname: 'Dane Klienta'.'Nazwa pełna',
plz: 'Dane Klienta'.'Kod pocztowy',
land: 'Dane Klienta'.Kraj,
stid: 'Dane Klienta'.NIP
},
Lieferant: {
stadt2: ".....",
strasse2: ".....",
land2: "Polska",
firmenname2: ".....",
plz2: "......",
stid2: "......."
},
for p in 'Rechnungspositionen' do
????????????????????????
end
}
}])
21 Antworten
-
Wie soll das Ergebnis der Schleife (JSON-Objekt) aussehen? Bspw. für 3 Rechnungspositionen.
-
Hallo Uwe
Das sollte etwa so aussehen:
<Invoice-Lines> <Line> <Line-Item> <LineNumber>1</LineNumber> <OrderLineNumber>123</OrderLineNumber> <EAN>1111111111111</EAN> <BuyerItemCode>BuyerItemCode_1</BuyerItemCode> <SupplierItemCode>SupplierItemCode_1</SupplierItemCode> <ManufacturerItemCode>122</ManufacturerItemCode> <SerialNumber>GINBN</SerialNumber> <CustomsCode>CustomsCode</CustomsCode> <ItemDescription>ItemDescrip </Line> </Invoice-Lines>
-
Das ist das XML.
Wie soll das JSON-Objekt aussehen, das aus der Schleife entstehen soll? -
Hallo Uwe
Etwa so:
[ { "position_1": { "menge": "artikelmenge", "name": "artikelname", "preis": "artikelpreis" }, "position_2": { "menge": "artikelmenge", "name": "artikelname", "preis": "artikelpreis" } } ] usw.
-
Hallo
Kann niemand hier helfen?
-
Du möchtest ein variables JSON-Objekt mit der Anzahl X Key's erstellen, welche auch noch JSON-Objekte als Value enthalten.
Ein JSON Objekt zu erstellen, dessen Anzahl an Key's variabel erstellt wird kann man mit Ninox Bordmitteln und einigen Zwischenschritten schon schaffen.
Es wird in diesem Fall daran scheitern, daß die Values der Key's wiederum JSON-Objekte sind.
Wenn die Value's nur einfacher Text wären ist es mit Ninox Bordmitteln machbar.
Ich habe sowas schon mal gebaut, indem ich aus Ninox-Daten ein csv erstellt habe, bei dem die erste Zeile die Key's und die zweite Zeile die Value's beinhaltete. Aus der csv konnte ich ein funktionierendes JSON-Objekt erstellen.Momentan fällt mir keine Möglichkeit ein, wie man dieses spezielle Objekt nur mit Ninox-Bordmitteln erstellt.
Eine Möglichkeit, die man ausprobieren könnte, wäre diese Art Array mit die REST-Api über n8n zu erstellen. -
Hast du es schon so probiert?
Positionen: for i in 'Rechnungspositionen' do { Position: i.Position, Artikelname: i.Artikelname, Preis: { Waehrung: "EUR", Netto: i.Nettopreis, Brutto: i.Bruttopreis, MwSt: i.MwSt } Menge: i.Menge }
Ich mache es ähnlich wie du zur Erstellung einer SEPA. Zuerst lasse ich die Daten mit JSON übermitteln und daraus dann eine XML erzeugen. Auch für die Übertragung von Rechnungspositionen zu LexOffice klappt es wie oben angegeben.
-
Hallo Stefanie, Hallo Uwe
Vielen Dank für Eure Rückmeldung. Das scheint sehr kompliziert zu sein.
Stefanie bei Deine Lösung bekomme ich eine Fehlermeldung das "Der Ausdruck liefert mehrfach Ergebnisse zurück"
-
Hallo Uwe
Wie das XML aussehen sollte steht unten. Hier ist eine Position (Line) von der Rechnung abgebildet: LineNumber1, LineNumber2 usw.
<Invoice-Lines> <Line> <Line-Item> <LineNumber>1</LineNumber> <OrderLineNumber>123</OrderLineNumber> <EAN>1111111111111</EAN> <BuyerItemCode>BuyerItemCode_1</BuyerItemCode> <SupplierItemCode>SupplierItemCode_1</SupplierItemCode> <ManufacturerItemCode>122</ManufacturerItemCode> <SerialNumber>GINBN</SerialNumber> <CustomsCode>CustomsCode</CustomsCode> <ItemDescription>ItemDescrip </Line> </Invoice-Lines>
-
So sollte etwa die XML aussehen:
<?xml version="1.0" encoding="UTF-8"?> <array> <string>Invoice-Lines</string> <dict> <key>Line1</key> <dict> <key>Brutto</key> <integer>0</integer> <key>Menge</key> <integer>0</integer> <key>Name</key> <string></string> <key>Netto</key> <integer>0</integer> <key>Preis</key> <integer>0</integer> <key>VAT</key> <integer>0</integer> </dict> <key>Line2</key> <dict> <key>Brutto</key> <integer>0</integer> <key>Menge</key> <integer>0</integer> <key>Name</key> <string></string> <key>Netto</key> <integer>0</integer> <key>Preis</key> <integer>0</integer> <key>VAT</key> <integer>0</integer> </dict> <key>Line3</key> <dict> <key>Brutto</key> <integer>0</integer> <key>Menge</key> <integer>0</integer> <key>Name</key> <string></string> <key>Netto</key> <integer>0</integer> <key>Preis</key> <integer>0</integer> <key>VAT</key> <integer>0</integer> </dict> </dict> </array>
Und so die Json nach umawndlung von XML nach Json:
{ "array": { "string": "Invoice-Lines", "dict": { "key": [ "Line1", { "#item": { "dict": { "key": [ "Brutto", { "#item": { "integer": "0" } }, "Menge", { "#item": { "integer": "0" } }, "Name", { "#item": { "string": { } } }, "Netto", { "#item": { "integer": "0" } }, "Preis", { "#item": { "integer": "0" } }, "VAT" ], "integer": "0" } } }, "Line2", { "#item": { "dict": { "key": [ "Brutto", { "#item": { "integer": "0" } }, "Menge", { "#item": { "integer": "0" } }, "Name", { "#item": { "string": { } } }, "Netto", { "#item": { "integer": "0" } }, "Preis", { "#item": { "integer": "0" } }, "VAT" ], "integer": "0" } } }, "Line3" ], "dict": { "key": [ "Brutto", { "#item": { "integer": "0" } }, "Menge", { "#item": { "integer": "0" } }, "Name", { "#item": { "string": { } } }, "Netto", { "#item": { "integer": "0" } }, "Preis", { "#item": { "integer": "0" } }, "VAT" ], "integer": "0" } } } }
-
Hallo Ryszard, schlechte Nachricht: mit Ninox eigenen XML Funktionien wird es leider nicht funktionieren weil du bei <dict> ein Object mit gleichnamigen Werten schreiben muss. Das ist gegen JSON Konzept. Also es bleibt nur die XML direkt zu schreiben. Für Lines wäre es etwa so:
let myNumder:=0; let myVALUE:= --- <?xml version="1.0" encoding="UTF-8"?> <array> <string>Invoice-Lines</string> <dict> --- + join(for i in Rechnungspositionen do myNumber:=myNumber+1; --- <key>Line{myNumber}</key> <dict> <key>Brutto</key> <integer>{i.Bruttopreis}</integer> <key>Menge</key> <integer>{i.Menge}</integer> <key>Name</key> <string>{i.Artikelname}</string> <key>Netto</key> <integer>{i.Nettopreis}</integer> <key>Preis</key> <integer>{i.Artikelpreis}</integer> <key>VAT</key> <integer>{i.Mehrwertsteuer}</integer> </dict> --- end," ")+" </dict> </array>"; createTextFile(this,myValue,"Recnung.xml") Grüße Leo
-
Hallo Ryszard
Gut, daß Leo eine Lösung gefunden hat.
Die Begründung, weshalb es mit der Ninox eigenen XML-Funktion nicht funktionieren kann ist plausibel.
Mit XML-Rechnungen hatte ich noch nie zu tun und da fehlt mir einfach das Wissen.
Ich habe hier wieder etwas dazu gelernt.
Was ich aber zwischenzeitlich aufgrund dieses Beitrages gelöst habe, ist ein dynamisches JSON-Objekt mit variablen Schlüsselnamen zu erzeugen.
Dafür auch nochmal Dank für die Herausforderung, da ich dies bei der Erstellung von PDF's mit der Carbone Translation-Möglichkeit verwenden kann. -
Hallo Leo
Vielen Dank erstmal.
Ich werde es testen und melde mich noch.
Was soll hier deklariert werden?: let myVALUE:=
let myNumder:=0 sollte bestimmt let myNumber:=0 sein
-
Acha
Jetzt verstehe ich es: myValue ist alles was drunten steht.
Ich bekomme am ende in der letzte Zeile die Meldung dass die Tabellenspallte myValue nich vorhanden ist.
Hier: createTextFile(this, myValue, "Rechnung.xml")
Content aside
- vor 2 JahrenZuletzt aktiv
- 21Antworten
- 217Ansichten
-
4
Folge bereits