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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.06.2006, 17:05   #1  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Два датасоурса и грид
Помогите разобраться.
Есть форма. На форме два источника данных(две таблицы). Есть грид, который отображает данные из этих двух таблиц. Необходимо разместить на гриде столбец, данные которого рассчитываюся на основании данных из этих двух таблиц. Иными словами, необходимо написать дисплей-метод.

Но как одновременно передать в дисплей-метод текущие данные из первой и второй таблицы?
Вот в этом, собственно, и вопрос.
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 06.06.2006, 17:13   #2  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Вот так:
PHP код:
display method(Table1 ds1)
{
    
Table2 ds2;

    
select ds2 
    where ds2
.Field == ds1.Field;
//что то вычисляем на основе ds1 и ds2     

  
return ..

Правда недостатком является то, что запрос ко второму датасорсу будет выполняться для каждой строки грида
Старый 06.06.2006, 17:17   #3  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Совершенно верно
Это и есть то, чего не хотелось бы делать.

Данные-то уже есть. Не хотелось бы их перерассчитывать.
Интересует вопрос: неужели нет возможности находясь в одном датасоурсе, получить текущие данные второго?
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 06.06.2006, 17:34   #4  
Gad is offline
Gad
Участник
 
136 / 18 (1) ++
Регистрация: 21.05.2003
Адрес: Москва
Не могу сказать с уверенностью, потому что не нашел описания работы этих методов, но по-моему можно попробовать joinChild или joinParent методы, если датасорсы в форме связаны. В качестве примера можно привести метод settlePaymCur() DataSource-a VentTransOpen формы VendOpenTrans

Последний раз редактировалось Gad; 06.06.2006 в 17:37.
За это сообщение автора поблагодарили:  (1).
Старый 06.06.2006, 17:40   #5  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
ок
таблицы действительно связаны

сейчас начну рыть в этом направлении
Может ещё идеи есть?
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 06.06.2006, 17:41   #6  
Gad is offline
Gad
Участник
 
136 / 18 (1) ++
Регистрация: 21.05.2003
Адрес: Москва
Посмотрите пример (см. мой предыдущий пост), насколько я понял там достаточно стандартный способ решения вашей проблемы
За это сообщение автора поблагодарили: Russland (1).
Старый 07.06.2006, 11:13   #7  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
joinChild работает прекрасно.
Тот пример, что я описывал был упрощённым.

На самом деле у меня связка из 3х таблиц:
InventTable-InventSum-InventDim и мне из InventTable необходимо было достучаться до InventDim

конструкция
_inventDim.data(_inventTable.joinChild().joinChild());
работает.

В качестве лирического отступления возникает вопрос: joinChild() не имеет параметров, и если у родительской таблицы более одной дочерней таблицы не совсем понятно как в таком случае доступаться до этих "детей".

Респект Gad за посказку
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 07.06.2006, 11:34   #8  
Gad is offline
Gad
Участник
 
136 / 18 (1) ++
Регистрация: 21.05.2003
Адрес: Москва
Цитата:
Сообщение от Russland
В качестве лирического отступления возникает вопрос: joinChild() не имеет параметров, и если у родительской таблицы более одной дочерней таблицы не совсем понятно как в таком случае доступаться до этих "детей".
я думаю в таком случае нужно отталкиваться от необходимой дочерней таблицы и использовать joinParent()
Старый 07.06.2006, 11:49   #9  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Таки да...
пройтись от дочери к родителю с помощью уже joinParent()
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 03.08.2011, 13:14   #10  
E S V is offline
E S V
Участник
 
5 / 12 (1) ++
Регистрация: 24.01.2005
Адрес: Санкт-Петербург
Замечу также, что joinChild следует вызывать на стороне клиента.
После передачи родительского курсора на сторону сервера метод joinChild возвращает null.
Старый 15.09.2011, 00:44   #11  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
еще помогает такая функция:
X++:
if (salesLine.isFormDataSource())
{
    salesLineDs = salesLine.dataSource();
    salesTableDs = Global::formGetParentDatasource(salesLineDs);
    salesTable = salesTableDs.cursor();
}
а то joinParent у меня в 4.0 не сработал
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!
Старый 07.11.2011, 13:00   #12  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от plumbum Посмотреть сообщение
еще помогает такая функция:
X++:
if (salesLine.isFormDataSource())
{
    salesLineDs = salesLine.dataSource();
    salesTableDs = Global::formGetParentDatasource(salesLineDs);
    salesTable = salesTableDs.cursor();
}
Акуратнее! Ds.cursor() вернёт ссылку на активную в данный момент запись. В случае же с display-методом необходимо получить ссылку на запись соответствующую обрабатываемой (обрабатываемая запись - это та самая запись, которая передаётся в качестве входного параметра, в случае если display-метод находится на датасурсе). Т.е. если display-метод выведен на грид, то он вызовется столько раз сколько строк поместится на экране. А активной, на протяжении всего этого времени, будет оставаться одна и таже запись.

Цитата:
Сообщение от plumbum Посмотреть сообщение
а то joinParent у меня в 4.0 не сработал
У меня тоже не работает. На AX2009 в display-методе на DataSource у входного параметра не получается определить joinParent. Интересно что JoinChild при тех же условиях работает.
В остальных НЕ display методах joinParent прекрасно работает.

Получается, что входной параметр, передающийся в display-метод, не содержит в себе некоторой нужной информации. Попробовал перенести display-метод на уровень таблицы, но this.joinParent() также ничего не вернул (т.е. поведение такое же как и в методе датасурса). Более того обнаружил также что this.isFormDataSource() внутри display-метода не признаётся что имеет отношение к источнику данных формы. Т.е. получется что display-метод вызывается в каком-то искуственном, урезанном контексте.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Форма. 2 датасоурса с одинаковым датасетом. HorrR DAX: Программирование 5 23.01.2009 09:49
Два одинаковых поля два разных события miklenew DAX: Программирование 3 29.11.2006 13:50
modified два раза два раза MironovI DAX: Программирование 5 14.07.2006 16:29
Как подключить датасоурсы на два вторичных ключа одинакового типа на форме Damn DAX: Программирование 6 25.09.2003 10:26
Добавление столбца в грид на PurchQuickQuote Андре DAX: Программирование 1 15.04.2002 10:52

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

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

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