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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.12.2005, 11:22   #1  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Позиционирование на конкретную запись датасета
Требуется после обновления формы спозиционировать курсор на конкретную запись датасета. Использую следующий код
PHP код:
element.args().lookupField(FieldNum(TableField));
element.args().lookupValue(Value);
ds.research(); 
Все работает правильно и быстро, но если в поле Field несколько значений Value, то курсор позиционируется на первую из них, хотя при переходе к основной таблице курсор позиционируется на нужную запись по значениям не одного, а двух полей.
Метод findRecord дает нужный результат, но в отличии от перехода к основной таблице работает намного медленнее чем переход к основной таблице.
Подскажите, пожалуйста, как решить данную проблему
Старый 21.12.2005, 13:10   #2  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Цитата:
Сообщение от Lucky13
... в поле Field несколько значений Value ...
...хотя при переходе к основной таблице курсор позиционируется на нужную запись по значениям не одного, а двух полей ...
Не очень-то понятно. Несколько значений в одном поле, переход к основной таблице по 2-м полям (стоите-то и нажимаете "Перейти" на одном каком-то поле) ...
__________________
Андрей.
Старый 21.12.2005, 13:24   #3  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Пример:
Если стоять на строке заказа и перейти к таблицы партий, то, если есть несколько записей с одинаковым номером партии и разными ItemId, произойдет переход на нужную партию (эта строка будет вверху) и курсор будет стоять на строке, соответствующей выбранному ItemId. В принципе логично, т.к. в InventBatch уникальный индекс по двум полям (InventBatchId и ItemId), но сделать подобное позиционирование не получается. Выше указанный способ позиционирует либо по номеру партии, либо по ItemId, а вместе не получается.
Старый 21.12.2005, 13:44   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Неправильно вы думаете.

Посмотрите метод run() формы InventBatch - вам станет понятно.
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: belugin (2).
Старый 21.12.2005, 14:14   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Axapta хитрая.

Вот что происходит при переходе к основной таблице (принцип которого у вас используется в коде).

1. На сервере открывается курсор для такого запроса
X++:
select * 
frrom Table 
where Table.Field >= Value ...
где Table.Field - поле с которого произошел переход (или точнее LookupField() в args() формы)
Value - значение поля с которого произошел переход (или точнее LookupValue() в args() формы)
В буфер на клиенте выбирается некоторое количество записей (зависит от таблицы).
2. Курсор позиционируется на первой записи.

При перемещении назад по датасету (нажав PgUp, Up или вызвав сооответствующий метод) на сервере открывается курсор для такого запроса
X++:
select * 
frrom Table 
where Table.Key1 < Value ...
При этом для ORDER BY включается обратный порядок сортировки.
Строки в буфер на клиенте добавляются в обратном порядке.

Дальше при перемещении вперед или назад по датасоурсу, если не получены все строки с сервера, фетчится соответствующий открытый курсор.

При таком алгоритме работы Axpata'ы, если включить сортировку на табличной форме не по ключу перехода, то будет неправильно позиционироваться курсор после открытия формы

В форме InventBatch фактически выполняется перемещение по датасорсу ч/з ds.Next(), пока не найден нужный ItemId (InventBatch отпозиционирован движком по приведенному алгоритму).
__________________
Axapta v.3.0 sp5 kr2
Старый 21.12.2005, 16:00   #6  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
А не подскажите что это за класс InventDimJumpRefEngine_RU. Что он делает и как им пользоваться?
Старый 21.12.2005, 16:46   #7  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Он делает именно то, что обозначено в его названии. Это семейство классов - движок для реализации перехода к основной таблице на полях складской аналитики. Как им пользоваться - можно посмотреть на приведенной выше форме InventBatch или на других формах складских аналитик.
__________________
Андрей.
Старый 21.12.2005, 18:28   #8  
Garic is offline
Garic
NavAx
Аватар для Garic
NavAx Club
 
393 / 63 (3) ++++
Регистрация: 23.07.2002
Адрес: Москва
Лучше им не пользоваться или доделать. Если у вас много записей в табличке (что нормально для inventBatch), то форма может открываться минутами (у нас было до 5-ти минут). Из-за этого позиционирования.
__________________
С уважением, Игорь Ласийчук.
Старый 21.12.2005, 19:26   #9  
Garic is offline
Garic
NavAx
Аватар для Garic
NavAx Club
 
393 / 63 (3) ++++
Регистрация: 23.07.2002
Адрес: Москва
InventDimJumpRefEngine_RU - findRecord
Код:
        while (cursor.RecId                                 &&
               cursor.RecId                   != prev.RecId &&
               cursor.(this.curFilterField()) != this.callerFilter())
        {
            prev = cursor.data();
            dataSource.next();
        }
Угадайте сколько подобный код будет лазить по записям .это появилось в SP2.
До этого было не лучше - использовался findRecord.
Лучше уж просто фильтры ставить.
__________________
С уважением, Игорь Ласийчук.
Теги
findrecord, inventbatch, lookupfield, lookupvalue, переход к основной таблице

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Не корректно сохраняет запись в inventTable Starling DAX: Программирование 8 31.03.2008 15:30
Очень просто: создать новую запись в таблице Hobo DAX: Программирование 20 11.07.2006 13:02
Поиск ссылок на запись в таблице YaHooka DAX: Функционал 9 29.08.2005 13:26
Ошибка при импорте демоданных (Axapta 3.0 CIS SP1) KocDm DAX: Администрирование 2 11.08.2005 12:04
Исчезает запись в плане счетов zarik DAX: Прочие вопросы 6 03.05.2005 10:32

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

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

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