[gelöst] neuer Report zur Terminüberwachung

14. Juni 2011 15:11

Hallo, ich möchte einen Report zur Terminüberwachung der Projektstrukturzeilen bauen.

Er soll dabei auf bestimmte Resourcen projektbezogen abfiltern und in Abhängigkeit eines Datumsvergleichs den Text ja oder nein in eine Textvariable schreiben.

Am Ende soll dass ganze dann ausgewertet werden und in % ausgegeben werden. (so bedeutet 20% => 1xja (Termin eingehalten) und 4xnein (termin nicht eingehalten))

Dazu habe ich einige Fragen.
1) wie schreibe ich einen Filter auf bestimmte Resourcen und wohin (Data Item oder Section) schreibe ich ihn?
Mein Versuch war folgender auf Sectionebene:
Code:
CurrReport.SHOWOUTPUT(Type = Type::Resource);
 SETFILTER(Type::Resource, "Job Structure Line"."No.", '740'|'715');

Etwas stimmt hier aber nicht...

2) Wie und wo schreibe ich folgendes als Code?
wenn Datumsfeld123 < Datumsfeldxyz ist, dann schreibe den Text ja in eine Textvariable, sonsts schreibe nein in die Textvariable (falls ein Datumsfeld keine Info erhält, so soll kein Text in die Textvariable geschrieben werden)

3) Alles soll nun zusammengefasst werden.
Ich erhalte nun z.B. 10x den Text ja und 5x den Text nein in einem Projekt. Dann soll ausgegeben werden 66,66%

Ich hoffe das ist so verständlich ausgedrückt.
Zuletzt geändert von misterelektro1981 am 16. Juni 2011 11:29, insgesamt 1-mal geändert.

Re: neuer Report zur Terminüberwachung

15. Juni 2011 08:53

Hallo ich habe in der Zwischenzeit folgendes raus bekommen, habe dazu aber nun Fragen.

zu 1)
Code:
"Job Structure Line".SETFILTER("No.",'715|740');

im OnAfterGetRecord Trigger des Job Structure Line Data Item funktioneirt, war im Nachhinein einfach.

zu 2)
Code:
IF "Actual Ending Date" > "Expected Ending Date" THEN
ZielErreicht := FALSE
ELSE IF "Actual Ending Date" <= "Expected Ending Date" THEN
ZielErreicht := TRUE
ELSE ZielErreicht := TRUE;

ZielErreicht ist hierbei nun aber eine BOOL-Variable. Diese wird nun auch gefüllt, falls kein Datum vorhanden ist (also entweder ein oder beide Datums). Das bekomme ich noch nicht hin.

zu 3)
hier habe ich keine Vorstellung wie das Code technisch aussehen soll.
Prinzipiell:
Zähle alle true´s, zähle alle false von ZielErreicht und dividiere die Anzahl dann, aber wie schreibt man das?

Re: neuer Report zur Terminüberwachung

15. Juni 2011 09:09

2): Wie soll eigentlich der zweite Else-Case durchlaufen werden? Eine der beiden Abfragen vorher wird wohl true ergeben.
So müsste es gehen:
Code:
IF (("Actual Ending Date" <> 0D) and ("Expected Ending Date" <> 0D)) THEN
  ZielErreicht := "Actual Ending Date" <= "Expected Ending Date"
else
  ZielErreicht := FALSE;


3): Anzahl_Ja*100/(Anzahl_JA+Anzahl_Nein), danach noch auf zwei Stellen runden.

Re: neuer Report zur Terminüberwachung

15. Juni 2011 09:15

Hi,

zu 2 sollte das hier besser gehen:
Code:
 
IF "Actual Ending Date" > "Expected Ending Date" THEN
    ZielErreichtText := 'Nein'
ELSE
    ZielErreichtText := 'Ja';
IF ("Actual Ending Date" = 0D) OR ("Expected Ending Date" = 0D) THEN
  ZielErreichtText := '';

Da du drei verschiedene Werte benötigst, reicht ein einzelnes Boolsches Feld nicht aus.

zu 3)
Zähle die Anzahl am besten bei der Bestimmung schon hoch.
Code:
 
IF ("Actual Ending Date" = 0D) OR ("Expected Ending Date" = 0D) THEN
  ZielErreichtText := ''
ELSE BEGIN
  IF "Actual Ending Date" > "Expected Ending Date" THEN BEGIN
      ZielErreichtText := 'Nein';
      Anzahl_Nein += 1;
  END ELSE BEGIN
    ZielErreichtText := 'Ja';
    Anzahl_Ja += 1;
  END;
END;

Re: neuer Report zur Terminüberwachung

15. Juni 2011 10:00

Hallo Danjo,

vielen Dank für die Antwort.

Ich berechne im Footer mit(Anzahl_ja/(Anzahl_Ja+Anzahl_Nein)*100) den Wert für die Ausgabe. Es erscheinen jedoch seltsame Werte, woran liegt das, muss ich die Variable irgendwo mal leere oder so, wenn ja wo mache ich das ? Und wie bekomme ich das % Zeichen mit in die Wertangabe.

