Plánař | Co se děje ? Jak se pracuje v jazyce vzorců ? |
| Dobrý den,
jsem zoufalý, mám vypočítávané pole se dvěma vnořenými cykly a vnořenou funkcí @Transform.
Před dokončením to zkolabuje na nedostatku paměti, přestože k tomu není důvod. Vnější cyklus 26 cyklů, vnořený max 30, vnořená @Transform práce se seznamem o max 10 položkách. Pár proměnných, žádná nepřerůstá 100 B. Co zbytečného si cpe do paměti ? |
Plánař | Posuďte sami. To měl program zvládnout. Zapisuje se do seznamu Vysl měsíc RRMM a součet hodin |
20.04.2023 14:30:00
ID: 3765.1
| POd:="DatumZalozeni"; PDo:="DatumProvedeni"; PCena: ="CenaObjednavky"; CH:=999; Pohled:="Vytizeni"; Kli c:=""; REM {----------------Konec prarametrů----------------------Začátek výpočtu--------------------------}; SID:=@DbLookup( "":"NoCache";"":"";Pohled;Klic;"$ID";[PartialMatch] ); @If(@IsError(SID);@Return("Záznamy z pohledu "+Pohled+" nenačteny");@True); SID:=@Trim(@Text(SID)); PocR:=@ Elements(SID); x:=0; Vysl:="";
REM {@Return(SID+"|"+SID)}; @While(x<@Min(777;PocR); x:=x+1; @StatusBar(@Text(x)); ID:=SID[x]; Od:=@GetDocField(ID;POd); Do:=@GetDocField(ID;PDo); C:=@GetDocField(ID;PCena); z:=-1; PocD:=(Do-Od)/60/60/24+1; Hod:= C/CH/PocD;
@While(z<PocD ;z:=z+1; D:=@Adjust(Od;0;0;z;0;0;0); M:=@Right("00"+@Text(@Year(D));2)+@Right("00"+@Text (@Month(D));2)+"|"; Nal:=@Contains(Vysl;M);
@If(Nal ; Vysl:=@Transform(Vysl;"J";@If(M=@Left(J;5);@Do(P:=@ TextToNumber("0"+@Right(J;"|"));M+@Text(P+Hod));J)) ; Vysl:=@Trim(Vysl):(M+@Text(Hod)) ) ) ); @Sort(Vysl) |
VZ | Těžko říct |
21.04.2023 14:15:01
ID: 3765.2
| Pokud si vzpomínám, tak mi tuším kdysi nějaká formule padala na takovém podobném "konstantním" dělení: PocD:=(Do-Od)/60/60/24+1; Když jsem to /60/60/24 (nebo tak nějak) tenkrát nahradil konstantou 86400, tak to procházelo bez chyby, tzn.: PocD:=(Do-Od)/86400+1;
|