12.03.2014, 10:39 | #1 |
Участник
|
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 |
Участник
|
Сдается мне, что в общем случае (при соединении многие ко многим) поиск строки по подчиненной таблице, возможен только через ручной перебор строк ds.next().
Если в вашем случае записи в подчиненной таблице после соединения с первой таблицей остаются уникальными (тип соединения один ко многим, а не многие ко многим), то этим можно воспользоваться. Измените порядок соединения таблиц, сделайте таблицу с уникальными записями главной, а не подчиненной. |
|
12.03.2014, 12:59 | #3 |
Участник
|
Спасибо, сейчас работает через переборку записей (ds.next), но он почему-то роняет AX иногда. Я вот и подумал, что должен существовать более правильный метод, но видимо его нет =(
|
|
12.03.2014, 13:28 | #4 |
Ищущий знания...
|
Не знаю подойдет ли под Ваш случай, когда две таблицы отображаются в одном Grid'е, у меня была немного похожая задача, при изменении таблицы на одной вкладке, обновлять другую таблицу, на другой вкладке.
Решил я это следующим образом. На методе write (на ДатаСорсе формы) в таблице, которая изменяется, после super() написал следующий код: X++: RefreshTable_ds.findValue(fieldNum(RefreshTable, ItemId), UpdateTable.ItemId);
RefreshTable_ds.reread();
RefreshTable_ds.refresh(); В данном виде все нормально работает, обновляется и отображается нормально. И на удивление, изменение таблицы не тормозит (я думал будут тормоза).
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
12.03.2014, 13:34 | #5 |
Участник
|
Цитата:
Сообщение от lev
Не знаю подойдет ли под Ваш случай, когда две таблицы отображаются в одном Grid'е, у меня была немного похожая задача, при изменении таблицы на одной вкладке, обновлять другую таблицу, на другой вкладке.
Решил я это следующим образом. На методе write (на ДатаСорсе формы) в таблице, которая изменяется, после super() написал следующий код: X++: RefreshTable_ds.findValue(fieldNum(RefreshTable, ItemId), UpdateTable.ItemId);
RefreshTable_ds.reread();
RefreshTable_ds.refresh(); В данном виде все нормально работает, обновляется и отображается нормально. И на удивление, изменение таблицы не тормозит (я думал будут тормоза). |
|
Теги |
findrecord, grid, research |
|
Похожие темы | ||||
Тема | Ответов | |||
Связь двух таблиц | 7 | |||
подсчет строк у несколких таблиц и вывод на grid | 1 | |||
Связь двух таблиц | 10 | |||
поля из связанных таблиц в Grid | 2 | |||
Поиск в Grid по полю из другой таблицы | 9 |
|