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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.11.2014, 13:09   #6  
Music is offline
Music
Участник
 
33 / 10 (1) +
Регистрация: 01.07.2014
Ребята, я совершил ошибку, сократив свой вопрос и из-за этого тема не раскрылась и стала не совсем понятной.
Попытаюсь исправиться и подробно описать проблемку. На самом деле это задачка из учебного курса по X++

Итак, есть три таблицы:

VetSpeciesTable - таблица типа животных (справочник: SpeciesID и Name).
VetBreedTable - таблица пород (справочник: SpeciesID, BreedID и Name).
VetCustPetTable - основная таблица (CustAccount, SpeciesID, BreedID).

Есть запрос в котором проиллюстрированы все типы связей по этим таблицам. В запросе мы подтягиваем поля Name из таблиц VetSpeciesTable и VetBreedTable по соответствующим ID из таблицы VetCustPetTable:
X++:
{
    AAL_VetCustPetTable     CustPetTable;
    AAL_VetBreedTable       BreedTable;
    AAL_VetSpeciesTable     SpeciesTable;

    while select CustPetTable order CustAccount
        join SpeciesTable
            where CustPetTable.SpeciesId == SpeciesTable.SpeciesId
        join BreedTable
            where (CustPetTable.SpeciesId == BreedTable.SpeciesId)
                &&(CustPetTable.BreedId == BreedTable.BreedId)
    {
        info(CustPetTable.CustAccount + ' - ' + int2str(CustPetTable.SpeciesId) + ' - ' + SpeciesTable.Name + ' - ' + int2str(CustPetTable.BreedId) + ' - ' + BreedTable.Name);
        countTable++;
    }
}
Так вот, вопрос в том как реализовать этот запрос через QUERY ? И загвоздка именно в моменте двойной связи на таблице VetBreedTable.
Мой вариант выдает размножение записей:

X++:
 { 
    Query                      query;
    QueryRun                queryRun;

    QueryBuildDataSource    dsCust, dsSpecies, dsBreed;
    QueryBuildRange            qbr;

    VetCustPetTable     CustPetTable;
    VetSpeciesTable     SpeciesTable;
    VetBreedTable        BreedTable;

    query = new Query();

    dsCust = query.addDataSource(tableNum(VetCustPetTable));
    dsSpecies = dsCust.addDataSource(tableNum(VetSpeciesTable));
    dsSpecies.joinMode(JoinMode::OuterJoin);
    dsSpecies.addLink(FieldNum(VetCustPetTable, SpeciesId), fieldNum(VetSpeciesTable, SpeciesId));

    dsBreed = dsCust.addDataSource(tableNum(VetBreedTable));
    dsBreed.joinMode(JoinMode::InnerJoin);
    dsBreed.addLink(fieldNum(VetCustPetTable, SpeciesId), fieldNum(VetBreedTable, SpeciesId));
    dsBreed.addLink(fieldNum(VetCustPetTable, BreedId), fieldNum(VetBreedTable, BreedId));

    queryRun = new QueryRun(query);

    while (queryRun.next())
    {
        CustPetTable = queryRun.get(TableNum(VetCustPetTable));
        SpeciesTable = queryRun.get(TableNum(VetSpeciesTable));
        BreedTable   = queryRun.get(TableNum(VetBreedTable));

        info(CustPetTable.CustAccount + ' - ' + int2str(CustPetTable.SpeciesId) + ' - ' + SpeciesTable.Name + ' - ' + int2str(CustPetTable.BreedId) + ' - ' + BreedTable.Name);
        countTable++;
    }
}
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: Microsoft Dynamics AX general performance analysis scripts page 5 Blog bot DAX Blogs 0 01.09.2014 14:11
emeadaxsupport: Where to find hotfixes for Microsoft Dynamics AX 2009 & 2012 Blog bot DAX Blogs 1 09.11.2012 15:54
jinx: Dynamics AX – Query-Ranges und Filtereinstellungen des Benutzers Blog bot DAX auf Deutsch 0 04.02.2010 00:05
Расширенные возможности Query - арифметические операции в условие Where. Lemming DAX: Программирование 10 07.02.2008 14:38

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

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

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