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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.11.2009, 23:13   #1  
Forward is offline
Forward
Участник
 
101 / 10 (1) +
Регистрация: 21.05.2007
Есть код в кодеюните 5802:
[sql]
WITH LedgEntryDim DO BEGIN
SETRANGE("Table ID",DATABASE::"Value Entry");
SETRANGE("Entry No.",ValueEntryNo);
IF FIND('-') THEN
REPEAT
IF NOT TempDimBufIn.GET("Table ID","Entry No.","Dimension Code") THEN BEGIN
TempDimBufIn.INIT;
TempDimBufIn."Table ID" := "Table ID";
TempDimBufIn."Entry No." := "Entry No.";
TempDimBufIn."Dimension Code" := "Dimension Code";
TempDimBufIn."Dimension Value Code" := "Dimension Value Code";
TempDimBufIn.INSERT;
END;
UNTIL NEXT = 0;
END;
IF TempDimBufIn.FIND('-') THEN BEGIN
DimEntryNo := DimBufMgt.FindDimensions(TempDimBufIn);
IF DimEntryNo = 0 THEN
DimEntryNo := DimBufMgt.InsertDimensions(TempDimBufIn);
END ELSE
DimEntryNo := 0;

EXIT(DimEntryNo);[/sql]

По монитору клиента вижу что:
[sql]IF FIND('-') THEN
SELECT * FROM "CRONUS Россия ЗАО$Ledger Entry Dimension" WITH (UPDLOCK) WHERE (("Table ID"=?)) AND (("Entry No_"=?)) ORDER BY "Table ID","Entry No_","Dimension Code"
Clustered Index Seek(CRONUS Россия ЗАО$Ledger Entry Dimension$0)[2,1]
Table ID,Entry No.,Dimension Code
ID: 1225;New;Prepared;Dynamic;Rows: 1;UpdateNoLocks
[/sql]

Возникает вопрос, как сделать чтобы запрос был с READUNCOMMITTED, а не с UPDLOCK ?

FINDSET(FALSE, FALSE) пробовал - результат тот же, никак не могу понять где порылась собака.
Помогите кто умеет....
Старый 05.11.2009, 00:01   #2  
Romul is offline
Romul
Участник
 
186 / 11 (1) +
Регистрация: 26.12.2007
Цитата:
Сообщение от Forward Посмотреть сообщение
Возникает вопрос, как сделать чтобы запрос был с READUNCOMMITTED, а не с UPDLOCK ?
Не может быть.
Специально пепепроверил на своей базе: READUNCOMMITTED.
SELECT * FROM "CRONUS Россия ЗАО$Ledger Entry Dimension" WITH (READUNCOMMITTED) WHERE (("Table ID"=5802)) ORDER BY "Table ID","Entry No_","Dimension Code" ...................

UPDLOCK может возникнуть в 4 случаях:
1. либо происходит modify на запись.
2. либо предусмотрительно лочите таблицу (повышаете уровень изоляции с READUNCOMMITTED до UPDLOCK;
3. либо FINDSET(TRUE,FALSE). В этом случае LOCKTABLE устанавливается автоматически и данные лочатся. Рекоммендуется на большом наборе данных.

3-й случай - это, по сути, замена двух последовательных операторов
LOCKTABLE;
FINDSET
на один FINDSET(TRUE,FALSE)

4. либо FINDSET(TRUE,TRUE)
LOCKTABLE в 5802 не встречается, по ссылке тоже данный рекорд не передается и до этого нигде не лочится FINDSET'ами. UPDLOCK просто физически не должно быть...
У вас кодэюнит не перелопачен ручками?
Старый 05.11.2009, 12:17   #3  
Forward is offline
Forward
Участник
 
101 / 10 (1) +
Регистрация: 21.05.2007
В том то и дело, стандартный Кронус без модификаций...
Старый 06.11.2009, 08:56   #4  
Alterant is offline
Alterant
Участник
 
378 / 10 (1) +
Регистрация: 31.03.2004
Учет с/с автоматический? Тогда в 22-ом CU делается вставка в эту таблицу, что повышает уровень изоляции.
Если не автоматический, то нужно разбираться в этом кодеюните, скорее всего он сам повышает уровень изоляции через GenJnlPostLine.RunWithCheck.
Старый 06.11.2009, 12:41   #5  
Forward is offline
Forward
Участник
 
101 / 10 (1) +
Регистрация: 21.05.2007
То есть где то должен быть locktable или findset(true,....)?
Я правильно вас понимаю?
Уровень изоляции повышается для одной таблицы?

Учет в ручном режиме.
Старый 06.11.2009, 14:39   #6  
Alterant is offline
Alterant
Участник
 
378 / 10 (1) +
Регистрация: 31.03.2004
Нет, где-то (а точнее в 12-ом CU) есть INSERT в эту таблицу. Ведь измерения к фин. книге, которые создает фин. учет хранятся в этой же таблице.
При LOCKTABLE - для одной.
 


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

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

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