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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.07.2018, 08:15   #1  
opsvlad is offline
opsvlad
Участник
 
8 / 10 (1) +
Регистрация: 05.07.2018
Проблема с Query
Здравствуйте, можете привести нормальный пример с Query через этот job
X++:
static void Job674(Args _args)
{
    // EmplTable.PayEmploymentDate_RU - дата приема
    // EmplTable.PayResignedDate_RU - дата увольнения
    EmplTable emplTable;
    DirPartyTable dirPartyTable;

    int       i;
    date      needDate = 03\01\2017;
    ;


    while select EmplId, MainOrganizationId_UA, PayEmploymentDate_RU
           from  emplTable
           where   EmplTable.LaborRelation_UA == LaborRelation_UA::Employee
                   &&
                   (
                        (EmplTable.PayEmploymentDate_RU <= needDate) &&
                        (EmplTable.PayResignedDate_RU == datenull()|| EmplTable.PayResignedDate_RU >= needDate)
                   )
            join Name from dirPartyTable
            where dirPartyTable.PartyId == EmplTable.PartyId
   {

       info(strfmt('%1 , %2 %3 %4',EmplTable.EmplId, DirPartyTable.Name, empltable.MainOrganizationId_UA,EmplTable.PayEmploymentDate_RU));

       i++;
       if(i>10)
        {
            break;
        }


    }
}
Старый 27.07.2018, 08:57   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Expressions in query ranges
Старый 31.07.2018, 19:33   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,651 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Общее правило объединение критериев отбора в директиве Where при формировании Query

1. Критерии отбора по разным полям объединяются через "И"
2. Критерии отбора по одному и тому же полю объединяются через "ИЛИ"

Дополнительные "фичи" использования метода sysQuery::range(From, To)

- Если вторая граница не указана (указано "пустое" значение), то вместо диапазона будет сформировано соответственно ">=" или "<=" в зависимости от того, какая граница "пустая"

Поэтому в данном конкретном случае все достаточно просто

X++:
static void MVB_Test(Args _args)
{
    Query       query;
    QueryRun    queryRun;
    
    QueryBuildDataSource    qbdsEmplTable;
    QueryBuildDataSource    qbdsDirPartyTable;
    
    QueryBuildRange         qbr;

    // EmplTable.PayEmploymentDate_RU - дата приема
    // EmplTable.PayResignedDate_RU - дата увольнения
    
    EmplTable       emplTable;
    DirPartyTable   dirPartyTable;

    int       i;
    date      needDate = 03\01\2017;
    ;
    
    query = new query();
    
    //---------------- EmplTable
    qbdsEmplTable = query.addDataSource(tablenum(EmplTable));
    
    qbr = qbdsEmplTable.addRange(fieldnum(EmplTable, LaborRelation_UA));
    qbr.value(sysQuery::value(LaborRelation_UA::Employee));

    qbr = qbdsEmplTable.addRange(fieldnum(EmplTable, PayEmploymentDate_RU));
    qbr.value(sysQuery::range(dateNull(), needDate));

    // Несколько Range, созданные по одному и тому же полю, будут объеденинены по "ИЛИ"
    qbr = qbdsEmplTable.addRange(fieldnum(EmplTable, PayResignedDate_RU));
    qbr.value(sysQuery::value(dateNull()));

    qbr = qbdsEmplTable.addRange(fieldnum(EmplTable, PayResignedDate_RU ));
    qbr.value(sysQuery::range(needDate, datenull()));
    
    //------------------ DirPartyTable

    qbdsDirPartyTable = qbdsEmplTable.addDataSource(tablenum(DirPartyTable));
    // Используем настроенную связь "по умолчанию"
    qbdsDirPartyTable.relation(true);
    
    // Если настроенная таким образом связь не устраивает, то настривают связь вручную
    // Как правило, здесь нужна только addLink(). Остальные команды в данном случае - перестраховка
    /*
    qbdsDirPartyTable.relations        (false);
    qbdsDirPartyTable.joinMode         (JoinMode::InnerJoin);
    qbdsDirPartyTable.fetchMode        (QueryFetchMode::One2One);
    qbdsDirPartyTable.clearLinks       ();
    qbdsDirPartyTable.addLink(fieldnum(EmplTable, PartyId), fieldnum(DirPartyTable, PartyId))
    */

    // Смотрим псевдокод получившегося запроса
    info(qbdsEmplTable.toString());
    

    // Выполнение запроса
    queryRun = new QueryRun(query);
    while (queryRun.next())
    {
        emplTable       = queryRun.get(tablenum(EmplTable));
        dirPartyTable   = queryRun.get(tablenum(DirPartyTable));

        info(strfmt('%1 , %2 %3 %4',EmplTable.EmplId, DirPartyTable.Name, empltable.MainOrganizationId_UA,EmplTable.PayEmploymentDate_RU));

        i++;
        if (i>10)
        {
            break;
        }
    }
    
    info('end');
}
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...

Последний раз редактировалось Владимир Максимов; 31.07.2018 в 19:39.
За это сообщение автора поблагодарили: S.Kuskov (5).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ax 2012. Копирование Range из Query Sada DAX: Программирование 2 22.08.2013 10:10
fatihdemirci: CrossCopmany ile query yazmak Blog bot DAX Blogs 0 17.08.2010 16:05
Dynamics AX: QueryRun and Query Objects - Binding operation failed to allocate buffer space Blog bot DAX Blogs 0 03.04.2009 08:05
Проблема с Query в AOT radya DAX: Программирование 7 17.10.2007 17:28
проблема с query EreminIgor DAX: Программирование 7 11.10.2004 16:57
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:19.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.