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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.10.2008, 15:20   #1  
breakpoint is offline
breakpoint
Участник
 
77 / 10 (1) +
Регистрация: 05.03.2008
Связь одинаковых DS
Всем привет!
Туго соображаю чтото, не могу понять как связать два датасорса на основе CustTrans на форме, чтобы в результате выбрались записи которые есть и в 1м и 2м ds. Условия фильтрация для каждого ds свои... Подскажите пож-та, никак не доходит до меня
Старый 09.10.2008, 15:29   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Предполагаю, что по RecId (queryBuildDataSource.addLink())
Старый 09.10.2008, 15:38   #3  
breakpoint is offline
breakpoint
Участник
 
77 / 10 (1) +
Регистрация: 05.03.2008
ну а как это написать? таблица то одна - CustTrans
qbdCustTransCredit.addLink(fieldnum(CustTrans, RecId), fieldnum(CustTrans, RecId)); так чтоли??
Старый 09.10.2008, 15:42   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
В какой-нибудь Range второго датасорса написать: (RecID==ПервыйДС.RecID)

Как здесь: Связи и Query
Старый 09.10.2008, 15:47   #5  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
А sql запрос составить сможете?
Чтоб было понятнее чёго вы хотите.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 09.10.2008, 15:56   #6  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от miklenew Посмотреть сообщение
А sql запрос составить сможете?
Чтоб было понятнее чёго вы хотите.
breakpoint, кстати, да, полезно было бы. А то Иван на линк столкнул, я повёлся, а вам, похоже, объединение нужно? типа UNION в SQL?

P.S. Хотя нет, наверное, обычный INNER JOIN.... Это я уже на реплику miklenew повелся - типа "раз он про скуль переспросил, значит не всё так просто!"
Старый 09.10.2008, 16:11   #7  
breakpoint is offline
breakpoint
Участник
 
77 / 10 (1) +
Регистрация: 05.03.2008
Выкладываю форму, нужно чтобы выбирались только те записи которые есть в обеих таблицах
Вложения
Тип файла: xpo CustNeedsSettle.xpo (9.8 Кб, 377 просмотров)
Старый 09.10.2008, 16:14   #8  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Вам нужно использоваться третий параметр метода addLink

_parentDataSourceName.

Так как у вас 2 одинаковых датасорса, у них должны быть разные имена.
Соответственно, на втором датасорсе в init добавляете link, и там указываете название первого ds
Старый 09.10.2008, 16:42   #9  
breakpoint is offline
breakpoint
Участник
 
77 / 10 (1) +
Регистрация: 05.03.2008
у меня нет в link 3го параметра...
ax 3 sp3
Старый 09.10.2008, 16:51   #10  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от breakpoint Посмотреть сообщение
у меня нет в link 3го параметра...
ax 3 sp3
У меня тоже. Поэтому: "ТОВАРИСЧ! ДЕЛАЙ ЧЕРЕЗ RANGE!"
Цитата:
Сообщение от Gustav Посмотреть сообщение
В какой-нибудь Range второго датасорса написать: (RecID==ПервыйДС.RecID)

Как здесь: Связи и Query
Как-то так:
X++:
qbr = qbdCustTransCredit.addRange(fieldnum(CustTrans, RecId))
qbr.value('(RecId==CustTransDebit.RecId)');

// и чтобы юзера вдруг не разрушили, но видели
qbr.status(RangeStatus::Locked);
Где CustTransDebit - имя первого датасорса.
Старый 09.10.2008, 16:56   #11  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ааа.
Тогда вам сюда:
http://www.axaptapedia.com/Expressions_in_query_ranges
Секция "WHERE clauses referencing fields from multiple tables"
Старый 09.10.2008, 17:20   #12  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Глянул в проект. По-моему всё-таки попахивает UNION, так как:
X++:
qbdCustTransDebit.addRange(fieldnum(CustTrans, AmountCur)).value('>0');

qbdCustTransCredit.addRange(fieldnum(CustTrans, AmountCur)).value('<0');
и RecId, получается, будут разные... Так что, видимо, совет про RecId не очень катит и надо смотреть в сторону LedgerTrans. Вообще, не очень понятен смысл манипуляций. Как можно говорить про Дебит и Кредит, если LedgerTrans нигде не упоминается?
Старый 09.10.2008, 18:04   #13  
breakpoint is offline
breakpoint
Участник
 
