AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.10.2008, 09:27   #1  
Nataly_imported is offline
Nataly_imported
Участник
 
13 / 10 (1) +
Регистрация: 27.07.2005
Есть ли какие-то тонкости работы с темп-таблицами в плане быстродействия?

У меня довольно простой код выполняется достаточно долго, как мне кажется. Вот такая вот у меня процедурка (привожу полностью как есть, может кому что бросится в глаза):

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Гб ОЗУ)
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:02.