Rechnung per PDF erstellen (Schaltfläche) aus Vorlage "Rechnungen" erzeugt bei mir plötzlich eine leere Seite
Hallo an Alle,
Ich habe nun mehrfach den Code überprüft, kopiert, angepasst udn komme einfach nicht weiter, obwohl vorher alles bestens war. Mit 'vorher' meine ich entweder vor Ninox update heute morgen oder bevor ich die Datenbank neu importiert habe. Vielleicht ist ja dabei ein Fehler passiert.
Wie in der Überschrift erwähnt, nutze ich die Vorlage "rechnungen". Ich habe diese noch ein wenig angepasst und erweitert.
Unten kann man, wie in der Vorlage, per Befehlsschaltfläche eine PDF-DAtei erzeugen und die RG, dann löschen oder spreichern.
Wenn ich auf 'PDF erstellen klicke', dann passiert folgendes:
Die Seite ist leer. Vorher sah man die Rechnungsvorlage, die man im Drucklayout erstellt hat. Im Drucklayout funktioniert alles ok.
Versuche ich die Datei zu speichern, kommt folgende Meldung:
Folgenden Code habe ich in der Befehlsschaltfläche 'PDF erstellen' stehen:
let myFileName := "Rechnung_" + 'Id-Nummer' + "_vom_" + format(if Rechnungsdatum then Rechnungsdatum else today() end, "YYYY-MM-DD") + ".pdf";
importFile(this, printAndSaveRecord(this, "Rechnung"), myFileName);
Rechnung := myFileName
HAt jemand eine Idee, was ich falsch gemacht haben könnte?
Vielen Dank im Voraus!
Gruß
Kruna
21 Antworten
-
Hallo Kruna, einige Benutzer berichten von Problemen mit komplexeren format()-Konstruktionen. Ich weiß nicht, ob es tatsächlich daran liegt, aber einen Versuch wäre es wert:
let myprintDate := if Rechnungsdatum then Rechnungsdatum else today() end;
let myFileName := "Rechnung_" + 'Id-Nummer' + "_vom_" + format(myprintDate, "YYYY-MM-DD") + ".pdf";
Rechnung := importFile(this, printAndSaveRecord(this, "Rechnung"), myFileName);
Rechnung := myFileName
-
Quatsch, die letzte Zeile muss natürlich weg, sorry:
let myprintDate := if Rechnungsdatum then Rechnungsdatum else today() end;
let myFileName := "Rechnung_" + 'Id-Nummer' + "_vom_" + format(myprintDate, "YYYY-MM-DD") + ".pdf";
Rechnung := importFile(this, printAndSaveRecord(this, "Rechnung"), myFileName)
-
HAllo Copytexter,
vielen Dank für den Ansatz. Leider hat es nicht funktioniert. Durch Weglassen der letzten Zeile passiert nichts. Dann habe ich es doch mal mit der letzten Zeile versucht, mit dem Ergebnis, dass die Seite immer noch leer bleibt.
Das komische ist ja, dass alles wunderbar lief. Ich weiss nur nicht, ob es am update lag oder an meiner 'herumbastelei', wobei ich nichts an den Codes geändert habe. Lediglich habe ich versucht, die DAtenbank quasi ohne Inhalt zu exportieren und importieren (Daten und Dateien war nicht markiert). Viellecht habe ich dabei einen Fehler gemacht.
Komisch ist auch, dass in meiner 'Hauptdatenbank' es plötzlich auch nicht mehr funktioniert, also liegt es vllt doch am Update.
Wenn ich jedoch die Vorlage RG aufrufe, klappt es bei der Vorlage einwandfrei. Und wenn ich die Codes genau übernehme, dann klappt es wieder nicht! "DAs ist zum Kühe-melken...."
Gruß
Kruna
-
Seltsam. Die letzte Zeile mit "Rechnung := [...]" bewirkt lediglich, dass das generierte Dokument direkt in ein Bildfeld namens "Rechnung" geladen wird. Das sollte so funktionieren und funktioniert bei mir auch (Cloud). Ich würde noch mal alle beteiligten Felder, deren Formate und aktuellen Werte beim Generieren des Dateinamens ("let myFileName := [...]") überprüfen. Also: Ist 'Rechnungsdatum' wirklich ein Feld von Typ 'Datum', welchen Datentyp hat 'ID-Nummer ...?
Oder der Vollständigkeit halber als Variante auch noch mal:
let myDate := if Rechnungsdatum then date(Rechnungsdatum) else today() end;
let myPrintDate := format(myDate, "YYYY-MM-DD");
let myFileName := "Rechnung_" + 'Id-Nummer' + "_vom_" + myPrintDate + ".pdf";
Rechnung := importFile(this, printAndSaveRecord(this, "Rechnung"), myFileName)
Ansonsten hätte ich so auf die Schnelle keine Idee, waran es sonst liegen könnte. Vielleicht jemand anderes? Falls die Überprüfung nichts bringt, am besten mal an den Support wenden.
-
HAllo Copytexter,
leider auch hier ohne Erfolg.
Diese letzte Zeile funktioniert in meinem Fall leider nicht mehr. DAs generierte Dokument wird zwar in das Bildfeld geladen, aber das Dokument ist leer oder weiss. Wenn ich die letzte Zeile weglasse, passiert leider nichts bzw wird kein Dokument generiert.
Wohl oder übel, werde ich die Vorlage der RG neu importieren und anpassen müssen.
Komischerweise funktionert die Vorlage einwandfrei und ich habe alle Codes exakt kopiert und nur die Tabellennamen ausgetauscht.
TRotzdem tausend DAnk für Deine Hilfe.
Gruß
Kruna
-
Klar, die letzte Zeile enthält ja das "printAndSaveRecord", mit dem die Datei generiert wird, wenn man die weglässt, passiert gar nix. Wenn aber eine weiße Seite in das Bildfeld geladen wurde, dann bedeutet das ja, dass die Datei generiert wurde. Nur eben ohne Inhalt. Sehr seltsam. Falsches Drucklayout?
Was man auch noch hätte machen können: Da der Code ja mit einer Schaltfläche ausgeführt wird, zur Überprüfung einzelner Ergebnisse alert() oder dialog() einbauen. Zum Beispiel nach der Zeile "let myFileName := [...]"
dialog("Check", "myFileName = " + myFileName, ["Ok"]);
Aber okay, wenn du's jetzt anders gelöst hast, ist es ja erledigt.
-
HAllo Copytexter,die letzte Zeile, die ich weggelassen habe, war:
Rechnung := myFileName
und dann passierte nichts, die musste ich wieder hinzufügen.
dialog einbauen führte dazu:
läuft dann in einer Schleife.
NUn, Die Vorlage neu anpassen zu müssen, möchte ich lieber vermeiden, da das sehr viel Arbeit ist. Ich ahtte gehofft, dass es nur eine 'Kleinigkeit' ist, die ich eventuell übersehen habe.
Was meinst Du mit 'falsches Drucklayout? Wo/Wie kann ich das überprüfen?
Ich habe bisher nur zwei Layouts und die werden auch einwandfrei angezeigt, nur eben seit heute morgen nicht mehr, wenn ich es über den Button versuche.
-
Filename sieht doch korrekt aus. Aber wieso "läuft dann in einer Schleife"? Das verstehe ich nicht. Die Funktion dialog() wird doch nur einmal ausgeführt und hält die weitere Ausführung des Codes an, bis man "Ok" klickt. Oder ist noch weiterer Code drumherum, den du hier weggelassen hast? Kommt mir alles irgendwie "spanisch" vor.
Das "Rechnung := myFileName" kam in meinen Code-Vorschlägen gar nicht mehr vor. Die Zeile
Rechnung := importFile(this, printAndSaveRecord(this, "Rechnung"), myFileName)
bewirkt dasselbe wie die beiden Zeilen
importFile(this, printAndSaveRecord(this, "Rechnung"), myFileName);
Rechnung := myFileName
Zum "Drucklayout": Man kann ja mehrere Drucklayouts anlegen. Wenn man beim printAndSaveRecord() gar keines oder ein nicht vorhandenes angibt, dann greift Ninox m. W. auf das erste zu. Ich würde also mal mit dem Druckersymbol in den Drucklayout-Editor wechseln und prüfen, ob es dort überhaupt ein Drucklayout namens "Rechnung" gibt und was da drin steht. Und was passiert, wenn du die Datei auf diesem Wege erzeugst? Oder ist der Druck an bestimmte Bedignungen geknüpft? Man weiß ja nie ...
Vielleicht habe ich Tomaten auf den Augen, aber ich sehe sonst keinen Grund, warum der oben gepostete Code (10:49 Uhr) nicht funktionieren sollte. Zumal der Dateiname der dialog()-Meldung zufolge ja offenbar korrekt erzeugt wird. Hier ist er noch mal, auch nur der Vollständigkeit halber:
let myDate := if Rechnungsdatum then date(Rechnungsdatum) else today() end;
let myPrintDate := format(myDate, "YYYY-MM-DD");
let myFileName := "Rechnung_" + 'Id-Nummer' + "_vom_" + myPrintDate + ".pdf";
Rechnung := importFile(this, printAndSaveRecord(this, "Rechnung"), myFileName)
Ansonsten kann ich wie gesagt nur empfehlen, den Support zu kontaktieren. Die wissen in der Regel doch mehr als wir normalen Foristen hier (von Leo mal abgesehen), kennen viele Fehler und haben auch tiefere Einblicke.
-
Ach so, du könntest die Datenbank auch irgendwo zum Download ins Netz stellen (mit Demodaten), dann könnte man mal direkt reinschauen. Das erleichtert die Fehlersuche in der Regel sehr.
-
Hmmm!! Ich bin nun auch etwas verwirrt! Ich sitze nun den ganzen TAg, um irgendwie diesen Fehler zu beheben und sehe wahrscheinlich auch den Wald vor lauter Bäumen nicht mehr.
DAnke Dir nochmals, dass Du Dich da so mit 'reinhängst'!
Also, Ich habe gerade Deinen Code eingegeben und es passiert nichts, d.h. kein Dokument wird generiert und auch das 'Bildfeld', welches die RG in PDF zeigt, öffnet sich nicht. HAst Du eine Idee, woran, das liegen könnte?
Füge ich jedoch Deinem Code zum Schluß Rechnung := myFileName hinzu, dann wird diese leere Seite erzeugt.
Zum Thema Drucklayout: Ich habe zunächst zwei Layouts und als noch alles funktionierte, je nachdem, welches LAyout angeklickt war, wurde dieses per Befehlsschaltfläche generiert, obwohl keines von beiden Drucklayouts 'Rechnung' hieß.
So, habe ich nun für noch mehr Verwirrung gesorgt?
Ich schaue mal, wie ich die Datenbank hochgeladen bekomme.
-
Interessant ist ja folgendes:
Ich habe zu jeder Rechnung noch ein Begleitschreiben, quasi ein 'Anschreiben'. Dieses erstelle ich in einer Untertabelle der Kundentabelle. Dort habe ich auch eine BEfehlsschaltfläche erstellt, die ich aus dem gleichen Code der Rechnung entnommen habe und dementsprechend angepasst habe. Da funktioniert alles prima.
let myFileName := "Anschreiben_" + Vertragsdatum + "_vom_" + format(if Vertragsdatum then Vertragsdatum else today() end, "YYYY-MM-DD") + ".pdf";
importFile(this, printAndSaveRecord(this, "Anschreiben"), myFileName);
Anschreiben := myFileNameNun habe ich die Vorlage 'Rechnungen'neu gemacht und bis zu den letzten Anpassungen war alles ok und nun funktioniert es wieder nicht. Ich bin fix und foxi.
-
Soooooo, was immer auch passiert ist, ich verstehe es nicht.
Nun habe ich mal den Code vom 'Anschreiben' genommen und ihn in die Befehlsschaltfläche von Rechnungen kopiert und dementsprechend angepasst...und siehe da, jetzt funktioniert es!!!
let myFileName := "Rechnung_" + Kunde.'Kunden-Nr.' + "_vom_" + format(if Rechnungsdatum then Rechnungsdatum else today() end, "YYYY-MM-DD") + ".pdf";
importFile(this, printAndSaveRecord(this, "Rechnung"), myFileName);
Rechnung := myFileNameNochmals vielen Dank für die Hilfe all die Bemühunungen, eine Lösung zu finden.
Gruß
Kruna
-
Also,
es scheint irgendeine Konflikt mit der 'Id-Nummer' zu geben. Ich habe eben richtigkeithalber die 'Id-Nummer' anstelle der Kunde.'Kunden-Nr.' eingeben und es finktioniert wieder nicht. Woran könnte das nun liegen?
Sorry für alle die Posts hintereinander, aber ich bin einfach ratlos und versuche nur wiederzugeben bzw auszuprobieren woran es liegen könnte.
Gruß
Kruna
-
Datenbank? Download? Reingucken? ...
-
Sorry, dass es hat ein wenig gedauert bis ich die DB im webinar hochgeladen habe. Ich bin noch recht neu hier und noch nicht so vertraut mit ninox.
Jetzt hat es aber geklappt, es ist die TestDB_mtom. Ich hoffe, dass ich alles soweit richtig gemacht habe.
Danke Dir!
Gruß
Kruna
-
Es sind die Querstrieche in dem Dateinamen (ID_Nummer). Ninox verträgt diese nicht. habe jetzt den Kode geändert:
---
let myFileName := "Rechnung_" + replace('Id-Nummer', "/", "_") + "_vom_" + format(if Rechnungsdatum then Rechnungsdatum else today() end, "YYYY-MM-DD") + ".pdf";
Rechnung := importFile(this, printAndSaveRecord(this, "Rechnung"), myFileName)
---
Leo
-
Stimmt. Im Screenshot des dialog()-Fensters (12:13 Uhr) hätte man's erkennen können. Dann kann ich mir die weitere Suche ja sparen. Danke!
-
Es hat funktioniert!!! Vielen tausend Dank für den Code, Leo und für die ganze Mühe und den ganzen Aufwand, Copytexter!!
Ich bin euch wirklich sehr, sehr dankbar!
Ninox ist echt absolute Klasse und der Support hier und alles...einfach toll!!!
Wünsche euch noch ein schönes Wochenende!
Gruß
Kruna
-
Hallo,
ich muss da nochmal nachfragen, was den Code von Leo angeht:
let myFileName := "Rechnung_" + replace(Rechnungsnummer, "/", "_") + "_vom_" + format(if Rechnungsdatum then Rechnungsdatum else today() end, "YYYY-MM-DD") + ".pdf";
Rechnung := importFile(this, printAndSaveRecord(this, "Rechnung"), myFileName) := importFile(this, printAndSaveRecord(this, "Rechnung"), myFileName)Welchen Bezug hat das Feld „Rechnung" in der letzten Zeile? Bei mir wird die Tabellenspalte Rechnung nicht gefunden
Sonnige Grüße
Markus -
Hallo Markus, in der Zeile >>Rechnung := importFile(...)<< steht 'Rechnung' für den Namen des Bildfeldes, in dem das PDF-Dokument dargestellt werden soll. Beim >>printAndSaveRecord(this, "Rechnung")<< ist ein Drucklayout dieses Namens gemeint.
-
Hallo Copytexter,
jetzt wird mir das Ganze auch klar - danke für die Aufklärung , werde ich heute Nachmittag mal direkt testen
Viele Grüße
Markus
Content aside
- vor 4 JahrenZuletzt aktiv
- 21Antworten
- 3954Ansichten