Первые две строки абсолютно правильные.
@M
@i:=VALCOUNT (@M)
WHILE
@M>0
DO // 1) Смотрим на блок-схему: там написано "@i > 0";
// 2) тело цикла нужно взять в скобки (посмотрите примеры
// оформления цикла в документации)
IF NUM
@M(@i)
THEN // Здесь действительно нужна функция NUM,
// но ее параметр следует взять в скобки
@M(@i):=@S
// "Добавить @M(@i) в массив @S". Вы делаете наоборот -
// записываете @S в @M(@i).
// Почитайте раздел о работе с массивами
@i:=@i-1 // здесь все правильно
// Цикл закончился
// Результат функции SORTEX нужно присвоить специальной переменной @ret
// На этом работа пользовательской функции завершается
// MESSAGE лучше вынести в ту формулу, из который вы вызываете SortDigit. Чтобы выдать все элемены массива в строчку используйте фукцию CATVAL
MESSAGE (
@res:=SORTEX(@S,1);
)