|
![]() |
#1 |
MCTS
|
X++: global::findOrCreateRange_W(qbds,fieldNum(Table1, Field2), "Глав*"); global::findOrCreateRange_W(qbds,fieldNum(Table1, Field3), "Д_*"); А вот запрос: X++: select InventDim where InventDim.InventLocationId LIKE 'Склад1' && InventDim.InventLocationId LIKE 'Склад2' И у меня есть подозрение, что на DataAreaId не выйдет наложить фильтр. Записи уже фильтрованы по текущей компании. Тогдв два выхода, переносить таблицу в холдинг, что не есть хорошо. Или использовать changecompany, заполняя временную таблицу и вытягивая данные уже по нее. Последний раз редактировалось Eldar9x; 17.03.2009 в 08:52. |
|
![]() |
#2 |
Участник
|
TO Eldar9x
Range как раз и накладывается на любое поле в таблице, чтобы воспользоваться механизмом фильтров через StrFmt. X++: // Add our range queryBuildRange = dsInventTable.addRange(fieldNum(InventTable, DataAreaId)); queryBuildRange.value(strFmt('((%1.%2 == %3) || ((%1.%2 == %4) && (%1.%5 == %6)))', query.dataSourceTable(tableNum(InventTable)).name(), // InventTable %1 fieldStr(InventTable, ItemType), // ItemType %2 any2int(ItemType::Service), // %3 any2int(ItemType::Item), // %4 fieldStr(InventTable, ItemId), // ItemId %5 fieldStr(InventItemBarCode, ItemId))); // %6 Но это отдельная тема. TO Lucky13 и kashperuk Спасибо ![]() Жаль только что не получится так написать... |
|
![]() |
#3 |
MCTS
|
Цитата:
Здесь ключевые слова "расширенный фильтр" и "like". Расширенный фильтр like не поддерживает, по крайне мере в 3.0 точно.
Есть таблица Table1: Field1 Field2 Field3 Field4 100 Глав_1 П_1 F_1 100 Пред_1 Д_1 S_2 100 Пред П_3 S_3 Код: X++: Query q; QueryBuildDataSource qbds; QueryBuildRange qbr; QueryRun qr; Table1 table1; ; q = new Query(); qbds = q.addDataSource(TableNum(Table1)); qbr = qbds.addRange(fieldNum(Table1, Field2)); qbr.value(strFmt('( (%1.%2 like "Глав_*") || ((%1.%3 like "П_*") && (%1.%4 like "S_*")))', q.dataSourceTable(tableNum(Table1)).name(), fieldStr(Table1, Field2), fieldStr(Table1, Field3), fieldStr(Table1, Field4))); info(q.dataSourceNo(1).toString()); qr = new QueryRun(q); while (qr.next()) { table1 = qr.get(TableNum(Table1)); info(table1.Field2); } Цитата:
Сообщение (12:27:52)
SELECT * FROM Table1 WHERE ((( (Table1_1.Field2 like "Глав_*") || ((Table1_1.Field3 like "П_*") && (Table1_1.Field4 like "S_*"))))) Глав_1 Пред Единственное отличие - это поставлены кавычки на каждое значение. Но без них выдает "Ошбку расширенного диапазона." Последний раз редактировалось Eldar9x; 17.03.2009 в 10:43. |
|
![]() |
#4 |
Участник
|
Скопировала ваш джоб, тоже не заработал - Ошибка: ожидается правая скобка...
Различные варианты кавычек и скобок тоже не помогли ![]() У меня 3.0 SP3 |
|
![]() |
#5 |
MCTS
|
значит и на самом деле в сервиспаках решение. У меня sp5 fp2.
|
|
![]() |
#6 |
Участник
|
У меня джоб, приведенный Eldar9x выдает ошибку расширенного диапазона
Axapta 3.0 SP3 |
|
![]() |
#7 |
Участник
|
Это утверждение справедливо для версий < 5.0
Цитата:
Using wildcards and comma-separated range values
Again, the previous example here was using standard syntax, not the special syntax using expressions. It's not possible to modify the above examples to work with wildcards. The above statement applies to AX versions < 5.0 AX 5.0 introduced solution to wildcards - while you still cannot directly use wildcards in ranges, now it supports the 'LIKE' keyword. (AccountNum LIKE "*AA*" || Name LIKE "*AA*") |
|
|
За это сообщение автора поблагодарили: Kabardian (1). |