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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.03.2014, 10:39   #1  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
? GRID из двух таблиц и поиск нужной строчки
AX3.0

Здравствуйте друзья.

Помогите с следующей проблемой.

Есть GRID из двух таблиц, назовем их Tabl1 и Tabl2. В свойствах Tabl2 стоит InnerJoin к таблице Tabl1.

Данные в таблице Tabl1
IdT1 - Name
1 - Набор1
2 - Набор2
3 - Набор3

Данные в таблице Tabl2
IdT1 - IdT2 - Name - NSort
1 - 1 - Предмет1 - 6
1 - 2 - Предмет2 - 2
2 - 3 - Предмет3 - 1
2 - 4 - Предмет4 - 4
3 - 5 - Предмет5 - 8
3 - 6 - Предмет6 - 7
3 - 7 - Предмет7 - 3
1 - 8 - Предмет8 - 5

В итоге в GRIDе отображаются следующие данные;
NameTabl1 - NameTabl2
Набор2 - Предмет3
Набор1 - Предмет2
Набор3 - Предмет7
Набор2 - Предмет4
Набор1 - Предмет8
Набор1 - Предмет1
Набор3 - Предмет6
Набор3 - Предмет5

После изменения данных у таблицы Tabl2 в столбце NSort. Делаю у Tabl1 research и findRecord и попадает на первую запись из Tabl1(Оно и логично).

Пример: Меняем местам строчки "Набор1 - Предмет8" и "Набор1 - Предмет1", стояли мы на строчке "Набор1 - Предмет8". В результате курсор стает на "Набор1 - Предмет2", а нужно на "Набор1 - Предмет8".

Вопрос можно ли как-то правильно найти строчку по таблице Tabl2?
Старый 12.03.2014, 12:50   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Сдается мне, что в общем случае (при соединении многие ко многим) поиск строки по подчиненной таблице, возможен только через ручной перебор строк ds.next().
Если в вашем случае записи в подчиненной таблице после соединения с первой таблицей остаются уникальными (тип соединения один ко многим, а не многие ко многим), то этим можно воспользоваться. Измените порядок соединения таблиц, сделайте таблицу с уникальными записями главной, а не подчиненной.
Старый 12.03.2014, 12:59   #3  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Спасибо, сейчас работает через переборку записей (ds.next), но он почему-то роняет AX иногда. Я вот и подумал, что должен существовать более правильный метод, но видимо его нет =(
Старый 12.03.2014, 13:28   #4  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Не знаю подойдет ли под Ваш случай, когда две таблицы отображаются в одном Grid'е, у меня была немного похожая задача, при изменении таблицы на одной вкладке, обновлять другую таблицу, на другой вкладке.
Решил я это следующим образом. На методе write (на ДатаСорсе формы) в таблице, которая изменяется, после super() написал следующий код:
X++:
RefreshTable_ds.findValue(fieldNum(RefreshTable, ItemId), UpdateTable.ItemId);
RefreshTable_ds.reread();
RefreshTable_ds.refresh();
где RefreshTable - это таблица, которую надо обновить, UpdateTable - это таблица, которая изменяется.

В данном виде все нормально работает, обновляется и отображается нормально. И на удивление, изменение таблицы не тормозит (я думал будут тормоза).
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 12.03.2014, 13:34   #5  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Цитата:
Сообщение от lev Посмотреть сообщение
Не знаю подойдет ли под Ваш случай, когда две таблицы отображаются в одном Grid'е, у меня была немного похожая задача, при изменении таблицы на одной вкладке, обновлять другую таблицу, на другой вкладке.
Решил я это следующим образом. На методе write (на ДатаСорсе формы) в таблице, которая изменяется, после super() написал следующий код:
X++:
RefreshTable_ds.findValue(fieldNum(RefreshTable, ItemId), UpdateTable.ItemId);
RefreshTable_ds.reread();
RefreshTable_ds.refresh();
где RefreshTable - это таблица, которую надо обновить, UpdateTable - это таблица, которая изменяется.

В данном виде все нормально работает, обновляется и отображается нормально. И на удивление, изменение таблицы не тормозит (я думал будут тормоза).
Спасибо. Но это подходит, если строчки не меняются местами(не установлена сортировка). Но к сожалению мне это не подходит.
Теги
findrecord, grid, research

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Связь двух таблиц AngelDominantes DAX: Программирование 7 27.01.2012 18:53
подсчет строк у несколких таблиц и вывод на grid braathe DAX: Программирование 1 23.03.2005 16:05
Связь двух таблиц daemon DAX: Программирование 10 20.11.2003 16:32
поля из связанных таблиц в Grid listener DAX: Программирование 2 17.09.2003 18:38
Поиск в Grid по полю из другой таблицы Dron AKA andy DAX: Программирование 9 01.08.2002 16:36

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

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

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