27. April 2015 10:31
Hallo,
bei einem unseren Kunden (NAV2013R2, RU12) werden in einer Batchverarbeitung VK-Rechnungen gedruckt (angepasster Report 206). Vorab werden die Rechnungen gebucht und für das anschließende Drucken in eine Tabelle eingetragen. Diese wird dann sequentiell verarbeitet (Satz lesen, Rechnung drucken, usw.).
Seit einigen Nächten wird nun nach einer unbestimmten Anzahl von gedruckten Rechnungen die Verarbeitung abgebrochen. Fehlermeldung ist:
"Rendering output for the report failed and the following error occurred : An error occurred when printing - The handle is invalid (-2147467259)."
Leider ist der Fehler nicht reproduzierbar. Das Ausdrucken der "fehlerhaften" Rechnung ist am nächsten Morgen problemlos möglich. Lt. Kunde sind im Event Log keine Einträge vorhanden.
Wir haben die Batchverarbeitung nun so angepasst, dass der Druckaufruf über eine Codeunit erfolgt und wir so den Fehlerfall abfangen können. Für jeden Beleg wird dann 4 weitere Male versucht, den Druck durchzuführen. Das hat nun bei der letzten Verarbeitung Erfolgt gezeigt. Bei einer der Rechnungen war der 3. Versuch erfolgreich.
Aber das ist natürlich keine befriedigende Lösung. Schwierig wird die Fehlersuche leider dadurch, dass das Problem nicht nachvollziebar ist.
Ich vermute, dass dieser Teil der Fehlermeldung "... The handle is invalid (-2147467259)." einen Ansatz bieten könnte. Leider kann ich damit nichts anfangen und habe auch im Netz nichts dazu gefunden.
Hat vielleicht jemand von Euch eine Idee, wo man ansetzen könnte?
Danke für jeden Hinweis.
27. April 2015 12:53
Hallo Michael,
danke, aber ich befürchte, dass mir das hier nicht viel weiter hilft.
Ich habe bisher schon unterschiedliche "Rendering"-Fehlermeldungen gesehen, z. B.:
- "Rendering output for the report failed and the following error occurred : The definition of the report '' is invalid."
- "Rendering output for the report failed and the following error occurred : Failed to load expression host assembly. Details: Insufficient memory within specified address space range to continue the execution of the program."
- "Rendering output for the report failed and the following error occurred : Rendering output for the report failed and the following error occurred : Failed to load expression host assembly. Details: Insufficient memory within specified address space r"
Ich interpretiere diese so, dass nicht immer der fehlende Speicherplatz das Problem ist. Wenn ich mich hier irre und jeder "Rendering"-Fehler zu geringen Speicher als Ursache hat, dann ist das natürlich auch ein Lösungsansatz.
Der betroffene Report wurde aber auch dahingehend schon überarbeitet.
Gibt es denn keine Übersicht, in der die möglichen Fehlermeldungen samt möglicher Ursachen beschrieben sind?
27. April 2015 13:15
Hallo,
ich denke schon das es sich dabei fast immer um Speicherprobleme handelt.
Rufst du den Report direkt auf, oder hast du Ihn als lokale Variable definiert? Wenn letzteres, clearst du den Bericht jedes mal, nach dem Druck?
Gruß, Fiddi
27. April 2015 13:38
Hallo,
der Ablauf ist folgendermaßen:
Report verarbeitet die Tabelle mit den neu erstellten Rechnungen
- Code:
IF RepSelect.FIND('-') THEN
REPEAT
lCountAttempt := 0;
lErrorMessage := '';
IF RepSelect."Report ID" <> 0 THEN BEGIN
REPEAT
lCountAttempt += 1;
lcuPrintSalesInvoice.SetData(RepSelect."Report ID", SalesInvHdr);
lPrintOK := lcuPrintSalesInvoice.RUN;
IF NOT lPrintOK THEN BEGIN
lErrorMessage := 'V. ' + FORMAT(lCountAttempt) + COPYSTR(GETLASTERRORTEXT, 1, 240);
SLEEP(2000);
END;
UNTIL (lCountAttempt = 5) OR lPrintOK;
END;
UNTIL RepSelect.NEXT = 0;
In der Codeunit wird nun der Report aufgerufen:
- Code:
OnRun()
REPORT.RUNMODAL(gReportID, FALSE, FALSE, gSalesInvHdr);
SetData(piReportID : Integer;piSalesInvHdr : Record "Sales Invoice Header")
gReportID := piReportID;
gSalesInvHdr := piSalesInvHdr;
gSalesInvHdr.SETRECFILTER;
Das Ganze läuft in einem NAS und wird gesteuert über eine Verarbeitung, die ähnlich der Projektwarteschlange ist.
Und zur Speicherproblematik:
Wir hatten vor einigen Wochen einmal den Fall, dass es wohl wg. Speicherproblemen ein Renderingproblem gab. Daraufhin wurde der Report überarbeitet (im Dataset nur die wirklich relevanten Daten; Logo nur wo nötig). Danach lief er einige Nächte ohne Probleme und dann ging es los ...
Deswegen glaube ich (noch) nicht an ein Speicherproblem
27. April 2015 13:49
Hallo,
ich würde es erst einmal mit einem Clear auf die CU versuchen, die den Report aufruft.
Das Problem bei dem 206er- Report ist nicht die Anzahl der Felder, sondern die Anzahl der Datensätze. Ziel sollte es sein, bei einer Rechnung mit einer Position, auch nur einen Datensatz ans RDLC zu übergeben. Evtl. hilft es auch das Logo im Report einzubetten, statt es zu übergeben.
Wie viele Seiten haben eure Rechnungen denn im allgemeinen?
Gruß, Fiddi
27. April 2015 14:11
Hallo,
eine andere Möglichkeit wäre es die Reports direkt auf dem Service-Tier auszuführen mit STARTSESSION und STOPSESSION.
https://msdn.microsoft.com/en-US/LIBRAR ... 2147217396Gruß
Michael
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.