На самом деле, это не совсем глюк.
Точнее глючит не ядро, а вы
Продемонстрировать это очень просто. Как уже видно, RLS не выдает нормальных сообщений об ошибках - она просто падает.
Но эти сообщения можно посмотреть в коде.
Выполните следующий Job:
X++:
static void Job_RLS_No_Bug(Args _args)
{
#define.ItemGroupId("????-????")
#define.ItemId("140")
Query q = new Query();
QueryBuildDataSource qbds = q.addDataSource(tableNum(InventTable), "InventTable");
QueryRun queryRun;
str range = strFmt('(((InventTable.ItemId == "%1") || (InventTable.ItemGroupId == "%2")))', #ItemId, #ItemGroupId);
InventTable inventTable;
;
qbds.addRange(fieldNum(InventTable, RecId)).value(range);
info(qbds.name());
info(qbds.toString());
queryRun = new QueryRun(q);
while (queryRun.next())
{
inventTable = queryRun.get(tableNum(inventTable));
info(inventTable.ItemId);
}
}
И, для сравнения, выполните второй job:
X++:
static void Job_RLS_Bug(Args _args)
{
#define.ItemGroupId("????-????")
#define.ItemId("140")
Query q = new Query();
QueryBuildDataSource qbds = q.addDataSource(tableNum(InventTable));
QueryRun queryRun;
str range = strFmt('(((InventTable.ItemId == "%1") || (InventTable.ItemGroupId == "%2")))', #ItemId, #ItemGroupId);
InventTable inventTable;
;
qbds.addRange(fieldNum(InventTable, RecId)).value(range);
info(qbds.name());
info(qbds.toString());
queryRun = new QueryRun(q);
while (queryRun.next())
{
inventTable = queryRun.get(tableNum(inventTable));
info(inventTable.ItemId);
}
}
Видим, что во втором случае выполнение приводит к ошибке времени выполнения, так как фильтр накладывается, как будно источник называется InventTable, хотя на самом деле присвоилось значение InventTable_1.
Так вот, собственно, о чем я.
Аксапта работает точно так же. Только вместо ошибки падает

(это, согласен, нехорошо).
Но если передать ей правильную строку, правильно указав название источника, то все должно отработать правильно.
X++:
'(((InventTable_1.ItemId == "%1") || (InventTable_1.ItemGroupId == "%2")))'
У меня отработало.
P.S. Думаю понятно, но на всякий случай уточню, что в макросы надо подставить свои значения (существующие в базе)