![]() |
#14 |
MCITP
|
![]()
Спасибо отдельное землякам за тестовый пример, который и мне и автору видимо было лень писать.
![]() Я тут с ним поигрался чуток: 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. |
|