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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.06.2006, 12:55   #1  
UGT is offline
UGT
Участник
 
45 / 10 (1) +
Регистрация: 08.06.2005
Всем доброго времени суток.
Пытаюсь найти записб во временной таблице TempPostedWhseReceiptLine.
Написал следующий код:

TempPostedWhseReceiptLine.SETCURRENTKEY("Item No.","Location Code","Variant Code");
TempPostedWhseReceiptLine."Item No." := SomeValue1;
TempPostedWhseReceiptLine."Location Code" := SomeValue2;
TempPostedWhseReceiptLine."Variant Code" := SomeValue3;
IF TempPostedWhseReceiptLine.FIND THEN
message('Find');

В результате выполнения кода запись не находится, хотя она там есть.
Если написать код:

TempPostedWhseReceiptLine.SETCURRENTKEY("Item No.","Location Code","Variant Code");
TempPostedWhseReceiptLine.setrange("Item No.",SomeValue1);
TempPostedWhseReceiptLine.setrange("Location Code",SomeValue2);
TempPostedWhseReceiptLine.setrange("Variant Code",SomeValue3);
IF TempPostedWhseReceiptLine.FIND('-') THEN
message('Find');

то запись находится успешно.
В чем может быть ошибка? И какой код правильней использовать с точки зрения производительности?
Заранее спасибо
Старый 28.06.2006, 13:09   #2  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
В справке написано "If SearchStr contains '=', '>' or '<', you must assign values to all fields of the current and primary keys before you call FIND." ( Nav 4.0 SP1)
, что нужно задать значения главный ключ для первого варианта, но так как он скорее всего не известен, то остается второй вариант!
Что касается быстродействия, то быстрее конечно 1 вариант, так как в таблице содержится индекс первичного ключа, что уменьшит время поиска в отличии от варианта с SetRange.
Старый 28.06.2006, 13:30   #3  
UGT is offline
UGT
Участник
 
45 / 10 (1) +
Регистрация: 08.06.2005
Но я не использую символы '+','-' или '=' для FIND. Или использование FIND без параметров эквивалентно FIND('=')?
Старый 28.06.2006, 14:11   #4  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Да!
И последний совет:

RTFM
Старый 28.06.2006, 17:45   #5  
e-statik is offline
e-statik
Участник
 
102 / 11 (1) +
Регистрация: 06.07.2005
Это всё стёб или всерьёз?
Старый 29.06.2006, 12:04   #6  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Это серьезный стеб!
А вообще он спросил я ответил!
Старый 03.07.2006, 16:08   #7  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Использование FIND без параметров (или FIND('=')) аналогично использованию GET. Перед вызовом метода необходимо определить ВСЕ поля первичного ключа. При этом сам ключ устанавливать командой SETCURRENTKEY не обязательно.
Старый 04.07.2006, 10:36   #8  
e-statik is offline
e-statik
Участник
 
102 / 11 (1) +
Регистрация: 06.07.2005
Так действительно ли можно использовать при поиске присвоение без modify, как указано выше ?
Код:
TempPostedWhseReceiptLine.SETCURRENTKEY("Item No.","Location Code","Variant Code");
TempPostedWhseReceiptLine."Item No." := SomeValue1;
TempPostedWhseReceiptLine."Location Code" := SomeValue2;
TempPostedWhseReceiptLine."Variant Code" := SomeValue3;
IF TempPostedWhseReceiptLine.FIND THEN
Старый 04.07.2006, 12:41   #9  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
А тут модифай и не причем, здесь не стояла задача поменять значение записи. Объявление полей нужно для вызова Find без параметра. Но в этом примере нужно еще задать поля главного ключа, чтобы записи находились!
Старый 04.07.2006, 15:08   #10  
e-statik is offline
e-statik
Участник
 
102 / 11 (1) +
Регистрация: 06.07.2005
Имел в виду другое. Неужто можно использовать синтаксис присвоения для поиска?
Старый 04.07.2006, 17:29   #11  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от e-statik Посмотреть сообщение
Имел в виду другое. Неужто можно использовать синтаксис присвоения для поиска?
FIND без параметров (то же самое, что и FIND('=')) это поиск по полям первичного ключа. Для того, чтобы искать по полям первичного ключа нужно эти поля определить. Используя оператор присвоения. Можно использовать функцию GET. Логика работы этого оператора наверное ни у кого не вызывает вопросов ...
Старый 04.07.2006, 19:18   #12  
e-statik is offline
e-statik
Участник
 
102 / 11 (1) +
Регистрация: 06.07.2005
GET'а? Да, не вызывает А вот с присвоением раньше просто не довелось столкнуться. Как-то обходился GET'ом в одну строчку

Что ж, бум знать, спасибо за инфо!
 


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

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

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