В общем, компилятор обижается, когда параметром макроса выступает переменная конкретного "плохого" типа (контейнер или безразмерная строка). Если же переменную заменить на вызов функции, пусть даже и возвращающей "плохой" тип, то всё получается:
X++:
static void test_SQL_Imitation_3(Args _args)
{
#macrolib.SQL_Imitation
InventLocation inventLocation;
container c = ['СКЛАД1','СКЛАД2','СКЛАДN']; // не работает
container c() // работает
{
return ['СКЛАД1','СКЛАД2','СКЛАДN'];
}
;
while select inventLocation
//where #sqlIn( inventLocation.InventLocationId, c ) // не работает
where #sqlIn( inventLocation.InventLocationId, c() ) // работает
{
info (inventLocation.InventLocationId);
}
}