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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.09.2009, 09:01   #1  
s.alex is offline
s.alex
Участник
 
28 / 10 (1) +
Регистрация: 07.06.2007
Помогите показать в одном гриде две таблицы
Добрый день.

Нужно в одном гриде показать две таблицы InventItemBarCode и InventTable:
BarCode | ItemId | ItemName | ...
(первые две колонки из InventItemBarCode остальные из InventTable)

Ведущая таблица InventItemBarCode.
В Init-методе датасоурса InventTable я попытался построить DynaLink:

X++:
public void init()
{
Query q;
QueryBuildDataSource qb;
;
super();
q = new Query();
qb = q.addDataSource(TableNum(InventTable));
qb.clearDynalinks();
qb.addDynalink(FieldNum(InventTable, ItemId), InventItemBarCode,
FieldNum(InventItemBarCode, ItemId));
this.query(q);
}
В итоге на форме первые две колонки отражаются нормально, а в третьей колонке пусто, и сам запрос странный, смотрите картинку.

Что я не так сделал? Второй день пытаюсь и не могу понять где ошибка. Пытался по-всякому, но пока безрезультатно.
Если пытаюсь связать через JoinSource, то таблицы связываются, но не по полю ItemId а по BarCode, см. вторую картинку.
Изображения
  

Последний раз редактировалось s.alex; 24.09.2009 в 09:25.
Старый 24.09.2009, 10:43   #2  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Вообще говоря, эта задачка должна решаться через inner join InventTable к InventItemBarCode.

1. Проверьте, отключен ли у вас конфиг. ключ SysDeletedObjects30 (судя по всему, у вас АХАРТА 3.0; метку в 3шке не помню, ключ находится в ветке "Администрирование").
Внимание!!! Напоминаю, что при его отключении все DEL_-поля будут физически удалены из БД!

2. Если ключ отключен и все равно связь устанавливается как на 2й картинке, попробуйте добавить на InventItemBarcode relation на InventTable:
InventItemBarcode.itemId == InventTable.ItemId
__________________
Андрей.
Старый 24.09.2009, 10:50   #3  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Вообще-то, диналинк используется для других целей...
Вам нужен обычный innerJoin, сделайте соединение инвентТабле к Баркоду через ИннерДжоин. Если связывается челез баркод, то делаете всё то же что у вас и есть, только замените диналинк, на обычный линк, типа так:

X++:
qb.relations(false)
//qb.clearLinks();
qb.addLink(...)
__________________
Zhirenkov Vitaly
Старый 24.09.2009, 10:58   #4  
s.alex is offline
s.alex
Участник
 
28 / 10 (1) +
Регистрация: 07.06.2007
Цитата:
Сообщение от Dron AKA andy Посмотреть сообщение
Вообще говоря, эта задачка должна решаться через inner join InventTable к InventItemBarCode.

1. Проверьте, отключен ли у вас конфиг. ключ SysDeletedObjects30 (судя по всему, у вас АХАРТА 3.0; метку в 3шке не помню, ключ находится в ветке "Администрирование").
Внимание!!! Напоминаю, что при его отключении все DEL_-поля будут физически удалены из БД!

2. Если ключ отключен и все равно связь устанавливается как на 2й картинке, попробуйте добавить на InventItemBarcode relation на InventTable:
InventItemBarcode.itemId == InventTable.ItemId
Связь между таблицами установлена, и именно такая как вы прописали, это я уже проверил. В том-то и дело, что непонятно почему при существующей связи, причем единственной в InventItemBarCode фактически включается "дурная" связка!!
Про ключ как-то страшно, удалить все DEL_-поля из таблиц: на это я точно не решусь!!!
Старый 24.09.2009, 11:09   #5  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
DEL_-поля нужны только на этапе перехода с предыдущей версии на текущую, т.е. если у вас 3.0, то они были необходимы при переходе 2.5 -> 3.0. При обычной работе этот ключ рекомендуется отключать, в его хелпе об этом прямо написано.
__________________
Андрей.
Старый 24.09.2009, 11:12   #6  
s.alex is offline
s.alex
Участник
 
28 / 10 (1) +
Регистрация: 07.06.2007
Цитата:
Сообщение от ZVV Посмотреть сообщение
Вообще-то, диналинк используется для других целей...
Вам нужен обычный innerJoin, сделайте соединение инвентТабле к Баркоду через ИннерДжоин. Если связывается челез баркод, то делаете всё то же что у вас и есть, только замените диналинк, на обычный линк, типа так:

X++:
qb.relations(false)
//qb.clearLinks();
qb.addLink(...)
Сделал вот так
X++:
    q   = new Query();
    qb  = q.addDataSource(TableNum(InventTable));
    qb.relations(False);
    qb.addLink(FieldNum(InventItemBarCode, ItemId), FieldNum(InventTable, ItemId));
    this.query(q);
