Обнаружил интересные вещи. В AX4, как оказалось, размер str ограничен загадочным образом:
X++:
int i,j;
str s;
str s2;
SysOperationProgress p = new SysOperationProgress();
;
try
{
while (i <= 140000000)
{
i += 1000;
j =strlen(s);
s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий";
s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий";
s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий";
s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий";
s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий";
s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий";
s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий";
s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий";
s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий";
s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий";
s2 = s;
p.setText(strfmt("%1", strlen(s)));
}
}
catch
{
info(strfmt("last %1", j));
}
Аксапта в некоторый момент выдает: "Недостаточно памяти для исполнения кода".
Момент этот зависит от количества знаков в строке. То есть при превышении некоторого количества знаков в строке, с ней невозможно производить никаких операций. Допустимое количество знаков зависит, вероятно, от количества свободной памяти в системе. У меня падает обычно примерно на 4000000 символов. Однажды упало где-то на 2000000. Опять же, значение не фиксировано, может меняться, но колеблется в этом районе. Для себя я решил, что надежное значение - 1000000 символов.
Дальше, нельзя выставить размер строки больше 1000 символов:
В отладчике можно увидеть, что до присвоения какого-либо значения переменной размер ее не определен. В момент присвоения размер устанавливается (если было указано больше 1000) в 1000 символов. Разумеется, если присваемое значение имеет длину более 1000 символов, то с оставшейся частью строки можно попрощаться.
В AX3 дела обстоят уже лучше. Размер строки не ограничивается. Во всяком случае, я не дождался окончания работы вышеуказанного джоба.
Но также нельзя объявлять строки больше 1000 символов - режутся как и в 4-ке.
Кроме того, при передачи строк большого размера от сервера к клиенту, тот принудительно обрывает связь.
Еще одна особенность - по мере роста строки затрачивается все больше времени на его модификацию. Непонятно почему, strlen занимает много времени.
Вот такие дела... Из-за ограничения размера str, кстати, падают некоторые ресурсоемкие операции.