Есть две проблемы:
1) вы используете $ 1. Вы не можете изменить параметр напрямую, за исключением указателей и объектов.
2) если вы не очищаете текст var, когда нет CR.
Ошибка, которую вы получаете при вызове подстроки, потому что вы не можете изменить значение $ 1. Все, что вам нужно сделать, это указать текст $ вместо $ 1:
C_TEXT($1;$text)
C_POINTER($2)
$text:=$1
$vlElem:=Size of array($2->)
Repeat
$vlElem:=$vlElem+1
INSERT IN ARRAY($2->;$vlElem)
$vlPos:=Position(Char(Carriage return);$text)
If ($vlPos>0)
$2->{$vlElem}:=Substring($text;1;$vlPos-1)
$text:=Substring($text;$vlPos+1)
Else
$2->{$vlElem}:=$text
$text:="" // otherwise nothing ever clears the var
End if
Until ($text="")
Установите параметр в локальную переменную, а затем обработайте эту переменную.
Вы также можете проверить команду TEXT TO ARRAY .
Если вы передадите объект (определенный с помощью C_OBJECT, v15 +) в качестве параметра, вы сможете внести изменения, которые вы показали, в конкретные ключи. Многие из нас по-прежнему предпочитают присваивать параметр локальной переменной в любом случае.