Ich habe eine Schleife die Dokumente für 31 Tage ermitelt. Wenn immer nur ein Dokument für einen Tag da ist, dann funktioniert mein restlicher Code einwandfrei.
Wenn nun für einen Tag mehrere Dokumente existieren, dann wird der Scriptblock in dem ich die Dokumente verarbeitet leider so oft wiederholt wie es Ergebnisdokumente gibt. Ich will aber eigentlich alle Dokumente aneinanderreihen.
Den Scriptblock zu posten wird nicht viel bringen, da das Script mittlerweile mehrere DIN-A4 Seiten füllt. Aber ich Poste mal den Teil, um den es gerade geht:
_WorkingDaysNo := 31;
n := 1;
_HoursADay := "";
@While(n <= _WorkingDaysNo;
_Line := "";
_TextDate := @Text(n) + "." + @Text(MONTH) + "." + @Text(YEAR);
_RealDate := @Date (YEAR; MONTH; n);
_KeyTimeEntry := _KeyTimeSheet + "-" + _TextDate;
_DayDBResult := @DBLookup("":"NoCache";"":"xxxxxxxx.nsf";"CMSCollector_TimeEntry";_KeyTimeEntry;2);
@If((@Weekday(_RealDate) = 1) | (@Weekday(_RealDate) = 7); _Hours := " "; _Hours := "0");
_Category := "";
@if(@Elements(_DayDBResult) > 0;
@Do(
DayCount := 1;
@While(DayCount <= @Elements(_DayDBResult);
@if(@Elements(_DayDBResult) > 1;
@Do(
_Hours := "0";
_HoursInt := "";
n2 := 1;
_FlatList := @Implode(_DayDBResult; "#");
@While(n2 <= @Elements(_DayDBResult);
_WorkList := @Explode(_FlatList; "#");
_Line := "";
_HoursInt :=_HoursInt + @Text(@Word(_WorkList[n2]; "|"; 4));
_Order := @Text(@Word(_WorkList[n2]; "|"; 5));
_Mem := @Member(_Order; _OrderNoList);
@if(_Mem = 0; _Mem := 1;"");
n3 := 1;
@While(n3 < _Mem;
_Line := _Line + "0|";
n3 := n3 + 1);
_Line := _Line + _HoursInt + "|";
n3 := _mem+1;
@While(n3 <= _OrderNoCount;
_Line := _Line + "0|";
n3 := n3 + 1);
_MEMBER := _MEMBER + "<BR>" +_Line + "--" + _TextDate;
n2 := n2 + 1);
_Hours := @Text(_HoursInt)
); @Do(
_Hours := @Text(@Word(_DayDBResult; "|"; 4));
_Order := @Text(@Word(_DayDBResult; "|"; 5));
_Mem := @Member(_Order; _OrderNoList);
@if(_Mem = 0; _Mem := 1;"");
n3 := 1;
@While(n3 < _Mem;
_Line := _Line + "0|";
n3 := n3 + 1);
_Line := _Line + _Hours + "|";
n3 := _mem+1;
@While(n3 <= _OrderNoCount;
_Line := _Line + "0|";
n3 := n3 + 1);
_MEMBER := _MEMBER + "<BR>" + @Text(_Line) + "--" + _TextDate
));
_Category := @Word(_DayDBResult; "|"; 1);
_StartTime := @Word(_DayDBResult; "|"; 2);
_EndTime:= @Word(_DayDBResult; "|"; 3);
DayCount := DayCount + 1)
);
"");
_OrderNoList := @Explode(_OrderNo; "|");
_OrderNoList := @Sort(@Unique(_OrderNoList));
_Categorys := _Categorys + _Category + "|";
_HoursADay := _HoursADay + _Hours + "|";
n := n + 1);
_CatArray := _Categorys;
_HoursArray := _HoursADay;
FIELD _DEBUG := @text(_MEMBER);
Ich bekomme nun folgende Ausgabe für das Feld _DEBUG:
8|0|0|0|0|--12.8.2004
0|0|0|9|0|--13.8.2004
0|0|0|0|12.5|--16.8.2004
0|0|0|10|0|--17.8.2004
1.5|0|0|0|0|--18.8.2004
0|1.53|0|0|0|--18.8.2004
0|0|1.533|0|0|--18.8.2004
1.5|0|0|0|0|--18.8.2004
0|1.53|0|0|0|--18.8.2004
0|0|1.533|0|0|--18.8.2004
1.5|0|0|0|0|--18.8.2004
0|1.53|0|0|0|--18.8.2004
0|0|1.533|0|0|--18.8.2004
0|0|0|3|0|--19.8.2004
Die letzten 9 Zeilen entsprechen eigentlich nur 3 Dokumenten. Eines mit 1.5 Stunden, und zwei mit 3 Stunden. Das führt aufgrund des Wiederholen des Blockes um DBLookup zu dem fehlerhaften werten von 1.5, 1,53, 1,533
Hoffe es ist dennoch verständlich.
Jenson