Код
if (<local.cat_argn> < 0)
local.cat_m = 1
local.cat_argn = "<eval(<local.cat_argn> * -1)>"
endif
abs() ? не не слышал.
Алгоритм просто отвратительный. Все что нужно сделать, это, - с конца пройти по стринге в while цикле, c использованием обратного каунтера, значение которого было взято от длинны стринги и отщипывать субстрингом по 3 знака сзади + запоминать последнюю позицию отщипывания. Дальше добавляем спереди точку и приклеиваем новый стринг из 3х знаков и точки спереди возвратной стринги. Мега просто, читабельно и раза в 3 меньше кода.