16.10.2008, 09:27 | #1 |
Участник
|
Есть ли какие-то тонкости работы с темп-таблицами в плане быстродействия?
У меня довольно простой код выполняется достаточно долго, как мне кажется. Вот такая вот у меня процедурка (привожу полностью как есть, может кому что бросится в глаза): UpdateAvailableCapacity(VAR CurrCapacityRec : TEMPORARY Record "Availability Buffer") CurrCapacityRec."Available Quantity":= (CurrCapacityRec."Ending Date"-CurrCapacityRec."Starting Date")*24 +(CurrCapacityRec."Ending Time"-CurrCapacityRec."Starting Time")/3600000; LocBegin:=CREATEDATETIME(CurrCapacityRec."Starting Date",CurrCapacityRec."Starting Time"); LocEnd:=CREATEDATETIME(CurrCapacityRec."Ending Date",CurrCapacityRec."Ending Time"); TmpTimeBreakeCapacity.RESET; TmpTimeBreakeCapacity.SETCURRENTKEY("Starting Date","Starting Time","Ending Date","Ending Time"); TmpTimeBreakeCapacity.SETFILTER("Starting Date",'<=%1',CurrCapacityRec."Ending Date"); TmpTimeBreakeCapacity.SETFILTER("Ending Date",'>=%1',CurrCapacityRec."Starting Date"); TmpTimeBreakeCapacity.SETRANGE("Line No.",CurrCapacityRec."Entry No."); IF TmpTimeBreakeCapacity.FIND('-') THEN REPEAT BreakBegin:=CREATEDATETIME(TmpTimeBreakeCapacity."Starting Date",TmpTimeBreakeCapacity."Starting Time"); BreakEnd:=CREATEDATETIME(TmpTimeBreakeCapacity."Ending Date",TmpTimeBreakeCapacity."Ending Time"); IF (BreakBegin<=LocBegin) AND (BreakEnd>=LocEnd) THEN BEGIN CurrCapacityRec."Available Quantity":=0; EXIT; END ELSE IF (BreakBegin<=LocBegin) AND (BreakEnd<=LocEnd) AND (BreakEnd>LocBegin) THEN CurrCapacityRec."Available Quantity":=CurrCapacityRec."Available Quantity"-(BreakEnd-LocBegin)/3600000 ELSE IF (BreakBegin>LocBegin) AND (BreakEnd<=LocEnd) THEN CurrCapacityRec."Available Quantity":=CurrCapacityRec."Available Quantity"-TmpTimeBreakeCapacity."Available Quantity" ELSE IF (BreakBegin>LocBegin) AND (BreakBegin<LocEnd) AND (BreakEnd>=LocEnd) THEN CurrCapacityRec."Available Quantity":=CurrCapacityRec."Available Quantity"-(LocEnd-BreakBegin)/3600000; UNTIL TmpTimeBreakeCapacity.NEXT=0; CurrCapacityRec и TmpTimeBreakeCapacity являются темп-таблицами. Работает такая процедура примерно 0,036 секунды. Цикл по TmpTimeBreakeCapacity проходит около 3-6 записей. Комп вполне работоспособный (процессор Pentium 1,73 GHz, 795 МГц, 1Гб ОЗУ) |
|