[gelöst]Report: prüfen auf welchen Wochentag ein Datum fällt

30. Januar 2008 13:31

Hallo zusammen,

ich möchte einen Report erstellen bei dem Beträge die auf bestimmte Wochentage fallen (Samstag+Sonntag) aufsummiert werden.
Kann mir jemand einen Tip geben wie das funktioniert? Ich habe leider keinen Zugriff auf Codeunits, daher konnte ich nicht versuchen ob es mit der Holiday Funktion im Download Bereich funktioniert.

Danke,
Gruss
Christian
Zuletzt geändert von Ara am 31. Januar 2008 17:53, insgesamt 1-mal geändert.

30. Januar 2008 14:34

Hallo Christian,

stehen die Daten, die aufsummiert werden sollen, auch in einer Tabelle? Wenn ja, in welcher? Und ist der Report ein bestehender Report aus dem Navision-Standard?

Gruß, Marc

30. Januar 2008 14:59

Hallo Marc,

ich werde einen komplett neuen Report erstellen, auf Basis der Tabelle 169 - Projektposten.

Es sollen alle Beträge pro Ressource, die Buchungsdatum am einem Wochenende haben, aufsummiert werden.
Entsprechende Filter setzen, aufsummieren etc sollte ich hinbekommen, nur das Buchungdatum=Samstag/Sonntag macht mir Probleme.

Danke,
Gruss
Christian

30. Januar 2008 15:50

Das Problem kannst du über die virtuelle Tabelle "Date" lösen. Über entsprechende Filter auf "Period Type" und "Period Start" ermittelst du genau einen Datensatz für das angegebene Datum. Danach kannst du über die "Period No." prüfen, ob das Datum auf ein Wochenende fällt ("Period No." 6 oder 7).

Code:
Date.SETRANGE("Period Type", Date."Period Type":Day);
Date.SETRANGE("Period Start", XXX."Posting Date");
Date.FINDFIRST;

IF (Date."Period No." = 6) OR (Date."Period No." = 7) THEN BEGIN
  DummyText := 'Es ist Wochenende!!';
END;

30. Januar 2008 16:08

SilverX hat geschrieben:
Code:
Date.SETRANGE("Period Type", Date."Period Type":Day);
Date.SETRANGE("Period Start", XXX."Posting Date");
Date.FINDFIRST;

IF (Date."Period No." = 6) OR (Date."Period No." = 7) THEN BEGIN
  DummyText := 'Es ist Wochenende!!';
END;

Etwas eleganter aus meiner Sicht wäre:

Code:
Date.SETRANGE("Period Type", Date."Period Type":Day);
Date.SETRANGE("Period Start", XXX."Posting Date");
Date.SETRANGE("Period No.", 6, 7);
IF NOT Date.ISEMPTY THEN
  DummyText := 'Es ist Wochenende!!';

Aber das ist Geschmackssache. ;-)

Gruß, Marc

30. Januar 2008 16:18

Ja, der Papa hat Recht, ist wahrscheinlich schneller und eigentlich nach meiner Philosophie auch eleganter :-)

30. Januar 2008 16:29

SilverX hat geschrieben:Ja, der Papa hat Recht,

:-D oh oh das würd ich nicht auf mir sitzen lassen *ggg*

30. Januar 2008 16:29

SilverX hat geschrieben:Ja, der Papa hat Recht, ist wahrscheinlich schneller und eigentlich nach meiner Philosophie auch eleganter :-)


Papa? Cool :-)

Schneller bei SQL bestimmt - bei Native weiß ich's nicht.

30. Januar 2008 21:05

Es gibt da aber auch eine fertige Navisionfunktion
Number := DATE2DWY(Date, What)
Bsp: x := date2dwy(010108d,1)
what:
1 liefert den Wochentag ,x ist dann 1= Montag, 7 = Sonntag
2 die KW
3 das Jahr

30. Januar 2008 21:40

Ok, der Punkt geht an Thomas :>

Ich muss mal wieder im Befehlsverzeichnis lesen. Einige Sachen vergisst man immer mal wieder bzw. hat sie noch nie gebraucht *grübel*

31. Januar 2008 17:53

danke, nach ein bissel rumprobieren hat es geklappt. Meine Lösung sieht jetzt im Endeffekt so aus:

Code:
SETRANGE("Period Type", "Period Type"::Tag);
SETRANGE("Period Start",StartDate,EndDate);
SETRANGE("Period No.", 6, 7);

JobLedgerEntry.SETCURRENTKEY("Entry Type","Posting Date",Type,"No.","Unit of Measure Code");
JobLedgerEntry.SETRANGE(Type,JobLedgerEntry.Type::Resource);
JobLedgerEntry.SETRANGE("No.",Resource."No.");


Start und Enddate kommen aus dem Requestform.
Eine kleine Anmerkung noch zu dem Code von SilverX und Marc:
Bei der Zeile mit "Period Type" hat er 2 Fehler geworfen, zum einen weil ein : gefehlt hat, zum anderen dass dort wohl Tag statt Day stehen muss.

Danke auf jedenfall an alle, hat mir sehr weitergeholfen :)

Gruss
Christian