E-Rechnung erstellen funktioniert nur aus dem Template
Wir haben das Template für E-Rechnung ausprobiert und versucht, die Funktion auf unser System zu übertragen. Allerdings schlägt das Erstellen von Ausgangsrechnungen immer fehl mit einer Fehlermeldung vom Mustang-Server.
So wie wir das verstehen, steckt so ziemlich die ganze Basis für die Rechnungs-Erstellung beim E-Rechnungs-Template in dem Button "Rechnung erstellen". Hier werden die benötigten Daten für den Mustang-Server aufbereitet und ins JSON-Format gebracht, anschließend an den Mustang-Server gesendet und schließlich das fertige PDF vom Mustang-Server in Ninox abgespeichert.
Die tatsächlich vom Mustang-Server benötigten Daten sind scheinbar sehr wenige, siehe Code unten. Mit diesem Code gibt der Mustang-Server als Antwort "200 - ok" zurück, sofern das Feld Rechnungsnummer befüllt ist. Auch ein PDF wird erstellt, allerdings ist es mangels carbone-Abschnitt im Code praktisch leer.
Das wichtigste ist jedoch, dass der Server ein OK zurückgibt. Aber das gilt nur für die Datenbank, die mit dem E-Rechnungs-Template erstellt wurde.
Wir haben probeweise eine Datenbank ohne Template angelegt (Leere Datenbank). Hier haben wir eine Tabelle mit den wenigen für den Code benötigten Feldern erstellt und einen Button mit exakt demselben Code hinzugefügt.
Wenn wir die benötigten Felder ausfüllen und diesen Button drücken, liefert der Mustang-Server einen Fehler "400 - Bad Request" zurück.
Es kommt uns fast so vor, als wäre noch irgendwo eine versteckte Funktion o.ä., die im E-Rechnungs Template aufgerufen wird und in der leeren Datenbank natürlich fehlt. Aber weder im Code noch in den globalen Funktionen haben wir etwas relevantes gefunden.
Hat jemand anders ähnliche Erfahrungen gemacht? Weiß vielleicht sogar jemand, woran das liegt und wie wir das Problem beheben könnten?
let me := this;
let datacarbone := {};
let datajson := {
issueDate: format(Rechnungsdatum, "YYYY-MM-DDTHH:mm:ss"),
sender: {},
recipient: {},
zfitems: [{
price: 1,
quantity: 1,
product: {
unit: "ZZ",
name: "iposition.Positionsbezeichnung",
description: "iposition.Positionsbeschreibung",
taxCategoryCode: "iposition.Steuerkategorie",
vatpercent: "19"
}
}]
};
'mustang-json' := formatJSON(datajson);
carbone_json := formatJSON(datacarbone);
let myTemplate := "Ausgangsrechnung_Template";
let pdfA3 := importFile(this, printAndSaveRecord(this, myTemplate, datacarbone), "carbone.pdf");
let pathZF := "POST /combine?profile=EN16931";
let body := {
formData: {
file: "_files[0]",
json: datajson
}
};
let responseZF := sendCommand("Mustang", pathZF, body, [file(this, "carbone.pdf")]);
let base64URLZF := item(item(responseZF, "result"), "body");
importFile(this, text(base64URLZF), Rechnungsnummer + ".pdf");
removeFile(this, "carbone.pdf");
Ansicht := Rechnungsnummer + ".pdf";
alert("responseZF: " + responseZF)
2 Antworten
-
Hallo und danke für dein Gesuch.
Wenn man eine eigene derartige Lösung abseits unserer Template baut muss man darauf aufpassen, dass das Drucklayout welches hierfür benutzt wird auf PDF/A3 eingestellt wurde, wie folgt:
Alternativ kann das auch in der JSON für Carbone via _options: {pdfVersion: 3} deklariert werden, z. B. printAndSaveRecord(this, "Invoices", { Name: "John Doe", Age: 42, _options: { pdfVersion: 3 } }). Ist das nicht gewährleistet, kann Mustang die PDF nicht validieren.
-
Danke für die schlüssige Antwort.
Man muss außerdem darauf achten, dass das Druck-Template die Umstellung auf PDF/A3 unterstützt: mit einem "Standard"-Layout funktioniert es ebenfalls nicht. Das Template muss also "Dynamisch" sein. Diese Bezeichnungen verwendet Ninox beim Erstellen eines neuen Druck-Layouts. Siehe angehängtes Bild.
Wenn das Template rechts dieselbe Seitenleiste an Optionen wie im unteren Screenshot zeigt, ist es standard. Nur in einem dynamischen Template kann man den PDF-Typ ändern, deswegen funktioniert auch nur damit der Code, den Ben Lucas genannt hat.
Content aside
- Status Answered
- vor 7 TagenZuletzt aktiv
- 2Antworten
- 55Ansichten
-
2
Folge bereits