Прежде всего, чтобы ответить на ваш вопрос: Назначение индекса в массивах, как вы делаете в Формуле, невозможно, см. Этот отрывок из справки дизайнера (спасибо @Richard Schwartz):
Оператор индекса не может использоваться на левой стороне оператора присваивания. То есть вы не можете присвоить значение подписанному элементу. Вы должны создать полный список, а затем назначить его.
Второе: я проверил вашу формулу, и если вы поместите ее в «Значение» - Формула поля, то она не будет изменена с помощью F9, только при помещении ее в Формула списка диалогов I может воспроизвести то же поведение ... Но я бы не стал возражать: поскольку эта формула вообще не является действительной, это imho нельзя назвать "ошибкой".
Так вот как может выглядеть ваша исправленная формула как:
_startYear := @Year(@Now)-17;
@For( _x:=1; _x<=30; _x:=_x+1;
_temp := @Text(_startYear-_x);
_myArr := @Trim( _myArr : _temp )
);
_myArr
Не путайте из-за подчеркиваний: я использую их, чтобы отличать guish переменных от имен полей. Поскольку диалоговые списки хранят текст, вам необходимо преобразовать отдельные значения в текст. Если вы хотите, чтобы годы были в обратном порядке, просто измените одну строку:
_myArr := @Trim( _temp : _myArr )
@ Язык формул - кстати, довольно круто в отношении списков, и можно было бы решить это по-разному. Например, используя daterange и explode:
_start := @Adjust(@Today;-17;0;0;0;0;0);
_end := @Adjust(@Today;13;0;0;0;0;0);
_daterange := @TextToTime( "[" + @Text(_start) + "-" +
@Text(_end)+"]");
_allDates := @Explode( _dateRange );
@Text(@year(_allDates))
Но я признаю: как бы круто это ни было, оно не совсем интуитивно понятно, но это было бы решением в Notes 5, когда еще не было @For.