30.03.2009, 15:38 | #1 |
Участник
|
Задачка с запросом в форме
Всем привет.
есть задачка которую не знаю как сделать. Исходные данные: Форма, на ней 3 связанных источника данных: InventSum->InventDim->InventBatch. Данные группируются (хотя думаю это не важно). Задача: из дата метода на одном источнике данных посмотреть значение полей другого источника данных (например метод на InventSum, а надо посмотреть значение поля на InventDim)
__________________
--- SHiSHok |
|
30.03.2009, 15:52 | #2 |
MCTS
|
пишем в методе и все
InventDim.InventLocationId, то есть указываем курсор по названию датасорса или что-то другое имеется ввиду...? |
|
30.03.2009, 16:27 | #3 |
Участник
|
не все так просто. такое обращение (InventDim.InventLocationId) не дает значение соответствующее записи с которой вызывается дата метод (например с InventSum). Т.е. при вызове дата метода на InventSum меняются значения только источника InventSum, остальные источники заполняются первым значение и не изменяются при вызове дата метода.
__________________
--- SHiSHok Последний раз редактировалось SHiSHok; 30.03.2009 в 16:29. |
|
30.03.2009, 16:29 | #4 |
Member
|
Тогда все поля заполнятся значением, расчитанным по текущему положению курсора в форме, а при переходе по записям будут дружно изменяться.
Лучше переформулировать задачу (либо я чего-то не знаю).
__________________
С уважением, glibs® |
|
30.03.2009, 17:10 | #5 |
Участник
|
Цитата:
display method определен на DataSource InventSum, надо добраться к InventBatch. Моя трассировка из дисплей метода показывает что соответствие полей InventSum<->InventDim<->InventBatch отсутствует .
__________________
--- SHiSHok |
|
30.03.2009, 17:15 | #6 |
Member
|
Цитата:
Сообщение от SHiSHok
...
display method определен на DataSource InventSum, надо добраться к InventBatch. ...
__________________
С уважением, glibs® |
|
30.03.2009, 17:39 | #7 |
Участник
|
SHiSHok, выложил бы проект с этой формой - давно бы нашли в чем дело.
Проверь какой у тебя тип джойна между датасорсами (и есть ли там вообще джойн ). |
|
30.03.2009, 17:50 | #8 |
Участник
|
Цитата:
X++: display <-> <>(InventSum _cursor) { return InventBatch::find(InventDim::find(_cursor.InventDimId).InventBatchId, _cursor.ItemId).<->; }
__________________
SY, AVA Последний раз редактировалось ShowPoint; 30.03.2009 в 17:57. |
|
30.03.2009, 18:04 | #9 |
Member
|
Запрос то с группировкой. Автор не зря спрашивает. _cursor.InventDimId может быть неизвестным по объективным причинам (по InventDim производится группировка по полям аналитик).
__________________
С уважением, glibs® |
|
30.03.2009, 18:20 | #10 |
Участник
|
чтоб выложить проект его причесать надо сначала.
Задача простая: SalesQuickQuote запрос InventTable->InventSum->inventDim->InventBatch (везде inner join). в inventBatch есть аттрибут A в зависимости от значения которого будет вычислять поле на на InventSum (и edit метод по разному будет отрабатывать). inventBatch вяжется к inventSum и inventDim, остальные по очереди друг к дружке. аттрибут А, и вычисляемые поля отображаются на гриде. Исполняемый запрос с группировка имеет все необходимые данные чтобы вычислить поля. (это я к вариантам вида A::find(B::find(c::find... - смерть SQL серверу особенно в дисплей методе источника данных) Так вот не могу добраться к значениям аттрибута А таблицы InventBatch из display и edit методов inventSum. (надеюсь как то понятней стало)
__________________
--- SHiSHok |
|
30.03.2009, 18:22 | #11 |
NavAx
|
давно это было... тогда делал что то типа такого:
X++: display <-> <>(InventSum _cursor) { InventDim _InventDim = _cursor.joinChild(); InventBatch _InventBatch = _InventDim .joinChild(); return _InventBatch.<->; } |
|
|
За это сообщение автора поблагодарили: SHiSHok (2). |
31.03.2009, 10:54 | #12 |
Участник
|
Спасибо raz, то что надо.
__________________
--- SHiSHok |
|
17.07.2014, 12:42 | #13 |
Участник
|
Цитата:
X++: display str 50 usInfoName() { SysDataBaseLog2 _sysDataBaseLog2; UserInfo _userInfo = _sysDataBaseLog2.joinChild(); return _userinfo.name; } |
|
17.07.2014, 12:55 | #14 |
NavAx
|
1. Почему не:
X++: display str 50 usInfoName(SysDataBaseLog _sysDataBaseLog2) { UserInfo _userInfo = _sysDataBaseLog2.joinChild(); return _userinfo.name; } |
|
17.07.2014, 13:33 | #15 |
Участник
|
стандартный Link Type - Delayed, менял на Inner Join - никакой разницы
|
|
17.07.2014, 13:43 | #16 |
Участник
|
Сделайте что-нибудь с _sysDataBaseLog2, а то он у вас пустой. Товарищ raz вам как бы уже намекнул в коде.
__________________
// no comments |
|
17.07.2014, 13:50 | #17 |
Участник
|
Delayed - это как раз не соединение. При такой связи для каждой строки основной таблицы будет выполнен отдельный запрос к подчиненной. В одном гриде, к примеру, вы такую связку не отобразите. Метод joinChild же используется для того чтобы определить соответствующую подчиненную строку внутри одного запроса.
И raz вас правильно поправил. Не понятно для какого курсора вы пытаетесь найти дочернюю запись. |
|
|
За это сообщение автора поблагодарили: userax2009 (1). |
Теги |
datametod, datasource, form, query, программно |
|
|