24.09.2009, 09:01 | #1 |
Участник
|
Помогите показать в одном гриде две таблицы
Добрый день.
Нужно в одном гриде показать две таблицы 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 |
Moderator
|
Вообще говоря, эта задачка должна решаться через 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 |
MCITP
|
Вообще-то, диналинк используется для других целей...
Вам нужен обычный innerJoin, сделайте соединение инвентТабле к Баркоду через ИннерДжоин. Если связывается челез баркод, то делаете всё то же что у вас и есть, только замените диналинк, на обычный линк, типа так: X++: qb.relations(false) //qb.clearLinks(); qb.addLink(...)
__________________
Zhirenkov Vitaly |
|
24.09.2009, 10:58 | #4 |
Участник
|
Цитата:
Сообщение от Dron AKA andy
Вообще говоря, эта задачка должна решаться через inner join InventTable к InventItemBarCode.
1. Проверьте, отключен ли у вас конфиг. ключ SysDeletedObjects30 (судя по всему, у вас АХАРТА 3.0; метку в 3шке не помню, ключ находится в ветке "Администрирование"). Внимание!!! Напоминаю, что при его отключении все DEL_-поля будут физически удалены из БД! 2. Если ключ отключен и все равно связь устанавливается как на 2й картинке, попробуйте добавить на InventItemBarcode relation на InventTable: InventItemBarcode.itemId == InventTable.ItemId Про ключ как-то страшно, удалить все DEL_-поля из таблиц: на это я точно не решусь!!! |
|
24.09.2009, 11:09 | #5 |
Moderator
|
DEL_-поля нужны только на этапе перехода с предыдущей версии на текущую, т.е. если у вас 3.0, то они были необходимы при переходе 2.5 -> 3.0. При обычной работе этот ключ рекомендуется отключать, в его хелпе об этом прямо написано.
__________________
Андрей. |
|
24.09.2009, 11:12 | #6 |
Участник
|
Цитата:
Сообщение от 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 |
Участник
|
Ключ нашел в АОТ, но что значит "включить"?
|
|
24.09.2009, 11:41 | #8 |
Administrator
|
Цитата:
Сообщение от 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 - не помогает. 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); Включить / отключить ключ означает зайти в \Администрирование\Настройка\Система\Конфигурация и установить / снять соответствующую галку
__________________
Возможно сделать все. Вопрос времени |
|
24.09.2009, 12:05 | #9 |
Участник
|
Проблему решил!!!!
Вы будете смеяться, это пожалуйста, только не пинайте сильно! Решил таким образом 1) настроил свойство JoinSource не в InventTable_DS, а в InventItemBarCode_DS с InnerJoin в LinkType, т.е. поменял направление связи. 2) убрал все что я перекрывал на InventTable_DS 3) GRID связал с InventTable_DS (раньше был связан с InventItemBarCode_DS, я же хотел чтобы по ней была основная выборка!!!) В итоге в гриде все Ок, все поля видны, по всем полям работают поиски и фильтры и запрос получился вот такой: |
|
24.09.2009, 12:25 | #10 |
MCITP
|
Там не в этом проблема была, а в том что добавлять ничего не нужно было ))
Датасорс же уже был в запросе, просто его нужно было найти и к нему сделать линк, а не добавлять ещё один, причём на первом уровне... Ну автор разобрался и ладно... Конечно "теорией запросов Аксапты" надо бы ему заняться поплотнее.
__________________
Zhirenkov Vitaly |
|
24.09.2009, 14:47 | #11 |
Участник
|
|
|
24.09.2009, 18:53 | #12 |
MCITP
|
Ну в хелпе/документации про это есть.
Книжки "MorphX", "Inside Microsoft Dynamics" неплохие - поихите по форуму проскакивали на них ссылки.
__________________
Zhirenkov Vitaly |
|
25.09.2009, 13:11 | #13 |
Участник
|
Смотри здесь
__________________
// no comments |
|
Теги |
join, грид, таблица |
|
Похожие темы | ||||
Тема | Ответов | |||
Две таблицы в одном datasource | 10 | |||
Две таблицы в одном гриде | 3 | |||
две таблицы в двух разных вирт компаниях | 1 | |||
Две таблицы - один grid!? | 3 | |||
Как привязать две таблицы или как это наз-ся? | 13 |
|