[gelöst] Rechnungsdruck pro Rechnung ein PDF File

22. November 2007 10:18

Hallo Zusammen,

ich habe folgendes Problem:
wenn wir eine Rechnung drucken, wird diese sowohl an den Drucker,
als auch als PDF in ein Verzeichnis gedruckt.
Dieses PDF wird dann in ein DMS importiert und archiviert.
Nun ist es so, dass viele Rechnungen im DMS fehlen, wir die da aber brauchen.
Wenn ich nun alle Rechnungen für einen bestimmten Zeitraum drucke, erhalte ich immer ein PDF-Dokument mit allen Rechnungen drin.
Ich möchte aber für jede Rechnung ein eigenes PDF erhalten.
Es wird immer nur ein Druckjob angelegt.
Hat jemand eine Idee?

Danke schonmal...
Zuletzt geändert von sc0rsIn am 6. Dezember 2007 23:01, insgesamt 1-mal geändert.

22. November 2007 12:14

Hallo cr0rsIn,

den Druck-Report für die Rechnung rufst am Besten je Rechnung einmal auf, dann wird auch pro Rechnung ein Druckjob erstellt. Einen Filter kannst Du dann z.B. einer Codeunit übergeben, die das ganze für Dich erledigt.

22. November 2007 12:19

Hallo MrBurns,

vielen Dank für den Tipp.
Ich werde das mal über eine Codeunit versuchen.

6. Dezember 2007 12:42

Es ist nun schon einige Zeit vergangen und ich habe mich damit nicht mehr beschäftigt...
nun wirds das Thema aber wieder aktuell.
Die Lösung mit über eine Codeunit hört sich super an, funktioniert aber in diesem Fall nicht, da wir eine Branchenlösung einsetzten.
Ich habe keine Rechte Codeunits zu bearbeiten oder zu erstellen.

Mir ist aber eine andere Möglichkeit eingefallen:
Ich könnte ja einen Report erstellen und da eine Schleife einbauen, der mir eine Rechnung nach der anderen druckt...
Sollte ich hier schon etwas übersehen haben, wäre ich für eine kurze Info dankbar.

6. Dezember 2007 13:08

Prizipiell ist ein Aufruf per Codeunit oder per Report irrelevant.
Die Hauptsache ist ein externer gefilterter Aufruf des Druck-Reports.
Deswegen müsste das funktionieren.

6. Dezember 2007 17:01

also....das funzt irgendwie nicht.
hab folgendes gemacht:


a:=16114927;
b:=17114982;

WHILE a<>b DO BEGIN
R.SETFILTER("No.",'a');
Rechnung.RUNMODAL();
END;

der druckt zwar das Rechnungs-Formular, aber der Filter wird nicht beachtet.
a = erste Rechnungsnummer
b= letzte Rechnungsnummer

Weiß jemand Rat?

6. Dezember 2007 17:11

Das kann ja auch nicht funktionieren, da du dem Report den Filter nicht mitgeteilt hast.
Du hast nur einen Filter auf eine Record-Variable gesetzt, welche aber nicht an den Report übergeben wird.

Es geht aber auch noch viel einfacher:
Code:
IF SalesInvHeader.FIND('-') THEN
  REPEAT
    SalesInvHeader2 := SalesInvHeader;
    SalesInvHeader2.SETRECFILTER;
    REPORT.RUNMODAL(Report::"4711",FALSE,FALSE,SalesInvHeader2);
  UNTIL SalesInvHeader.NEXT = 0;


[Edit: Tippfehler korrigiert.]
Zuletzt geändert von Timo Lässer am 6. Dezember 2007 18:29, insgesamt 1-mal geändert.

6. Dezember 2007 17:21

Das Mitgeben eines Filter in der Form von "erster Beleg bis letzter Beleg" hätte eh wieder zum Ergebnis, dass nur ein Druckjob erzeugt würde.

Der Rechnungs-Report muß Belegnummer für Belegnummer aufgerufen werden und zwar immer auf genau die eine belegnummer gefilter t.

6. Dezember 2007 17:24

rkaufmann hat geschrieben:Das Mitgeben eines Filter in der Form von "erster Beleg bis letzter Beleg" hätte eh wieder zum Ergebnis, dass nur ein Druckjob erzeugt würde.

Der Rechnungs-Report muß Belegnummer für Belegnummer aufgerufen werden und zwar immer auf genau die eine belegnummer gefilter t.

Richtig, daher siehe meine Antwort.
Dort wird jeder gefundene Datensatz in eine zweite Record-Variable übertragen, welche dann eindeutig gefiltert und anschließend an den Report übergeben wird.

6. Dezember 2007 17:25

Super! hat geklappt
Vielen Dank, Timo.

Danke auch für die Erklärung,
habs verstanden.

PS: der Smiley hat so böse geschaut :wink:
Zuletzt geändert von sc0rsIn am 6. Dezember 2007 17:30, insgesamt 1-mal geändert.

6. Dezember 2007 17:28

Hallo Time,

vielleicht ist es heute auch schon zu spät für mich, aber müßte es nicht
Code:
SalesInvHeader2.SETRECFILTER;

heißen?

6. Dezember 2007 18:28

rkaufmann hat geschrieben:Hallo Time,

vielleicht ist es heute auch schon zu spät für mich, aber müßte es nicht
Code:
SalesInvHeader2.SETRECFILTER;

heißen?

Danke für den Hinweis. Ich habe es in meinem ursprünglichen Beitrag korrigiert.

7. Dezember 2007 08:33

Guten Morgen Timo,

sorry für den Tippfehler.
Ist mir eben erst aufgefallen, dass ich mich bei deinem Namen vertippt hab.

War gestern wohl doch schon zu spät für mich.

7. Dezember 2007 09:49

Kein Problem, ich habe es dir auch nicht krumm genommen.
Ich weiß selber, wie schnell man gerade solche Tippfehler einbaut, vor allem, wenn man beim Programmieren ist - da denkt man in C/AL-Code.