77 / 10 (1) +
Регистрация: 05.03.2008
имеется ввиду то что должны МЫ и НАМ, да и неважно как называется на самом деле...
Старый 09.10.2008, 20:11   #14  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Если как Gustav предложил не получиться, можно
1) Добавить на форму третий датасорс.
2) Снять результат с первого и воторого датасорса закинуть во временную таблицу.
В качестве временной таблицы использовать табл переменную CustTrans только перед этим поставить setTmp()
3) Поставить кодом CustTrans.setTmp();
CustTrans.setTmpData(локал перем);
Только редактировать в этой форме ничего не сможем и если кнопки будете на этой форме делать не расчитывайте на recId или см здесь Временная таблица.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 10.10.2008, 08:34   #15  
online
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от miklenew Посмотреть сообщение
2) Снять результат с первого и воторого датасорса закинуть во временную таблицу.
Только не надо забывать - что "закидывание" CustTrans-а во временную табличку конкретно просадит производительность (закидывание будет выполняться долго - например минуты 2-3. Если такое закидывание будет при открытии формы - Вас это устроит?) - причем со временем работы базы - будет все хуже и хуже (записей будет больше).
Вы ж во временную табличку пихаете все записи (а значит их выбираете и вставляете) - а их сколько там? 500 тыс, 1 млн?
А для вывода на экран выбираются только визуально видимые записи+15 вверх+15 вниз записей (точные цифры не помню - может не 15, а 30 - но порядок тот же). Причем - это кол-во не зависит от общего кол-ва записей в таблице.

Так что - лучше в этой задаче не связываться со временными таблицами, а добить выборку из постоянных. Ну или отказаться от реализации задачи в том виде - в котором изначально хотелось.
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 10.10.2008 в 08:39.
Старый 10.10.2008, 09:23   #16  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Вы ж во временную табличку пихаете все записи (а значит их выбираете и вставляете) - а их сколько там? 500 тыс, 1 млн?
А для вывода на экран выбираются только визуально видимые записи+15 вверх+15 вниз записей (точные цифры не помню - может не 15, а 30 - но порядок тот же). Причем - это кол-во не зависит от общего кол-ва записей в таблице.
Брать данные с queryRun. И будут браться отфильтрованные.
X++:
void clicked()
{
    QueryRun queryRun;
    Table1   TableLoc;
;
    super();
    queryRun = Table1_ds.queryRun();
    TableLoc = queryRun.getNo(1);
    info(TableLoc.Field1);
    while (queryRun.next())
    {
        TableLoc = queryRun.getNo(1);
        info(TableLoc.Field1);
    }
}
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 10.10.2008, 09:40   #17  
online
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от miklenew Посмотреть сообщение
Брать данные с queryRun. И будут браться отфильтрованные.
Да, но насколько я понимаю - данные хотя и будут отфильтрованы - но все равно (конечно в зависимости от фильтра) - их будет на порядок больше - чем визуально видно на экране - так?
__________________
Возможно сделать все. Вопрос времени
Старый 10.10.2008, 09:49   #18  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Да, но насколько я понимаю - данные хотя и будут отфильтрованы - но все равно (конечно в зависимости от фильтра) - их будет на порядок больше - чем визуально видно на экране - так?
Не уловил. Почему их будет на экране меньше, чем после снятия QueryRun?
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 10.10.2008, 15:01   #19  
breakpoint is offline
breakpoint
Участник
 
77 / 10 (1) +
Регистрация: 05.03.2008
Красивое решение нашлось при помощи Views и двух строк кода
Всем спасибо!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ax2009 RU4 RHRMOrderTrans_ds.AllowEdit(false) и validationWrite Dimitori DAX: Программирование 2 08.04.2011 11:35
kamalblogs: Creating Edit methods for DS that don’t allow editing in Dynamics ax Blog bot DAX Blogs 8 03.01.2011 10:48
Вопрос по InventJournalTrans_ds.getNext() propeller DAX: Программирование 11 14.02.2009 16:31
использование create() ds sassas DAX: Программирование 5 11.11.2004 15:22
DS по временной таблице странно обновлляется ArturK DAX: Программирование 2 29.07.2004 19:27

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

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

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