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:45   #5  
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, 16:54   #6  
npokypatop is offline
npokypatop
Злыдни
Сотрудники компании It Box
Злыдни
 
60 / 14 (1) ++
Регистрация: 28.09.2005
Адрес: Нюрнберг
А зачем AutoQuery убивать? тогда придется ручками датасорс создавать. Прописать так связь с InventDim получится. А с Reqpo - нет, потому что при создании связи addLink-ом система ругается на ParentFieldId...
__________________
Все может быть и быть все может, все может быть или не быть,
но быть того никак не может, чего совсем не может быть.
Старый 23.08.2007, 16:56   #7  
npokypatop is offline
npokypatop
Злыдни
Сотрудники компании It Box
Злыдни
 
60 / 14 (1) ++
Регистрация: 28.09.2005
Адрес: Нюрнберг
А, сообразила... ща попробую
__________________
Все может быть и быть все может, все может быть или не быть,
но быть того никак не может, чего совсем не может быть.
Старый 23.08.2007, 17:18   #8  
npokypatop is offline
npokypatop
Злыдни
Сотрудники компании It Box
Злыдни
 
60 / 14 (1) ++
Регистрация: 28.09.2005
Адрес: Нюрнберг
Никак (( воспользуюсь дедовским способом, жаль.
__________________
Все может быть и быть все может, все может быть или не быть,
но быть того никак не может, чего совсем не может быть.
Старый 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, 10:01   #10  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
У Вас DS вна форме связаны по inner join. Для того, чтобы отображалась только одна строка, измените тип связи на ExistsJoin.
__________________
Андрей.
Старый 24.08.2007, 10:07   #11  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Цитата:
Сообщение от npokypatop Посмотреть сообщение
И еще: можно как-то на форме для источников данных сделать альтернативное связывание - либо связанные поля совпадают, либо поле в главной таблице вообще не заполнено?
А это уже явный OuterJoin.
__________________
Андрей.
Старый 24.08.2007, 11:00   #12  
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   #13  
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шным.
__________________
Все может быть и быть все может, все может быть или не быть,
но быть того никак не может, чего совсем не может быть.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как собрать запрос? 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, время: 09:37.