В общем мне пришлось что то подобно делать и обобщив все сказанное сделал так чтобы можно было вызывать sfrfmt с неизвестными количеством параметров. Получилось примерно следующее:
X++:
static void Job7(Args _args)
{
str textparm = "strfmt('%1 + %2 - 3', '5','6')";
str pseudoFunc;
anytype result ;
;
pseudoFunc = evalBuf(textparm);
result = evalBuf(pseudoFunc);
}
То есть используем strfmt как текст и сами можем добавить сколько угодно параметров (ну то есть почти сколько угодно, как раньше выяснилось не больше 48

) в приходится дважды пользоваться функцией evalBuf