Получил сообщение:
Ошибка:
Источник данных не входит в состав родительского источника данных.
Пробовал настраивать JoinSource для InventTable_DS - не помогает.

Последний раз редактировалось s.alex; 24.09.2009 в 11:16.
Старый 24.09.2009, 11:14   #7  
s.alex is offline
s.alex
Участник
 
28 / 10 (1) +
Регистрация: 07.06.2007
Цитата:
Сообщение от Dron AKA andy Посмотреть сообщение
DEL_-поля нужны только на этапе перехода с предыдущей версии на текущую, т.е. если у вас 3.0, то они были необходимы при переходе 2.5 -> 3.0. При обычной работе этот ключ рекомендуется отключать, в его хелпе об этом прямо написано.
Ключ нашел в АОТ, но что значит "включить"?
Старый 24.09.2009, 11:41   #8  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от s.alex Посмотреть сообщение
Сделал вот так
X++:
    q   = new Query();
    qb  = q.addDataSource(TableNum(InventTable));
    qb.relations(False);
    qb.addLink(FieldNum(InventItemBarCode, ItemId), FieldNum(InventTable, ItemId));
    this.query(q);
Получил сообщение:
Ошибка:
Источник данных не входит в состав родительского источника данных.
Пробовал настраивать JoinSource для InventTable_DS - не помогает.
Сначала нужно добавить датасорс для работы addLink:
X++:
    q   = new Query();
    qb  = q.addDataSource(TableNum(InventTable));
    qb =  qb.addDataSource(tablenum(InventItemBarCode));
    qb.addLink(FieldNum(InventItemBarCode, ItemId), FieldNum(InventTable, ItemId));
    this.query(q);
и relation(false) писать не надо - они и так по умолчанию false

Включить / отключить ключ означает зайти в \Администрирование\Настройка\Система\Конфигурация и установить / снять соответствующую галку
__________________
Возможно сделать все. Вопрос времени
Старый 24.09.2009, 12:05   #9  
s.alex is offline
s.alex
Участник
 
28 / 10 (1) +
Регистрация: 07.06.2007
Проблему решил!!!!
Вы будете смеяться, это пожалуйста, только не пинайте сильно!
Решил таким образом
1) настроил свойство JoinSource не в InventTable_DS, а в InventItemBarCode_DS с InnerJoin в LinkType, т.е. поменял направление связи.
2) убрал все что я перекрывал на InventTable_DS
3) GRID связал с InventTable_DS (раньше был связан с InventItemBarCode_DS, я же хотел чтобы по ней была основная выборка!!!)

В итоге в гриде все Ок, все поля видны, по всем полям работают поиски и фильтры и запрос получился вот такой:
Изображения
 
Старый 24.09.2009, 12:25   #10  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Сначала нужно добавить датасорс для работы addLink:
...
Там не в этом проблема была, а в том что добавлять ничего не нужно было ))
Датасорс же уже был в запросе, просто его нужно было найти и к нему сделать линк, а не добавлять ещё один, причём на первом уровне...

Ну автор разобрался и ладно... Конечно "теорией запросов Аксапты" надо бы ему заняться поплотнее.
__________________
Zhirenkov Vitaly
Старый 24.09.2009, 14:47   #11  
s.alex is offline
s.alex
Участник
 
28 / 10 (1) +
Регистрация: 07.06.2007
Цитата:
Сообщение от ZVV Посмотреть сообщение
Конечно "теорией запросов Аксапты" надо бы ему заняться поплотнее.
Подскажите ссылку или источники. ОЧЕНЬ хочется заняться поплотнее
Старый 24.09.2009, 18:53   #12  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от s.alex Посмотреть сообщение
Подскажите ссылку или источники. ОЧЕНЬ хочется заняться поплотнее
Ну в хелпе/документации про это есть.
Книжки "MorphX", "Inside Microsoft Dynamics" неплохие - поихите по форуму проскакивали на них ссылки.
__________________
Zhirenkov Vitaly
Старый 25.09.2009, 13:11   #13  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Смотри здесь
__________________
// no comments
Теги
join, грид, таблица

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Две таблицы в одном datasource Turetskiy DAX: Программирование 10 16.09.2008 16:35
Две таблицы в одном гриде Oloops DAX: Программирование 3 11.08.2006 14:25
две таблицы в двух разных вирт компаниях kitty DAX: Программирование 1 08.11.2005 18:18
Две таблицы - один grid!? Kengo DAX: Программирование 3 01.11.2004 15:01
Как привязать две таблицы или как это наз-ся? I don't understand DAX: Программирование 13 25.08.2004 07:46

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

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

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