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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.08.2007, 15:52   #1  
npokypatop is offline
npokypatop
Злыдни
Сотрудники компании It Box
Злыдни
 
60 / 14 (1) ++
Регистрация: 28.09.2005
Адрес: Нюрнберг
Запрос по трем таблицам
Доброго всем дня, господа.
У меня вот какая дурацкая проблема: есть форма, в которую в качестве источников данных добавлены таблицы ReqPO, InventDim, InventSize (не спрашивайте, зачем третья, так надо ). InventDim связан с ReqPO innerjoin-ом, аналогично связан InventSize с InventDim.
То есть:
ReqPO (InventDimId) InventDim
InventDim (InventSizeId) InventSize
Проблема вот какая - в гриде, в котором, по идее, должны отображаться строки ReqPO, происходит задвоение, затроение (и тд) каждой строки. Причина этого ясна: InventSizeId для разных ItemId могут совпадать (в таблице InventSize). Следовательно, надо как-то связать ReqPO с InventSIze по полю ItemId. А вот теперь вопрос - как их связать так, чтоб это было красиво и грамотно?
Всем заранее спасибо.

PS И еще: можно как-то на форме для источников данных сделать альтернативное связывание - либо связанные поля совпадают, либо поле в главной таблице вообще не заполнено?
__________________
Все может быть и быть все может, все может быть или не быть,
но быть того никак не может, чего совсем не может быть.
Старый 23.08.2007, 16:21   #2  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Вот то что тебе надо http://www.axaptapedia.com/Expressions_in_query_ranges
Старый 23.08.2007, 16:28   #3  
npokypatop is offline
npokypatop
Злыдни
Сотрудники компании It Box
Злыдни
 
