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
hier hast du doch eine Schleife, die so oft durchlaufen wird, wie es Ergebnisse gibt.
Oder seh ich das falsch.
@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);
btw: bei der Code-Kommentierung gilt nicht der Slogan "weniger ist mehr" ;-)
und hier ist noch eine
@While(DayCount <= @Elements(_DayDBResult);
@if(@Elements(_DayDBResult) > 1;
.....
_MEMBER := _MEMBER + "<BR>" + @Text(_Line) + "--" + _TextDate
));
_Category := @Word(_DayDBResult; "|"; 1);
_StartTime := @Word(_DayDBResult; "|"; 2);
_EndTime:= @Word(_DayDBResult; "|"; 3);
DayCount := DayCount + 1)
Vermutlich liegts an einer der beiden, dass da was öfter auftaucht, als du möchtest...