[gelöst](RTC) Bericht-Performance Problem

16. Dezember 2013 09:06

Hallo,
ich habe einen Bericht im RTC, welcher auf einer temp. Tabelle beruht.
Dieser Bericht hat die DataItem Integer und die temp. Tabelle. (Ist eine selbst erstelle Tabelle in NAV).
Siehe Anhang.


Der Report wird in einer Pager mit den Befehlen aufgerufen:
Code:
ReportTest.DatenErstellen(Rec,tArbeitsplatz,tStartdatum,ReportMerkmaleFilter);
ReportTest.SETTABLEVIEW(Rec);
ReportTest.RUNMODAL();


Anbei der Code der Funktion DatenErstellen im Bericht
Code:
Counter := 0;
startzeit := TIME;
PPZ.COPY(TempPPZ,TRUE);
ArbeitsplatzFilter := TempArbeitsplatz;
StartdatumFilter := TempStartdatum;
MerkmaleFilter := TempMerkmale;


Nun braucht der Report z.B. für ca. 120 Zeilen min. eine Minute. Wobei es diese Minute dauert bis dieser Balkan (Laufleiste) vom Report kommt.
(Sprich man geht auf Vorschau und dann dauert es diese Minute bis was passiert.) Wenn diese auf dem Bildschirm sichtbar ist, dann braucht es nur noch ca. 5 Sekunden.

Wobei der Befehl
Setrange(Number,1,PPZ.Count) scheinbar die Ursache dafür ist. Dieser Code befindet sich im Trigger Integer - OnPreDataItem().

Wo soll ich hier ansetzen um das Problem zu finden?

lg
stony
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von stony am 16. Dezember 2013 11:21, insgesamt 1-mal geändert.

Re: (RTC) Bericht-Performance Problem

16. Dezember 2013 09:40

stony hat geschrieben:Wobei der Befehl
Setrange(Number,1,PPZ.Count) scheinbar die Ursache dafür ist. Dieser Code befindet sich im Trigger Integer - OnPreDataItem().


wenn in PPZ z.B 120 Datensätze stehen, dann wird Integer 120mal ausgeführt und dabei natürlich auch die "Prod.Planungszeilen" mind. 120 mal
Sehe ich das richtig, dass die PPZ auch gleichzeitig die Prod.Planungszeilen sind?Falls ja, wofür benötigst du dann das DataItem Integer?

Re: (RTC) Bericht-Performance Problem

16. Dezember 2013 10:12

JA, PPZ ist gleich Prod.Planungszeilen.
Da die Page Daten temp. Daten sind (SourceTableTemporary = Yes) muss ich das doch über den Integer machen oder ?

Re: (RTC) Bericht-Performance Problem

16. Dezember 2013 10:29

Da die Page Daten temp. Daten sind (SourceTableTemporary = Yes) muss ich das doch über den Integer machen oder ?

Das Schon, aber die PPZ muss in der Integer-Schleife gelesen und verarbeitet werden. Die "Prod. Planungszeilen" sind da überflüssig, ja evtl. sogar schädlich.

Gruß, Fiddi

Re: (RTC) Bericht-Performance Problem

16. Dezember 2013 10:42

fiddi hat geschrieben:Die "Prod. Planungszeilen" sind da überflüssig, ja evtl. sogar schädlich.


genau -> ich nehme an, dass die "Prod.Planungszeilen" nämlich garnicht gefiltert werden - also bei jedem Integer-Durchlauf werden alle "Prod.Planungszeilen" durchlaufen

im Integer DataItem OnPreDataItem()
neue glob Variable: FoundFirst -> Typ Boolean
Code:
FoundFirst := PPZ.FIND('-');
IF NOT FoundFirst THEN 
   CurrReport.BREAK;

im Integer DataItem OnAfterGetRecord() vll so:

Code:
IF FoundFirst THEN
  FoundFirst := FALSE
ELSE BEGIN
   IF PPZ.NEXT = 0 THEN
      CurrReport.BREAK;
END;

Re: (RTC) Bericht-Performance Problem

16. Dezember 2013 11:07

Hallo,

die etwas effizientere Programmierung ist folgendes

Integer- OnPreDataItem
Code:
PPZ.SETFILTER...
PPZ.SETRANGE...
if PPZ.FINDSET then
  SETRANGE(Number,1,PPZ.Count)
else
  Currreport.BREAK;


Integer - OnAfrterGetRecord
Code:
IF Number > 1 THEN
 PPZ.NEXT; 


Gruß, Fiddi

Re: [gelöst](RTC) Bericht-Performance Problem

16. Dezember 2013 11:35

fiddi hat natürlich recht :)
danke für die Korrektur

Re: [gelöst](RTC) Bericht-Performance Problem

16. Dezember 2013 11:46

Danke für die Blumen :mrgreen:

Habe das ganze (siehe oben) noch mal ein wenig angepasst, um hier weitere Grundsatzdiskussionen wg. der "Effizienz" zu vermeiden :wink:

Gruß, Fiddi