60 / 14 (1) ++
Регистрация: 28.09.2005
Адрес: Нюрнберг
Спасибо, но это мне не поможет (( Если это к PS - это первое, что я сделала - попыталась через dataAreaId. Не получилось.
А по поводу главной пробелемы - это никак ее не решает, потому что явной связи ReqPO с InventSize нет, надо их сджойнить...
__________________
Все может быть и быть все может, все может быть или не быть,
но быть того никак не может, чего совсем не может быть.
Старый 23.08.2007, 16:38   #4  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Как идея (не пробовал такого пока)
Отключить для датасорса InventSize AutoQuery=false и в init() этого датасорса написать запрос к InventSize с условием InventSize.InventSizeId == InventDim.InventSizeId and InventSize.ItemId == ReqPo.ItemId
Старый 23.08.2007, 16:54   #5  
npokypatop is offline
npokypatop
Злыдни
Сотрудники компании It Box
Злыдни
 
60 / 14 (1) ++
Регистрация: 28.09.2005
Адрес: Нюрнберг
А зачем AutoQuery убивать? тогда придется ручками датасорс создавать. Прописать так связь с InventDim получится. А с Reqpo - нет, потому что при создании связи addLink-ом система ругается на ParentFieldId...
__________________
Все может быть и быть все может, все может быть или не быть,
но быть того никак не может, чего совсем не может быть.
Старый 23.08.2007, 16:56   #6  
npokypatop is offline
npokypatop
Злыдни
Сотрудники компании It Box
Злыдни
 
60 / 14 (1) ++
Регистрация: 28.09.2005
Адрес: Нюрнберг
А, сообразила... ща попробую
__________________
Все может быть и быть все может, все может быть или не быть,
но быть того никак не может, чего совсем не может быть.
Старый 23.08.2007, 17:18   #7  
npokypatop is offline
npokypatop
Злыдни
Сотрудники компании It Box
Злыдни
 
60 / 14 (1) ++
Регистрация: 28.09.2005
Адрес: Нюрнберг
Никак (( воспользуюсь дедовским способом, жаль.
__________________
Все может быть и быть все может, все может быть или не быть,
но быть того никак не может, чего совсем не может быть.
Старый 23.08.2007, 16:45   #8  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
Как идея (не пробовал такого пока)
Отключить для датасорса InventSize AutoQuery=false и в init() этого датасорса написать запрос к InventSize с условием InventSize.InventSizeId == InventDim.InventSizeId and InventSize.ItemId == ReqPo.ItemId
так именно для этого я и дал ссылку http://www.axaptapedia.com/Expressions_in_query_ranges
Старый 23.08.2007, 18:17   #9  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Извините, возможно сбил вас с верного пути, который указал konopello. Вот код, который работает для таблицы InventTrans. Надо поменять только на вашу ReqPo:
X++:
public void init()
{
    QueryBuildDataSource    inventColorDataSource;
    QueryBuildRange         inventColorItemRange;
    ;

    super();

    inventColorDataSource   = this.query().dataSourceTable(tableNum(InventColor));
    inventColorItemRange    = inventColorDataSource.addRange(fieldNum(InventColor, DataAreaId));
    inventColorItemRange.value(strFmt('((%1.%2 == %3.%4)))',
                                      inventColor_ds.name(),
                                      fieldStr(InventColor, ItemId),
                                      inventTrans_ds.name(),
                                      fieldStr(InventTrans, ItemId)));
}
И AutoQuery = true.

Успехов!
Старый 24.08.2007, 11:00   #10  
npokypatop is offline
npokypatop
Злыдни
Сотрудники компании It Box
Злыдни
 
60 / 14 (1) ++
Регистрация: 28.09.2005
Адрес: Нюрнберг
Цитата:
Сообщение от petr Посмотреть сообщение
Извините, возможно сбил вас с верного пути, который указал konopello. Вот код, который работает для таблицы InventTrans. Надо поменять только на вашу ReqPo:
X++:
public void init()
{
    QueryBuildDataSource    inventColorDataSource;
    QueryBuildRange         inventColorItemRange;
    ;

    super();

    inventColorDataSource   = this.query().dataSourceTable(tableNum(InventColor));
    inventColorItemRange    = inventColorDataSource.addRange(fieldNum(InventColor, DataAreaId));
    inventColorItemRange.value(strFmt('((%1.%2 == %3.%4)))',
                                      inventColor_ds.name(),
                                      fieldStr(InventColor, ItemId),
                                      inventTrans_ds.name(),
                                      fieldStr(InventTrans, ItemId)));
}
И AutoQuery = true.

Успехов!

Спасибо, Петр, оно заработало Оказалось, что дохло оно из-за того, что ReqPO тоже был привязан... к сгруппированному ReqPO (ReqPOGroup). Сильно систему клинило...
__________________
Все может быть и быть все может, все может быть или не быть,
но быть того никак не может, чего совсем не может быть.
Старый 24.08.2007, 11:07   #11  
npokypatop is offline
npokypatop
Злыдни
Сотрудники компании It Box
Злыдни
 
60 / 14 (1) ++
Регистрация: 28.09.2005
Адрес: Нюрнберг
Цитата:
Сообщение от Dron AKA andy Посмотреть сообщение
А это уже явный OuterJoin.
Да, но проблема в том, что использовать existsJoin и outerJoin надо одновременно. То есть PS относился к первой же проблеме - чтоб отображались и те записи из ReqPO, в InventDim которых InventSizeId и не заполнен даже...
И, мне кажется, existsJoin несколько неправильно использовать, строка-то одна в гриде будет, но мне-то нужен не любой InventSize, а именно тот, у которого ItemId совпадает с ReqPOшным.
__________________
Все может быть и быть все может, все может быть или не быть,
но быть того никак не может, чего совсем не может быть.
Старый 24.08.2007, 10:01   #12  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
У Вас DS вна форме связаны по inner join. Для того, чтобы отображалась только одна строка, измените тип связи на ExistsJoin.
__________________
Андрей.
Старый 24.08.2007, 10:07   #13  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Цитата:
Сообщение от npokypatop Посмотреть сообщение
И еще: можно как-то на форме для источников данных сделать альтернативное связывание - либо связанные поля совпадают, либо поле в главной таблице вообще не заполнено?
А это уже явный OuterJoin.
__________________
Андрей.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как собрать запрос? moid DAX: Программирование 11 02.07.2007 12:07
Почему join запрос разбивается на подзапросы!? 3oppo DAX: Программирование 59 28.06.2007 11:52
Запрос по двум таблицам fialka DAX: Программирование 17 15.12.2006 14:36
Не работает запрос на нескольких компаниях Bega DAX: Программирование 3 16.09.2005 10:21
Как выполнить запрос созданный в переменной ddadream DAX: Программирование 12 27.02.2002 14:57

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

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

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