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:56   #7  
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   #8  
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   #9  
breakpoint is offline
breakpoint
Участник
 
77 / 10 (1) +
Регистрация: 05.03.2008
имеется ввиду то что должны МЫ и НАМ, да и неважно как называется на самом деле...
Старый 09.10.2008, 20:11   #10  
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   #11  
sukhanchik is offline
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   #12  
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, 15:01   #13  
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, время: 17:04.