10.10.2013, 13:03 | #1 |
Участник
|
Display поле по двум датасорсам в одном гриде - возможно ли?
В одном гриде связаны два датасорса по OuterJoin
таблица "Действие" и таблица "Детализация действия". В обеих таблицах есть поле Комментарий. Задача в гриде сделать поле в котором будет показан Комментарий из таблицы "Детализация действия", а в случае если "Детализация действия" - не существует показать Комментарий из таблицы "Действие" Как такое реализовать? И реализуемо ли это вообще? Мозг сломал |
|
10.10.2013, 13:18 | #2 |
Участник
|
У табличного буфера есть методы joinChild()/joinParent(), по ним можно получить связанный черезе запрос буфер другой таблицы.
|
|
|
За это сообщение автора поблагодарили: Logger (3). |
10.10.2013, 13:55 | #3 |
Участник
|
А не лучше ли создать новый display метод на таблице с детализацией?
X++: display Comment comment() { ActionTable actionTable; Comment comment; if (this.Comment != '') { comment = this.Comment; } else { select firstonly Comment from actionTable where this.ActionId == actionTable.ActionId; comment = actiontable.Comment; } return comment; } Последний раз редактировалось Stitch_MS; 10.10.2013 в 14:04. Причина: протупил |
|
10.10.2013, 14:52 | #4 |
Участник
|
Цитата:
Сообщение от Stitch_MS
А не лучше ли создать новый display метод на таблице с детализацией?
X++: display Comment comment() { ActionTable actionTable; Comment comment; if (this.Comment != '') { comment = this.Comment; } else { select firstonly Comment from actionTable where this.ActionId == actionTable.ActionId; comment = actiontable.Comment; } return comment; } условие вывода скорее такое X++: if (this.RecId) { comment = this.Comment; } else { select firstonly Comment from actionTable where this.ActionId == actionTable.ActionId; comment = actiontable.Comment; //но в том-то и беда что записи this в этом случае нет - this.ActionId всегда будет "" } |
|
10.10.2013, 14:57 | #5 |
Участник
|
joinChild()/joinParent(), не нашел как достучаться из дисплейметода на датасорсе
пытался X++: display Comment(ActionDetailTable _actionDetailTable)
{
ActionTable actionTable;
;
actionTable = _actionDetailTable.dataSource().cursor().joinParent();
} |
|
10.10.2013, 15:10 | #6 |
Участник
|
В SQL это было бы так:
X++: select isNull(detailTable.Comment, actionTable.Comment) as comment from actionTable left outer join detailTable on actionTable.ActionId = detailTable.ActionId |
|
10.10.2013, 15:11 | #7 |
Участник
|
Цитата:
А в обратном направлении идти пробовали? display Comment(ActionTable _actionTable) { ActionDetailTable actionDetailTable; ; actionDetailTable= _actionTable.dataSource().cursor().joinChild(); if (actionDetailTable.Comment ........ } Последний раз редактировалось Stitch_MS; 10.10.2013 в 15:11. Причина: опечатка |
|
10.10.2013, 15:24 | #8 |
NavAx
|
Для понимания работы joinChild()/joinParent()
X++: static void Job51(Args _args) { InventTable InventTable, InventTableParent; InventSum InventSum; int i; ; while select InventTable join InventSum where InventSum.ItemId == InventTable.ItemId { i++; InventTableParent = InventSum.joinParent(); print(InventTable.RecId == InventTableParent.RecId); if (i >= 10) { break; } } } X++: display Comment(ActionDetailTable _actionDetailTable)
{
ActionTable actionTableLocal;
;
actionTableLocal = _actionDetailTable.joinParent();
....
} |
|
10.10.2013, 15:28 | #9 |
Участник
|
Цитата:
X++: display Description test(CustTable _custTable) { CustTrans ct = _custTable.joinChild(); RecId id = ct.RecId ? ct.RecId : _custTable.RecId; Description ret = strfmt('%1 %2', id, ct.RecId ? 'trans' : 'table'); return ret; } |
|
|
За это сообщение автора поблагодарили: ex3em (1). |
10.10.2013, 15:56 | #10 |
Участник
|
Ура!! Заработало, Спасибо что указали где искать. не заметил что у входного параметра сразу есть joinChild()/joinParent(). Вот и начал извращенно лезть правой рукой к левому уху
на OuterJoin если из чилд датасорса лезть по _actionDetailTable.joinParent(); не получается, похоже из-за отсутствия в чилде записи. а вот наоборот получилось. В паренте метод и из него лезть к чилду и проверять есть у него RecId - если есть то коммент чилда. Иначе комент парента. Огромное человеческое спасибо всем |
|
10.10.2013, 16:38 | #11 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: gl00mie (1). |