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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.04.2008, 13:00   #14  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Спасибо отдельное землякам за тестовый пример, который и мне и автору видимо было лень писать.

Я тут с ним поигрался чуток:
X++:
static void Job(Args _args)
{
    InventTable             inventTable;
    QueryRun                qr;
    Query                   query = new Query();
    QueryBuildDataSource    qbds;
    QueryBuildRange         qbr,qbr1,qbr2;
    str                     rangeValue;
    ;

    qbds = query.addDataSource(tablenum(InventTable));

    qbr  = qbds.addRange(fieldnum(InventTable, RecId));

    qbr1  = qbds.addRange(fieldnum(InventTable, ItemId));
    qbr2  = qbds.addRange(fieldnum(InventTable, PurchModel));


    rangeValue = strFmt('%1.ItemId=="%2" && %1.PurchModel==%3', qbds.name(), "01810_К093",  NoYes::No);
    qbr.value(rangeValue);
    info(qbds.toString());
    rangeValue = strFmt('%1.ItemId=="%2" && (%1.PurchModel==%3)', qbds.name(), "01810_К093",  NoYes::No);
    qbr.value(rangeValue);
    info(qbds.toString());
    rangeValue = strFmt('(%1.ItemId=="%2") && (%1.PurchModel==%3)', qbds.name(), "01810_К093",  NoYes::No);
    qbr.value(rangeValue);
    info(qbds.toString());
    rangeValue = strFmt('(%1.ItemId=="%2" && %1.PurchModel==%3)', qbds.name(), "01810_К093",  NoYes::No);
    qbr.value(rangeValue);
    info(qbds.toString());
    rangeValue = strFmt('((%1.ItemId=="%2") && (%1.PurchModel==%3))', qbds.name(), "01810_К093",  NoYes::No);
    qbr.value(rangeValue);
    info(qbds.toString());

    qbr.value("");
    qbr1.value(queryValue("01810_К093"));
    qbr2.value(queryValue(NoYes::No));
    info(qbds.toString());

    qr = new QueryRun(query);

    return;

    while (qr.next())
    {
        inventTable = qr.get(tablenum(InventTable));

        info(strFmt("%1 - %2", inventTable.ItemId, inventTable.PurchModel));
    }
}
Рекомендую и вам попробовать позапускать разные варианты.

Выводы, которые можно сразу заметить:
- В случае создания такого "сложного" рэнджа нужно всегда начинать его с открывающейся скобки, иначе получите
X++:
SELECT * FROM InventTable WHERE (((RecId = 0)))
, чем видимо и объяснялось то, что у автора "Так работало". На самом деле оно работало совсем не так.
- парсер действительно не парсит в таких рэнджах значения енумов, а только в обычных, "человеческих" рэнджах... А в этой ситуации всё-таки нужно указывать реальное цифровое значение енума.
- ситуация с тем, что внутренее название датасорсов для такого случая отличается, действительно имеет место в таких случаях:
X++:
SELECT * FROM InventTable WHERE (((InventTable_1.ItemId=="01810_К093")....
, что, правда, не мешает этому запросу нормально обрабатываться. (если остальное всё ОК)

PS запускал на 3.0 сп3 кр3
PS1 и, кстати, на этой версии нету функции "enum2int"

update: PS2 под "позапускать", я подразумеваю позапускать различные варианты указанных рэнджей в джобе на исполнение запроса (без return)... при этом включить трейс и отслеживать получающийся SQL...
__________________
Zhirenkov Vitaly

Последний раз редактировалось ZVV; 14.04.2008 в 13:07.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Не получается сформировать lookup по запросу с outer join dawl DAX: Программирование 6 05.12.2008 15:12
Переход по полям грида с помощью стрелочек на клавиатуре SorNick DAX: Программирование 16 07.10.2008 12:39
Не могу сформировать строку strFmt CasperSKY DAX: Программирование 9 17.04.2008 10:52
Макрос в strfmt() blokva DAX: Программирование 2 24.08.2007 10:31
функция аналогичная strfmt ivas DAX: Программирование 10 27.12.2005 13:20

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

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

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