Re: neuer Report zur Terminüberwachung

15. Juni 2011 10:06

Du solltest zu Beginn des Reports mit CLEAR(Anzahl_ja),... die Variablen zurücksetzen.

Du kannst die Berechnung und das % direkt in dem Feld auf der Section machen.
Trage dazu in die SourceExpression deines Feldes das hier ein:
Code:
FORMAT(Anzahl_ja/(Anzahl_Ja+Anzahl_Nein)*100) + ' %'

Re: neuer Report zur Terminüberwachung

15. Juni 2011 10:55

Vielen Dank nochmal für die Antwort.
Im OnPreData Item leere ich nun zuvor die Variablen.
Code:
CLEAR(Anzahl_Ja);
CLEAR(Anzahl_Nein);


Jetz erscheint eine Fehelrmeldung:
Nulldivision.
0 / 0

Kann ich das umgehen?

Re: neuer Report zur Terminüberwachung

15. Juni 2011 11:15

misterelektro1981 hat geschrieben:Jetz erscheint eine Fehelrmeldung:
Nulldivision.
0 / 0

Kann ich das umgehen?

Wo hast du den die Berechnung untergebracht?
Was du machen kannst, ist statt der Formel in dem Textfeld einzugeben, eine Textvariable benutzen.
Diese ist dann die SourceExpression deines Feldes.
Hier kannst du dann die Berechnung mit
Code:
IF (Anzahl_ja + Anzahl_Nein) > 0

ergänzen.

Re: neuer Report zur Terminüberwachung

15. Juni 2011 11:59

Hallo,

nun klappe es schon ganz gut. Zu jedem Projekt werden nun die %-Angaben ausgegeben. Ich habe mal einen Datumsfilter gesetzt für Anfang des Jahres bis jetzt. Insgesamt sind 34 Projekte gelaufen.

Bei 3 Projekten wird eine%-Angabe ausgegeben, obwohl es dort keine entsprechenden Resourcen gibt, d.h. nur Kopfdaten und keine Zeilendaten. Trotzdem wird einmal 100% und zweimal 0% ausgegeben.
Kann ich hier noch was dran ändern?

Und dann möchte ich gerne, die %-Angabe für alle Projekte am Ende des letztes Projekts stehen haben, wie mache ich das?

Vielen Dank schon mal.

EDIT:
Klappt nun einwandfrei. Nur die Ausgabe am Ende des Reports bekomme ich noch nicht in den Griff.

Re: neuer Report zur Terminüberwachung

16. Juni 2011 09:22

misterelektro1981 hat geschrieben:EDIT:
Klappt nun einwandfrei. Nur die Ausgabe am Ende des Reports bekomme ich noch nicht in den Griff.

Für die Ausgabe am Ende des Reports, also die Gesamtsumme. kannst du dir noch einmal zwei neue Variablen anlegen.
Diese setzt du nur am Anfang des Reports zurück, nicht aber pro Gruppe.

Die Berechnung der Prozente erfolgt dann analog zu den bereits vorhandenen Anzeigen.

Re: neuer Report zur Terminüberwachung

16. Juni 2011 10:53

Hallo,

bevor ich das mache eine Frage noch. Ich habe ja momentan folgende Struktur:
Job Structure Header <Job Structure Header>
Job Structure Line <Job Structure Line>

Die Ausgabe der % Angabe erfolgt im Footer der Job Structure Line. Muss ich nun ein weiteres DataItem hinzufügen, sonst habe ich diese Info doch auf allen Seiten im Bericht. Muss ich dazu nicht alle Variablen neu anlegen? UNd auf welche Ebene muss ggf. ein neues Data Item.

Re: neuer Report zur Terminüberwachung

16. Juni 2011 11:00

Wenn ich das richtig versteht hast du folgendes:
Du summierst pro Header die Zeilen auf und druckst dann am Ende der Zeilen (Footer der Zeilen) die Prozentangaben.
Im OnPreDataItem der Zeilen setzt du die Variablen zurück.

Wenn das so ist, legst du dir noch zwei neue Variablen an. "TotalQty_yes" und "TotalQty_no" oder eben einen beliebigen deutschen Namen, wie es dir lieber ist.
Diese beiden setzt du auf Null im OnPreDataItem des Headers.

Und überall wo das hier steht:
Code:
Anzahl_ja += 1;

machst du
Code:
Anzahl_ja += 1;
TotalQty_yes += 1;

draus.

Durch die neuen Variablen, welche nicht pro Kopf zurückgesetzt werden, hast du am Ende vom Report die Gesamtanzahl.

Dann druckst du noch im Footer des Headers die Prozentzahl an.

Re: neuer Report zur Terminüberwachung

16. Juni 2011 11:29

Danke für die sehr ausführliche Beschreibung, es klappt nun... puhhh